orc-order-v2/.trae/documents/供应商词典与规则编辑器扩展方案.md
houhuan fb12e63c4c feat(供应商管理): 新增规则引擎与词典配置支持
refactor(处理器): 重构通用供应商处理器以支持规则引擎
docs: 更新README与文档说明供应商管理功能
build: 更新打包脚本注入版本信息
test: 添加规则引擎单元测试
2025-12-12 13:46:00 +08:00

3.1 KiB
Raw Permalink Blame History

目标

  • 为具体供应商定制更细的解析规则(词典、包装倍数、忽略词、同义单位),并在列映射向导提供可视化编辑入口与预览。

配置扩展

  • 扩展 suppliers_config.json 每个供应商对象新增:
    • dictionary: 解析词典
      • ignore_words: ["白膜","彩膜","赠品"](在名称解析时剔除)
      • unit_synonyms: {"箱":"件","提":"件","盒":"件","瓶":"瓶"}
      • pack_multipliers: {"件": 24, "箱": 24, "提": 12, "盒": 10}(缺规格时用于单位归一)
      • name_patterns: [正则表达式](从名称抽取规格/容量×数量,如 ([\d\.]+)(ml|l|升|毫升)[*×xX](\d+)
      • default_unit: "瓶"
      • default_package_quantity: 1
    • rules: 规则数组(与现有一致),规则在执行时可访问 dictionary
    • output_templates: 模板列表;current_template_index: 当前选择索引

规则引擎增强

  • app/core/handlers/rule_engine.py
    • apply_rules(df, rules, dictionary=None) 接口增加 dictionary 参数
    • extract_spec_from_name:先剔除 ignore_words,匹配 name_patterns,无匹配时按 pack_multipliers 推断包装数量
    • normalize_unit:使用 unit_synonyms 统一单位;如单位为“件/箱/提/盒”且有 package_quantitypack_multipliers,数量×包装并单位归一为“瓶”
    • split_quantity_unit:解析数量中的单位,同义词归一;无单位时用 default_unit
    • 其余规则(回推数量、填充、赠品标记)保持不变

供应商处理器接入

  • GenericSupplierProcessor
    • supplier_config['dictionary'] 取词典并传入 apply_rules,保证每家供应商按自身词典执行
    • 若未配置词典,使用默认空词典

向导UI扩展右侧系统设置→列映射向导

  • 增加“供应商规则”区域:
    • 可编辑列表:
      • 忽略词(多行输入或表格)
      • 单位同义词(键值对表格:原单位→统一单位)
      • 包装倍数(单位→包装数量)
      • 名称正则(多行,每行一个表达式)
      • 默认单位、默认包装数量(输入框)
    • 操作:新增/删除、导入JSON/导出JSON、保存
    • 规则预览:
      • 选择预设(基础拆分与推断或自定义),点击“应用规则预览”,显示“原始/规范化”两列树表对比
    • 保存行为:将 dictionaryrules 写入对应供应商的 suppliers_config.json 并重载处理器

验证与测试

  • 单元测试:
    • 名称解析(容量×数量、简单乘法、忽略词影响、同义词归一)
    • 数量拆分与单位归一“4瓶/1箱/3件/2提/2盒”
    • 包装倍数应用与数量回推
  • 烟雾测试:构建 510 类供货商样本,验证端到端转换与模板填充可用

交付

  • 完成词典与规则编辑入口、配置扩展与引擎接入,提交验证报告与示例配置;保留导入/导出便于你迭代调整。

确认后我将按此方案实现扩展配置→增强规则引擎→处理器接入→向导UI与预览→测试。