记录通过多线程将同步查询改为异步查询
当有任意线程报错时,停止所有线程查询,并抛出异常
**
ExecutorService executor = Executors.newFixedThreadPool(3);
*MsunThreadContextHolder holder = MsunThreadContextHolder.capture();*
CompletableFuture<Void> patChargeFuture = CompletableFuture.runAsync(() -> {
holder.inject();
buildPatChargeProperties(findSettleBillDetailDTO,patInHosBillRecordVO);
}, executor);
CompletableFuture<Void> settleMainFuture = CompletableFuture.runAsync(() -> {
holder.inject();
buildSettleMainAndSettleDetail(findSettleBillDetailDTO,patInHosBillRecordVO);
}, executor);
CompletableFuture<Void> billRecordAmtFuture = CompletableFuture.runAsync(() -> {
holder.inject();
buildBillRecordAmt(findSettleBillDetailDTO,patInHosBillRecordVO);
}, executor);
**
CompletableFuture<Void> allDone = CompletableFuture.allOf(patChargeFuture, settleMainFuture, billRecordAmtFuture);
if (allDone.isCompletedExceptionally()) {
allDone.cancel(true);
}
try {
allDone.get();
log.info("获取患者住院结算单、结算明细及费用属性完成");
} catch (Exception e) {
log.error("获取患者住院结算单、结算明细及费用属性异常traceId:{},excep={}",TraceLogConstant.getTraceId(),e);
} finally {
executor.shutdownNow();
}