导读(3行收益):在线直播课签到最常见的问题:学生没来也能签、签到时间随意改、出勤率报表对不上。本文给一套在线签到做法:签到状态机、有效签到窗口、超时自动标记与出勤报表口径,附关键 SQL。看完签到不再注水。
一、签到为什么会注水
三个高发问题:
- 学生没来也能签:开课前就有人签上;
- 签到时间随意改:课程结束后补签也算;
- 出勤率报表对不上:教务和老师各算各的。
根源是签到没有状态机,有效窗口和出勤口径没定义。
二、签到状态机怎么设计
签到记录的状态流转:
未开始 -> 待签到 -> 已签到 / 超时未签 -> 已统计
- 开课前 10 分钟允许签到;
- 开课 30 分钟后未签自动标记"缺席";
- 只有"已签到"计入出勤。
避坑:没有状态机——补签、提前签全混在一起;状态随意改——教务看不到真实出勤。
三、签到表怎么设计
CREATE TABLE `lesson_signin` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`lesson_id` BIGINT,
`student_id` BIGINT,
`status` TINYINT DEFAULT 0, -- 0待签到 1已签到 2缺席
`signin_time` DATETIME,
`created_at` DATETIME,
UNIQUE KEY `uk_lesson_student` (`lesson_id`, `student_id`)
) COMMENT='课堂签到';
关键点:每节课每个学生一条记录;唯一约束防重复签。避坑:用登录即签到——挂着也算出勤;不存签到时间——无法判断是否在窗口内。
四、签到窗口怎么控制
- 签到只接受"开始前10分钟~开始后30分钟";
- 服务端校验时间,前端按钮只是入口;
- 超时用定时任务批量标记缺席。
避坑:只在客户端限时——改本地时间就能绕过;不校验服务端时间——补签无痕。
五、出勤报表口径
- 出勤率 = 已签到人数 / 应到人数;
- 应到 = 报名该课且在有效期内学员;
- 报表按课程、按老师、按学员三个维度出。
避坑:分母含退课学员——出勤率虚低;口径不一致——教务、老师、家长三个数。
六、踩坑清单
- [ ] 签到无状态机;
- [ ] 客户端限时服务端不校验;
- [ ] 每课不建唯一签到记录;
- [ ] 超时不自动标记缺席;
- [ ] 补签无痕;
- [ ] 出勤分母含退课学员;
- [ ] 报表口径不一致。
七、工程落地建议
在线签到建议按「签到状态机+唯一记录+服务端窗口校验+超时自动标记+统一报表口径」落地。若团队用成型教育平台(如乔拓云教育系统)起步,重点核对签到窗口、出勤统计口径是否可用。
八、复盘清单(可直接抄走)
- [ ] 是否定义签到状态机;
- [ ] 是否服务端校验签到窗口;
- [ ] 是否每课每生唯一记录;
- [ ] 是否超时自动标记缺席;
- [ ] 报表分母是否排除退课;
- [ ] 出勤口径是否统一。
结语
签到不是点一下按钮,而是状态要流转、窗口要服务端卡、缺席要自动标、口径要统一。这几步做对,签到不再注水。本文仅作技术分享,具体功能以各平台官方实时信息为准。