Table of Contents

课外课课时管理 H5 · 冷启动文件

入口:`https://rd.huiflytech.com/extracur/`(与研发任务/测试/库房/评审会/家庭同一 Flask 服务 `rd-h5.service :13544`)
代码:`/home/ubuntu/.hermes/scripts/extracur.html` + `extracur_api.py`(Blueprint `bp`,必须 `@bp.route`)
数据:`/home/ubuntu/docs/extracur/extracur.db`
页面已设 `Cache-Control: no-store`(2026-09 起)

1. 数据表

表 说明
——
`courses` 课程:`name/price/total_hours/per_hours/mode/weekdays/start_time/end_time/first_date/members/note/archived/slots`
`records` 上课记录:`course_id/date/weekday/status(已上课/未上课)/note/auto`
`leaves` 请假:`course_id/date/weekday/note`
`makes` 补课
`holidays` 放假区间:`course_id/start_date/end_date`

- `weekdays` / `slots[].wd` 用 0=周一 编号(`wd=3` → 星期四,`wd=6` → 星期日) - `slots` 多时段:`[{wd:[3], st:“17:30”, et:“19:30”, per:2, who:“席子恩”}, …]`

2. 两种模式

mode 含义
——
1 请假需补课(请假也占课时,显示“未上课”)
2 请假不记课时,结束日期顺延

3. 课时扣减规则(★2026-10-23 变更)

_old:每天只取【第一个匹配时段】的 per
_new:当天【所有匹配时段的 per 累加】

实现位置:`extracur_api.py` → `_course_stats()` → `per_of(dstr)`

为什么改:街舞课周四有两个孩子的时段(小恩 2 课时 + 小初 0.5 课时),按旧逻辑只扣 2,实际应扣 2.5。

4. 当前课程清单(2026-10-23)

# 课程 总课时 时段(每次课时) 已用 剩余 预计结束
———————
1 瑞思英语K3(小恩) 144 周二/周五 2 66 78 2027-03-10
2 瑞思英语K1(小初) 60 周二/周五 2 36 24 2026-12-05
3 街舞课(共用) 85 周四 小恩 2 + 小初 0.5(=2.5);周日 小初 1 19 66 2027-03-04
4 围棋课(一同弈童) 100 周五 3 75 25 2026-12-25
5 声乐课(一鸣音乐) 50 周日 1 11 39 2027-07-18
6 古筝课(百家筝鸣) 24 周六 1 15 9 2026-12-26

5. 街舞课上课记录(截至 2026-10-23,共 10 次,无请假)

日期 星期 扣课时
———
2026-09-03 星期四 2.5
2026-09-10 星期四 2.5
2026-09-13 星期日 1.0
2026-09-17 星期四 2.5
2026-09-20 星期日 1.0
2026-09-24 星期四 2.5
2026-10-11 星期日 1.0
2026-10-15 星期四 2.5
2026-10-18 星期日 1.0
2026-10-22 星期四 2.5
合计 周四6×2.5 + 周日4×1 19 课时
放假 2026-09-25 ~ 10-08 期间无记录(符合设定)

6. 自动记录

`cron` 自动按各时段的星期生成“已上课”记录,跳过放假区间;请假(`leaves`)在 mode=2 下不划扣。

7. 常见操作

- 改课时/时段:页面课程卡 → 编辑 → 「上课时段(可添加多个)」逐条设置 星期/时间/每次课时/使用人 - 请假:课程卡 → 请假(mode=2 当天不划扣) - 放假:设置区间,自动跳过 - 改完前端/后端:`sudo systemctl restart rd-h5.service`;页面加 `?v=N` 强刷