三维冲突检测
排课出错的代价是老师白跑一趟、家长当场投诉。OpSkool 把冲突校验做成拖动时实时反馈,而不是提交后才报错。
入口
章节:入口冲突不是一个单独的页面,它长在 排课 页上:
- 图例条上常驻一个徽章:没冲突时显示 无冲突,有冲突时变成 ⚠ N 处冲突。
- 冲突的课块本身在网格上带红色标记。
三个维度
章节:三个维度| 维度 | 什么情况算冲突 |
|---|---|
| 老师 | 同一位老师,同一时段,两节课 |
| 教室 | 同一间教室,同一时段,两节课 |
| 学生 | 同一名学生,同一时段,被两个班级的课覆盖 |
三个维度是各自独立判定的:一节课可以同时撞老师和撞教室,两条都会分别报出来,不会互相掩盖。
学生冲突是三者里最容易被忽略的,因为它不看课块本身,看的是编班关系——系统要先知道「这个学生在哪几个班」。没导过班级学生名单、也没在班级详情页逐个加过学员,学生冲突就永远检测不出来。见建班级、编班。
判定规则里的三个细节
章节:判定规则里的三个细节贴边不冲突。 冲突用半开区间 [开始, 结束) 判定:09:00–10:30 与 10:30–12:00
不算冲突,紧接着排是允许的。
已排的课和已点名的课都参与判定,停课的不参与。 一节课点完名之后仍然确凿地占着那间教室、那位老师、那批学生,所以「已点名」状态的课次和「已排」状态的课次一样参与冲突判定;停课的课次、以及批量复制产生的「冲突待排」课次不占用资源,不参与判定——停掉一节就等于把那个时段让出来了。
跨校区的老师会跨校区冲突。 冲突按老师本人算,不按校区分开算:王岚在西湖校区的课和在滨江校区的课撞了,照样是冲突(人没法瞬移)。
冲突长什么样
章节:冲突长什么样拖动时:拖着课块在网格上移动,落点会实时提示是否可落——校验在拖动过程中就跑完了,不用等松手。
已排的课:冲突课块在网格上带红色标记,图例条的徽章同时变成「⚠ N 处冲突」。
同一格堆了多节课:格子里出现叠放块,点开会列出「该时段全部课次」,面板底部会提示「要逐间教室排布,切到顶栏『教室视角』——每间教室各占一栏,天然不重叠」。
批量复制留下的「冲突待排」:用顶栏「复制…」整段复制课表时,撞车的那几节仍然会落进去,但状态是冲突待排——课块带红描边和 ⚠,不占老师和教室,也不计入看板统计。把它挪到一个不冲突的时段,状态就自动回到正常。见排课与拖拽调课。
怎么解
章节:怎么解| 撞了什么 | 常见解法 |
|---|---|
| 老师 | 换时段;或用课块上的 代课 换一位老师 |
| 教室 | 换时段;或切到教室视角把课拖到另一间空教室;实在不占固定教室的课可以把教室留空 |
| 学生 | 换时段;或调整编班(重导班级学生名单,给冲突学生填离开日期) |
改动方式见排课与拖拽调课。
导入课次时也会查
章节:导入课次时也会查用 Excel 导入「课次」时同样会做冲突检测,撞车的行会作为错误行退回,不会硬塞进库。见Excel 花名册批量导入。
校验跑在两端
章节:校验跑在两端同一份冲突引擎代码既在浏览器里跑(负责拖动时的即时高亮),也在服务端跑(负责写入前的权威校验)。前端提示只是体验,真正说了算的是服务端那一次——新建、拖动、批量移动都会被服务端挡回来,绕过界面直接调接口也一样。
唯一的例外是按时间段批量复制:为了几节撞车就整批回滚反而更难用,所以那几节会以「冲突待排」落地,等你回头处理,其余的正常复制。
常见问题
章节:常见问题徽章显示无冲突,但我觉得排错了? 冲突只检测「同一资源同一时段撞车」。「王岚不该教物理」「这个班容量超了」都不是冲突,系统不拦。
为什么学生冲突一条都没有? 极可能是没导过班级学生名单,或没在班级详情页逐个加过学员。去建班级、编班补一次。
能强行排冲突的课吗? 单节课不能——新建或拖动时服务端直接拒绝,绕过界面也一样。只有按时间段批量复制会把撞车的课以「冲突待排」放进去,等你回头调;图例条上的「⚠ N 处冲突」数的就是这些。
© 2026 OpSkool 办学帮 · 苏ICP备2025224982号-3