LessonService.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using Azure.Cosmos;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Text.Json;
  6. using System.Threading.Tasks;
  7. using TEAMModelOS.SDK.DI;
  8. using TEAMModelOS.SDK.Extension;
  9. using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
  10. using TEAMModelOS.SDK.Models.Cosmos.Common;
  11. namespace TEAMModelOS.SDK.Models.Service
  12. {
  13. public class LessonService
  14. {
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. /// <param name="client"></param>
  19. /// <param name="_dingDing"></param>
  20. /// <param name="data"></param>
  21. /// <returns></returns>
  22. public static LessonDis DisLessonCount(LessonRecord oldRecord, LessonRecord newRecord, LessonDis lessonDis)
  23. {
  24. //创建课堂的情况
  25. if (oldRecord == null && newRecord != null)
  26. {
  27. lessonDis.record = 1;
  28. }
  29. //删除数据的情况
  30. else if (oldRecord != null && newRecord == null)
  31. {
  32. lessonDis.record = -1;
  33. //P分数量加减
  34. if (oldRecord.pScore >= 70)
  35. {
  36. lessonDis.disPCount = -1;
  37. }
  38. //T分数量加减
  39. if (oldRecord.tScore >= 70)
  40. {
  41. lessonDis.disTCount = -1;
  42. }
  43. if (oldRecord.tScore >= 70 && oldRecord.pScore >= 70)
  44. {
  45. lessonDis.disTCount = -1;
  46. }
  47. }
  48. //无效操作
  49. else if (oldRecord == null && newRecord == null)
  50. {
  51. }
  52. //前后操作都有值,则表示更新
  53. else
  54. {
  55. //P分数量加减
  56. if (oldRecord.pScore >= 70)
  57. {
  58. if (newRecord.pScore < 70)
  59. {
  60. lessonDis.disPCount = -1;
  61. }
  62. }
  63. else
  64. {
  65. if (newRecord.pScore >= 70)
  66. {
  67. lessonDis.disPCount = 1;
  68. }
  69. }
  70. //T分数量加减
  71. if (oldRecord.tScore >= 70)
  72. {
  73. if (newRecord.tScore < 70)
  74. {
  75. lessonDis.disTCount = -1;
  76. }
  77. }
  78. else
  79. {
  80. if (newRecord.tScore >= 70)
  81. {
  82. lessonDis.disTCount = 1;
  83. }
  84. }
  85. //双绿灯数量
  86. if (oldRecord.tScore >= 70 && oldRecord.pScore >= 70)
  87. {
  88. if (newRecord.tScore < 70 || newRecord.pScore < 70)
  89. {
  90. lessonDis.disDCount = -1;
  91. }
  92. }
  93. else
  94. {
  95. if (newRecord.tScore >= 70 && newRecord.pScore >= 70)
  96. {
  97. lessonDis.disDCount = 1;
  98. }
  99. }
  100. }
  101. return lessonDis;
  102. }
  103. public static async Task FixLessonCount(CosmosClient client, DingDing _dingDing, LessonRecord record, LessonRecord oldRecord, LessonDis lessonDis)
  104. {
  105. LessonRecord data = null;
  106. try
  107. {
  108. if (record != null && oldRecord == null) {
  109. data = record;
  110. }
  111. if (record == null && oldRecord != null)
  112. {
  113. data = oldRecord;
  114. }
  115. if (record != null && oldRecord != null)
  116. {
  117. data = record;
  118. }
  119. int day = DateTimeOffset.FromUnixTimeMilliseconds(data.startTime).DayOfYear;
  120. int year = DateTimeOffset.FromUnixTimeMilliseconds(data.startTime).Year;
  121. int days = DateTimeHelper.getDays(year);
  122. //int years = DateTimeOffset.UtcNow.DayOfYear;
  123. string tbname = string.Empty;
  124. string code = string.Empty;
  125. if (data.scope.Equals("school"))
  126. {
  127. code = $"LessonCount-{data.school}-{year}";
  128. tbname = "School";
  129. }
  130. else
  131. {
  132. code = $"LessonCount-{year}";
  133. tbname = "Teacher";
  134. }
  135. var response = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(data.tmdid.ToString(), new PartitionKey(code));
  136. if (response.Status == 200)
  137. {
  138. using var json = await JsonDocument.ParseAsync(response.ContentStream);
  139. LessonCount count = json.ToObject<LessonCount>();
  140. count.tCount[day-1] += lessonDis.disTCount;
  141. count.pCount[day-1] += lessonDis.disPCount;
  142. count.ptCount[day-1] += lessonDis.disDCount;
  143. count.beginCount[day-1] += lessonDis.record;
  144. /*if (!count.courseIds.Contains(data.courseId))
  145. {
  146. count.courseIds.Add(data.courseId);
  147. count.beginCount[day] += 1;
  148. }*/
  149. await client.GetContainer("TEAMModelOS", tbname).ReplaceItemAsync(count, count.id, new PartitionKey(code));
  150. }
  151. else
  152. {
  153. LessonCount count = new LessonCount
  154. {
  155. id = data.tmdid,
  156. code = code,
  157. ttl = -1
  158. };
  159. double[] da = new double[days];
  160. List<double> list = new List<double>(da);
  161. List<double> listT = new List<double>(da);
  162. List<double> listP = new List<double>(da);
  163. List<double> listPT = new List<double>(da);
  164. list[day-1] += lessonDis.record;
  165. listT[day-1] += lessonDis.disTCount;
  166. listP[day-1] += lessonDis.disPCount;
  167. listPT[day-1] += lessonDis.disDCount;
  168. count.beginCount.AddRange(list);
  169. count.tCount.AddRange(listT);
  170. count.pCount.AddRange(listP);
  171. count.ptCount.AddRange(listPT);
  172. //count.courseIds.Add(data.courseId);
  173. await client.GetContainer("TEAMModelOS", tbname).CreateItemAsync(count, new PartitionKey(code));
  174. }
  175. }
  176. catch (Exception ex)
  177. {
  178. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-LessonCount-FixLessonCount\n{ex.Message}{ex.StackTrace}{data.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  179. }
  180. }
  181. }
  182. }