| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | 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.7 hht +字段,用来展示报告        public int groupIndicator; // 组合指标 // primary时为设置人数,之后为决策完毕后剩余的设置数        public int rankInIndicator; // 组合指标排名        public int rankInBest; // bestInIndicator中的排名        public int rankInDisenroll; // 全组合指标排名,即所有未录取人员中的排名 // 可能没用        public int bestInIndicator; // 未录取组合排名最优人数 // 这是一个解释数据,并没有直接参与计算        public decimal scoreSumAll; // 9门成绩        public decimal scoreSumGroup; // 6门成绩        public bool isRecommend; // 推荐组合        public int rankInGroup; // 选科实时排名        public int rankInGrade; // 选科全校排名        public bool allowSelect; // 是否可以报名        public string disabledReason; // 不可报名时的原因        public bool selected;  // 已报名        public int selectedRank; // 多志愿时的排序    }    public class ElectiveSelectGroupStatistics {      public string name; // stat column name      public ElectiveGeneration.ElectiveGroupGenerationStatistic[] groupDescriptors;    }    ;    public class ElectiveSelectModelWrapper {      public ElectiveSelectModel[] models;      // 动态追加字段 json 格式见 statColumn.json      ElectiveSelectGroupStatistics[] statColumns;      // 5.7 hht +字段 用于展示报告      public int[] prevPreferences; // 前一步未录取的报名组合    }    // 自选专业    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();        // 学生获取选科状态数据,得到是每个组合最终状态和结果        ElectiveSelectModelWrapper getStudentElectiveModels();        // 学生获取自选专业及匹配情况        List<ElectiveOptionalMajor> getOptionalMajors();        // 初选报名。这里简化原型里的操作,直接提交,如需排序,调sortElectiveSelected接口,并刷新getPrimaryElectivesx        void submitPrimaryElective(ElectiveSelectModel model);        // 调整排序。这里简化原型里的操作,并刷新getPrimaryElectives        void sortPrimaryElective(ElectiveSelectModel model);        // 取消报名        void cancelPrimaryElective(ElectiveSelectModel model);        // 返回学生测评推荐专业以及匹配情况        List<RecommendMajor> getRecommendMajor();//        /*//          AI分析//          需要的字段://          详细见analysis.json//        *///        List<ElectiveSelectGroupStatistics> getAIAnalysis()    }}
 |