using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using TEAMModelOS.SDK; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; namespace TEAMModelOS.SDK.Services { public static class ItemService { /// /// 计算题目的条件数量变化 /// /// /// /// public static void CountItemCond(ItemInfo newItem, ItemInfo odlItem, ItemCond cond) { if (newItem != null ? newItem.scope.Equals("school") : false || odlItem != null ? odlItem.scope.Equals("school") : false) { //检查两个对象是否是同一条记录 if (newItem != null && odlItem == null) { string newKey = $"{newItem.subjectId}"; List grade = newItem.gradeIds; UpdateItemCond(cond, true, newKey, grade, newItem.type, newItem.level, newItem.field.HasValue ? newItem.field.Value : 0, newItem); } else if (newItem != null && odlItem != null) { //更新时 需要保证两个题的 id code 一致 if (newItem.id == odlItem.id && newItem.code == odlItem.code) { //先增加 string newKey = $"{newItem.subjectId}"; List newGrade = newItem.gradeIds; UpdateItemCond(cond, true, newKey, newGrade, newItem.type, newItem.level, newItem.field.HasValue ? newItem.field.Value : 0, newItem); //后变更删除 string oldKey = $"{odlItem.subjectId}"; List oldGrade = odlItem.gradeIds; UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0, newItem); } } else if (newItem == null && odlItem != null) { string oldKey = $"{odlItem.subjectId}"; List oldGrade = odlItem.gradeIds; UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0, null); } else { // throw new Exception(); } } else if (newItem != null ? newItem.scope.Equals("private") : false || odlItem != null ? odlItem.scope.Equals("private") : false) { //检查两个对象是否是同一条记录 if (newItem != null && odlItem == null) { string newKey = $"{newItem.code}".Replace("Item-", ""); List grade = new List { newKey }; UpdateItemCond(cond, true, newKey, grade, newItem.type, newItem.level, newItem.field.HasValue ? newItem.field.Value : 0, newItem); } else if (newItem != null && odlItem != null) { //更新时 需要保证两个题的 id code 一致 if (newItem.id == odlItem.id && newItem.code == odlItem.code) { //先增加 string newKey = $"{newItem.code}".Replace("Item-",""); List newGrade = new List { newKey }; UpdateItemCond(cond, true, newKey, newGrade, newItem.type, newItem.level, newItem.field.HasValue ? newItem.field.Value : 0, newItem); //后变更删除 string oldKey = $"{odlItem.code}".Replace("Item-", ""); List oldGrade = new List { oldKey }; UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0, newItem); } } else if (newItem == null && odlItem != null) { string oldKey = $"{odlItem.code}".Replace("Item-", ""); List oldGrade = new List { oldKey }; UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0, null); } else { // throw new Exception(); } } } /// /// opt=false 减 true 增 /// key 科目id /// /// /// /// public static void UpdateItemCond(ItemCond cond, bool opt, string key, List grade, string type, int level, int field,ItemInfo newItem) { int count = 0; if (opt) { count = 1; } else { //未计入的则默认0 count = -1; } foreach (var x in grade) { bool none = true; if (x == null) { } for (int index = 0; index < cond.grades.Count; index++) { if (x == cond.grades[index].id) { var gc = cond.grades[index].count + count; cond.grades[index].count = gc >= 0 ? gc : 0; none = false; break; } } if (none) { cond.grades.Add(new GradeCount { id = x, count = count }); } } SubjectItemCount subject = cond.subjects.Find(x => x.id == key); if (subject == null) { cond.subjects.Add(new SubjectItemCount() { id=key, count =0}); } var list = cond.subjects.FindAll(x => x.id == key).ToList(); foreach (var y in list) { if (!y.types.ContainsKey(type)) { var dict = new Dictionary> { { "level",new Dictionary { { "1",0},{ "2",0}, { "3", 0 }, { "4", 0 }, { "5", 0 } } }, { "field",new Dictionary { { "1",0},{ "2",0}, { "3", 0 }, { "4", 0 }, { "5", 0 }, { "6", 0 } } } }; dict["level"][$"{level}"] = count; dict["field"][$"{field}"] = count; y.types.Add(type, dict); } else { var lc = y.types[type]["level"][$"{level}"] + count; y.types[type]["level"][$"{level}"] = lc >= 0? lc : 0; var fc = y.types[type]["field"][$"{field}"] + count; y.types[type]["field"][$"{field}"] = fc >= 0? fc : 0; } y.count = y.count + count; } var sum = cond.subjects.Select(x => x.count).Sum(); cond.count = sum>=0?sum:0; } } }