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