using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TEAMModelOS.SDK.Models;
namespace TEAMModelOS.Services.Common
{
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 增
/// key 科目id
///
///
///
///
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;
}
grade.ForEach(x => {
bool none = true;
for (int index = 0; index < cond.grades.Count; index++)
{
if (x == cond.grades[index].id)
{
cond.grades[index].count = cond.grades[index].count + count;
none = false;
break;
}
}
if (none)
{
cond.grades.Add(new GradeCount { id = x, count = count });
}
});
SubjectCount subject = cond.subjects.Where(x => x.id == key).FirstOrDefault();
if (subject == null)
{
cond.subjects.Add(new SubjectCount() { id=key});
}
cond.subjects.Where(x => x.id == key).ToList().ForEach(y => {
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
{
y.types[type]["level"][$"{level}"] = y.types[type]["level"][$"{level}"] + count;
y.types[type]["field"][$"{level}"] = y.types[type]["field"][$"{field}"] + count;
}
y.count = y.count + count;
});
cond.count = cond.subjects.Select(x => x.count).Sum();
}
}
}