2. 召回管理业务流程全景
召回管理并非单一接口动作,而是一条从缺陷发现到实物销毁/返工的完整业务链。WMS 在其中承担库存锁定、批次追踪与出库执行的核心角色。本章以全景视角梳理全流程,为后续接口设计建立业务上下文。
2.1 全流程阶段划分
召回业务可拆解为6 个核心阶段,每个阶段对应不同的系统职责与数据状态变更:
| 阶段 | 触发条件 | WMS 核心动作 | 输出状态 |
|---|---|---|---|
| ① 缺陷发现 | 质检报告 / 客诉 / 法规通报 | 查询受影响批次库存分布 | 缺陷批次清单 |
| ② 召回发起 | 审批通过 / 法规指令 | 创建召回单,标记批次 | 召回单(待锁定) |
| ③ 库存锁定 | 召回单激活 | 冻结批次库存,禁止出库 | 锁定库存(不可售) |
| ④ 出库回收 | 物流指令 / 客户退货 | 生成回收出库单,扣减锁定库存 | 回收在途 / 已入库 |
| ⑤ 质检分拣 | 实物到达回收仓 | 更新批次质检状态 | 待销毁 / 待返工 |
| ⑥ 销毁/返工 | 质检结论确认 | 执行报废出库或返工入库 | 批次生命周期终结 |
关键认知:WMS 的库存锁定并非简单“冻结”一条记录,而是涉及锁定库存表、锁定类型、锁定原因码以及锁定时间戳的多维状态变更。锁定后的库存不能被正常销售出库、调拨或移库。
2.2 全景流程图
下图展示从缺陷发现到最终处置的完整业务流转,包含系统间交互与库存状态变化:
2.3 各阶段详细说明
2.3.1 缺陷发现与批次定位
- 数据来源:质检系统(QMS)、客户投诉系统(CRM)、国家药品/食品监督管理局通报。
- WMS 动作:根据缺陷产品编码 + 生产批次范围,查询库存分布(库位、数量、入库日期)。
- 输出:受影响批次库存清单,包含锁定前库存量、已出库量、在途量。
2.3.2 召回发起与单证生成
- 召回等级:一级(紧急,24h 内锁定)、二级(48h)、三级(72h)。
- WMS 接口:接收 ERP/召回系统下发的
recall_order_create请求,创建召回单头与行。 - 关键字段:召回单号、产品编码、批次号、锁定数量、锁定原因码、失效日期。
接口设计提示:召回单创建接口应支持幂等性(idempotent),避免重复提交导致库存锁定翻倍。建议使用业务主键(recall_order_no + batch_no)做唯一约束。
2.3.3 库存锁定(核心环节)
库存锁定是 WMS 召回模块的核心能力,涉及以下数据变更:
- 锁定表:
inventory_lock记录锁定单号、批次、库位、锁定数量、锁定时间。 - 库存表:
inventory中锁定数量字段增加,可用数量减少。 - 锁定类型:召回锁定(recall_lock)与普通锁定(如质检锁定、预占锁定)互斥。
- 锁定状态机:待锁定 → 已锁定 → 部分解锁 → 已出库。
2.3.4 出库回收
回收出库与正常销售出库的差异:
| 对比维度 | 正常销售出库 | 召回回收出库 |
|---|---|---|
| 出库类型 | 销售出库 | 召回出库 |
| 库存来源 | 可用库存 | 锁定库存 |
| 收货方 | 客户/经销商 | 回收仓库/销毁中心 |
| 成本处理 | 确认收入 | 计入召回损失 |
| WMS 单据 | 销售出库单 | 召回出库单 |
2.3.5 质检分拣与处置决策
回收实物到达指定仓库后,质检员进行分拣判定:
- 可返工:更新批次状态为“待返工”,生成返工入库单,库存重新进入可用池。
- 不可返工:更新批次状态为“待销毁”,生成报废出库单,实物移交销毁。
- WMS 状态:批次生命周期状态机:正常 → 召回锁定 → 回收在途 → 待质检 → 待销毁/待返工 → 终结。
2.4 批次状态流转图
为更清晰展示批次在召回流程中的状态变化,下图以状态机视角呈现:
状态边界条件:批次一旦进入“召回锁定”状态,任何正常出库、调拨、移库操作均被 WMS 拒绝。只有“解锁”或“回收出库”才能改变该状态。设计接口时需在库存操作前增加状态校验逻辑。
2.5 流程中的关键数据实体
为支撑上述流程,WMS 召回模块至少需要以下核心数据表:
| 实体名称 | 主要字段 | 说明 |
|---|---|---|
| 召回单头 | recall_order_no, status, created_at | 召回主单据,记录整体状态 |
| 召回单行 | recall_order_no, sku_code, batch_no, qty | 每个批次一条记录 |
| 库存锁定表 | lock_id, batch_no, location, lock_qty, lock_type | 锁定库存明细 |
| 回收出库单 | outbound_no, recall_order_no, status | 回收出库执行记录 |
| 批次状态表 | batch_no, lifecycle_status, last_modified | 批次生命周期状态 |