WebHookHttpTrigger.cs 5.5 KB

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