新增课程起止日期管理

This commit is contained in:
Certificate System
2026-08-13 14:39:44 +08:00
parent 2e1a639179
commit c9667d56fb
20 changed files with 313 additions and 33 deletions

View File

@@ -85,7 +85,7 @@
### C009 Excel 导入字段
- 决定:导入模板保留姓名、手机号、项目代码、发证日期。
- 决定:导入模板保留姓名、手机号、项目代码、课程开始日期、课程结束日期、发证日期。
- 原因:证书名称、课程名称、阶段名称、发证单位属于项目配置,不应该在每一行 Excel 里重复填写。
- 备注:导入备注字段一期移除;批量导入后的备注缺少明确展示和业务使用场景。
@@ -98,7 +98,7 @@
- Decision: keep `certificate-template-lab` as a standalone visual tuning page.
- Decision: production PDF rendering now uses the approved certificate image as the base layer, then renders learner/course/date/certificate number dynamically with Pillow.
- Current limitation: the data model only has `issue_date`; until separate training start/end dates are added, the rendered course date range uses `issue_date` for both start and end.
- Current behavior: the rendered course date range uses the separate course start/end dates; legacy certificates without them fall back to `issue_date`.
- Current limitation: mentor, issuer names, and QR area remain from the approved base image for visual consistency.
### C012 PDF 批量预生成
@@ -107,3 +107,10 @@
- 策略:预生成继续使用系统设置里的 `PDF 生成并发限制`,不单独开无限制后台任务。
- 原因:大批量学员毕业前先生成缓存,可以降低公开查询高峰的等待时间和 CPU 压力。
- 当前限制:任务进度保存在后端进程内,服务重启后只保留已生成的 PDF 缓存,不恢复历史进度。
### C013 课程起止日期独立建模
- 决定:证书增加“课程开始日期”和“课程结束日期”两个独立字段,不再用发证日期代替课程时间。
- 原因:课程学习周期与证书签发日期含义不同,拆分后可校验时间顺序,也便于后续按开班、结业周期统计。
- 导入约定:两个课程日期与发证日期均必填,模板统一推荐 `YYYY-MM-DD`,例如 `2026-06-01`;课程结束日期不得早于开始日期。
- 兼容策略:历史证书没有课程日期时,展示和 PDF 继续回退到发证日期,避免升级后旧证书无法查看或下载。

View File

@@ -38,6 +38,7 @@ docker compose exec backend python -m app.cli init-db --admin-username admin --a
- 发证单位名称已确认。
- 系统设置里的 `PDF 生成并发限制` 已确认2 核 4G 建议保持默认 `2`
- Excel 导入模板已下载并试填。
- 导入模板中的课程开始日期、课程结束日期和发证日期已统一使用 `YYYY-MM-DD`,例如 `2026-06-01`
- 占位证书模板已确认可临时使用。
- 大批量毕业前的操作约定已确认确认导入后先在“Excel 导入”或“证书管理”里批量预生成 PDF。
@@ -49,6 +50,8 @@ docker compose exec backend python -m app.cli init-db --admin-username admin --a
- 可上传 Excel 并确认导入。
- 已导入批次可以启动“预生成PDF”进度弹窗能显示总数、已完成、失败数和并发数。
- 证书管理页可按导入批次和 PDF 状态筛选,并能勾选多张证书批量预生成。
- 倒序的课程起止日期会在手工新增和 Excel 导入校验阶段被拦截。
- 新证书正文显示课程起止日期,底部发证日期仍显示证书签发日期。
- 可导出证书和直达链接。
- 公开查询支持两种方式:
- 证书编号查询:必须输入姓名和图形验证码。

View File

@@ -39,11 +39,8 @@
1. 姓名
2. 手机号
3. 项目代码
4. 证书名称
5. 课程名称
6. 阶段名称
7. 发证日期
8. 发证单位
9. 备注
4. 课程开始日期
5. 课程结束日期
6. 发证日期
证书编号不在 Excel 中填写,由系统确认导入后自动生成。
三个日期统一使用 `YYYY-MM-DD`,例如 `2026-06-01`,课程结束日期不得早于开始日期。证书名称、课程名称、阶段名称和发证单位从项目配置自动带出;证书编号由系统确认导入后自动生成。

View File

@@ -42,7 +42,7 @@ reset-local-data.bat
2. 进入“项目管理”,维护 `DBY``QSX` 等项目代码。项目支持搜索、修改、启用和停用。
3. 进入“学员管理”,手动新增、查询、修改或删除学员。
4. 进入“证书管理”手动新增证书支持单张预览、PDF 下载、作废、重置直达链接、按条件筛选、勾选后批量预生成 PDF 和导出。
5. 进入“Excel 导入”,下载模板、上传 Excel、查看校验结果确认后正式导入。模板需要填写姓名、手机号、项目代码、发证日期;证书名称、课程名称、阶段名称、发证单位从项目配置自动带出。
5. 进入“Excel 导入”,下载模板、上传 Excel、查看校验结果确认后正式导入。模板需要填写姓名、手机号、项目代码、课程开始日期、课程结束日期、发证日期;三个日期统一按 `YYYY-MM-DD` 填写,例如 `2026-06-01`证书名称、课程名称、阶段名称、发证单位从项目配置自动带出。
“确认导入”表示把已校验通过的临时数据正式写入学员和证书表。导入记录支持下载原文件、下载错误报告和删除;删除导入记录只删除上传文件、错误报告和批次记录,不删除已经生成的学员和证书。
确认导入后可以在该批次行点击“预生成PDF”系统会提前为这一批有效证书生成 PDF并在弹窗里显示总数、已完成、新生成、已缓存、跳过和失败数量。
6. 进入“系统设置”,确认 `PDF 生成并发限制`。2 核 4G 服务器建议保持默认值 `2`
@@ -143,7 +143,7 @@ docker compose exec backend pytest
- 学员手动新增、查询、修改、删除。
- 证书新增、查询、后台预览、后台下载、作废、重置直达链接。
- 证书按导入批次筛选、按 PDF 状态筛选、批量预生成 PDF。
- Excel 模板下载、上传校验、错误报告下载、确认导入。导入模板字段为姓名、手机号、项目代码、发证日期
- Excel 模板下载、上传校验、错误报告下载、确认导入。导入模板字段为姓名、手机号、项目代码、课程开始日期、课程结束日期、发证日期,并附有日期格式示例和填写说明
- 导入批次原文件下载和导入批次删除。
- 导入后自动生成证书编号、直达链接 token、二维码 token。
- 证书导出,包含证书编号和对外直达链接。

View File

@@ -529,12 +529,15 @@ https://你的域名/admin/login
姓名
手机号
项目代码
课程开始日期
课程结束日期
发证日期
```
检查:
- 能下载模板。
- 模板“填写说明”页包含 `YYYY-MM-DD` 示例,课程结束日期早于开始日期时校验失败。
- 能上传 Excel。
- 错误数据能生成错误报告。
- 校验通过后能确认导入。

View File

@@ -520,18 +520,21 @@ https://你的域名/admin/login
### 13.5 Excel 导入
确认模板字段只有
确认模板字段
```text
姓名
手机号
项目代码
课程开始日期
课程结束日期
发证日期
```
确认:
- 能上传 Excel。
- 模板“填写说明”页包含 `YYYY-MM-DD` 示例,课程结束日期早于开始日期时校验失败。
- 能下载原文件。
- 能删除导入批次。
- 能确认导入。