| 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结构变了,查询时要指定哪个模型    }}
 |