04c 编号流程

状态:✅ 已实现 | ⚙️ 配置驱动

1. 操作入口

方式

入口

GUI

查询页工具栏「自动编号」/「手动编号」/「设置年月」

CLI

certflow auto-number [options]

编号是合格证生成的前提(合格证要求 product_code 非空)。

2. 涉及配置

配置文件

关键字段

说明

config/numbering.yaml

format_template

编号格式({prefix}{date}{seq}

config/sales_plan.yaml

编号字段

目标字段定义

3. 涉及代码文件

文件

职责

View

views/query_view.py

工具栏按钮 → action

Controller

通过 action 派发

-

Service

services/cert_numbering.py

自动编号算法

Service

services/cert_numbering_policy.py

编号策略

Service

services/certificate_number_service.py

合格证编号服务

Model

models/auto_number.py

编号状态表

4. 逐步流程

4.1 设置年月前缀

  1. 工具栏「设置年月」→ action set_year_month_set_year_month

  2. 弹窗输入年月(如 202608

  3. 后续编号将使用此前缀

4.2 自动编号

  1. 选择待编号记录(或多选)

  2. 工具栏「自动编号」→ action auto_number_auto_number

  3. CertNumbering 服务按 numbering.yamlformat_template 生成编号:

    • {prefix} ← 年月前缀

    • {date} ← 当前日期

    • {seq} ← 序列号(基于 auto_number 表维护)

  4. 编号写入 sale_plan.product_code

CLI:

certflow auto-number --month 202608 --prefix CF

4.3 手动编号

  1. 右键菜单「手动编号」→ action manual_number_manual_number

  2. 弹窗输入自定义编号

  3. 写入 product_code

4.4 编号复制

  1. 右键菜单「复制编号」→ action copy_number_copy_number

  2. 将选中记录的编号复制到剪贴板(或批量复制到相邻列)

5. 编号格式模板

config/numbering.yaml

format_template: "{prefix}{date}{seq}"

通过 config/models.py:485format_template 字段定义,支持占位符 {prefix}{date}{seq}

6. 常见问题

  • 编号重复:检查 auto_number 表是否被破坏;或手动 --reset 序列

  • 编号为空:确认已执行自动/手动编号(合格证生成要求 product_code 非空,见 cli/commands/print_cert.py:40