From d5881dc43f0c811457d0e820c5e728aea1713e27 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 22 Dec 2025 13:50:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(wms):=20=E4=BC=98=E5=8C=96=E5=BA=93?= =?UTF-8?q?=E4=BD=8D=E6=8B=86=E5=88=86=E4=B8=8E=E5=90=88=E5=B9=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改库位占用检查范围从父库位扩展到整列 - 更新库位启用状态设置逻辑 - 调整子库位删除标记和启用状态更新方式 - 优化合并操作中的子库位过滤逻辑 - 统一异常提示信息格式 --- .../impl/WmsActualWarehouseServiceImpl.java | 51 +++++++++---------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java index 192b7c59..94cbe5b0 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java @@ -455,25 +455,21 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService throw new ServiceException("未找到列标识为 " + columnFlag + " 的库位"); } - // 1. 筛选出待拆分的父库位(只校验需要拆分的库位,非拆分库位不限制) - List toSplitParents = columnLocations.stream() - .filter(loc -> splitIds.contains(loc.getActualWarehouseId())) - .collect(Collectors.toList()); - - // 2. 批量校验占用状态 + // 检查整个列中是否有任何库位被占用 List occupiedCodes = new ArrayList<>(); - for (WmsActualWarehouse parent : toSplitParents) { + for (WmsActualWarehouse location : columnLocations) { // 锁定状态=0 → 被占用 - boolean isOccupied = parent.getIsEnabled() != null && parent.getIsEnabled() == 0; + boolean isOccupied = location.getIsEnabled() != null && location.getIsEnabled() == 0; if (isOccupied) { - occupiedCodes.add(parent.getActualWarehouseCode()); + occupiedCodes.add(location.getActualWarehouseCode()); } } - // 3. 存在被占用的父库位,抛出异常提示 + // 如果有任何库位被占用,抛出异常提示 if (!occupiedCodes.isEmpty()) { - throw new ServiceException("以下父库位被占用,无法拆分:" + String.join(",", occupiedCodes)); + throw new ServiceException("以下库位被占用,无法拆分:" + String.join(",", occupiedCodes)); } + // 批量查询所有子库位(一次性查询,避免循环查询) List parentIds = columnLocations.stream() .map(WmsActualWarehouse::getActualWarehouseId) @@ -500,6 +496,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService upd.setActualWarehouseId(location.getActualWarehouseId()); upd.setSplitStatus(1); upd.setSplitType(splitType); + upd.setIsEnabled(0); toUpdate.add(upd); } if (!toUpdate.isEmpty()) { @@ -537,6 +534,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService childUpdate.setActualWarehouseId(child.getActualWarehouseId()); childUpdate.setDelFlag(0); childUpdate.setSplitStatus(1); + childUpdate.setIsEnabled(1); childUpdate.setSplitType(splitType); toUpdate.add(childUpdate); } @@ -709,7 +707,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService } // 批量查询所有子库位 - List parentIds = locationsToMerge.stream() + List parentIds = columnLocations.stream() .map(WmsActualWarehouse::getActualWarehouseId) .collect(Collectors.toList()); @@ -717,20 +715,13 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService .in(WmsActualWarehouse::getParentId, parentIds) .eq(WmsActualWarehouse::getActualWarehouseType, 4)); // 四级子库位 - // 按父ID分组子库位 - Map> childrenByParent = allChildren.stream() - .collect(Collectors.groupingBy(WmsActualWarehouse::getParentId)); - - // 检查是否有子库位被占用 - for (WmsActualWarehouse location : locationsToMerge) { - List children = childrenByParent.get(location.getActualWarehouseId()); - if (CollUtil.isNotEmpty(children)) { - boolean anyOccupied = children.stream() - .filter(c -> c.getDelFlag() == 0) - .anyMatch(c -> !Objects.equals(c.getIsEnabled(), 1)); - if (anyOccupied) { - throw new ServiceException("子库位被占用,不能合并:" + location.getActualWarehouseCode()); - } + // 检查整列中是否有任何子库位被占用 + if (CollUtil.isNotEmpty(allChildren)) { + boolean anyOccupied = allChildren.stream() + .filter(c -> c.getDelFlag() == 0) + .anyMatch(c -> !Objects.equals(c.getIsEnabled(), 1)); + if (anyOccupied) { + throw new ServiceException("该列存在被占用的子库位,不能合并"); } } @@ -739,7 +730,9 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService List parentsToUpdate = new ArrayList<>(); for (WmsActualWarehouse location : locationsToMerge) { - List children = childrenByParent.get(location.getActualWarehouseId()); + List children = allChildren.stream() + .filter(c -> Objects.equals(c.getParentId(), location.getActualWarehouseId())) + .collect(Collectors.toList()); // 隐藏所有子库位 if (CollUtil.isNotEmpty(children)) { @@ -747,7 +740,8 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService if (child.getDelFlag() == 0) { WmsActualWarehouse childUpdate = new WmsActualWarehouse(); childUpdate.setActualWarehouseId(child.getActualWarehouseId()); - childUpdate.setDelFlag(2); + childUpdate.setDelFlag(1); + childUpdate.setIsEnabled(0); childrenToUpdate.add(childUpdate); } } @@ -758,6 +752,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService parentUpdate.setActualWarehouseId(location.getActualWarehouseId()); parentUpdate.setSplitStatus(0); parentUpdate.setSplitType(0); + parentUpdate.setIsEnabled(1); parentsToUpdate.add(parentUpdate); }