using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.Filter; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal; using TEAMModelOS.SDK.Models.Service; namespace TEAMModelOS.SDK.DI { public class WebHookHttpTrigger { private readonly AzureCosmosFactory _azureCosmos; private readonly DingDing _dingDing; private readonly AzureStorageFactory _azureStorage; private readonly AzureRedisFactory _azureRedis; private readonly IHttpClientFactory _httpClient; public WebHookHttpTrigger(IHttpClientFactory httpClient, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis) { _azureCosmos = azureCosmos; _dingDing = dingDing; _azureStorage = azureStorage; _azureRedis = azureRedis; _httpClient = httpClient; } /// /// 学校数据授权变更,学校基础信息 10开头 /// /// /// [Function("school-auth-change")] [ApiToken(Auth = "1001", Name = "学校数据授权变更", TName = "變更學校數據授權", EName = "School Auth Changes", RWN = "N")] public async Task NoticeSchoolAuthChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/school-auth-change")] HttpRequestData request) { var response = request.CreateResponse(HttpStatusCode.OK); string datastr = await new StreamReader(request.Body).ReadToEndAsync(); var json = JsonDocument.Parse(datastr).RootElement; SchoolAuthChange data = null; if (json.TryGetProperty("data", out JsonElement _data)) { data = _data.ToObject(); } (List businessConfigs, List<(List urls, string head, string token, BizConfig config)> webhooks) = await WebHookService.GetRequestData(_data, _azureCosmos, _azureRedis, _azureStorage); if (webhooks.IsNotEmpty()) { foreach (var webhook in webhooks) { foreach (var url in webhook.urls) { await WebHookService.Send(new { data.addSchools, data.rmvSchools }, (url, webhook.head, webhook.token, webhook.config), "school-auth-change",_httpClient,_dingDing); } } } return response; } /// /// 名单变更通知,名单类12开头 /// /// /// [Function("group-member-change")] [ApiToken(Auth = "1201", Name = "名单成员变更", TName = "變更名單成員資料", EName = "Name List Member Changes", RWN = "N")] public async Task NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-member-change")] HttpRequestData request) { var response = request.CreateResponse(HttpStatusCode.OK); string datastr = await new StreamReader(request.Body).ReadToEndAsync(); var json = JsonDocument.Parse(datastr).RootElement; GroupChange data = null; if (json.TryGetProperty("data", out JsonElement _data)){ data= _data.ToObject(); data.client="web"; } (List businessConfigs, List<(List urls, string head, string token, BizConfig config)> webhooks ) = await WebHookService.GetRequestData(_data, _azureCosmos,_azureRedis,_azureStorage); if (webhooks.IsNotEmpty() && !string.IsNullOrWhiteSpace(data.school)) { foreach (var webhook in webhooks) { foreach (var url in webhook.urls) { await WebHookService.Send(new { data.name, data.client, data.status, data.type, data.listid, data.tmdjoin, data.tmdleave, data.stujoin, data.stuleave, data.tchjoin, data.tchleave, data.school, data.periodId }, (url, webhook.head, webhook.token, webhook.config), "group-member-change", _httpClient, _dingDing); } } } return response; } } }