using System; using System.Collections.Generic; namespace mxdemo.Mind { public interface IStudentClassDispatchService { // 1 班级设置 参考校长的class-manage页面 // a 从年级树缓存中查找当前选科学年对应的班级进行选择 // b 允许用户输入不存在的班级,输入完毕后确认是否创建新班级 // 附:(创建后务必刷新缓存)(暂不考虑批量创建班级)(创建接口参考class-manage页面) // 2 应用班级设置 设置人数及分配模式,得到初步分派的结果 // 3 手工微调 将查询组件化,允许加入多个对比查询,作选中操作,执行转移/或者交换操作 #region model /// /// 选科轮次,仅显示分班关键字段,后续可能还会加选科流程的其它字段 /// public class Round { // 本身的字段 int roundId; // 选科轮次ID string groupIds; // 开放组合 object[] roundGroups; // 这里包含各组合以及班级数设置 // ... // 流程控制字段 bool allowDispatch; // 标记当前是否可以进行分班逻辑 Dictionary enrollGroupCount; // 各组合录取人数,按组合汇总 bool dispatchCompleted; // 所有学生已经分配完毕 } /// /// 班级,仅显示分班关键字段 /// public class Clazz { int classId; string name; } public class Student { int studentId; int sex; int rankInGroup; // 组合内排名 } public class DispatchSetting { int roundId; // 轮次ID int groupId; // 组合ID int classId; // 班级 int expectedCount; // 期望人数 int? actualCount; // 实际人数,应用设置才产生数量 int? actualCountInMale; // 实际男生,应用设置才产生数量 int? actualCountInFemale; // 实际女生,应用设置才产生数量 } public class DispatchResult { int roundId; // 轮次ID int groupId; // 组合ID int classId; // 班级 Student[] students; // 分配的学生 } public enum EnumDispatchMode { RankBalance, // 按成绩平均分配,默认按这种分配方式,可保证各个班成绩都差不多 RankPriority, // 按成绩优先,会导致成绩好的集中到一起 Random // 随机 } /// /// 查询参数 /// public class DispatchQuery { int roundId; int groupId; int classId; int? sex; } #endregion /// /// 按学年,次数查询 /// ROUND: 如果allowDispatch=false,分班页仅只读不能操作 /// /// Round GetRoundStatus(int year, int round); // 类似/front/report/getStudentSelected /// /// 获取分班配置 /// /// /// DispatchSetting[] GetDispatchSettings(int roundId); /// /// 保存配置 /// /// void SaveDispatchSettings(DispatchSetting[] settings); /// /// 应用配置,分派学生,按组合执行 /// /// /// /// DispatchResult ApplyDispatchSettings(int roundId, int groupId, EnumDispatchMode mode = EnumDispatchMode.RankBalance); /// /// 分派名单查询,不需要分页,按班展示,启动table排序功能 /// /// /// /// DispatchResult GetDispatchResult(DispatchQuery query); /// /// 分派转移,用这个接口实现转移学生或者交换学生(手工操作),后台在操作成功后记得刷新setting中的3个人数汇总字段 /// /// /// /// void ExchangeDispatch(int roundId, Student[] students, int toClassId); /// /// 分配完毕后发布,锁定分班流程 /// /// void PublishDispatch(int roundId); } }