为什么排课依然是个难题
排课这件事,看起来简单,做起来极其复杂。
一所中型培训机构,30个班级、20位教师、6间教室,每周要排出几百节课。约束条件包括:教师不能同一时间出现在两个教室、同一班级同一时段只能安排一门课、教室容量不能超限、部分课程需要连排、外教需要避开时差冲突……把这些条件放在一起,本质上是一个多约束优化问题。
更麻烦的是,排课从来不是一锤子买卖。教师临时请假、学员调课、教室维修,任何一次变动都会牵动整张课表。传统教务模式下,改一处需要重新核对全局,教务老师最怕听到的就是“又要调课了”。
爱耕云在这个领域深耕了十年。从2017年获得首批软件著作权到2025年持续获得新的系统著作权,产品迭代的节奏没有停过。这篇文章不打算讲功能清单,而是从工程实现的层面,聊聊排课系统和教务管理这件事到底难在哪里,以及我们是怎么解决的。
排课引擎的三层设计
爱耕云的排课服务采用分层架构。最底层是约束建模层,把排课涉及的所有规则抽象为硬约束和软约束两类。硬约束包括时间冲突、教室冲突、教师跨校区冲突;软约束涉及教师偏好、教室楼层偏好、课程间隔要求等。
中间层是冲突检测引擎。我们没有用单一的算法方案,而是采用了约束传播加回溯搜索的混合策略。先通过弧一致性预过滤掉不可能的赋值,再在回溯搜索中按最小剩余值启发式选择变量,优先处理约束最紧的课程。这个设计的好处在于,硬约束检测可以做到快速扫描级别,而软约束评估按需触发,不需要对每门课都跑完整的评分函数。
最上层是调度服务,负责处理增量排课和实时调课。排课不是一次性任务,教务老师在初排之后需要频繁调整。我们维护了一个冲突图结构,节点为课程,边为冲突关系。当某门课的时间或教室变更时,只需要检查其邻接节点是否产生新冲突,单次调课的冲突检测响应控制在秒级以内。
这套架构支撑了爱耕云在多校区场景下的稳定运行。跨校区排课比单校区复杂一个量级——教师跨校区上课需要预留通勤时间,A校区到B校区步行15分钟,两门课之间至少留20分钟间隔。这个约束在算法层面需要建模为时间窗口的硬性偏移。
在线教学平台的对接逻辑
排课排好了,下一步是让课程真正跑起来。越来越多的机构采用线上加线下混合教学模式,教务系统需要和腾讯会议、ClassIn、ZOOM这些在线教学平台打通。
对接的核心逻辑并不复杂:排课完成后,系统自动在对应的教学平台上创建会议,把会议链接写入课表,推送给教师和学员。学员在微信小程序里点开课表,直接看到上课链接,一键进入课堂。
但在工程实现上,这里有三个细节需要处理好。第一是批量预定的效率问题,一周几百节课如果逐条创建会议,接口调用量会非常可观,我们通过批量API接口来优化这个过程-。第二是异常处理,会议创建失败、链接失效、教师中途更换会议平台,这些情况都需要系统自动感知并触发重新创建流程。第三是数据同步的一致性,排课系统的课程信息和教学平台的会议信息需要保持实时对齐,任何一边发生变更,另一边要同步更新。
爱耕云目前的对接方案覆盖了腾讯会议、ClassIn、ZOOM三个主流平台。腾讯会议适合国内机构的大班课和教研活动,ClassIn在互动教学和小班课场景下体验更好,ZOOM则是海外学员和外教课程的首选。机构可以根据自己的教学场景灵活选择,不需要切换多套系统-。
跨时区排课是怎么实现的
跨时区排课是国际化教育机构的刚需,也是技术实现上最容易被低估的环节。
问题的核心不在于时区转换本身,而在于“谁看课表用谁的时区”。一位在伦敦的外教和一位在深圳的学员上同一节课,伦敦的老师看到的是下午2点,深圳的学员看到的是晚上10点——同一个时间点,不同的呈现方式。
爱耕云的方案是在数据层统一存储UTC时间,在展示层根据用户所在时区动态转换。系统自动识别教师和学员的时区设置,课程时间在各自界面按本地时区显示。
跨时区排课还有一个容易被忽视的问题:节假日。不同国家的公共假日完全不同,系统内置了全球主要国家的节假日日历,在排课时自动避开各方的休息日。通知系统也会在课程变动时自动发送多语言通知,提醒中包含所有相关时区的上课时间,支持邮件、短信和站内推送多种方式。
多语言:不只是翻译界面
多语言支持看起来是个“表面功夫”,但真正做深了,涉及的是整个系统的国际化设计。
爱耕云支持中文简繁体、英文、法语、葡萄牙语、日语、韩语等多种语言的一键切换。但多语言不只是把按钮上的文字换一种语言——课程名称、通知模板、成绩单格式、日期数字的本地化格式,都需要纳入多语言体系-。
更重要的是,切换语言之后,系统的时间格式、日期格式、货币单位这些本地化元素也要跟着变。一位使用法语界面的非洲机构管理者,看到的课表日期格式应该是日/月/年,金额单位应该是当地货币,而不是人民币。
我们在这块的做法是采用动态语言包机制,语言资源与代码逻辑分离,新增语种只需要添加对应的语言包文件,不需要修改系统代码。这个设计让系统具备了持续扩展语种的能力。
十年积累的技术底色
爱耕云的技术架构采用微服务拆分,排课、学员、消课、收费、通知等模块都是独立部署的服务,通过RESTful API或消息队列通信-。排课服务是核心,也是资源占用最大的模块,独立部署意味着它可以按需横向扩容,在开学季等高并发时段保证响应速度。
前端采用Vue3加微信小程序原生组件,家长端完全通过小程序使用,不需要下载独立APP-。数据安全方面,SSL加密传输、角色级权限管理、定期数据备份这些基础能力都是标配。
十年的产品迭代,积累的不只是功能清单,更是对教培机构真实运营场景的理解。排课软件也好,教务系统也好,工具的价值不在于功能多,而在于每一个功能都踩在机构真正需要的点上。
