培训排课系统怎么做?自动排课、冲突检测、调课事务全流程

简介: 培训排课系统完整方案:老师/教室/学员三种资源数据模型、贪心+冲突回退自动排课、三类冲突检测、调课事务闭环,含SQL与代码实现。

【导读】
培训机构排课,从手工排到系统排,核心要解决三件事:自动排课怎么排、冲突怎么检测、调课怎么不出错。本文按"先设计数据模型、再做自动排课、再做冲突检测、最后做调课事务"的顺序,拆一个可落地的培训排课系统完整方案。

一、排课的数据模型:老师、教室、学员三种资源

排课的本质是资源分配:把老师的时间、教室的容量、学员的班级,在时间轴上安排到一起。数据模型先建好三种资源:

-- 老师表
CREATE TABLE teacher (
  id BIGINT PRIMARY KEY,
  name VARCHAR(50),
  subjects JSON,            -- 可教科目:["数学","物理"]
  busy_slots JSON,          -- 已占用时段:[[1,2,3], [5,6]] (星期几×课时段)
  max_weekly_hours INT      -- 每周最大课时
);

-- 教室表
CREATE TABLE classroom (
  id BIGINT PRIMARY KEY,
  name VARCHAR(50),
  capacity INT,
  equipment JSON,           -- 设备:投影/钢琴/画架
  busy_slots JSON
);

-- 班级表
CREATE TABLE class_group (
  id BIGINT PRIMARY KEY,
  name VARCHAR(50),
  course_id BIGINT,
  student_count INT,
  teacher_id BIGINT,
  preferred_slots JSON      -- 偏好时段(家长可上课时间)
);

关键:"星期 × 时段"作为时间片(如"周一 18:00-20:00"是一个片),所有冲突检测都基于时间片做集合运算,不要用"开始时间+时长"的绝对时间,跨周排课会乱。

二、自动排课:贪心 + 冲突回退

自动排课不需要追求"最优解"(那是NP难题),用贪心 + 冲突回退就能解决90%的场景:

def auto_schedule(class_groups, teachers, classrooms):
    result = {
   }
    # 按优先级排序:学员多的班级先排
    for group in sorted(class_groups, key=lambda g: -g.student_count):
        slot = find_first_available(group, teachers, classrooms)
        if slot:
            # 占用老师/教室的该时间片
            lock_resources(group, slot)
            result[group.id] = slot
        else:
            # 排不进:记入待人工处理队列
            pending.append(group)
    return result, pending
  • 先排难的:学员多、老师少的班级优先,容易冲突的先解决;
  • 偏好优先:家长偏好时段优先(周中晚上>周末白天),实在不行再降级;
  • 排不进的进人工队列:自动排课不要硬塞,把冲突的交给人,系统给提示。

三、冲突检测:区间重叠 + 三类资源约束

冲突检测是排课系统的核心,三个维度都要查:

  1. 老师冲突:同一老师同一时间片不能上两节课;
  2. 教室冲突:同一教室同一时间片不能排两班;
  3. 学员冲突:跨班学员(如两个班都报)时间片重叠。
# 区间重叠检测:两个时间片是否冲突
def is_overlap(slot_a, slot_b):
    # slot = (weekday, start_period, end_period)
    if slot_a[0] != slot_b[0]:   # 不同星期不冲突
        return False
    return not (slot_a[2] <= slot_b[1] or slot_b[2] <= slot_a[1])

# 检查老师时间片是否已被占用
def teacher_available(teacher, slot):
    for busy in teacher.busy_slots:
        if is_overlap(busy, slot):
            return False
    return True

检测时先查老师、再查教室、最后查学员——成本从低到高,快速排除。

四、调课事务:改一个时间片,不能留下半截状态

调课是排课系统事故高发区:改了老师时间、忘了改教室;改了这节课、下节课没顺延。调课必须做成事务:

def move_lesson(lesson_id, new_slot):
    with db.transaction():
        lesson = get_lesson(lesson_id)
        # 1. 校验新时间片老师/教室/学员都可用
        check_resources(lesson, new_slot)
        # 2. 释放旧时间片
        release(lesson.teacher_id, lesson.old_slot)
        release(lesson.classroom_id, lesson.old_slot)
        # 3. 占用新时间片
        lock(lesson.teacher_id, new_slot)
        lock(lesson.classroom_id, new_slot)
        # 4. 通知相关方(老师/学员/家长)
        notify(lesson, new_slot)

调课要先校验后变更、变更全部成功才提交、通知下游。中间任何一步失败都要回滚,否则就是"老师收到新时间、家长看到旧时间"的扯皮现场。

五、排课系统的辅助能力

主流程跑通后,还要有这些辅助功能才算完整:

  • 批量排课/复制课表:复制上周课表改一节课,别一节课一节课手动排;
  • 请假补课管理:学员请假后自动标记缺勤、生成补课申请;
  • 课消与课时统计:每节课自动消课,剩余课时实时可查(家长端能看到);
  • 考勤签到:扫码签到自动记出勤、关联消课;
  • 老师工资核算:按课时费+消课数据自动算老师提成。

注意事项

  1. 别用绝对时间排课:跨周/调休全乱,用"星期×时段"时间片。
  2. 别让学员跨班撞时间:跨班学员的冲突必须查,否则家长投诉。
  3. 调课别只改一半:老师/教室/学员三处必须同步改,用事务。
  4. 自动排课别硬塞:排不进的进人工队列,系统给冲突提示,别静默错排。

结语

培训排课系统从0到1,核心是资源模型建好、自动排课贪心够用、冲突检测三查、调课事务闭环。这套东西自己做要花不少时间,中小企业可以直接用成熟的零代码教务系统(比如乔拓云)做底座,把排课、消课、收费、家校沟通串起来,再在关键处自研扩展,是性价比最高的落地路径。

相关文章
|
云安全 安全 网络安全
|
7天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2008 1
|
14天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
3195 0
|
13天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2288 44
|
10天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1430 3
|
7天前
|
安全 应用服务中间件 Go
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
PHP2Shell 双 RCE 已遭在野利用:WordPress、Drupal 全在射程内,nginx 其实另有洞。拆成因与修复顺序
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
|
8天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
1737 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
|
6天前
|
人工智能 Linux API
Magpie, 轻量本地AI网关!免费Token用不完!
Magpie 是开源AI编程模型调度网关,上线一月获1.8万Star。它通过本地高性能网关统一托管多平台API密钥、账号与免费额度,实现跨Agent的模型秒级切换、静默额度轮换与资源复用,显著降低碎片化管理成本。(239字)
Magpie, 轻量本地AI网关!免费Token用不完!
|
6天前
|
安全 程序员 应用服务中间件
PHP 被曝两大致命漏洞,请所有程序员抓紧做这件事!
PHP 官方发布了紧急安全更新,一口气修复了两个严重漏洞。如果网站和服务器用了 PHP 应该怎么处理?漏洞的原理是什么?本文给你讲清楚
701 0