LessonService.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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 LessonDis DisLessonCount_2(LessonRecord oldRecord, LessonRecord newRecord, LessonDis lessonDis)
  104. {
  105. //创建课堂的情况
  106. if (oldRecord == null && newRecord != null)
  107. {
  108. lessonDis.record = 1;
  109. //P分数量加减
  110. if (newRecord.pScore >= 70)
  111. {
  112. lessonDis.disPCount = 1;
  113. }
  114. //T分数量加减
  115. if (newRecord.tScore >= 70)
  116. {
  117. lessonDis.disTCount = 1;
  118. }
  119. //双绿灯数量
  120. if (newRecord.tScore >= 70 && newRecord.pScore >= 70)
  121. {
  122. lessonDis.disDCount = 1;
  123. }
  124. }
  125. return lessonDis;
  126. }
  127. public static async Task FixLessonCount(CosmosClient client, DingDing _dingDing, LessonRecord record, LessonRecord oldRecord, LessonDis lessonDis)
  128. {
  129. LessonRecord data = null;
  130. try
  131. {
  132. if (record != null && oldRecord == null)
  133. {
  134. data = record;
  135. }
  136. if (record == null && oldRecord != null)
  137. {
  138. data = oldRecord;
  139. }
  140. if (record != null && oldRecord != null)
  141. {
  142. data = record;
  143. }
  144. int day = DateTimeOffset.FromUnixTimeMilliseconds(data.startTime).DayOfYear;
  145. int year = DateTimeOffset.FromUnixTimeMilliseconds(data.startTime).Year;
  146. int days = DateTimeHelper.getDays(year);
  147. //int years = DateTimeOffset.UtcNow.DayOfYear;
  148. string tbname = string.Empty;
  149. string code = string.Empty;
  150. if (data.scope != null && data.scope.Equals("school"))
  151. {
  152. code = $"LessonCount-{data.school}-{year}-{data.periodId}";
  153. tbname = "School";
  154. }
  155. else
  156. {
  157. code = $"LessonCount-{year}";
  158. tbname = "Teacher";
  159. }
  160. var response = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(data.tmdid.ToString(), new PartitionKey(code));
  161. if (response.Status == 200)
  162. {
  163. using var json = await JsonDocument.ParseAsync(response.ContentStream);
  164. LessonCount count = json.ToObject<LessonCount>();
  165. count.tCount[day - 1] += lessonDis.disTCount;
  166. count.pCount[day - 1] += lessonDis.disPCount;
  167. count.ptCount[day - 1] += lessonDis.disDCount;
  168. count.beginCount[day - 1] += lessonDis.record;
  169. /*if (!count.courseIds.Contains(data.courseId))
  170. {
  171. count.courseIds.Add(data.courseId);
  172. count.beginCount[day] += 1;
  173. }*/
  174. await client.GetContainer("TEAMModelOS", tbname).ReplaceItemAsync(count, count.id, new PartitionKey(code));
  175. }
  176. else
  177. {
  178. LessonCount count = new LessonCount
  179. {
  180. id = data.tmdid,
  181. code = code,
  182. ttl = -1
  183. };
  184. double[] da = new double[days];
  185. List<double> list = new List<double>(da);
  186. List<double> listT = new List<double>(da);
  187. List<double> listP = new List<double>(da);
  188. List<double> listPT = new List<double>(da);
  189. list[day - 1] += lessonDis.record;
  190. listT[day - 1] += lessonDis.disTCount;
  191. listP[day - 1] += lessonDis.disPCount;
  192. listPT[day - 1] += lessonDis.disDCount;
  193. count.beginCount.AddRange(list);
  194. count.tCount.AddRange(listT);
  195. count.pCount.AddRange(listP);
  196. count.ptCount.AddRange(listPT);
  197. //count.courseIds.Add(data.courseId);
  198. await client.GetContainer("TEAMModelOS", tbname).CreateItemAsync(count, new PartitionKey(code));
  199. }
  200. }
  201. catch (Exception ex)
  202. {
  203. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-LessonCount-FixLessonCount\n{ex.Message}{ex.StackTrace}{data.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  204. }
  205. }
  206. }
  207. }