From 428e94d4f9beb23c70f01ebba10f2fed9c50107e Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 5 Mar 2026 16:36:44 +0800 Subject: [PATCH] =?UTF-8?q?refactor(WmsCoilWarehouseOperationLogService):?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E4=BB=93=E5=BA=93ID=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加空值检查避免空指针异常 - 修改查询策略减少数据库访问次数 - 使用流式处理和分组收集子仓库ID - 实现队列遍历算法提高查询效率 - 优化内存使用减少不必要的对象创建 --- ...sCoilWarehouseOperationLogServiceImpl.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) 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; }