并行获取数据,降低延迟
List<OutVo> result = deptCommonService.findAll()
.sorted(Comparator.comparing(outVo::getSort))
.collect(Collectors.toList())
final Map<String, OutVo> duList= new ConcurrentHashMap<>(),
supeOut = new ConcurrentHashMap<>();
final CountDownLatch countDownLatch = new CountDownLatch(2);
//并行获取数据,降低请求延迟
CommonThreadPoll.execute(
() -> {
duList.putAll(dutyService.select(start, end)
.stream().collect(Collectors.toMap(OutVo::getId, Function.identity())));
countDownLatch.countDown();
},
() -> {
supeOut.putAll(supeService.count(start, end, entitys)
.stream()
.collect(Collectors.toMap(OutVo::getId, Function.identity())));
countDownLatch.countDown();
});
try {
Assert.isTrue(countDownLatch.await(2, TimeUnit.SECONDS),"并行执行超时!!");
} catch (InterruptedException e) {
throw new RuntimeException("并行失败");
}
result.forEach(res -> {
Optional.ofNullable(duList.get(res.getId())).ifPresent(cur->{
res.setTotal(cur.getTotal());
});
Optional.ofNullable(supeOut.get(res.getId())).ifPresent(cur->{
res.setSupe(cur.getSupe());
});
});
return result;