certflow.controllers.scan_controller module¶
扫描件控制器 - UI 交互层
提供扫描件生成的异步控制,封装 ScanWorker 线程和信号机制。 通过信号槽实现非阻塞扫描件生成。
- class certflow.controllers.scan_controller.ScanWorker(service, params)[源代码]¶
基类:
QThread扫描件生成工作线程
- 参数:
service (ScanService)
- progress¶
- finished¶
- error¶
- staticMetaObject = PySide6.QtCore.QMetaObject("ScanWorker" inherits "QThread": Methods: #12 type=Signal, signature=progress(int,int,QString), parameters=int, int, QString #13 type=Signal, signature=finished(QVariantMap), parameters=QVariantMap #14 type=Signal, signature=error(QString), parameters=QString )¶
- class certflow.controllers.scan_controller.ScanController(session=None, db_manager=None)[源代码]¶
基类:
QObject扫描件控制器
管理扫描件生成任务,通过信号槽实现 UI 与业务逻辑的解耦。
- Signals:
progress: 进度信号 (current, total, message) completed: 完成信号 (result: dict) error: 错误信号 (error_message: str)
- 参数:
session (Any)
db_manager (Any)
- progress¶
- completed¶
- error¶
- strip_unit(pn_display)[源代码]¶
从展示用压力串拆出
(数值, 单位)收口
ScanView原先直连PNService.strip_unit的静态调用, 使压力单位解析逻辑的唯一入口收敛到 Controller 层。
- static scan_required_fields(family, base)[源代码]¶
按语言族计算扫描必填字段(委托
output_guard.scan_required_fields_for)。
- static family_requires_pn_unit(family)[源代码]¶
判断语言族是否要求压力单位(委托
output_guard.family_requires_pn_unit)。
- static load_dual_defaults(session, sale_plan_id)[源代码]¶
读取关联 SalePlan 的 SN/KKS 基准值(委托
SalePlanService.find_by_id)。查询失败或不存在时返回空串字典,不影响基础字段。
- build_cert_data(cert, template_type, serial_number=None, overrides=None, dual_code=False)[源代码]¶
构建单台合格证字段数据(委托
ScanService._build_cert_data)。
- render_preview_png(cert, template_type, width_mm, height_mm, serial_number=None, overrides=None, dual_code=False)[源代码]¶
渲染扫描件预览并返回 PNG 字节流(框架无关,不含 PySide6)。
收口 ScanView 原先对
ScanService``(坐标/数据)与 ``ScanImageHandler(画布/绘制)的直连:预览 == 产出,统一经 Controller 管道。
- generate_scans(certificate_ids, output_dir, template_type='全中文', output_format='JPG', rows=1, cols=1, paper_width_mm=60, paper_height_mm=100, data_overrides=None, dual_code=False)[源代码]¶
异步生成扫描件
- 参数:
- 返回:
任务 ID
- 返回类型:
示例
>>> controller = ScanController(session) >>> from certflow.config.paths_override import cfg >>> task_id = controller.generate_scans([1, 2, 3], cfg("paths.output.scans", "output/scans"), "全中文") >>> print(task_id)
- staticMetaObject = PySide6.QtCore.QMetaObject("ScanController" inherits "QObject": Methods: #4 type=Signal, signature=progress(int,int,QString), parameters=int, int, QString #5 type=Signal, signature=completed(QVariantMap), parameters=QVariantMap #6 type=Signal, signature=error(QString), parameters=QString )¶