# 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.yaml` 的 `format_template` 生成编号: - `{prefix}` ← 年月前缀 - `{date}` ← 当前日期 - `{seq}` ← 序列号(基于 `auto_number` 表维护) 4. 编号写入 `sale_plan.product_code` CLI: ```bash 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`: ```yaml format_template: "{prefix}{date}{seq}" ``` 通过 `config/models.py:485` 的 `format_template` 字段定义,支持占位符 `{prefix}`、`{date}`、`{seq}`。 ## 6. 常见问题 - **编号重复**:检查 `auto_number` 表是否被破坏;或手动 `--reset` 序列 - **编号为空**:确认已执行自动/手动编号(合格证生成要求 `product_code` 非空,见 `cli/commands/print_cert.py:40`)