Commit 0f259617 by 赵剑炜

优化线程池,提升报表查询速度

parent 298c2f96
......@@ -90,25 +90,41 @@ public class TjServiceImpl implements TjService {
//先拿到符合条件的组织机构,再遍历组织机构组成数据
//(下一层数据组织机构数据)
List<String> orgList= inventorySummaryMapper.getTotalData(String.valueOf(req.getOrgId()));
List<TjOrgEqsDto> allData=new ArrayList<>();
// List<TjOrgEqsDto> allData=new ArrayList<>();
Executor customExecutor = Executors.newFixedThreadPool(10); // 创建一个固定大小的线程池
List<CompletableFuture<TjOrgEqsDto>> futures = orgList.stream()
.map(orgId -> CompletableFuture.supplyAsync(() -> {
return inventorySummaryMapper.GetInvSum(
orgId,
req.getTypeIdsList().isEmpty() ? null : req.getTypeIdsAsString(),
req.getSizeNameList().isEmpty() ? null : req.getSizesAsString());
}, customExecutor)) // 使用自定义的 Executor
.collect(Collectors.toList());
// 定义一个批处理大小,即每次处理的最大 orgId 数量
int batchSize = 5;
CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
// 将 orgList 分组,每组包含 batchSize 个 orgId
List<List<String>> batches = new ArrayList<>();
for (int i = 0; i < orgList.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, orgList.size());
List<String> batch = orgList.subList(i, endIndex);
batches.add(batch);
}
allOf.join(); // 等待所有 CompletableFuture 完成
// 创建一个 CompletableFuture 的列表,每个 CompletableFuture 处理一个批次的 orgId
List<CompletableFuture<List<TjOrgEqsDto>>> futures = batches.stream()
.map(batch -> CompletableFuture.supplyAsync(() -> {
List<TjOrgEqsDto> results = new ArrayList<>();
for (String orgId : batch) {
// 调用 GetInvSum 方法,处理当前批次的所有 orgId
TjOrgEqsDto result = inventorySummaryMapper.GetInvSum(
orgId,
req.getTypeIdsList().isEmpty() ? null : req.getTypeIdsAsString(),
req.getSizeNameList().isEmpty() ? null : req.getSizesAsString());
results.add(result);
}
return results;
}, customExecutor)) // 使用自定义的 Executor
.collect(Collectors.toList());
allData = futures.stream()
// 等待所有 CompletableFuture 完成,并收集结果
List<TjOrgEqsDto> allData = futures.stream()
.map(CompletableFuture::join)
.flatMap(List::stream)
.collect(Collectors.toList());
if (req.getOrgId()!=1369509498032808905L)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论