TriggerCorrect.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using Azure.Cosmos;
  2. using Azure.Messaging.ServiceBus;
  3. using Microsoft.Azure.Documents;
  4. using System;
  5. using System.Collections.Generic;
  6. using TEAMModelOS.SDK.DI;
  7. using TEAMModelOS.SDK.Extension;
  8. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  9. using TEAMModelOS.SDK.Models;
  10. using TEAMModelOS.SDK.Models.Cosmos;
  11. namespace TEAMModelFunction
  12. {
  13. public static class TriggerCorrect
  14. {
  15. public static async void Trigger(AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
  16. CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis)
  17. {
  18. if ((tdata.status != null && tdata.status.Value == 404) || tdata.ttl > 0)
  19. {
  20. return;
  21. }
  22. var adid = tdata.id;
  23. var adcode = "";
  24. string blobcntr = null;
  25. if (tdata.scope == "school")
  26. {
  27. adcode = $"Activity-{tdata.school}";
  28. blobcntr = tdata.school;
  29. }
  30. else {
  31. return;
  32. }
  33. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}阅卷配置【{tdata.name}-{tdata.id}-ttl={tdata.ttl}】正在执行", GroupNames.成都开发測試群組);
  34. Correct correct = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<Correct>(input.Id, new Azure.Cosmos.PartitionKey($"{tdata.code}"));
  35. List<ChangeRecord> correctRecords = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input.Id }, { "PartitionKey", correct.progress } });
  36. if (correct != null) {
  37. switch (correct.progress) {
  38. case "pending":
  39. var messageCorrect = new ServiceBusMessage(new { id = input.Id, progress = "going", code = tdata.code }.ToJsonString());
  40. messageCorrect.ApplicationProperties.Add("name", "Correct");
  41. if (correctRecords.Count > 0)
  42. {
  43. long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrect, DateTimeOffset.FromUnixTimeMilliseconds(tdata.stime));
  44. await _serviceBus.GetServiceBusClient().cancelMessage(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), correctRecords[0].sequenceNumber);
  45. correctRecords[0].sequenceNumber = start;
  46. await _azureStorage.SaveOrUpdate<ChangeRecord>(correctRecords[0]);
  47. }
  48. else
  49. {
  50. long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrect, DateTimeOffset.FromUnixTimeMilliseconds(tdata.stime));
  51. ChangeRecord changeRecord = new ChangeRecord
  52. {
  53. RowKey = input.Id,
  54. PartitionKey = "pending",
  55. sequenceNumber = start,
  56. msgId = messageCorrect.MessageId
  57. };
  58. await _azureStorage.Save<ChangeRecord>(changeRecord);
  59. }
  60. break;
  61. case "going":
  62. if (correct.subs.IsNotEmpty()) {
  63. foreach (var sub in correct.subs) {
  64. ///生成阅卷教师的阅卷任务列表
  65. if (sub.marker.IsNotEmpty()) {
  66. foreach (var marker in sub.marker) {
  67. CorrectTask task = new CorrectTask
  68. {
  69. ttl = -1,
  70. pk= "CorrectTask",
  71. code = "CorrectTask-" + marker.id,
  72. //评测id 或者阅卷配置id
  73. id = correct.id,
  74. //科目
  75. subject=sub.id,
  76. //科目名称
  77. subjectName=sub.name,
  78. //评测code
  79. ecode=correct.scode,
  80. //阅卷配置code
  81. scode=correct.code,
  82. //任务名称
  83. name=correct.name,
  84. //开始时间
  85. startTime=correct.startTime,
  86. //结束时间
  87. endTime=correct.endTime,
  88. //批改数量
  89. count=marker.count
  90. };
  91. await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync<CorrectTask>(task,new Azure.Cosmos.PartitionKey(task.code));
  92. }
  93. }
  94. //生成异常卷处理人员
  95. //生成仲裁人员
  96. //调用本次考试所涉及的所有已经作答的数据 并生成阅卷池,存入redis
  97. //评测id
  98. string eid = correct.id;
  99. //评测的分区键
  100. string ecode = correct.scode;
  101. //评测科目
  102. string subjectId = sub.id;
  103. }
  104. }
  105. var messageCorrectEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = tdata.code }.ToJsonString());
  106. messageCorrectEnd.ApplicationProperties.Add("name", "Correct");
  107. if (correctRecords.Count > 0)
  108. {
  109. long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrectEnd, DateTimeOffset.FromUnixTimeMilliseconds(tdata.etime));
  110. await _serviceBus.GetServiceBusClient().cancelMessage(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), correctRecords[0].sequenceNumber);
  111. correctRecords[0].sequenceNumber = end;
  112. await _azureStorage.SaveOrUpdate<ChangeRecord>(correctRecords[0]);
  113. }
  114. else
  115. {
  116. long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrectEnd, DateTimeOffset.FromUnixTimeMilliseconds(tdata.etime));
  117. ChangeRecord changeRecord = new ChangeRecord
  118. {
  119. RowKey = input.Id,
  120. PartitionKey = "going",
  121. sequenceNumber = end,
  122. msgId = messageCorrectEnd.MessageId
  123. };
  124. await _azureStorage.Save<ChangeRecord>(changeRecord);
  125. }
  126. break;
  127. case "finish":
  128. ///暂不处理
  129. break;
  130. }
  131. }
  132. }
  133. }
  134. }