From 185ffb996351443273a38c4715f86b10cd071d86 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 22 Dec 2025 09:36:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=A2=9E=E5=8A=A0=E5=BA=93?= =?UTF-8?q?=E4=BD=8D=E6=8B=86=E5=88=86=E5=89=8D=E7=9A=84=E5=8D=A0=E7=94=A8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在拆分逻辑中增加对父库位占用状态的批量校验 - 若父库位被占用则抛出明确提示异常 - 优化库位拆分与合并时的子库位查询逻辑 - 统一处理拆分与合并操作中的空子库位判断 - 调整代码结构,增强可读性与维护性 --- .../impl/WmsActualWarehouseServiceImpl.java | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 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 3c9e5b9c..192b7c59 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,15 +455,34 @@ 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) { + // 锁定状态=0 → 被占用 + boolean isOccupied = parent.getIsEnabled() != null && parent.getIsEnabled() == 0; + if (isOccupied) { + occupiedCodes.add(parent.getActualWarehouseCode()); + } + } + + // 3. 存在被占用的父库位,抛出异常提示 + if (!occupiedCodes.isEmpty()) { + throw new ServiceException("以下父库位被占用,无法拆分:" + String.join(",", occupiedCodes)); + } // 批量查询所有子库位(一次性查询,避免循环查询) List parentIds = columnLocations.stream() .map(WmsActualWarehouse::getActualWarehouseId) .collect(Collectors.toList()); - + List allChildren = baseMapper.selectList(Wrappers.lambdaQuery() .in(WmsActualWarehouse::getParentId, parentIds) .eq(WmsActualWarehouse::getActualWarehouseType, 4)); // 四级子库位 - + boolean hasExistingChildren = CollUtil.isNotEmpty(allChildren); if (hasExistingChildren) { @@ -498,11 +517,11 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService .collect(Collectors.groupingBy(WmsActualWarehouse::getParentId, LinkedHashMap::new, Collectors.toList())); List toUpdate = new ArrayList<>(); - + for (WmsActualWarehouse location : columnLocations) { boolean isSplitLocation = splitIds.contains(location.getActualWarehouseId()); List children = childrenByParent.get(location.getActualWarehouseId()); - + if (CollUtil.isEmpty(children)) { continue; } @@ -536,7 +555,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService } } } - + // 批量更新 if (!toUpdate.isEmpty()) { baseMapper.updateBatchById(toUpdate); @@ -693,7 +712,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService List parentIds = locationsToMerge.stream() .map(WmsActualWarehouse::getActualWarehouseId) .collect(Collectors.toList()); - + List allChildren = baseMapper.selectList(Wrappers.lambdaQuery() .in(WmsActualWarehouse::getParentId, parentIds) .eq(WmsActualWarehouse::getActualWarehouseType, 4)); // 四级子库位 @@ -721,7 +740,7 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService for (WmsActualWarehouse location : locationsToMerge) { List children = childrenByParent.get(location.getActualWarehouseId()); - + // 隐藏所有子库位 if (CollUtil.isNotEmpty(children)) { for (WmsActualWarehouse child : children) {