新增PDF批量预生成

This commit is contained in:
2026-06-23 13:59:56 +08:00
parent b6be8b4593
commit 4742c175c3
18 changed files with 725 additions and 24 deletions

View File

@@ -100,3 +100,10 @@
- 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 limitation: mentor, issuer names, and QR area remain from the approved base image for visual consistency.
### C012 PDF 批量预生成
- 决定:后台提供批量预生成 PDF 能力,可按导入批次生成,也可在证书管理中筛选和勾选后生成。
- 策略:预生成继续使用系统设置里的 `PDF 生成并发限制`,不单独开无限制后台任务。
- 原因:大批量学员毕业前先生成缓存,可以降低公开查询高峰的等待时间和 CPU 压力。
- 当前限制:任务进度保存在后端进程内,服务重启后只保留已生成的 PDF 缓存,不恢复历史进度。

View File

@@ -39,6 +39,7 @@ docker compose exec backend python -m app.cli init-db --admin-username admin --a
- 系统设置里的 `PDF 生成并发限制` 已确认2 核 4G 建议保持默认 `2`
- Excel 导入模板已下载并试填。
- 占位证书模板已确认可临时使用。
- 大批量毕业前的操作约定已确认确认导入后先在“Excel 导入”或“证书管理”里批量预生成 PDF。
## 验收动作
@@ -46,6 +47,8 @@ docker compose exec backend python -m app.cli init-db --admin-username admin --a
- 可新增学员。
- 可新增证书并生成编号。
- 可上传 Excel 并确认导入。
- 已导入批次可以启动“预生成PDF”进度弹窗能显示总数、已完成、失败数和并发数。
- 证书管理页可按导入批次和 PDF 状态筛选,并能勾选多张证书批量预生成。
- 可导出证书和直达链接。
- 公开查询支持两种方式:
- 证书编号查询:必须输入姓名和图形验证码。

View File

@@ -41,9 +41,10 @@ reset-local-data.bat
1. 登录 `/admin/login`
2. 进入“项目管理”,维护 `DBY``QSX` 等项目代码。项目支持搜索、修改、启用和停用。
3. 进入“学员管理”,手动新增、查询、修改或删除学员。
4. 进入“证书管理”手动新增证书支持单张预览、PDF 下载、作废、重置直达链接和导出。
4. 进入“证书管理”手动新增证书支持单张预览、PDF 下载、作废、重置直达链接、按条件筛选、勾选后批量预生成 PDF 和导出。
5. 进入“Excel 导入”,下载模板、上传 Excel、查看校验结果确认后正式导入。模板只需要填写姓名、手机号、项目代码、发证日期证书名称、课程名称、阶段名称、发证单位从项目配置自动带出。
“确认导入”表示把已校验通过的临时数据正式写入学员和证书表。导入记录支持下载原文件、下载错误报告和删除;删除导入记录只删除上传文件、错误报告和批次记录,不删除已经生成的学员和证书。
确认导入后可以在该批次行点击“预生成PDF”系统会提前为这一批有效证书生成 PDF并在弹窗里显示总数、已完成、新生成、已缓存、跳过和失败数量。
6. 进入“系统设置”,确认 `PDF 生成并发限制`。2 核 4G 服务器建议保持默认值 `2`
7. 进入“操作日志”,查看关键后台操作。日志动作已转成中文显示。
@@ -65,6 +66,13 @@ PDF 由服务端按需生成,并使用 30 天缓存。这样可以保证模板
首次生成 PDF 会占用 CPU。后台“系统设置”里的 `PDF 生成并发限制` 默认是 `2`,用于防止多人同时首次下载 PDF 时把 2 核 4G 服务器打满。前端下载和预览时会显示“当前查询人数较多,请稍后。。。”,避免用户误以为页面卡死。
如果一次性导入大量毕业学员,建议管理员先做批量预生成:
1. 进入“Excel 导入”找到已确认导入的批次点击“预生成PDF”。
2. 或进入“证书管理”按导入批次、PDF 状态、项目或关键词筛选勾选需要提前生成的人再点击“预生成所选PDF”。
3. 批量预生成会继续遵守 `PDF 生成并发限制`,不会绕过系统并发保护。
4. 预生成任务只在当前后端进程内记录进度;如果服务重启,已生成的 PDF 缓存仍然保留,但任务进度弹窗不会恢复。
## 正式部署准备
- Linux 服务器,建议 2 核 4G 起步。
@@ -134,6 +142,7 @@ docker compose exec backend pytest
- 项目新增、搜索、修改、启用、停用。
- 学员手动新增、查询、修改、删除。
- 证书新增、查询、后台预览、后台下载、作废、重置直达链接。
- 证书按导入批次筛选、按 PDF 状态筛选、批量预生成 PDF。
- Excel 模板下载、上传校验、错误报告下载、确认导入。导入模板字段为姓名、手机号、项目代码、发证日期。
- 导入批次原文件下载和导入批次删除。
- 导入后自动生成证书编号、直达链接 token、二维码 token。

View File

@@ -516,6 +516,7 @@ https://你的域名/admin/login
- 证书编号自动生成。
- 能预览证书。
- 能下载 PDF。
- 能按导入批次或 PDF 状态筛选证书,并勾选多张证书批量预生成 PDF。
- PDF 底图、姓名、日期、课程、导师、二维码清晰。
- 作废证书后不能下载正常 PDF。
- 重置链接后旧链接失效。
@@ -538,6 +539,7 @@ https://你的域名/admin/login
- 错误数据能生成错误报告。
- 校验通过后能确认导入。
- 确认导入后能生成学员和证书。
- 已导入批次能点击“预生成PDF”进度弹窗显示总数、已完成和失败数。
- 能下载导入原文件。
### 9.6 公开查询

View File

@@ -513,6 +513,7 @@ https://你的域名/admin/login
- 证书名称使用项目名称。
- 能预览证书。
- 能下载 PDF。
- 能按导入批次或 PDF 状态筛选证书,并勾选多张证书批量预生成 PDF。
- 证书日期、课程标题、导师、二维码显示正常。
- 能作废证书。
- 作废证书不能下载正常 PDF。
@@ -536,6 +537,7 @@ https://你的域名/admin/login
- 能确认导入。
- 确认导入后状态变成已导入。
- 不能重复确认导入。
- 已导入批次能点击“预生成PDF”进度弹窗显示总数、已完成和失败数。
### 13.6 公开查询