yueli
06cb5f1cac
fix(reservation): 实扫来源不可识别时整单失败,避免预占永久锁死
出库与借库两条执行路径原先写作:
_scanned = [i for i in items if i.get('source_table') != 'trans_repair']
if _scanned:
verify_scanned(...); restore_then_deduct(...)
`if _scanned:` 为假时校验与释放被整体跳过,而下方仍无条件把单据置为
status=3(已完成)。此时申请阶段 reserve_for_items() 扣掉的 available_quantity
无人归还,且 status=3 之后 /close(要求 status==1)与 /withdraw(要求
status∈(0,1))都拒绝再释放 —— 预占就此永久锁死,成为谁也领不走的幽灵库存,
且没有流水可供追溯。
改为 Fail-Closed:实扫明细的来源必须全部落在 model_map 内,否则整单失败。
事务回滚后单据保持 status=1、预占原样保留,库管可重试执行,或走驳回/撤回 ——
任一路径都能正常归还预占。
- outbound_service.create_outbound_batch:以 model_map 白名单过滤,
并要求 _scanned 非空
- trans_service.execute_dispatch:先显式校验来源合法性并列出非法值,
再要求 _scanned 非空
2026-09-11 10:34:55 +08:00
..
2026-09-11 10:34:15 +08:00
2026-05-27 09:57:01 +08:00
2026-09-10 10:14:17 +08:00
2026-08-03 09:22:50 +08:00
2026-09-08 10:14:44 +08:00
2026-09-09 13:00:41 +08:00
2026-09-11 09:06:43 +08:00
2026-07-13 15:12:22 +08:00
2026-08-03 15:53:10 +08:00
2026-09-11 10:34:15 +08:00
2026-07-16 11:26:12 +08:00
2026-09-11 10:34:55 +08:00
2026-07-17 16:22:59 +08:00
2026-09-10 17:41:22 +08:00
2026-09-10 15:46:55 +08:00
2026-09-01 13:52:56 +08:00
2026-09-01 13:52:56 +08:00
2026-09-11 10:34:55 +08:00