EvaluationSyncInfoService.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using Microsoft.Azure.Cosmos;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. using TEAMModelOS.SDK.DI;
  9. using TEAMModelOS.SDK.Models.Cosmos.Common;
  10. using TEAMModelOS.SDK.Models.Cosmos.Normal;
  11. namespace TEAMModelOS.SDK.Models.Service
  12. {
  13. public sealed class EvaluationSyncInfoService
  14. {
  15. /// <summary>
  16. /// 活动数据打包
  17. /// </summary>
  18. /// <param name="id"></param>
  19. /// <param name="scope"></param>
  20. /// <param name="owner"></param>
  21. /// <param name="type"></param>
  22. /// <param name="azureCosmos"></param>
  23. /// <param name="azureStorage"></param>
  24. public static async Task PackageEvaluation( string id,string scope, string owner, string type, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage,CoreAPIHttpService _coreAPIHttpService, DingDing _dingDing)
  25. {
  26. EvaluationSyncInfo evaluationSyncInfo= null;
  27. string schoolCode = null;
  28. if (scope.Equals("school"))
  29. {
  30. schoolCode= owner;
  31. }
  32. var responseEvaluationSyncInfo = await azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync(id, new PartitionKey("EvaluationSyncInfo"));
  33. if (responseEvaluationSyncInfo.IsSuccessStatusCode)
  34. {
  35. evaluationSyncInfo= JsonDocument.Parse(responseEvaluationSyncInfo.Content).RootElement.Deserialize<EvaluationSyncInfo>();
  36. }
  37. else {
  38. evaluationSyncInfo=new EvaluationSyncInfo {
  39. id = id,
  40. scope = scope,
  41. owner = owner,
  42. type = type,
  43. pk="EvaluationSyncInfo",
  44. code="ActivitySyncInfo",
  45. };
  46. }
  47. switch (true)
  48. {
  49. case bool when (type == "Exam"):
  50. {
  51. string code = $"Exam-{owner}";
  52. var response = await azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(id, new PartitionKey(code));
  53. if (response.IsSuccessStatusCode)
  54. {
  55. ExamInfo exam= JsonDocument.Parse(response.Content).RootElement.Deserialize<ExamInfo>();
  56. if (!string.IsNullOrWhiteSpace(evaluationSyncInfo.shortCode))
  57. {
  58. evaluationSyncInfo.shortCode = $"{MurmurHash3.Hash32(exam.id)}";
  59. }
  60. evaluationSyncInfo.name=exam.name;
  61. evaluationSyncInfo.subjects = exam.subjects?.Select(x=>new IES.ExamServer.Models.SubjectExam { id=x.id,name=x.name,examId=id}).ToList();
  62. evaluationSyncInfo.dataTime= DateTimeOffset.Now.ToUnixTimeMilliseconds();
  63. HashSet<string> grouplist = new HashSet<string>();
  64. if (exam.classes.IsNotEmpty()) {
  65. exam.classes.ForEach(x => { grouplist.Add(x); });
  66. }
  67. if (exam.stuLists.IsNotEmpty())
  68. {
  69. exam.stuLists.ForEach(x => { grouplist.Add(x); });
  70. }
  71. evaluationSyncInfo.grouplist=grouplist.ToList() ;
  72. evaluationSyncInfo.paperCount=exam.papers.IsNotEmpty()? exam.papers.Count():0;
  73. foreach (var group in exam.papers.GroupBy(x=>x.subjectId).Select(x=>new { key = x.Key,list= x.ToList()}))
  74. {
  75. var subject= exam.subjects.Find(x => x.id.Equals(group.key));
  76. if (subject!=null)
  77. {
  78. evaluationSyncInfo.subjects.Add(new IES.ExamServer.Models.SubjectExam {
  79. id=subject.id,
  80. name=subject.name,
  81. examId=id,
  82. paperCount= group.list.Count,
  83. paperIds= group.list.Select(x => x.id).ToList()
  84. } );
  85. }
  86. }
  87. }
  88. break;
  89. }
  90. case bool when (type == "Art"):
  91. {
  92. string code = $"Art-{owner}";
  93. var response = await azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(id, new PartitionKey(code));
  94. if (response.IsSuccessStatusCode)
  95. {
  96. ArtEvaluation art = JsonDocument.Parse(response.Content).RootElement.Deserialize<ArtEvaluation>();
  97. evaluationSyncInfo.subjects = art.subjects?.Select(x => new IES.ExamServer.Models.SubjectExam { id=x.id, name=x.name, examId=id }).ToList();
  98. evaluationSyncInfo.name = art.name;
  99. evaluationSyncInfo.dataTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();
  100. HashSet<string> grouplist = new HashSet<string>();
  101. if (art.classes.IsNotEmpty())
  102. {
  103. art.classes.ForEach(x => { grouplist.Add(x); });
  104. }
  105. if (art.stuLists.IsNotEmpty())
  106. {
  107. art.stuLists.ForEach(x => { grouplist.Add(x); });
  108. }
  109. if (art.tchLists.IsNotEmpty())
  110. {
  111. art.tchLists.ForEach(x => { grouplist.Add(x); });
  112. }
  113. evaluationSyncInfo.grouplist=grouplist.ToList();
  114. var quota_22 = art.settings.Find(x => x.id.Equals("quota_22"));
  115. foreach (var item in quota_22.task)
  116. {
  117. }
  118. }
  119. }
  120. break;
  121. default:
  122. break;
  123. }
  124. var listInfo= await GroupListService.GetMemberByListids(_coreAPIHttpService, azureCosmos.GetCosmosClient(), _dingDing, evaluationSyncInfo.grouplist, schoolCode);
  125. evaluationSyncInfo.studentCount = listInfo.rmembers.Count();
  126. }
  127. }
  128. }