반응형
public List<YcvsSsevntInfo> retrieveYcvsSsevntList(String svcTypeCd, String strCd, String custNo, String sessnId) {
// 기획전 목록 조회
List<YcvsSsevntInfo> sseventList = this.ycvsSseventGsmcMapper.retrieveYcvsSsevntList(svcTypeCd, strCd, custNo, sessnId);
if (sseventList == null || sseventList.isEmpty()) {
return null;
}
List<CompletableFuture<Void>> asyncSseventList = new ArrayList<>();
for (YcvsSsevntInfo ssevnt: sseventList) {
Map<String, Object> itemParam = new HashMap<String, Object>();
itemParam.put("svcTypeCd", svcTypeCd);
itemParam.put("strCd", strCd);
itemParam.put("ssevntSeqno", ssevnt.getSsevntSeqno());
itemParam.put("custNo", custNo);
itemParam.put("sessnId", sessnId);
itemParam.put("wdImgPath", wdImgPath);
itemParam.put("gsfreshItemImgCdnPath", gsfreshItemImgCdnPath);
// 비동기 객체 생성
CompletableFuture<Void> asyncObject = CompletableFuture.runAsync(() -> {
/* storeMode, custNo, sessnId, strCd */
List<YcvsItemInfo> items = this.ycvsSseventGsmcMapper.retrieveYcvsSsevntItemList(itemParam);
if (items != null && !items.isEmpty()) {
int lastIndex = items.size() >= 20 ? 19 : items.size() - 1;
ssevnt.setItems(items.subList(0, lastIndex));
}
});
// 리스트에 넣는다.
asyncSseventList.add(asyncObject);
}
// 전체 병렬 처리 시작 및 대기(jdk8에선 join 걸어야 전체 실행이 보장된다)
CompletableFuture.allOf(asyncSseventList.toArray(new CompletableFuture[0])).join();
//기획전 내 상품이 있는 기획전만 추출
List<YcvsSsevntInfo> resultList = sseventList.stream().filter(ssevent -> ssevent.getItems() != null && !ssevent.getItems().isEmpty()).collect(Collectors.toList());
return resultList;
}
반응형
댓글