ExecutorService executorService = Executors.newFixedThreadPool(10);
AtomicBoolean flag = new AtomicBoolean(false);
AtomicReference<String> errMsg = new AtomicReference<>("");
AtomicReference<String> gzAppliedContractNo = new AtomicReference<>("");
AtomicReference<String> gzAppliedEndSign = new AtomicReference<>("");
CountDownLatch downLatch = new CountDownLatch(3);
CompletableFuture.supplyAsync(new SignUserThread (childTable, signUsers, fileService, clricServiceHelper), executorService)
.whenCompleteAsync((result, e) -> {
if (Objects.nonNull(e)) {
AntuLogger.error(e.getMessage(), e);
flag.set(true);
errMsg.set(e.getMessage());
throw new Exception(e.getMessage());
}
appliedContractNo.set(result.get("contractNo"));
appliedEndSign.set(result.get("sign"));
mainDownLatch.countDown();
downLatch.countDown();
}).exceptionally(e -> {
mainDownLatch.countDown();
downLatch.countDown();
return null;
});
try {
downLatch.await();
} catch (InterruptedException e) {
AntuLogger.error(e.getMessage(), e);
throw new Exception("");
}
if (flag.get()) {
throw new Exception(errMsg.get());
}
public class SignUserThread implements Supplier<HashMap<String, Object>>{
private SignUser signUser;
private FileService fileService;
private String position;
public SignUserThread(SignUser signUser, FileService fileService, String position) {
this.signUser = signUser;
this.fileService = fileService;
this.position = position;
}
@Override
public HashMap<String, Object> get() {
HashMap<String, Object> map = new HashMap<>(5);
map.put("Name", signUser.getName());
map.put("IdNo", signUser.getIdCard());
String signPic = fileService.download(signUser.getSignPic(), "pdf");
map.put("Content", signPic);
map.put("Position", position);
map.put("PhoneNo", signUser.getPhoneNo());
return map;
}
}