certflow.services.cert_numbering module

合格证编号与数据生成服务

负责编号模式(自动/手动/复制)和 Certificate 表写入。

class certflow.services.cert_numbering.CertNumberingService(session)[源代码]

基类:object

合格证编号与 Certificate 写入服务

提供三种编号模式 + Certificate 表写入 + Access/CSV 导出。

编号模式
  • auto_number: 自动编号(正则解析 production_order_no / supply_type,最常用)

  • manual_number: 手动指定前缀和起始序号

  • copy_number: 复制已有编号(单件直接复制)

持久化
  • create_certificates: 将已编号的 SalePlan 写入 Certificate 表

  • export_to_access: 导出到 Access 数据库

  • export_sign_tb_csv: 导出 CSV

参数:

session (Session)

auto_number(ids, prefix_override=None)[源代码]

自动编号(正则解析 production_order_no / supply_type,最常用)

根据生产令号和供货类型自动判定后缀(L/B/G/Y/XL), 按 sort_group 排序后依次编号,同一批次序列号连续递增。

参数:
  • ids (list[int]) -- 需要编号的 SalePlan ID 列表

  • prefix_override (str | None) -- 手动指定的年月前缀(格式 YYMM),为 None 则使用当前年月

返回:

成功编号的记录数

返回类型:

int

manual_number(ids, prefix, start, quantity, suffix='')[源代码]

手动编号

手动指定编号前缀、起始序号和数量后缀,为选中的记录生成编号。 只对尚未编号的记录(product_code 为空)进行操作。

参数:
  • ids (list[int]) -- 需要编号的 SalePlan ID 列表

  • prefix (str) -- 编号前缀(如 "V2506")

  • start (int) -- 起始序列号

  • quantity (int) -- 每台设备的数量

  • suffix (str) -- 编号后缀(如 "Y"、"L"),默认为空

返回:

成功编号的记录数

返回类型:

int

copy_number(ids, source_code)[源代码]

复制编号(单件直接复制)

将指定编号直接复制给选中的所有记录,适用于同一产品重复使用的场景。

参数:
  • ids (list[int]) -- 需要编号的 SalePlan ID 列表

  • source_code (str) -- 要复制的编号字符串

返回:

成功编号的记录数

返回类型:

int

create_certificates(ids, printer_name='', print_status='已打印')[源代码]

将已编号的记录写入 Certificate 表

从 SalePlan 表中读取已编号记录,创建对应的 Certificate 记录。 会自动合并 cert_product_name/model/spec 字段(优先使用 cert_ 前缀字段,回退到原始字段)。 同时从产品型号解析公称压力(PN)信息,并标准化口径(DN)。

certificate.numbering.timing == "on_import" 时,先对未编号记录 自动编号(步骤 6.1),使写入 Certificate 即带编号。certificate_no 由组A 服务 generate_certificate_no 生成合格证号 CERT-YYYYMMDD-NNNN``(逐台一个 id,G1);产品编号区间串逐台拆填写入 ``Certificate.product_code_range``(G2)。默认 ``on_demand 保持现状 (仅收已编号记录)。

合格证按「实际发货台数」逐台生成(BUG-006:合格证数量 = 发货台数总和, 而非销售计划记录数)。一个 SalePlan 的 product_code 区间串会展开为 多台 Certificate,每台独立 product_code_range / certificate_no / 审计字段(G5)。

参数:
  • ids (list[int]) -- 已编号的 SalePlan ID 列表

  • printer_name (str) -- 打印机名称,默认为空

  • print_status (str) -- 打印状态,默认"已打印",查询页自动编号时传"待打印"

返回:

成功创建的 Certificate 记录数

返回类型:

int

export_to_access(ids, mdb_path=None)[源代码]

导出到 Access 数据库(委托 CertExportService)

参数:
  • ids (list[int]) -- Certificate.id 列表

  • mdb_path (str | None) -- 目标 .mdb 文件路径,None 则使用默认路径

返回:

成功导出的记录数

返回类型:

int

export_sign_tb_csv(output_path=None, limit=1000)[源代码]

导出 CSV(委托 CertExportService)

参数:
  • output_path (str | None) -- 输出 CSV 文件路径,None 则使用默认路径

  • limit (int) -- 最大导出条数

返回:

生成的 CSV 文件路径;失败返回 None

返回类型:

str | None