From ef2a1eb960351766fddd39dd3f66218ace9a4e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Fri, 13 Mar 2026 11:25:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor(inventory):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E7=A7=BB=E5=8A=A8=E6=9C=8D=E5=8A=A1=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E6=89=98=E7=9B=98=E9=AA=8C=E8=AF=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将validateHandlingUnits方法重命名为validateHandlingUnitsForPallet - 新增专门的托盘验证方法,包含完整的业务逻辑 - 添加对HandlingUnit是否存在及site匹配的校验 - 增加对库存状态的检查,确保只有在库的HandlingUnit才能移动 - 实现安全的迭代器方式删除符合条件的HandlingUnit - 当目标库位与当前库位相同时,跳过该HandlingUnit的处理 --- .../impl/InventoryMoveServiceImpl.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gaotao/modules/other/service/impl/InventoryMoveServiceImpl.java b/src/main/java/com/gaotao/modules/other/service/impl/InventoryMoveServiceImpl.java index 52d0b76..e7c5a98 100644 --- a/src/main/java/com/gaotao/modules/other/service/impl/InventoryMoveServiceImpl.java +++ b/src/main/java/com/gaotao/modules/other/service/impl/InventoryMoveServiceImpl.java @@ -105,7 +105,7 @@ public class InventoryMoveServiceImpl implements InventoryMoveService { try { // 2. 验证HandlingUnit - List handlingUnits = validateHandlingUnits(dto); + List handlingUnits = validateHandlingUnitsForPallet(dto); // 3. 先保存原库位信息用于IFS同步,然后处理每个HandlingUnit Map originalLocations = new HashMap<>(); @@ -247,6 +247,35 @@ public class InventoryMoveServiceImpl implements InventoryMoveService { return handlingUnits; } + private List validateHandlingUnitsForPallet(InventoryMoveRequestDto dto) { + List handlingUnits = handlingUnitService.lambdaQuery() + .eq(HandlingUnit::getSite, dto.getSite()) + .in(HandlingUnit::getUnitId, dto.getHandlingUnitIds()) + .list(); + + if (handlingUnits.size() != dto.getHandlingUnitIds().size()) { + throw new XJException("部分HandlingUnit不存在或site不匹配"); + } + + // 使用 Iterator 安全地遍历并删除 + Iterator iterator = handlingUnits.iterator(); + while (iterator.hasNext()) { + HandlingUnit hu = iterator.next(); + + // 校验是否在库 + if (!"Y".equals(hu.getInStockFlag())) { + throw new XJException("HandlingUnit不在库,无法移库: " + hu.getUnitId()); + } + + // 如果目标库位和当前库位相同,跳过(从列表中移除) + if (dto.getTargetLocationId().equals(hu.getLocationId())) { + iterator.remove(); // ✅ 安全删除 + } + } + + return handlingUnits; + } + /** * 批量同步到IFS - 按site、partNo、locationNo、lotBatchNo合并后调用 */