public async Task ExecuteAsync()
        {
            _logger.LogInformation("开始执行【StatisticsMatchIntentCountTask】任务...");

            var length = await _redis.LLenAsync(Constants.RedisKey.MatchIntents);

            if (length > 0)
            {
                length = length > 20 ? 20 : length;
                var sql            = new StringBuilder();
                var now            = DateTime.Now;
                var existedIntents = new List <string>();
                for (var i = 0; i < length; i++)
                {
                    var intent = await _redis.LPopAsync <string>(Constants.RedisKey.MatchIntents);

                    if (string.IsNullOrEmpty(intent))
                    {
                        break;
                    }

                    if (existedIntents.Any(e => e == intent) ||
                        _dbContext.HotIntents.Any(h => h.Intent == intent))
                    {
                        sql.Append($"UPDATE \"HotIntents\" SET \"Count\" = \"Count\"+1, \"UpdateTime\" ='{now}' WHERE \"Intent\"='{intent.Replace('\'', ' ')}';");
                    }
                    else
                    {
                        sql.Append($"INSERT INTO \"HotIntents\" (\"Intent\",\"Count\",\"UpdateTime\") VALUES ('{intent.Replace('\'', ' ')}',1,'{now}');");
                    }
                    existedIntents.Add(intent);
                }
                if (sql.Length > 0)
                {
                    await _dbContext.ExecuteSqlAsync(sql.ToString());
                }
            }
            _logger.LogInformation($"记录{length}条");
        }
 public async Task SyncPermisions()
 {
     var sql = "UPDATE \"Answers\" SET \"IsPublic\"=TRUE WHERE \"IsPublic\"<>TRUE AND \"Id\" NOT IN( SELECT \"QAId\" FROM \"QAPermissions\" GROUP BY \"QAPermissions\".\"QAId\");UPDATE \"Modulars\" SET \"IsPublic\"=TRUE WHERE \"IsPublic\"<>TRUE AND \"Id\" NOT IN( SELECT \"ModularId\" FROM \"ModularPermissions\" GROUP BY \"ModularId\");";
     await _dbContext.ExecuteSqlAsync(sql);
 }