ProductUseRecordService.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using Azure.Cosmos;
  2. using System;
  3. using System.Linq;
  4. using System.Text.Json;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.SDK.DI;
  7. using TEAMModelOS.SDK.Extension;
  8. using TEAMModelOS.SDK.Models.Cosmos.BI.BICommon;
  9. namespace TEAMModelOS.SDK.Models.Service.BI
  10. {
  11. public static class ProductUseRecordService
  12. {
  13. /// <summary>
  14. /// 产品使用量增加
  15. /// </summary>
  16. /// <param name="cosmosClient"></param>
  17. /// <param name="_dingDing"></param>
  18. /// <param name="type"></param>
  19. /// <returns></returns>
  20. public static async Task SetProductUseRecord(CosmosClient cosmosClient, DingDing _dingDing,string type)
  21. {
  22. DateTimeOffset dateOff = DateTimeOffset.UtcNow;
  23. try
  24. {
  25. ProductUseRecord productUseRecord = new();
  26. var resUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}", new PartitionKey("ProductUseRecord"));
  27. if (resUseRecord.Status == 200)
  28. {
  29. using var fileJson = await JsonDocument.ParseAsync(resUseRecord.ContentStream);
  30. productUseRecord = fileJson.ToObject<ProductUseRecord>();
  31. }
  32. else
  33. {
  34. productUseRecord.time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  35. productUseRecord.hiTaHour = new double[24].ToList();
  36. productUseRecord.hiTeachHour = new double[24].ToList();
  37. productUseRecord.hiTeachccHour = new double[24].ToList();
  38. productUseRecord.hiTaDay = new double[366].ToList();
  39. productUseRecord.hiTeachDay = new double[366].ToList();
  40. productUseRecord.hiTeachccDay = new double[366].ToList();
  41. }
  42. DateTimeOffset upTime = DateTimeOffset.UtcNow;
  43. double[] doub = new double[24];
  44. if (dateOff.DayOfYear > upTime.DayOfYear)
  45. {
  46. doub[dateOff.Hour] = 1;
  47. }
  48. if (productUseRecord.time > 1000000000000)
  49. upTime = DateTimeOffset.FromUnixTimeMilliseconds(productUseRecord.time);
  50. else
  51. upTime = DateTimeOffset.FromUnixTimeSeconds(productUseRecord.time);
  52. switch ($"{type}")
  53. {
  54. case "hita":
  55. if (dateOff.DayOfYear == upTime.DayOfYear)
  56. {
  57. productUseRecord.hiTaHour[dateOff.Hour] += 1;
  58. }
  59. else
  60. {
  61. productUseRecord.hiTaHour = doub.ToList();
  62. }
  63. productUseRecord.hiTaDay[dateOff.DayOfYear - 1] += 1;
  64. break;
  65. case "hiTeach":
  66. if (dateOff.DayOfYear == upTime.DayOfYear)
  67. {
  68. productUseRecord.hiTeachHour[dateOff.Hour] += 1;
  69. }
  70. else
  71. {
  72. productUseRecord.hiTeachHour = doub.ToList();
  73. }
  74. productUseRecord.hiTeachDay[dateOff.DayOfYear - 1] += 1;
  75. break;
  76. case "hiTeachcc":
  77. if (dateOff.DayOfYear == upTime.DayOfYear)
  78. {
  79. productUseRecord.hiTeachccHour[dateOff.Hour] += 1;
  80. }
  81. else
  82. {
  83. productUseRecord.hiTeachccHour = doub.ToList();
  84. }
  85. productUseRecord.hiTeachccDay[dateOff.DayOfYear - 1] += 1;
  86. break;
  87. }
  88. if (resUseRecord.Status == 200)
  89. {
  90. productUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ProductUseRecord>(productUseRecord, productUseRecord.id, new PartitionKey("ProductUseRecord"));
  91. }
  92. else
  93. {
  94. productUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<ProductUseRecord>(productUseRecord, new PartitionKey("ProductUseRecord"));
  95. }
  96. }
  97. catch (Exception ex)
  98. {
  99. await _dingDing.SendBotMsg($"BI,SetProductUseRecord(),参数:统计类型:{type},时间:{dateOff}\n {ex.Message}\n {ex.StackTrace}", GroupNames.成都开发測試群組);
  100. }
  101. }
  102. }
  103. }