课堂直播系统 × OneBot QQ 整合 + 备课学情仪表盘
概述
本次迭代围绕课中互动 → 课后反馈 → 课前备课三个环节,打通了课堂直播系统与 OneBot QQ 机器人的消息推送,并新建了备课学情仪表盘与预习任务系统,形成”备课 → 上课 → 复盘”的完整闭环。
一、OneBot QQ × 课堂直播 整合
已实现功能
| 功能 | 触发时机 | 推送方式 |
|---|---|---|
| 🔔 未答题提醒 | 互动关闭时(手动/倒计时) | QQ 私聊未作答学生 + 群内汇总 |
| 📊 课堂总结 | 教师结束课堂 | 群消息(互动数/正确率/MVP/缺席名单)+ 私聊缺席学生 |
| 📢 开课通知 | 教师创建课堂 | 群消息(课堂码 + 加入方式) |
| 📖 预习任务推送 | 教师发布预习任务 | 群消息(主题 + 知识点) |
技术实现
新建 LiveNotificationService,注入已有的 OneBotHttpService(调 NapCat HTTP API)和 StudentQqBindingMapper(学号 → QQ 号映射),在以下切面织入:
1 | LiveSessionService.createSession() → notifySessionStart() |
所有 QQ 发送通过 WebClient.subscribe() 异步发出,不阻塞主流程。
二、备课学情仪表盘
数据聚合
PreLessonService 聚合四个维度数据:
| 维度 | 数据来源 |
|---|---|
| 作业概览 | DashboardService(均分/需关注学生数) |
| 课堂互动 | ClassroomSession + Interaction + InteractionResponse |
| 分层分组 | A层(80-100) / B层(60-79) / C层(<60) 人数 + AI 策略建议 |
| AI 备课建议 | 独立端点 GET /api/dashboard/pre-lesson/suggestion,手动触发 |
关键设计决策
- AI 建议独立端点:原来放在主接口里,OpenClaw 调用耗时 ~10 秒,超过 axios 默认 10s 超时导致前端白屏。拆分为独立端点后,主数据秒返,AI 建议异步加载。
- 手动触发:不自动调用 AI,老师点击”🔄 AI 深度分析”按钮才发起请求,避免每次切页面浪费 token。
三、预习任务推送
数据模型
新建 preview_task 表,字段设计:
1 | CREATE TABLE preview_task ( |
生成流程
1 | 教师输入知识点 → Prompt 工程 → OpenClaw 生成: |
学生端页面
公开路由 /preview/:taskId,无需登录。交互设计:
- 导读区:Markdown 渲染
- 自测区:选择题点击选项即显示正误 + 解析;简答题直接展示参考答案
- 讨论区:课堂讨论题(带思考提示)
四、备课页面功能补全
教学进度时间线
聚合三表数据按时间倒序展示:
| 数据源 | 图标 |
|---|---|
classroom_session |
🎓 课堂互动 |
homework_task |
📝 作业 |
preview_task |
📖 预习任务 |
新增端点 GET /api/dashboard/timeline?classId=&limit=15,前端以竖线时间线组件展示。
一键教案大纲
复用已有的 POST /api/dashboard/teaching-plan/generate 端点(之前只有后端无前端),在备课页增加入口:
1 | 点击"📝 生成教案" → 勾选目标 → 自动取薄弱知识点 → 生成 → 弹窗展示 + 📋 复制 |
五、文件清单
新增文件(11 个)
| 文件 | 说明 |
|---|---|
live/service/LiveNotificationService.java |
OneBot 通知服务 |
Service/PreLessonService.java |
备课学情接口 |
Service/ServiceImpl/PreLessonServiceImpl.java |
备课学情实现 |
Service/TimelineService.java |
时间线接口 |
Service/ServiceImpl/TimelineServiceImpl.java |
时间线实现 |
Entity/PreviewTask.java |
预习任务实体 |
DTO/PreLessonDTO.java |
备课学情 DTO |
DTO/PreviewTaskDTO.java |
预习任务 DTO |
DTO/CreatePreviewRequest.java |
创建预习请求 DTO |
DTO/TimelineDTO.java |
时间线 DTO |
mapper/PreviewTaskMapper.java |
预习任务 Mapper |
Controller/PreviewTaskController.java |
预习任务控制器 |
db/migration/V4__preview_task.sql |
预习任务表迁移 |
vue-project/src/views/teacher/PreLessonDashboard.vue |
备课仪表盘页面 |
vue-project/src/views/teacher/PreviewTaskCreate.vue |
预习任务创建页 |
vue-project/src/views/PreviewTaskView.vue |
学生预习查看页 |
vue-project/src/api/preview.ts |
预习任务 API |
修改文件(5 个)
| 文件 | 改动 |
|---|---|
InteractionService.java |
关闭互动后调用 notifyUnanswered() |
LiveSessionService.java |
创建/结束时调用通知 |
DashboardController.java |
新增 pre-lesson / timeline / suggestion 端点 |
SecurityConfig.java |
/api/preview/** 加入公开路径 |
vue-project/src/App.vue |
侧边栏新增”备课仪表盘”入口 |
vue-project/src/router/index.ts |
新增 3 条路由 |
vue-project/src/api/dashboard.ts |
新增 pre-lesson / timeline / suggestion API |
六、架构总览
1 | ┌──────────────────────┐ |
从”备课 → 上课 → 复盘”,每个环节都有数据支撑和自动化推送。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LKL-ZREO!
评论







