Files
order_site/apps
yml2213 94328ac643 feat(consignment): 后端支持"手动指定现货"匹配(含规格冲突强制匹配留痕)
需求:客服在后台能人工指定现货与订单匹配,而不是只能用系统算出的候选。

- 新增纯函数 listConsignmentMatchOptions()/classifyConsignmentMatch():把某订单的**全部**
  在库现货列出来并逐件判定 exact/partial/conflict,conflict 时给出字段级差异
  (describeConsignmentSpecDifferences,例如「系统:订单「苹果」/ 现货「安卓」」)
- 新增 describeWorkOrderSpecConflicts():强制匹配时把差异写进工单 material 与事件留痕
- fulfill/assign 两条落地链路支持 allowSpecMismatch(规格真冲突显式放行)+ matchNote
  (强制匹配必填原因,否则 400 consignment_match_note_required),
  material 与工单事件都记录 manualMatch/matchType/matchNote
- 新增两个只读接口:订单侧 GET /consignment/matches/:workOrderId/options(全部在库现货+判定),
  库存侧 GET /consignment/inventories/:id/match-orders(该现货可匹配的待指派/待补资料订单+判定)
- 抽取 classifyConsignmentMatch 让正反两个方向共用同一套匹配口径,避免"界面说能选、接口却拒绝"

真实库验证:订单要苹果微信暗潮2钻、现货为安卓QQ苍龙4钻时正确判定 conflict 并列出 4 项差异;
不填原因强制匹配被拒(consignment_match_note_required);不强制则被规格复检拒绝
(consignment_spec_mismatch);填原因强制匹配成功且工单事件与 material 都有留痕。
2026-09-17 12:20:23 +08:00
..