using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using TEAMModelOS.SDK.Models; namespace TEAMModelOS.TEAMModelFunction { public static class ItemService { /// /// 计算题目的条件数量变化 /// /// /// /// public static void CountItemCond(ItemInfo newItem, ItemInfo odlItem, ItemCond cond) { //检查两个对象是否是同一条记录 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); } 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); //后变更删除 string oldKey = $"{odlItem.subjectId}"; List oldGrade = odlItem.gradeIds; UpdateItemCond(cond, false, oldKey, oldGrade, odlItem.type, odlItem.level, odlItem.field.HasValue ? odlItem.field.Value : 0); } } 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); } else { // throw new Exception(); } } /// /// opt=false 减 true 增 /// /// /// public static void UpdateItemCond(ItemCond cond, bool opt,string key,List grade,string type,int level,int field) { int count = 0; if (opt) { count = 1; } else { //未计入的则默认0 count = -1; } if (cond.conds.ContainsKey(key)) { foreach (var x in grade) { var exCondCount= cond.conds[key].Where(y => y.grade.Key.Equals(x)).FirstOrDefault(); if (exCondCount != null) { exCondCount.grade= new KeyValuePair (x, exCondCount.grade.Value + count); if (exCondCount.type.ContainsKey(type)) { exCondCount.type[type] = exCondCount.type[type] + count; } else { exCondCount.type.Add(type, count); } if (exCondCount.level.ContainsKey(level)) { exCondCount.level[level] = exCondCount.level[level] + count; } else { exCondCount.level.Add(level, count); } if (exCondCount.field.ContainsKey(field)) { exCondCount.field[field] = exCondCount.field[field] + count; } else { exCondCount.field.Add(field, count); } } else { CondCount condCount = new CondCount { grade = new KeyValuePair(x, count), type = new Dictionary { { type, count } }, field = new Dictionary { { field, count } }, level = new Dictionary { { level, count } } }; cond.conds[key].Add(condCount); } } } else { List conds = new List(); foreach (var x in grade) { CondCount condCount = new CondCount { grade = new KeyValuePair(x, count), type = new Dictionary { { type, count } }, field = new Dictionary { { field, count } }, level= new Dictionary { { level, count } } }; conds.Add(condCount); } cond.conds.Add(key, conds); } } } }