refactor(WmsCoilWarehouseOperationLogService): 优化仓库ID获取逻辑
- 添加空值检查避免空指针异常 - 修改查询策略减少数据库访问次数 - 使用流式处理和分组收集子仓库ID - 实现队列遍历算法提高查询效率 - 优化内存使用减少不必要的对象创建
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user