123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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<GroupSetting> roundGroups;
- public List<FacultyResult> 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<GroupModel> 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);
- /// <summary>
- /// 生成空的师资表格,在校长全部重新填写的时候调用。如果是从已完成的模型复制,则不会调用,前端会自行处理
- /// </summary>
- /// <returns></returns>
- List<FacultyResult> 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结构变了,查询时要指定哪个模型
- }
- }
|