using System; using System.Collections.Generic; namespace mxdemo.Mind { #region model public class FacultyForm { public int subjectId; // 这个想想「班会、体育、自习」怎么处理? public string subjectName; // 名称 public bool isFixed; // 固定师资,用以区分6门合格考与等级考学科,非固定科目需要填写合格考与等级考 public bool isOffical; // 正式科目,9科为正式科目,非正式科目提供的校验不一样 public int classesCountPrev; // 周课时数-分班前-仅参考用 public int teacherCount; // 单科老师数量 public int teacherClassesCount; // 单科老师周课时数 public int classesCount; // 单科总课时数,前端会提供辅助计算 public int levelClassesCount; // 等级考课时数-分班后 public int qualifiedClassesCount; // 合格考课时数-分班后 } public class FacultyResult : FacultyForm { public int levelClassCount; // 等级考班级数 public int qualifiedClassCount; // 合格考班级数 public int requiredClassesCount; // 所需课时 public int actualClassesCount; // 实际课时 public int missingClassesCount; // 缺少课时,正数表示缺的,负数表示超的 public int missingTeacherCount; // 缺少老师,正负同上 } public class GroupSetting { // 略,延用之前的结构内容 } public class GroupModel { // 后台自己设置标识,前端会原样返回,前端展示与操作只会用到索引 public string groupIds; public List roundGroups; public List faculties; } public class ScoreImportConfig // 需要调整结构 { #region 不变部分 // { //"params": {}, //"roundId": 14, //"schoolId": 31, //"year": 2021, //"name": "第1次选科", //"beginTime": "2022-03-05", //"endTime": "2022-03-20", //"state": "1", //"importWeight":[] #endregion #region 变更部分 // 新增模型列表 public List groupModels; // 选择其中1个模型 public int activeGroupModelIndex; // 构想的是传索引,因为前端会做删除等调整,而且新建时也可能同时创建多个引用,此时无ID能够做出区分 // 选志愿的数量,默认为1 public int preferenceCount = 1; #endregion #region 新增控制配置 public bool rankInvisible; // 排名不可见,默认false: 排名可见 public bool scoreInvisible; // 分数不可见,默认false: 分数可见 public bool enableEsign; // 开启电子签名,默认false: 不需要 public bool enablePaperSign; // 开启电子签名的情况下,是否需要纸质签名(促进学生使用班牌),默认false: 不需要 #endregion } #endregion public interface ISelectedScoreImport { // ScoreImportConfig的结构有变化见上面region ScoreImportConfig getScoreImportConfig(int roundId); /// /// 生成空的师资表格,在校长全部重新填写的时候调用。如果是从已完成的模型复制,则不会调用,前端会自行处理 /// /// List generateFaculties(); // 计算师资匹配结果 // 构想:全量传数据,但后台只挑需要的groupModels[targetIndex]进行计算,计算完毕标记为completed=true // 计算结束,需要标记出groupModels中,completed=true的模型,最优解为isBest=true // 最优解:faculties.sum(f => Math.Abs(f.missingTeacherCount)) 总和最小的GroupModel为最优 ScoreImportConfig calculateFaculty(ScoreImportConfig round, int groupModelIndex); void saveScoreImportConfig({ round: ScoreImportConfig }); // config结构变了,保存也要注意 void queryScoreImportDetails({ round: ScoreImportConfig, groupModelIndex: int }); // config结构变了,查询时要指定哪个模型 } }