refactor(WmsCoilWarehouseOperationLogService): 优化仓库ID获取逻辑
- 添加空值检查避免空指针异常 - 修改查询策略减少数据库访问次数 - 使用流式处理和分组收集子仓库ID - 实现队列遍历算法提高查询效率 - 优化内存使用减少不必要的对象创建
This commit is contained in:
@@ -182,12 +182,28 @@ public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehous
|
|||||||
|
|
||||||
private Set<Long> getAllChildWarehouseIds(Long parentId) {
|
private Set<Long> getAllChildWarehouseIds(Long parentId) {
|
||||||
Set<Long> result = new HashSet<>();
|
Set<Long> result = new HashSet<>();
|
||||||
|
if (parentId == null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
result.add(parentId);
|
result.add(parentId);
|
||||||
LambdaQueryWrapper<WmsActualWarehouse> lqw = Wrappers.lambdaQuery();
|
LambdaQueryWrapper<WmsActualWarehouse> lqw = Wrappers.lambdaQuery();
|
||||||
lqw.eq(WmsActualWarehouse::getParentId, parentId);
|
lqw.select(WmsActualWarehouse::getActualWarehouseId, WmsActualWarehouse::getParentId);
|
||||||
List<WmsActualWarehouse> children = wmsActualWarehouseMapper.selectList(lqw);
|
List<WmsActualWarehouse> allWarehouses = wmsActualWarehouseMapper.selectList(lqw);
|
||||||
for (WmsActualWarehouse child : children) {
|
Map<Long, List<Long>> parentChildrenMap = allWarehouses.stream()
|
||||||
result.addAll(getAllChildWarehouseIds(child.getActualWarehouseId()));
|
.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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user