BIStatsNotice.cs 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Azure.Cosmos;
  2. using DocumentFormat.OpenXml.Bibliography;
  3. using Microsoft.VisualBasic;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.Json;
  9. using System.Threading.Tasks;
  10. using TEAMModelOS.SDK.DI;
  11. using TEAMModelOS.SDK.Extension;
  12. using TEAMModelOS.SDK.Models.Cosmos.BI;
  13. using TEAMModelOS.SDK.Models.Cosmos.BI.BICommon;
  14. namespace TEAMModelOS.SDK.Models.Service.BI
  15. {
  16. public static class BIStatsNotice
  17. {
  18. /// <summary>
  19. /// 统计通知
  20. /// </summary>
  21. /// <param name="cosmosClient">连接</param>
  22. /// <param name="_dingDing">错误消息发送</param>
  23. /// <param name="type">统计类型</param>
  24. /// <param name="idType">账号类型 private:个人 school 学校</param>
  25. /// <param name="id">账号id</param>
  26. /// <param name="count">数量</param>
  27. /// <param name="careDate">创建时间</param>
  28. /// <returns></returns>
  29. public static async Task SetStatsNotice(CosmosClient cosmosClient, DingDing _dingDing, string type, string idType, string id, int count, long careDate = 0)
  30. {
  31. try
  32. {
  33. DateTimeOffset dateOff = DateTimeOffset.UtcNow;
  34. if (careDate > 1000000000000)
  35. dateOff = DateTimeOffset.FromUnixTimeMilliseconds(careDate);
  36. else
  37. dateOff = DateTimeOffset.FromUnixTimeSeconds(careDate);
  38. StatsNotice statsNotice = new();
  39. var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}-{id}", new PartitionKey("StatsNotice"));
  40. if (resStsInfo.Status == 200)
  41. {
  42. using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
  43. statsNotice = fileJson.ToObject<StatsNotice>();
  44. }
  45. else
  46. {
  47. statsNotice.id = $"{dateOff.Year}-{id}";
  48. statsNotice.type = idType;
  49. statsNotice.rangeId = id;
  50. }
  51. switch (type)
  52. {
  53. case "Student":
  54. statsNotice.stuDayCnt += count;
  55. break;
  56. case "Classroom":
  57. statsNotice.classroomDayCnt += count;
  58. break;
  59. case "Weigh":
  60. statsNotice.weighDayCnt += count;
  61. break;
  62. case "Homework":
  63. statsNotice.homeworkDayCnt = count;
  64. break;
  65. }
  66. if (resStsInfo.Status == 200)
  67. {
  68. statsNotice = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<StatsNotice>(statsNotice, statsNotice.id, new PartitionKey("StatsNotice"));
  69. }
  70. else
  71. {
  72. statsNotice = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<StatsNotice>(statsNotice, new PartitionKey("StatsNotice"));
  73. }
  74. }
  75. catch (Exception ex)
  76. {
  77. await _dingDing.SendBotMsg($"BI,{Environment.GetEnvironmentVariable("Option:Location")},SetStatsNotice(),参数: 统计类型:{type},类型私人/学校:{idType},id:{id}, 增/减数:{count},时间戳:{careDate}\n {ex.Message}\n {ex.StackTrace}", GroupNames.成都开发測試群組);
  78. }
  79. }
  80. /// <summary>
  81. /// 发送消息
  82. /// </summary>
  83. /// <returns></returns>
  84. public static async Task MonitorStatsNotice()
  85. {
  86. }
  87. }
  88. }