@Override
@PMethodHandle(runMethodName = "dtMapDataRightList")
public EntityResult dtMapDataRightList(Map<String, Object> mapParam) {
// 查询所有大区
List<Map<String, Object>> regionList = nodeRouterBaseMapper.findAllRegion();
ThreadPoolExecutor executor = null;
ArrayList<Map<String, Object>> result = null;
try {
executor = new ThreadPoolExecutor(3, 7, 15, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5), new ThreadPoolExecutor.CallerRunsPolicy());
result = new ArrayList<>();
ArrayList<CompletableFuture<Void>> futureList = new ArrayList<>();
for (Map<String, Object> map : regionList) {
HashMap<String, Object> hashMap = new HashMap<>();
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
hashMap.put("region",map.get("lookupValueCode"));
// 获取大区下的省份
List<Map<String, String>> provinceList = nodeRouterBaseMapper.findProvinceByRegion(map.get("lookupValueCode").toString());
hashMap.put("province",provinceList);
// 统计RDC数量 查询RDC类型中转库的城市列表 ,size即为数量 城市用于统计覆盖城市数量
List<String> rdcCityList = nodeRouterBaseMapper.selectRdcOrFdcCount(provinceList, "RDC");
hashMap.put("rdcSum", rdcCityList.size());
// 统计FDC数量
List<String> fdcCityList = nodeRouterBaseMapper.selectRdcOrFdcCount(provinceList, "FDC");
hashMap.put("fdcSum", fdcCityList.size());
// 统计供应商数量
List<String> supplierCityList = nodeRouterBaseMapper.selectSupplierCount(provinceList);
hashMap.put("supplierSum", supplierCityList.size());
// 统计供应商覆盖城市数量
List<String> list = Stream.of(rdcCityList, fdcCityList)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
List<String> list2 = Stream.of(list, supplierCityList)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
hashMap.put("citySum", list2.size());
}, executor);
result.add(hashMap);
futureList.add(future);
}
// 等待结果
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).get(30000, TimeUnit.SECONDS);
executor.shutdown();
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
} catch (TimeoutException e) {
throw new RuntimeException(e);
}
return ResultHelper.okEntity(result, "成功");
}
CompletableFuture 处理List 并等待结果
最新推荐文章于 2024-01-06 21:09:51 发布