IESHttpTrigger.cs 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Azure.Cosmos;
  2. using HTEXLib.COMM.Helpers;
  3. using Microsoft.Azure.Functions.Worker;
  4. using Microsoft.Azure.Functions.Worker.Http;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Text;
  11. using System.Text.Json;
  12. using System.Threading.Tasks;
  13. using TEAMModelOS.SDK.DI;
  14. using TEAMModelOS.SDK.Extension;
  15. using TEAMModelOS.SDK.Models;
  16. namespace TEAMModelOS.FunctionV4.HttpTrigger
  17. {
  18. public class IESHttpTrigger
  19. {
  20. private readonly AzureCosmosFactory _azureCosmos;
  21. private readonly DingDing _dingDing;
  22. private readonly AzureStorageFactory _azureStorage;
  23. private readonly AzureRedisFactory _azureRedis;
  24. public IESHttpTrigger(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage
  25. , AzureRedisFactory azureRedis)
  26. {
  27. _azureCosmos = azureCosmos;
  28. _dingDing = dingDing;
  29. _azureStorage = azureStorage;
  30. _azureRedis = azureRedis;
  31. }
  32. /// <summary>
  33. /// 数据推送接口
  34. /// </summary>
  35. /// <param name="req"></param>
  36. /// <param name="log"></param>
  37. /// <returns></returns>
  38. [Function("KnowledgeChange")]
  39. public async Task<HttpResponseData> KnowledgeChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
  40. {
  41. var response = req.CreateResponse(HttpStatusCode.OK);
  42. string data = await new StreamReader(req.Body).ReadToEndAsync();
  43. var json = JsonDocument.Parse(data).RootElement;
  44. List<OldNew> old_new = null;
  45. string school = null;
  46. if (json.TryGetProperty("school", out JsonElement _school))
  47. {
  48. school = _school.GetString();
  49. }
  50. if (json.TryGetProperty("old_new", out JsonElement _old_new))
  51. {
  52. old_new = _old_new.ToObject<List<OldNew>>();
  53. }
  54. if (old_new.IsNotEmpty() && !string.IsNullOrWhiteSpace(school))
  55. {
  56. foreach (var on in old_new)
  57. {
  58. List<ItemInfo> items = new List<ItemInfo>();
  59. string sql = $"select value(c) from c where array_contains(c.knowledge,'{on._old}') ";
  60. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ItemInfo>
  61. (queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{_school}") }))
  62. {
  63. items.Add(item);
  64. }
  65. items.ForEach(item => {
  66. //修改知识点
  67. if (!string.IsNullOrEmpty(on._new))
  68. {
  69. for (int i = 0; i < item.knowledge.Count; i++)
  70. {
  71. if (item.knowledge[i].Equals(on._old))
  72. {
  73. item.knowledge[i] = on._new;
  74. }
  75. }
  76. }
  77. else
  78. {
  79. //表示删除知识点
  80. item.knowledge.RemoveAll(x => x.Equals(on._old));
  81. }
  82. });
  83. foreach (var item in items)
  84. {
  85. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  86. }
  87. }
  88. }
  89. return response;
  90. }
  91. }
  92. }