fix(borrow): 借库转报废实物不足时报错回滚,不再夹断到 0

原逻辑在 stock_quantity 减为负数时直接置 0。但借出时已扣减过
available_quantity,夹断会使 available_quantity > stock_quantity,
凭空多出可用库存,后续出库/借库可继续占用这批并不存在的实物。

改为不足即抛 ValueError,与同一事务内其余校验一致,整单回滚。
This commit is contained in:
yueli
2026-09-10 10:14:36 +08:00
parent 8755837fe8
commit b4b79c68a9

View File

@ -381,10 +381,14 @@ class TransService:
if ModelClass:
stock = ModelClass.query.with_for_update().get(record.stock_id)
if stock:
stock.stock_quantity = float(stock.stock_quantity or 0) - pending_qty
# 防止负库存
if stock.stock_quantity < 0:
stock.stock_quantity = 0
stock_qty = float(stock.stock_quantity or 0)
# 不足则报错整单回滚:直接夹到 0 会让 available_quantity > stock_quantity
# 凭空多出可用库存
if pending_qty > stock_qty:
raise ValueError(
f"SKU {record.sku} 实物库存不足(剩 {stock_qty}),无法报废 {pending_qty}"
)
stock.stock_quantity = stock_qty - pending_qty
# 3. 创建报废记录
scrap_record = TransScrap(