using System; using System.Collections.Generic; using System.Text.Json; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK; using System.Xml.Linq; using TEAMModelOS.SDK.Extension; using TEAMModelOS.CosmosDBTriggers; namespace TEAMModelOS.Function { public class IESCosmosDBTrigger { private readonly ILogger _logger; private readonly AzureCosmosFactory _azureCosmos; private readonly AzureServiceBusFactory _serviceBus; private readonly AzureStorageFactory _azureStorage; private readonly DingDing _dingDing; private readonly AzureRedisFactory _azureRedis; private readonly IHttpClientFactory _httpClient; private IConfiguration _configuration { get; set; } private readonly CoreAPIHttpService _coreAPIHttpService; private readonly HttpTrigger _httpTrigger; public IESCosmosDBTrigger(ILoggerFactory loggerFactory, CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage, DingDing dingDing, AzureRedisFactory azureRedis , IConfiguration configuration, IHttpClientFactory httpClient, HttpTrigger httpTrigger) { _logger = loggerFactory.CreateLogger(); _azureCosmos = azureCosmos; _serviceBus = azureServiceBus; _azureStorage = azureStorage; _dingDing = dingDing; _azureRedis = azureRedis; _configuration = configuration; _coreAPIHttpService=coreAPIHttpService; _httpClient = httpClient; _httpTrigger = httpTrigger; } [Function("Common")] public async Task Common([CosmosDBTrigger( databaseName: "TEAMModelOS", containerName: "Common", Connection = "Azure:Cosmos:ConnectionString", LeaseDatabaseName ="Lease", LeaseContainerName = "lease", LeaseContainerPrefix = "TEAMModelOS", CreateLeaseContainerIfNotExists = true,StartFromBeginning =false)] IReadOnlyList input) { if (input != null && input.Count > 0) { _logger.LogInformation("Documents modified: " + input.Count); _logger.LogInformation("First document Id: " +JsonSerializer.Serialize(input[0])); var client = _azureCosmos.GetCosmosClient(); foreach (var element in input) { element.TryGetProperty("_ts", out JsonElement _ts); element.TryGetProperty("id", out JsonElement _id); //_logger.LogInformation($"过期数据=>时间戳:{_ts.GetInt64()}-id:{_id}"); //return; //if (JsonValueKind.Number.Equals(_ts.ValueKind) && 1719331200>_ts.GetInt64()) { // _logger.LogInformation($"过期数据=>时间戳:{_ts.GetInt64()}-id:{_id}" ); // return; //} _logger.LogInformation("变化参数 " + element); element.TryGetProperty("pk", out JsonElement jsond); if (!string.IsNullOrWhiteSpace($"{jsond}")) { if ($"{jsond}".Equals("Receiver", StringComparison.OrdinalIgnoreCase) || $"{jsond}".Equals("Notice", StringComparison.OrdinalIgnoreCase) || $"{jsond}".Equals("ExamClassResult", StringComparison.OrdinalIgnoreCase)) { ///通知接收者的变更 continue; } //else if ($"{jsond}".Equals("StatsNotice", StringComparison.OrdinalIgnoreCase)) //{ // var sert = 012; //} else { TriggerData data = element.ToObject(); ///活动类型的变更 #if DEBUG await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-CosmosDBTrigger,{data.pk}触发变更\n{data.ToJsonString()}", GroupNames.醍摩豆服務運維群組); #endif switch (data.pk) { case "Exam": await TriggerExam.Trigger(_coreAPIHttpService, _azureCosmos, _serviceBus, _azureStorage, _dingDing, client, element, data, _httpClient, _configuration, _httpTrigger, _azureRedis); break; case "Vote": await TriggerVote.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis, _configuration); break; case "Survey": await TriggerSurvey.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis, _configuration); break; case "Correct": await TriggerCorrect.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis); break; case "ExamLite": await TriggerExamLite.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis, _configuration); break; case "Study": await TriggerStudy.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis, _configuration); break; case "Homework": await TriggerHomework.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis, _configuration); break; case "Art": await TriggerArt.Trigger(_coreAPIHttpService, _serviceBus, _azureStorage, _dingDing, client, element, data, _azureRedis, _configuration, _httpTrigger); break; case "ExamImport": await TriggerExamImport.Trigger(_coreAPIHttpService, _azureCosmos, _serviceBus, _azureStorage, _dingDing, client, element, data, _httpClient, _configuration, _azureRedis); break; case "QuotaImport": await TriggerQuotaImport.Trigger(_coreAPIHttpService, _azureCosmos, _serviceBus, _azureStorage, _dingDing, client, element, data, _httpClient, _configuration, _azureRedis); break; case "JointExam": await TriggerJointExam.Trigger(_coreAPIHttpService, _azureCosmos, _serviceBus, _azureStorage, _dingDing, client, element, data, _httpClient, _configuration, _httpTrigger, _azureRedis); break; } } } } } } } public class TriggerData { public string pk { get; set; } public int? status { get; set; } public string name { get; set; } public long startTime { get; set; } public long endTime { get; set; } public string school { get; set; } public string code { get; set; } public string creatorId { get; set; } public string progress { get; set; } public string scope { get; set; } public int ttl { get; set; } public string id { get; set; } public int? publish { get; set; } } }