diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java index 12560609..2a022111 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java @@ -182,12 +182,28 @@ public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehous private Set getAllChildWarehouseIds(Long parentId) { Set result = new HashSet<>(); + if (parentId == null) { + return result; + } result.add(parentId); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(WmsActualWarehouse::getParentId, parentId); - List children = wmsActualWarehouseMapper.selectList(lqw); - for (WmsActualWarehouse child : children) { - result.addAll(getAllChildWarehouseIds(child.getActualWarehouseId())); + lqw.select(WmsActualWarehouse::getActualWarehouseId, WmsActualWarehouse::getParentId); + List allWarehouses = wmsActualWarehouseMapper.selectList(lqw); + Map> parentChildrenMap = allWarehouses.stream() + .filter(w -> w.getParentId() != null) + .collect(java.util.stream.Collectors.groupingBy( + WmsActualWarehouse::getParentId, + java.util.stream.Collectors.mapping(WmsActualWarehouse::getActualWarehouseId, java.util.stream.Collectors.toList()) + )); + java.util.Queue queue = new java.util.LinkedList<>(); + queue.offer(parentId); + while (!queue.isEmpty()) { + Long currentId = queue.poll(); + List children = parentChildrenMap.get(currentId); + if (children != null && !children.isEmpty()) { + result.addAll(children); + queue.addAll(children); + } } return result; }