WebHookHttpTrigger.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using Azure.Cosmos;
  2. using Azure.Storage.Blobs.Models;
  3. using Grpc.Core;
  4. using HTEXLib.COMM.Helpers;
  5. using Microsoft.AspNetCore;
  6. using Microsoft.AspNetCore.Http;
  7. using Microsoft.Azure.Cosmos.Table;
  8. using Microsoft.Azure.Functions.Worker;
  9. using Microsoft.Azure.Functions.Worker.Http;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Net;
  15. using System.Net.Http;
  16. using System.Net.Http.Json;
  17. using System.Reflection;
  18. using System.Security.Policy;
  19. using System.Text;
  20. using System.Text.Json;
  21. using System.Threading.Tasks;
  22. using TEAMModelOS.Filter;
  23. using TEAMModelOS.SDK;
  24. using TEAMModelOS.SDK.DI;
  25. using TEAMModelOS.SDK.Extension;
  26. using TEAMModelOS.SDK.Models;
  27. using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal;
  28. using TEAMModelOS.SDK.Models.Cosmos.Teacher;
  29. using TEAMModelOS.SDK.Models.Service;
  30. using TEAMModelOS.SDK.Models.Table;
  31. using static TEAMModelOS.SDK.Models.Teacher;
  32. namespace TEAMModelOS.SDK.DI
  33. {
  34. public class WebHookHttpTrigger
  35. {
  36. private readonly AzureCosmosFactory _azureCosmos;
  37. private readonly DingDing _dingDing;
  38. private readonly AzureStorageFactory _azureStorage;
  39. private readonly AzureRedisFactory _azureRedis;
  40. private readonly IHttpClientFactory _httpClient;
  41. public WebHookHttpTrigger(IHttpClientFactory httpClient, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis)
  42. {
  43. _azureCosmos = azureCosmos;
  44. _dingDing = dingDing;
  45. _azureStorage = azureStorage;
  46. _azureRedis = azureRedis;
  47. _httpClient = httpClient;
  48. }
  49. /// <summary>
  50. /// 学校数据授权变更,学校基础信息 10开头
  51. /// </summary>
  52. /// <param name="request"></param>
  53. /// <returns></returns>
  54. [Function("school-auth-change")]
  55. [ApiToken(Auth = "1001", Name = "学校数据授权变更", TName = "變更學校數據授權", EName = "School Auth Changes", RWN = "N")]
  56. public async Task<HttpResponseData> NoticeSchoolAuthChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/school-auth-change")] HttpRequestData request)
  57. {
  58. var response = request.CreateResponse(HttpStatusCode.OK);
  59. string datastr = await new StreamReader(request.Body).ReadToEndAsync();
  60. var json = JsonDocument.Parse(datastr).RootElement;
  61. SchoolAuthChange data = null;
  62. if (json.TryGetProperty("data", out JsonElement _data))
  63. {
  64. data = _data.ToObject<SchoolAuthChange>();
  65. }
  66. (List<BizConfig> businessConfigs, List<(List<string> urls, string head, string token, BizConfig config)> webhooks) = await WebHookService.GetRequestData(_data, _azureCosmos, _azureRedis, _azureStorage);
  67. if (webhooks.IsNotEmpty())
  68. {
  69. foreach (var webhook in webhooks)
  70. {
  71. foreach (var url in webhook.urls)
  72. {
  73. await WebHookService.Send(new
  74. {
  75. data.addSchools,
  76. data.rmvSchools
  77. }, (url, webhook.head, webhook.token, webhook.config), "school-auth-change",_httpClient,_dingDing);
  78. }
  79. }
  80. }
  81. return response;
  82. }
  83. /// <summary>
  84. /// 名单变更通知,名单类12开头
  85. /// </summary>
  86. /// <param name="request"></param>
  87. /// <returns></returns>
  88. [Function("group-member-change")]
  89. [ApiToken(Auth = "1201", Name = "名单成员变更", TName = "變更名單成員資料", EName = "Name List Member Changes", RWN = "N")]
  90. public async Task<HttpResponseData> NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-member-change")] HttpRequestData request)
  91. {
  92. var response = request.CreateResponse(HttpStatusCode.OK);
  93. string datastr = await new StreamReader(request.Body).ReadToEndAsync();
  94. var json = JsonDocument.Parse(datastr).RootElement;
  95. GroupChange data = null;
  96. if (json.TryGetProperty("data", out JsonElement _data)){
  97. data= _data.ToObject<GroupChange>();
  98. data.client="web";
  99. }
  100. (List<BizConfig> businessConfigs, List<(List<string> urls, string head, string token, BizConfig config)> webhooks ) = await WebHookService.GetRequestData(_data, _azureCosmos,_azureRedis,_azureStorage);
  101. if (webhooks.IsNotEmpty() && !string.IsNullOrWhiteSpace(data.school))
  102. {
  103. foreach (var webhook in webhooks)
  104. {
  105. foreach (var url in webhook.urls)
  106. {
  107. await WebHookService.Send(new
  108. {
  109. data.name,
  110. data.client,
  111. data.status,
  112. data.type,
  113. data.listid,
  114. data.tmdjoin,
  115. data.tmdleave,
  116. data.stujoin,
  117. data.stuleave,
  118. data.tchjoin,
  119. data.tchleave,
  120. data.school
  121. }, (url, webhook.head, webhook.token, webhook.config), "group-member-change", _httpClient, _dingDing);
  122. }
  123. }
  124. }
  125. return response;
  126. }
  127. }
  128. }