| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 | using System;using System.Collections.Generic;namespace mxdemo.Mind{    #region model    public class ElectiveSetting    {        //"selectResult": {        //  "params": {},        //  "roundId": 8,        //  "schoolId": 1,        //  "year": 2021,        //  "name": "第三次",        //  "beginTime": "2022-02-16",        //  "endTime": "2022-02-17",        //  "groupIds": "1,2,3,10,11,12",        public int currentGeneration; // 当前报名状态        public int preferenceCount; // 选填志愿数量  //  "groupList": [  //    {  //      "params": {},  //      "groupId": 1,  //      "mask": 448,  //      "name": "物化生",  //      "rank": 1  //    },  //    {  //  "params": { },  //      "groupId": 2,  //      "mask": 416,  //      "name": "物化政",  //      "rank": 2  //    },  //    {  //  "params": { },  //      "groupId": 3,  //      "mask": 400,  //      "name": "物化地",  //      "rank": 3  //    },  //    {  //  "params": { },  //      "groupId": 10,  //      "mask": 56,  //      "name": "历政地",  //      "rank": 10  //    },  //    {  //  "params": { },  //      "groupId": 11,  //      "mask": 104,  //      "name": "历政生",  //      "rank": 11  //    },  //    {  //  "params": { },  //      "groupId": 12,  //      "mask": 88,  //      "name": "历生地",  //      "rank": 12  //    }  //  ],  //  "state": "1"  //},  //"allowSelect": false    }    // 评测推荐专业    public class RecommendMajor    {      public string majorCategoryName; // 专业类别      public int majorCategoryCode; // 专业编码      public  List<int> matchedGroupIds; // // 匹配哪几个组合?    }    // 学生这里无论什么时间得到的都是最终结果,不需要中间快照,以此区分校长的选科数据。    // 校长的选科数据,初选时与学生相同;补录时也需要这份数据、但也需要初选与补录的差异部分;排名均衡同理    public class ElectiveSelectModel    {        public int groupId; // 组合        public string groupName; // 名称        public int classCount; // 班级数        public int personCount; // 人数设置        // 5.22 注        // 常量 来自发布选科        // 5.7 hht +字段,用来展示报告        public int groupIndicator; // 组合指标 // primary时为设置人数,之后为决策完毕后剩余的设置数        // 5.22 注        // 报名代=Math.max(0, personCount-groupApprovedCount) 决策代=从报名代继承值        // 设置人数-组合录取人数(迭代数)        public int nextGroupIndicator; // 下阶段组合指标        // 5.22 注        // 报名代=0  决策代用来表示超缺=(groupApprovedCount+actualCount[多志愿使用1志愿])-personCount        public int rankInIndicator; // 组合指标排名        // 5.22 注        // 未录取学生推荐组合中的排名,其它已录或非推荐组合为0(也就是说最多只会有一个group有值)        // 报名代从决策代继承        public int bestInIndicator; // 未录取组合排名最优人数 // 这是一个解释数据,并没有直接参与计算        public int rankInBest; // bestInIndicator中的排名        // 5.22 注        // bestInIndicator:未录学生的最佳成绩在未录满组合中的分布人数        // rankInBest:未录学生最优的组合中的排名,其它已录取或非成绩最优组合为0(也就是说最多只会有一个group有值)        // 报名代从决策代继承        public int rankInDisenroll; // 全组合指标排名,即所有未录取人员中的排名 // 可能没用        // 5.22 注        // 学生在所有未录取学生中的排名,每个未录组合都会有一个排名(分别按6科成绩排)        // 报名代从决策代继承        public decimal scoreSumAll; // 9门成绩        public decimal scoreSumGroup; // 6门成绩        public bool isRecommend; // 推荐组合        // 5.22 注        // 对应未录学生在决策代匹配算法的推荐组合        // 报名代从决策代继承        public int rankInGroup; // 选科实时排名 常量 来自成绩导入        public int rankInGrade; // 选科全校排名 常量 来自成绩导入        public bool allowSelect; // 是否可以报名 报名代专用        public string disabledReason; // 不可报名时的原因 报名代专用        public bool selected;  // 已报名        // 5.13 如果是多志愿,按selectedRank区分一志愿、二志愿、三志愿...        public int selectedRank; // 多志愿时的排序        // 5.20 +用来标识填报时拒填        public bool rejected; // 拒绝填报        public string rejectedReason; // 拒绝原因        // 5.22 注        // selected selectedRank rejected rejectedReason以上报名状态在报名代记录,继承至下一代决策代终止        // 5.13 去除动态列,改为固定字段 +        public int actualCount; // 阶段实际报名人数        // 5.22 注        // 本代报名汇总数据,继承至下一代决策代终止        public bool approved; // 已被正常录取        // 5.22 注        // 学生录取状态,持续继承至所有后代,直至被forceAdjusted更改(非必触发)        public bool forceAdjusted; // 已被调剂录取        // 5.22 注        // 学生强制调剂录取状态,持续继承至所有后代(目前只有forceAdjust代可能会更改此值)        public int groupApprovedCount; // 本组合已被录取人数(迭代值)        // 5.22 注        // 学生正常录取汇总数据,每个决策代累加之前所有决策代的录取数据        public int groupForceAdjustedCount; // 本组合已被强制调剂人数(迭代值)        // 5.22 注        // 学生强制调剂录取汇总数据,每个决策代累加之前所有决策代的录取数据(目前只有forceAdjust代会产生这种数据)    }    public class ElectiveSelectGroupStatistics {      public string name; // stat column name      public ElectiveGeneration.ElectiveGroupGenerationStatistic[] groupDescriptors;    }    ;    public class ElectiveSelectModelWrapper {      public ElectiveSelectModel[] models;      public int generation;      public long studentId;    }    // 自选专业    public class ElectiveOptionalMajor    {        public int collegeId;        public string collegeName;        // 可能还包含院校的一些其它属性        public string majorCategoryCode;        public string majorCategoryName;        public Dictionary<string, string> majors;        public string limitationA; // 选科限制1        public string limitationB; // 选科限制2        public List<int> matchedGroupIds; // 匹配的组合    }    #endregion    // 本期会涉及很多隐藏需求,前端会去back-ui按页面+按功能设置很多按钮功能,后续配置为权限组来操作    // 本期后台输出数据的时候不需要按权限屏蔽数据,全量输出即可,以减少后端开发的工作量    // 因为本期要控制隐藏的内容比功能入口、API入口要更精细的粒度,可能是列表的某几列,可能是某些按钮,如果严格API数据规范可能会增加海量的工作。    public interface IPrimaryElectiveService    {        // 旧接口getStudentSelected,返回内容+preferenceCount,志愿数        ElectiveSetting getStudentSelected();        // 学生获取选科状态数据,得到是每个组合最终状态和结果        // 5.13 返回迭代至generation的多代选科表,如查询补录报名,即返回初录报名/初录结果/补录报名3代的模型集合        ElectiveSelectModelWrapper[] getStudentElectiveModels(long studentId, int generation);        // 学生获取自选专业及匹配情况        List<ElectiveOptionalMajor> getOptionalMajors();        // 初选报名。这里简化原型里的操作,直接提交,如需排序,调sortElectiveSelected接口,并刷新getPrimaryElectivesx        void submitPrimaryElective(ElectiveSelectModel[] models, ElectiveEsign esign);        void esign(ElectiveEsign esign);        // 返回学生测评推荐专业以及匹配情况        List<RecommendMajor> getRecommendMajor();//        /*//          AI分析//          需要的字段://          详细见analysis.json//        *///        List<ElectiveSelectGroupStatistics> getAIAnalysis()    }}
 |