diff --git a/src/main/java/cokr/xit/interfaces/lntris/LntrisBean.java b/src/main/java/cokr/xit/interfaces/lntris/LntrisBean.java index 962bf22..832f1d5 100644 --- a/src/main/java/cokr/xit/interfaces/lntris/LntrisBean.java +++ b/src/main/java/cokr/xit/interfaces/lntris/LntrisBean.java @@ -6,9 +6,23 @@ import java.util.function.Function; import cokr.xit.foundation.component.ScheduledBean; +/**연계 작업 Bean + * @author mjkhan + */ public abstract class LntrisBean extends ScheduledBean { + /**연계메시지 웹 요청자 */ protected Requestor requestor = new Requestor(); + /**상세응답 전체목록을 페이징하여 받기위한 요청을 실행한다. + * @param 요청 유형 + * @param 응답 유형 + * @param 연계메시지 유형 + * @param info 연계정보 + * @param getDetails 상세응답 목록 반환 function + * @param insertResps 상세응답 등록 function + * @param updateReq 다음 페이지에 대한 요청 수정 function + * @param start 시작 데이터 인덱스(0부터 시작) + */ protected > void pagingRequest( T info, Function> getDetails, @@ -16,13 +30,24 @@ public abstract class LntrisBean extends ScheduledBean { BiConsumer updateReq, int start ) { + R respBody = info.getTargetMessage().getBody(); + String rstCd = respBody.getLinkRstCd(), // 최초 또는 이전 조회결과 + rstMsg = respBody.getLinkRstMsg(); + log().debug("Result before request: {} {}", rstCd, rstMsg); + requestor.request(info); List details = getDetails.apply(info); int found = details.size(); boolean empty = found < 1; if (!empty) InterfaceConfig.databaseActive(() -> insertResps.accept(info, start)); - if (found < 100) return; // 페이징 사이즈 = 100 + if (found < 100) { // 페이징 사이즈 = 100 + if (empty && !isEmpty(rstCd)) { // 마지막 페이지의 조회결과가 없을 경우(전체 데이터 수 mod 페이징 사이즈 == 0 일 경우) 최초 조회결과를 설정 + respBody.setLinkRstCd(rstCd); + respBody.setLinkRstMsg(rstMsg); + } + return; + } updateReq.accept(info.getRequest(), details.get(found - 1));