ItemService.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using TEAMModelOS.SDK.Models;
  6. namespace TEAMModelOS.TEAMModelFunction
  7. {
  8. public static class ItemService
  9. {
  10. /// <summary>
  11. /// 计算题目的条件数量变化
  12. /// </summary>
  13. /// <param name="newItem"></param>
  14. /// <param name="odlItem"></param>
  15. /// <param name="cond"></param>
  16. public static void CountItemCond(ItemInfo newItem, ItemInfo odlItem, ItemCond cond) {
  17. //检查两个对象是否是同一条记录
  18. if (newItem != null && odlItem == null)
  19. {
  20. string newKey = $"{newItem.subjectId}";
  21. List<string> grade = newItem.gradeIds;
  22. UpdateItemCond(cond, true,newKey, grade, newItem.type, newItem.level, newItem.field.HasValue?newItem.field.Value:0);
  23. }
  24. else if (newItem != null && odlItem != null)
  25. {
  26. //更新时 需要保证两个题的 id code 一致
  27. if (newItem.id == odlItem.id && newItem.code == odlItem.code)
  28. {
  29. //先增加
  30. string newKey = $"{newItem.subjectId}";
  31. List<string> newGrade = newItem.gradeIds;
  32. UpdateItemCond(cond, true, newKey, newGrade, newItem.type, newItem.level, newItem.field.HasValue ? newItem.field.Value : 0);
  33. //后变更删除
  34. string oldKey = $"{odlItem.subjectId}";
  35. List<string> oldGrade = odlItem.gradeIds;
  36. UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0);
  37. }
  38. }
  39. else if (newItem == null && odlItem != null)
  40. {
  41. string oldKey = $"{odlItem.subjectId}";
  42. List<string> oldGrade = odlItem.gradeIds;
  43. UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0);
  44. }
  45. else {
  46. // throw new Exception();
  47. }
  48. }
  49. /// <summary>
  50. /// opt=false 减 true 增
  51. /// </summary>
  52. /// <param name="cond"></param>
  53. /// <param name="opt"></param>
  54. public static void UpdateItemCond(ItemCond cond, bool opt,string key,List<string> grade,string type,int level,int field)
  55. {
  56. int count = 0;
  57. if (opt)
  58. {
  59. count = 1;
  60. }
  61. else
  62. {
  63. //未计入的则默认0
  64. count = -1;
  65. }
  66. if (cond.conds.ContainsKey(key))
  67. {
  68. foreach (var x in grade)
  69. {
  70. var exCondCount= cond.conds[key].Where(y => y.grade.Key.Equals(x)).FirstOrDefault();
  71. if (exCondCount != null)
  72. {
  73. exCondCount.grade= new KeyValuePair<string, int> (x, exCondCount.grade.Value + count);
  74. if (exCondCount.type.ContainsKey(type))
  75. {
  76. exCondCount.type[type] = exCondCount.type[type] + count;
  77. }
  78. else {
  79. exCondCount.type.Add(type, count);
  80. }
  81. if (exCondCount.level.ContainsKey(level))
  82. {
  83. exCondCount.level[level] = exCondCount.level[level] + count;
  84. }
  85. else
  86. {
  87. exCondCount.level.Add(level, count);
  88. }
  89. if (exCondCount.field.ContainsKey(field))
  90. {
  91. exCondCount.field[field] = exCondCount.field[field] + count;
  92. }
  93. else
  94. {
  95. exCondCount.field.Add(field, count);
  96. }
  97. }
  98. else {
  99. CondCount condCount = new CondCount
  100. {
  101. grade = new KeyValuePair<string, int>(x, count),
  102. type = new Dictionary<string, int> { { type, count } },
  103. field = new Dictionary<int, int> { { field, count } },
  104. level = new Dictionary<int, int> { { level, count } }
  105. };
  106. cond.conds[key].Add(condCount);
  107. }
  108. }
  109. }
  110. else {
  111. List<CondCount> conds = new List<CondCount>();
  112. foreach (var x in grade) {
  113. CondCount condCount = new CondCount {
  114. grade = new KeyValuePair<string, int>(x, count),
  115. type = new Dictionary<string, int> { { type, count } },
  116. field = new Dictionary<int, int> { { field, count } },
  117. level= new Dictionary<int, int> { { level, count } }
  118. };
  119. conds.Add(condCount);
  120. }
  121. cond.conds.Add(key, conds);
  122. }
  123. }
  124. }
  125. }