From 44c76d89536fae17f4d094f48ef1dba1a16ed811 Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Mon, 19 Oct 2026 15:54:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transfer/service/WarehouseTransferService.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java index d53b25d82..46d16fc16 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java @@ -190,7 +190,9 @@ public class WarehouseTransferService { private List unreservedSourceCartons(String customerId, String warehouseId, String source, List cartons) { if (inventorySources == null) return cartons; - Set occupied = inventorySources.occupiedMarks(customerId, warehouseId, source).stream() + var occupiedMarks = inventorySources.occupiedMarks(customerId, warehouseId, source); + if (occupiedMarks == null || occupiedMarks.isEmpty()) return cartons; + Set occupied = occupiedMarks.stream() .filter(StringUtils::hasText).map(mark -> mark.trim().toUpperCase(java.util.Locale.ROOT)) .collect(Collectors.toSet()); return cartons.stream().filter(box -> !occupied.contains(box.cartonMark().trim() @@ -483,7 +485,6 @@ public class WarehouseTransferService { // 所有同源提交锁定同一入仓记录;取锁后按最新可用箱校验并保存逐箱占用快照。 if (inventorySources != null && inventorySources.lockSource(customerId, transfer.getInboundOrderId()) == null) throw conflict("库存来源已失效,请重新选择来源单"); - if (inventorySources != null) reserveSourceCartons(customerId, transfer); } if (Boolean.TRUE.equals(transfer.getNeedRelabel())) { @@ -499,6 +500,11 @@ public class WarehouseTransferService { } } + // 来源箱归属校验通过后再写入占用快照,保证错误箱号返回明确提示。 + if (!transfer.getTransferNo().equals(transfer.getInboundCode()) && inventorySources != null) { + reserveSourceCartons(customerId, transfer); + } + LastlegOrder order = requireTailOrder(customerId, transfer); LocalDateTime now = LocalDateTime.now(); transfer.setStatus(PENDING_REVIEW);