refactor(处理器): 重构通用供应商处理器以支持规则引擎 docs: 更新README与文档说明供应商管理功能 build: 更新打包脚本注入版本信息 test: 添加规则引擎单元测试
52 lines
3.1 KiB
Markdown
52 lines
3.1 KiB
Markdown
## 目标
|
||
- 为具体供应商定制更细的解析规则(词典、包装倍数、忽略词、同义单位),并在列映射向导提供可视化编辑入口与预览。
|
||
|
||
## 配置扩展
|
||
- 扩展 `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_quantity` 或 `pack_multipliers`,数量×包装并单位归一为“瓶”
|
||
- `split_quantity_unit`:解析数量中的单位,同义词归一;无单位时用 `default_unit`
|
||
- 其余规则(回推数量、填充、赠品标记)保持不变
|
||
|
||
## 供应商处理器接入
|
||
- `GenericSupplierProcessor`:
|
||
- 从 `supplier_config['dictionary']` 取词典并传入 `apply_rules`,保证每家供应商按自身词典执行
|
||
- 若未配置词典,使用默认空词典
|
||
|
||
## 向导UI扩展(右侧系统设置→列映射向导)
|
||
- 增加“供应商规则”区域:
|
||
- 可编辑列表:
|
||
- 忽略词(多行输入或表格)
|
||
- 单位同义词(键值对表格:原单位→统一单位)
|
||
- 包装倍数(单位→包装数量)
|
||
- 名称正则(多行,每行一个表达式)
|
||
- 默认单位、默认包装数量(输入框)
|
||
- 操作:新增/删除、导入(JSON)/导出(JSON)、保存
|
||
- 规则预览:
|
||
- 选择预设(基础拆分与推断或自定义),点击“应用规则预览”,显示“原始/规范化”两列树表对比
|
||
- 保存行为:将 `dictionary` 与 `rules` 写入对应供应商的 `suppliers_config.json` 并重载处理器
|
||
|
||
## 验证与测试
|
||
- 单元测试:
|
||
- 名称解析(容量×数量、简单乘法、忽略词影响、同义词归一)
|
||
- 数量拆分与单位归一(“4瓶/1箱/3件/2提/2盒”)
|
||
- 包装倍数应用与数量回推
|
||
- 烟雾测试:构建 5–10 类供货商样本,验证端到端转换与模板填充可用
|
||
|
||
## 交付
|
||
- 完成词典与规则编辑入口、配置扩展与引擎接入,提交验证报告与示例配置;保留导入/导出便于你迭代调整。
|
||
|
||
确认后我将按此方案实现:扩展配置→增强规则引擎→处理器接入→向导UI与预览→测试。 |