certflow.services.bom_material_service module¶
BOM 零件牌号服务
从「生产-下料计划 TAO」目录的材料清单(.xls/.xlsx)解析零件牌号,落库到
bom_materials 表,并提供按 生产令号 查询与超链接索引生成能力。
文件结构异构,解析器自适应两种常见表头: - 12 列版(.xlsx):序号/代号/名称/数量/单位/材料/图纸尺寸/毛坯尺寸/毛坯单量/材料型态/备注 - 4 列版(.xls):零件名称/材料/备注/方向 通过「行内同时含 名称类列 与 材料类列」定位表头,再按列名映射取数,不依赖固定列序。
- class certflow.services.bom_material_service.BomMaterial(**kwargs)[源代码]¶
基类:
BaseBOM 零件牌号表
同一 生产令号 下可有多条零件记录;
(production_order_no, seq)唯一标识一行。- id¶
- production_order_no¶
- seq¶
- part_no¶
- part_name¶
- material_grade¶
- material_source¶
- material_note¶
- quantity¶
- material_form¶
- source_file¶
- created_at¶
- updated_at¶
- class certflow.services.bom_material_service.BomImportMode(*values)[源代码]¶
基类:
StrEnumBOM 导入模式(UI 四选一,决定旧数据如何处理)。
- CLEAR = 'clear'¶
- APPEND = 'append'¶
- REFRESH = 'refresh'¶
- SKIP = 'skip'¶
- certflow.services.bom_material_service.ensure_bom_material_columns(engine)[源代码]¶
为已存在的 bom_materials 表补齐新增列(存量库 ALTER,避免 drop/recreate 丢数据)。
create_all只能建缺失的表、不会给既有表加列,故对可能已存在的表做一次幂等 ALTER。 新增列:material_source(默认 import) / material_note / updated_at。- 参数:
engine (Any)
- 返回类型:
None
- certflow.services.bom_material_service.scan_and_import(folder, session, *, clear_existing=None, mode=None)[源代码]¶
遍历 folder(含子目录)下所有 .xls/.xlsx,解析并批量入库。
- 参数:
folder (str) -- 根目录(如 生产-下料计划TAO)。
session (Session) -- 数据库会话(本函数内 commit)。
clear_existing (bool | None) -- [兼容旧调用] 优先使用
mode;为None时: ``True``→CLEAR,``False``→APPEND。mode (str | BomImportMode | None) --
导入模式(见
BomImportMode): -clear:清空全表后重导(默认,幂等、无重复); -append:不清空,所有解析行直接插入(重复导入同文件会重复); -refresh:不清空;已导入过的source_file先删其旧行再写最新内容(如某文件 12→10 行则删 2、12→15 行则加 5),新文件追加;
skip:不清空;只导入source_file尚未入库的文件,已存在文件 (即便内容已更新)跳过;需刷新旧文件请清空重导。
- 返回:
{files, rows, orders, new_files, refreshed_files, skipped_files}统计。files维持旧语义 = 实际写入的文件数(new+refreshed),兼容旧调用方。- 返回类型:
- certflow.services.bom_material_service.query_by_production_order_no(production_order_no, session)[源代码]¶
按 生产令号 精确查询其全部零件(按 seq 排序)。
- 参数:
- 返回类型:
- certflow.services.bom_material_service.list_production_order_nos(session)[源代码]¶
返回库中所有不重复的 生产令号(排序)。
- certflow.services.bom_material_service.build_hyperlink_index(out_path, session, *, folder=None)[源代码]¶
生成超链接索引 xlsx:生产令号 | 文件名 | 零件数 | 零件牌号摘要 | 完整路径。
「文件名」列为指向源文件的 file:// 超链接,点击即可回访材料清单;
「零件牌号摘要」形如「阀体:WCB; 阀杆:35#无缝钢管; …」(超长截断)。