跳转到内容

三维冲突检测

排课出错的代价是老师白跑一趟、家长当场投诉。OpSkool 把冲突校验做成拖动时实时反馈,而不是提交后才报错。

冲突不是一个单独的页面,它长在 排课 页上:

  • 图例条上常驻一个徽章:没冲突时显示 无冲突,有冲突时变成 ⚠ N 处冲突
  • 冲突的课块本身在网格上带红色标记。
维度什么情况算冲突
老师同一位老师,同一时段,两节课
教室同一间教室,同一时段,两节课
学生同一名学生,同一时段,被两个班级的课覆盖

三个维度是各自独立判定的:一节课可以同时撞老师和撞教室,两条都会分别报出来,不会互相掩盖。

学生冲突是三者里最容易被忽略的,因为它不看课块本身,看的是编班关系——系统要先知道「这个学生在哪几个班」。没导过班级学生名单、也没在班级详情页逐个加过学员,学生冲突就永远检测不出来。见建班级、编班

判定规则里的三个细节

章节:判定规则里的三个细节

贴边不冲突。 冲突用半开区间 [开始, 结束) 判定:09:00–10:30 与 10:30–12:00 不算冲突,紧接着排是允许的。

已排的课和已点名的课都参与判定,停课的不参与。 一节课点完名之后仍然确凿地占着那间教室、那位老师、那批学生,所以「已点名」状态的课次和「已排」状态的课次一样参与冲突判定;停课的课次、以及批量复制产生的「冲突待排」课次不占用资源,不参与判定——停掉一节就等于把那个时段让出来了。

跨校区的老师会跨校区冲突。 冲突按老师本人算,不按校区分开算:王岚在西湖校区的课和在滨江校区的课撞了,照样是冲突(人没法瞬移)。

冲突长什么样

章节:冲突长什么样

拖动时:拖着课块在网格上移动,落点会实时提示是否可落——校验在拖动过程中就跑完了,不用等松手。

已排的课:冲突课块在网格上带红色标记,图例条的徽章同时变成「⚠ N 处冲突」。

同一格堆了多节课:格子里出现叠放块,点开会列出「该时段全部课次」,面板底部会提示「要逐间教室排布,切到顶栏『教室视角』——每间教室各占一栏,天然不重叠」。

批量复制留下的「冲突待排」:用顶栏「复制…」整段复制课表时,撞车的那几节仍然会落进去,但状态是冲突待排——课块带红描边和 ⚠,不占老师和教室,也不计入看板统计。把它挪到一个不冲突的时段,状态就自动回到正常。见排课与拖拽调课

撞了什么常见解法
老师换时段;或用课块上的 代课 换一位老师
教室换时段;或切到教室视角把课拖到另一间空教室;实在不占固定教室的课可以把教室留空
学生换时段;或调整编班(重导班级学生名单,给冲突学生填离开日期)

改动方式见排课与拖拽调课

导入课次时也会查

章节:导入课次时也会查

用 Excel 导入「课次」时同样会做冲突检测,撞车的行会作为错误行退回,不会硬塞进库。见Excel 花名册批量导入

校验跑在两端

章节:校验跑在两端

同一份冲突引擎代码既在浏览器里跑(负责拖动时的即时高亮),也在服务端跑(负责写入前的权威校验)。前端提示只是体验,真正说了算的是服务端那一次——新建、拖动、批量移动都会被服务端挡回来,绕过界面直接调接口也一样。

唯一的例外是按时间段批量复制:为了几节撞车就整批回滚反而更难用,所以那几节会以「冲突待排」落地,等你回头处理,其余的正常复制。

徽章显示无冲突,但我觉得排错了? 冲突只检测「同一资源同一时段撞车」。「王岚不该教物理」「这个班容量超了」都不是冲突,系统不拦。

为什么学生冲突一条都没有? 极可能是没导过班级学生名单,或没在班级详情页逐个加过学员。去建班级、编班补一次。

能强行排冲突的课吗? 单节课不能——新建或拖动时服务端直接拒绝,绕过界面也一样。只有按时间段批量复制会把撞车的课以「冲突待排」放进去,等你回头调;图例条上的「⚠ N 处冲突」数的就是这些。