refactor(WmsCoilWarehouseOperationLogService): 优化仓库ID获取逻辑

- 添加空值检查避免空指针异常
- 修改查询策略减少数据库访问次数
- 使用流式处理和分组收集子仓库ID
- 实现队列遍历算法提高查询效率
- 优化内存使用减少不必要的对象创建
This commit is contained in:
2026-03-05 16:36:44 +08:00
parent 4a11ae2079
commit 428e94d4f9

View File

@@ -182,12 +182,28 @@ public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehous
private Set<Long> getAllChildWarehouseIds(Long parentId) {
Set<Long> result = new HashSet<>();
if (parentId == null) {
return result;
}
result.add(parentId);
LambdaQueryWrapper<WmsActualWarehouse> lqw = Wrappers.lambdaQuery();
lqw.eq(WmsActualWarehouse::getParentId, parentId);
List<WmsActualWarehouse> children = wmsActualWarehouseMapper.selectList(lqw);
for (WmsActualWarehouse child : children) {
result.addAll(getAllChildWarehouseIds(child.getActualWarehouseId()));
lqw.select(WmsActualWarehouse::getActualWarehouseId, WmsActualWarehouse::getParentId);
List<WmsActualWarehouse> allWarehouses = wmsActualWarehouseMapper.selectList(lqw);
Map<Long, List<Long>> 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<Long> queue = new java.util.LinkedList<>();
queue.offer(parentId);
while (!queue.isEmpty()) {
Long currentId = queue.poll();
List<Long> children = parentChildrenMap.get(currentId);
if (children != null && !children.isEmpty()) {
result.addAll(children);
queue.addAll(children);
}
}
return result;
}