Files
baiyue-firstleg/docs/overseas-inventory-mutation-test-map.md
2026-10-19 15:00:25 +08:00

4.6 KiB

海外业务库存变动测试整理

范围依据:lastleg-service/AGENTS.md、docs/backend-business-index.md 及当前海外仓库存、入仓、出库、换标、转运、废弃、异常退回和 PDA 作业入口。

先统一库存口径

  • 可用库存:按客户、海外仓、目的仓、入仓单汇总箱数;SKU、箱唛和托盘是明细快照/作业维度。
  • 冻结库存:拣货、换标、废弃、转运等处理中暂时不可重复使用;冻结不等于已经扣减。
  • 库存流水:每一次入账、冻结、释放、扣减、恢复、SKU 转换和位置变化都应能按业务单号、幂等键追溯。
  • 托盘不是库存归属:合托后一个物理托盘可以包含多个入仓单,出库、换标和退回必须按托盘组成明细核平。

测试场景矩阵

场景 触发与前置 库存变动 测试重点
头程接柜/海外入仓 装柜完成事件 → 生成尾程单/入仓计划;PDA 签收、实收、上架、完成 在途冻结 → 入仓后 AVAILABLE 增加;写库存位置和流水 柜号/客户/入仓单隔离;卸柜照片门禁;重复事件不重复入账;失败整事务回滚
普通排车出库/派送 计划已入仓;排车审核、拣货、箱数核平、发车 AVAILABLE → 冻结/已拣;原子出库后可用库存扣减 整托/部分托按组成明细核平;未审核、数量不平、车辆门禁时不得出库;同键重放幂等
一件代发 已完成入库且有可用箱唛/SKU;创建 WAIT_PICK 出库单 SKU/箱唛库存冻结 → PDA 拣货 → OUTBOUNDED 扣减 候选只能来自真实可用库存;一单不得跨客户/跨仓;整托扫描任一明细失败必须整体回滚
客户换标 历史入仓库存可用;客户申请、PDA 扫旧 SKU/箱唛、完工、客户确认 旧 SKU/箱唛冻结;换标完成后旧库存转出、新 SKU/箱唛转入;库存总箱数守恒 同箱多 SKU 不重复冻结;只移动本单 hold_packages;已生成出库单禁止再次拆托;照片/复核/客户确认门禁
仓储转运 来源库存可用;创建转运、测量、换标(可选)、出库、目标仓收货 来源仓冻结/扣减 → 目标仓入账;换标时 SKU 转换 来源客户、入仓单和箱数核对;部分转运数量守恒;目标仓与来源仓不能串;重复完成不重复入账
货物废弃 一件代发/库存货物申请废弃;审批后由绑定海外 PDA 实际确认 AVAILABLE → DISCARD_PENDING;实际确认后 SKU、余额、位置扣减并记 DISCARDED 申请阶段只锁箱不扣库存;驳回释放;批准不是实际扣减;实际数量与逐箱流水一致;失败整批回滚
异常退回入仓 只能选择原出库拣货事实;异常单受理并完成退回 原出库来源核验 → RETURN_STOCK_IN 恢复到真实目标托盘/库位 不能伪造出库来源、借用其他客户主单;退回数量与原实发核平;异常单完成与派送 RETURNED 同事务
PDA 盘点调整 绑定海外仓;盘点锁定库存位置并提交实盘数量 按差异产生增加/减少调整流水;无差异不产生虚假变动 需要 inventory:adjust;并发版本校验;差异正负方向正确;盘点重复提交幂等
PDA 移库/托盘拆合/换绑 同仓有效托盘/库位;资源锁成功 数量净额不变,仅位置/托盘组成变化,写位置流水 不跨仓;托盘组成明细保留;资源锁释放;出库/换标占用时禁止绕过协调单独移动

不应误判为库存变动

  • 目的仓修改、暂扣/解除、报价、排车预排、外接预约、车辆/司机资料:只改变状态、资格、资源占用或费用快照。
  • 海外采购样品履约:按当前契约走 Admin 台账,不接入 PDA,也不写 WMS 可用库存。
  • 退货申请/废弃申请/转派送建单:申请或建单阶段只形成冻结/候选/出库单,必须到实际收货、实际扣减或实际出库节点才确认数量变化。

每条库存用例的统一断言

  1. 变动前后按客户、海外仓、目的仓、入仓单、托盘组成核对数量守恒。
  2. 查询余额、位置明细和库存流水三处结果一致,且业务单号/幂等键可追溯。
  3. 重复请求、重复事件、并发操作不得新增第二笔库存变动。
  4. 任一校验、权限、资源锁或跨服务依赖失败时,库存、单据状态和流水一起回滚。
  5. 客户越权、跨仓、跨客户、伪造来源入仓单/出库单均应拒绝。

流程图:overseas-inventory-mutation-flow.svg / overseas-inventory-mutation-flow.png