using Azure.Cosmos; using Azure.Storage.Blobs.Models; using HTEXLib.COMM.Helpers; using Microsoft.Azure.Cosmos.Table; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Text; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.Filter; using TEAMModelOS.SDK; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; using TEAMModelOS.SDK.Models.Cosmos.Teacher; using TEAMModelOS.SDK.Models.Table; using static TEAMModelOS.SDK.Models.Teacher; namespace TEAMModelOS.FunctionV4.HttpTrigger { public class WebhookHttpTrigger { private readonly AzureCosmosFactory _azureCosmos; private readonly DingDing _dingDing; private readonly AzureStorageFactory _azureStorage; private readonly AzureRedisFactory _azureRedis; public WebhookHttpTrigger(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage , AzureRedisFactory azureRedis) { _azureCosmos = azureCosmos; _dingDing = dingDing; _azureStorage = azureStorage; _azureRedis = azureRedis; } [Function("group-change")] [ApiToken(Auth = "1302", Name = "课程详细信息", RWN = "N")] public async Task NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-change")] HttpRequestData request) { var response = request.CreateResponse(HttpStatusCode.OK); (string school, List < BusinessConfig > businessConfigs ,GroupChange data) = await GetRequestData(request); if (string.IsNullOrWhiteSpace(school)) { } return response; } public async Task<(string school, List businessConfigs, T data)> GetRequestData(HttpRequestData request) { var response = request.CreateResponse(HttpStatusCode.OK); string data = await new StreamReader(request.Body).ReadToEndAsync(); var json = JsonDocument.Parse(data).RootElement; string school = null; List businessConfigs = null ; if (json.TryGetProperty("school", out JsonElement _school)) { school = _school.GetString(); var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi"); List schools = table.FindListByDictSync(new Dictionary { { "PartitionKey", $"BusinessSchool" }, { "school", school } }); var bizid = schools.Select(x => x.bizid).ToList(); List Codes = new List(); bizid.ForEach(x => { Codes.Add($" RowKey {QueryComparisons.Equal} '{x}' "); }); string tbqurey = $"PartitionKey {QueryComparisons.Equal} 'BusinessConfig' and ( {string.Join(" or ", Codes)} ) "; var result = await table.ExecuteQuerySegmentedAsync(new TableQuery().Where(tbqurey), null); if (result != null) { businessConfigs= result.Results; } } if (json.TryGetProperty("data", out JsonElement _data)) { return (school, businessConfigs, _data.ToObject()); } else { return (school, businessConfigs, default(T)); } } } public class WebhookSchoolData { public string school { get; set; } public string data { get; set; } } }