certflow.services.certificate_number_service module¶
合格证自动编号服务(配置驱动)
后缀判定规则从 config.yaml → numbering.suffix_rules 读取, 可在不修改代码的情况下添加/修改后缀规则。
- class certflow.services.certificate_number_service.CertificateNumberService(prefix_override=None)[源代码]¶
基类:
object合格证自动编号服务(配置驱动)
后缀判定规则按 numbering.suffix_rules 顺序匹配,命中即返回。
编号格式:V{YYMM}{起始序号:03d}{后缀}-{结束序号:03d}{后缀} 单台时: V{YYMM}{序号:03d}{后缀}
- 参数:
prefix_override (str | None)
- classmethod to_list_format(code)[源代码]¶
把编号阶段格式(含 '---')转换为清单保存格式('-')。
仅替换首尾范围串中的 stage 分隔符为 list 分隔符,不影响前缀内的 '-' (前缀形如
V2607不含连字符);多段区间也一并处理。
- generate_numbers(session, sale_plan_ids)[源代码]¶
为指定销售计划记录批量生成产品编号
仅对 product_code 为空或以「【空白」开头的记录编号,按 sort_group/sort_order 顺序分配连续流水号,并写入 SalePlan。
- generate_batch(session, sale_plan_id, batch_qty, ym=None, start_override=None)[源代码]¶
按「本批台数」为单个销售计划生成一批产品编号(批次 0.5 / G4)
合同总数从
SalePlan.quantity读取,用户只传batch_qty; 用shipped_quantity``(已发累计)判定剩余与最后一批,从根上消除 ``(4,1)类参数歧义(见 OPERATOR_WORKFLOW §11.4.5)。生成的范围串 写入SalePlan.product_code``(本批区间),并累加 ``shipped_quantity; 发满则标记shipping_status='已发货'``(与 B0-3 ``record_shipment一致)。编号前缀默认取当前月(
V+YYMM);传ym``(如 ``"2604")可生成 **历史年月**批次,流水从该月已用最大流水续号(peek_next_serial)。 ``start_override``(特殊插入)强制起始流水为指定值,并把计数器压到该起点。- 参数:
- 返回:
- 含 product_code / seq_start / seq_end / prefix / ym /
shipped_quantity / remaining / fully_shipped
- 返回类型:
- 抛出:
ValueError -- 计划不存在 / batch_qty 非法 / 超过剩余可发
- peek_next_serial(session, prefix)[源代码]¶
只读预瞄某前缀下一个可用流水号(不消耗、不建计数器)。
优先读
AutoNumberCounter``(已分配则 ``current_serial+1); 计数器缺失时回退跨表最大流水 + 1。供 UI 自动续号与「下一号」预览。
- static generate_military_numbers(prefix, start_number, quantity, suffix='')[源代码]¶
军工三位流水模式:前缀 + Format(i, "000") + 后缀
对齐 VBA dd.vb 第468-512行「军工 三位流水无V年月前缀」模式。 不包含 V+年月前缀,完全由用户手动指定。
- 参数:
- 返回:
编号列表,如 ["JG001A", "JG002A", ...]
- 返回类型:
示例
>>> CertificateNumberService.generate_military_numbers("JG", 1, 3, "A") ['JG001A', 'JG002A', 'JG003A']
- allocate_report_serials(session, make_date, count)[源代码]¶
为报告分配按「制作日期」归组的连续流水号(一页一个,返回 count 个)。
复用与合格证产品编号(
V+YYMM)同源的AutoNumberCounter计数器, rule_code 固定为report_serial,group_key 为制作日期YYMMDD; 按日归组、每日从 1 起连续递增,跨页/跨单整体续号,不依赖 JSON 文件或report_serial_seq表。编号渲染交由调用方(如
report_fill_service)拼成C/1 编号:YYMMDDNNN形态,本方法只负责分配底层连续流水。