using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.FunctionV4.CosmosDB; using TEAMModelOS.SDK; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models.Service; namespace TEAMModelOS.FunctionV4 { public class CommonTrigger { 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 CommonTrigger(CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureServiceBusFactory azureServiceBus, AzureStorageFactory azureStorage, DingDing dingDing, AzureRedisFactory azureRedis , IConfiguration configuration, IHttpClientFactory httpClient, HttpTrigger httpTrigger ) { _azureCosmos = azureCosmos; _serviceBus = azureServiceBus; _azureStorage = azureStorage; _dingDing = dingDing; _azureRedis = azureRedis; _configuration = configuration; _coreAPIHttpService=coreAPIHttpService; _httpClient = httpClient; _httpTrigger = httpTrigger; } [Function("Common")] public async Task Common([CosmosDBTriggerAttribute( databaseName: "TEAMModelOS", containerName: "Common", Connection = "Azure:Cosmos:ConnectionString", LeaseContainerName = "leases", LeaseContainerPrefix = "TEAMModelOS", CreateLeaseContainerIfNotExists =true)]JsonElement json, FunctionContext context) { if (json.ValueKind.Equals(JsonValueKind.Array)) { IReadOnlyList elements = json.ToObject>(); if (elements!=null && elements.Count>0) { var client = _azureCosmos.GetCosmosClient(); var log = context.GetLogger(); log.LogInformation("Documents modified " + elements.Count); foreach (var element in elements) { log.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; } } } } } } } } 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; } } }