WebHookHttpTrigger.cs 5.1 KB

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