certflow.services.certificate_service module¶
证书服务模块
提供合格证的查询、创建、更新和删除等业务服务。
- class certflow.services.certificate_service.CertificateService(session)[源代码]¶
基类:
object证书服务类
提供合格证数据的CRUD操作服务,供控制器层调用。 封装业务逻辑,协调数据访问层完成各类证书操作。
- 参数:
session (Session)
- _session¶
数据库会话对象(当前为占位,实际实现时需注入)
示例
>>> service = CertificateService() >>> # 创建证书 >>> cert = service.create_certificate({ ... "certificate_no": "CERT-20231201-0001", ... "product_model": "阀门A", ... "customer": "某某公司" ... }) >>> print(cert.get("success")) True >>> >>> # 查询证书 >>> cert_info = service.get_certificate(1) >>> if cert_info: ... print(f"证书编号: {cert_info['certificate_no']}")
- static generate_certificate_no(prefix='CERT', sequence=None)[源代码]¶
生成合格证编号
生成格式为 PREFIX-YYYYMMDD-NNNN 的合格证编号,序号部分自动补零至4位。
- get_certificate_by_sale_plan_id(sale_plan_id)[源代码]¶
根据销售计划 ID 查询已存在的合格证
- 参数:
sale_plan_id (int) -- 销售计划 ID
- 返回:
合格证对象,未找到返回 None
- 返回类型:
Certificate | None
- get_sale_plan_by_id(sale_plan_id)[源代码]¶
根据 ID 查询销售计划
- 参数:
sale_plan_id (int) -- 销售计划 ID
- 返回:
销售计划对象,未找到返回 None
- 返回类型:
SalePlan | None
- CERT_EDITABLE_FIELDS: tuple[str, ...] = ('product_name', 'product_model', 'product_spec', 'customer', 'project_name', 'test_standard', 'supplier', 'issue_date', 'working_temp', 'working_medium', 'remarks', 'pn_display', 'inspector_id', 'template_type')¶
- FORM_TO_CERT_MAP: dict[str, str] = {'check_standard': 'test_standard', 'dn': 'product_spec', 'inspector_id': 'inspector_id', 'manufacture_date': 'issue_date', 'medium': 'working_medium', 'pn': 'pn_display', 'product_model': 'product_model', 'product_name': 'product_name', 'temperature': 'working_temp', 'template_type': 'template_type'}¶
- CERT_TO_SALEPLAN_CERT_MAP: dict[str, str] = {'product_model': 'cert_product_model', 'product_name': 'cert_product_name', 'product_spec': 'cert_product_spec'}¶
- update_fields(cert_id, fields)[源代码]¶
仅更新合格证记录的白名单字段(订正合格证记录)
与
SalePlanService.update_cert_fields对称:只写允许订正的打印字段, 非白名单字段被静默忽略,绝不触动编号/状态等系统字段。certificate_no是唯一键,不在白名单内,避免误改导致唯一约束冲突。
- correct_print_fields(cert_id, sale_plan_id, fields)[源代码]¶
回源改正(蓝图 §10.7 / §10.8-6):白名单写 Certificate 打印层 + SalePlan 合格证覆盖层(cert_*) 同步,并对型号/压力/标准自学习字典。
表单键(dn/pn/…) 归一化为 Certificate 列(product_spec/pn_display/…);
产品名称/型号/规格同时落到 SalePlan.cert_product_* 覆盖层,两层副本一致;
绝不写 SalePlan.product_name/model/spec 合同层(参与导入唯一键);
压力/温度/介质/标准额外自学习 ModelParamMapping / CaliberMapping。
- get_certificate_by_unique_key(unique_key)[源代码]¶
根据唯一键查询合格证(取最新一条)
- 参数:
unique_key (str) -- 合格证唯一键
- 返回:
合格证对象,未找到返回 None
- 返回类型:
Certificate | None
- merge_certificate(certificate)[源代码]¶
合并更新合格证(用于 force_regenerate 场景)
- 参数:
certificate (Certificate) -- 合格证对象
- 返回类型:
None
- get_certificate(cert_id)[源代码]¶
获取证书信息
根据证书ID查询并返回证书详细信息。
- 参数:
cert_id (int) -- 证书的唯一标识ID
- 返回:
证书信息字典,包含以下字段:
id: 证书ID
certificate_no: 合格证编号
product_model: 产品型号
order_no: 订单号
customer: 客户名称
status: 合格证状态
print_time: 打印时间
is_engraved: 是否已刻印
未找到时返回 None。
- 返回类型:
Optional[Dict[str, Any]]
示例
>>> service = CertificateService() >>> cert = service.get_certificate(100) >>> if cert: ... print(f"编号: {cert['certificate_no']}, 状态: {cert['status']}")
- create_certificate(data)[源代码]¶
创建证书
根据提供的数据创建新的证书记录。
- 参数:
data (dict[str, Any]) -- 证书数据字典,应包含以下字段: - certificate_no: 合格证编号(必填) - sale_plan_id: 关联销售计划ID(必填) - unique_key: 唯一键(必填) - product_model: 产品型号 - order_no: 订单号 - customer: 客户名称 - status: 合格证状态,默认为"待打印"
- 返回:
- 创建结果字典,包含以下字段:
success: 是否成功(布尔值)
message: 结果消息
certificate_id: 成功时返回新创建的证书ID
error: 失败时返回错误信息
- 返回类型:
Dict[str, Any]
示例
>>> service = CertificateService() >>> result = service.create_certificate({ ... "certificate_no": "CERT-20231201-0001", ... "sale_plan_id": 100, ... "unique_key": "abc123", ... "product_model": "阀门A", ... "customer": "某某公司" ... }) >>> if result["success"]: ... print(f"证书创建成功,ID: {result['certificate_id']}") ... else: ... print(f"创建失败: {result['error']}")
- update_certificate(cert_id, data)[源代码]¶
更新证书
根据证书ID更新证书的指定字段。
- 参数:
- 返回:
- 更新结果字典,包含以下字段:
success: 是否成功(布尔值)
message: 结果消息
error: 失败时返回错误信息
- 返回类型:
Dict[str, Any]
示例
>>> service = CertificateService() >>> result = service.update_certificate(100, { ... "status": "已打印", ... "print_time": "2024-01-15 10:30:00" ... }) >>> if result["success"]: ... print("证书更新成功")
- delete_certificate(cert_id)[源代码]¶
删除证书
根据证书ID删除对应的证书记录。
- 参数:
cert_id (int) -- 证书的唯一标识ID
- 返回:
- 删除结果字典,包含以下字段:
success: 是否成功(布尔值)
message: 结果消息
error: 失败时返回错误信息
- 返回类型:
Dict[str, Any]
示例
>>> service = CertificateService() >>> result = service.delete_certificate(100) >>> if result["success"]: ... print("证书删除成功") ... else: ... print(f"删除失败: {result['error']}")