yueli
cbcedecba2
fix(outbound): 扫码/备选库位回加本单预占,修正可用数重复计数
出库选单提交申请时 reserve_for_items() 会立即扣减 available_quantity(预占,
防超卖),但扫码页拿到的仍是这个已被本单扣过的值,并当作「本单能扫多少」的
上限。对本单而言它自己锁掉的货当然该能扫,于是同一批货被算了两次:
· 某行被本单占满时 available=0,工人直接扫不进去,提示「库存不足或已出库」
· /alternatives 按 available_quantity > 0 过滤,被本单占满的行从列表消失
· 草稿恢复时刷新实时库存,误报「实际库存已少于你扫的数量」
改法:扫码阶段的可用量 = 实时可用量 + 本单在该行的预占量。别人单子的预占
不回加,防超卖能力不丢。该值与后端 restore_then_deduct() 释放预占后用于校验
的数字精确相等,是同一口径而非近似。
后端:
- inventory_reservation.py 新增 reserved_index()/reserved_qty() 纯读工具
- outbound.py 新增 _own_reserved_index(),改造 /scan 与 /alternatives
- outbound_service.py 的 _format_scan_result 返回归一化可用量
两道门禁:
- biz_type 区分出库/借库两张审批单(独立表、ID 空间独立,而两个端点被
出库页与借库页共用),否则借库单 ID 会命中另一张出库单
- 单据状态仅放行 status ∈ {0,1}。set_items() 只在创建时调用,执行/驳回后
items_json 里的 reserved=True 仍原样保留而库存早已归还,门禁一松就会
二次回加 → 真超卖(现有 3 张已完成单据即属此形态)
不满足门禁时静默降级为不回加(fail-closed),并回传 reservation_applied。
2026-09-11 10:34:00 +08:00
..
2026-05-21 14:09:57 +08:00
2026-09-08 18:16:04 +08:00
2026-05-27 09:57:01 +08:00
2026-01-26 13:47:53 +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:00 +08:00
2026-07-16 11:26:12 +08:00
2026-01-26 13:47:53 +08:00
2026-09-11 10:34:00 +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 09:39:20 +08:00