04d 合格证生成与打印流程

状态:✅ 已实现

1. 操作入口

方式

入口

GUI

查询页「打印」/「预览」→ PrintView / PrintDialog

CLI

certflow print-cert [options]

2. 涉及配置

配置文件

关键字段

说明

config/certificate.yaml

合格证模板字段

合格证的字段映射

config/print.yaml

打印参数

份数/方向/页边距

config/printer.yaml

打印机配置

默认打印机选择

config/templates/

模板文件

合格证 PDF 模板

config/colors.yaml

颜色

预览渲染

3. 涉及代码文件

文件

职责

View

views/print_view.py

打印页面

View

views/print_dialog.py

打印参数对话框

View

views/certificate_preview_painter.py

合格证预览渲染

Controller

controllers/print_queue_controller.py

打印队列

Controller

controllers/printer_controller.py

打印机管理

Service

services/certificate_service.py

合格证记录生成

Service

services/certificate_number_service.py

合格证编号

Service

services/certificate_print_service.py

打印编排

Service

services/cert_print_engine.py

PDF 渲染引擎(reportlab)

Service

services/printer_manager.py

系统打印机管理

Service

services/print_history_service.py

打印历史

Service

services/dn_service.py

DN 口径计算

Service

services/pn_service.py

PN 压力计算

Service

services/dual_code.py

双码计算

Service

services/pressure_calc_service.py

压力计算

Model

models/certificate.py

合格证表

Model

models/print_job.py

打印任务表

Model

models/print_log.py

打印日志表

4. 逐步流程

4.1 生成合格证

  1. 在查询页选择已编号记录(product_code 非空)

  2. action print_certificates_print_certificates

  3. CertificateService 将记录写入 certificate 表(含 DN/PN 双码计算)

  4. CLI 等价命令:

    certflow print-cert --filter "product_code not null and cert_done=0"
    

4.2 预览

  1. 右键「预览」→ action preview_certificate_preview_certificate

  2. CertificatePreviewPainter 渲染 PDF 预览(PySide6 绘制)

  3. 确认无误后进入打印

4.3 打印

  1. 工具栏「打印」→ PrintView / PrintDialog

  2. 选择打印机(PrinterController + PrinterManager 枚举系统打印机)

  3. 设置参数(份数/方向,来自 print.yaml

  4. CertificatePrintServiceCertPrintEngine(reportlab 生成 PDF)→ 提交系统打印队列

  5. PrintJob / PrintLog 记录任务与结果

  6. PrintHistoryService 追加到打印历史

4.4 双码计算

合格证中 DN(公称通径)与 PN(公称压力)经 dn_servicepn_servicedual_codepressure_calc_service 计算,依赖基础字典中的口径映射与型号参数映射。

5. 打印历史

04i-history-archive.md

6. 常见问题

  • 预览空白:检查 certificate.yaml 字段映射是否覆盖所选记录

  • 打印卡住:检查系统打印机状态;printer.yaml 中的默认打印机是否在线

  • 双码为 0:检查基础字典「口径映射」「型号参数映射」是否配置该型号