fix: 시리얼번호검색 페이징 적용

dev
Jonguk. Lim 4 months ago
parent 626b759d4b
commit d59489a823

@ -7,6 +7,7 @@ import org.springframework.web.multipart.MultipartFile;
import cokr.xit.adds.biz.nims.model.BizNimsDto; import cokr.xit.adds.biz.nims.model.BizNimsDto;
import cokr.xit.adds.biz.nims.model.BizNimsRequest; import cokr.xit.adds.biz.nims.model.BizNimsRequest;
import cokr.xit.adds.biz.nims.model.BizNimsResponse; import cokr.xit.adds.biz.nims.model.BizNimsResponse;
import cokr.xit.adds.core.model.ApiBaseResponse;
import cokr.xit.adds.inf.nims.model.NimsApiDto; import cokr.xit.adds.inf.nims.model.NimsApiDto;
import cokr.xit.adds.inf.nims.model.NimsApiRequest; import cokr.xit.adds.inf.nims.model.NimsApiRequest;
@ -31,7 +32,8 @@ public interface BizNimsService {
//------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------
List<NimsApiDto.BsshInfoSt> saveBsshInfoSt(final NimsApiRequest.BsshInfoReq dto); List<NimsApiDto.BsshInfoSt> saveBsshInfoSt(final NimsApiRequest.BsshInfoReq dto);
List<NimsApiDto.ProductInfoKd> saveProductInfoKd(final NimsApiRequest.ProductInfoReq dto, boolean isMnfSeqInfo); List<NimsApiDto.ProductInfoKd> saveProductInfoKd(final NimsApiRequest.ProductInfoReq dto, boolean isMnfSeqInfo);
List<NimsApiDto.MnfSeqInfo> getMnfSeqInfo(final NimsApiRequest.MnfSeqInfoReq dto); ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getMnfSeqInfo(final NimsApiRequest.MnfSeqInfoReq dto);
List<NimsApiDto.MnfSeqInfo> getMnfSeqInfo2(final NimsApiRequest.MnfSeqInfoReq dto);
List<NimsApiDto.JurisdictionGovInfo> getJurisdictionGovInfo(final NimsApiRequest.JurisdictionGovInfoReq dto); List<NimsApiDto.JurisdictionGovInfo> getJurisdictionGovInfo(final NimsApiRequest.JurisdictionGovInfoReq dto);
List<NimsApiDto.DsuseRptInfo> getNimsDsuseRptInfo(final NimsApiRequest.DsuseRptInfoReq dto); List<NimsApiDto.DsuseRptInfo> getNimsDsuseRptInfo(final NimsApiRequest.DsuseRptInfoReq dto);

@ -21,6 +21,7 @@ import cokr.xit.adds.biz.nims.model.BizNimsResponse;
import cokr.xit.adds.biz.nims.service.BizNimsService; import cokr.xit.adds.biz.nims.service.BizNimsService;
import cokr.xit.adds.core.Constants; import cokr.xit.adds.core.Constants;
import cokr.xit.adds.core.Constants.RPT_TY_CD; import cokr.xit.adds.core.Constants.RPT_TY_CD;
import cokr.xit.adds.core.model.ApiBaseResponse;
import cokr.xit.adds.core.spring.exception.ApiCustomException; import cokr.xit.adds.core.spring.exception.ApiCustomException;
import cokr.xit.adds.core.util.ApiUtil; import cokr.xit.adds.core.util.ApiUtil;
import cokr.xit.adds.inf.nims.model.NimsApiDto; import cokr.xit.adds.inf.nims.model.NimsApiDto;
@ -193,41 +194,71 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
} }
@Override @Override
public List<NimsApiDto.MnfSeqInfo> getMnfSeqInfo(NimsApiRequest.MnfSeqInfoReq reqDto) { public ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getMnfSeqInfo(NimsApiRequest.MnfSeqInfoReq reqDto) {
if(isEmpty(reqDto.getK())){ if(isEmpty(reqDto.getK())){
reqDto.setK(getApiInfInfo(reqDto.getUserId()).get("apiKey")); reqDto.setK(getApiInfInfo(reqDto.getUserId()).get("apiKey"));
} }
//reqDto.setFg("1"); // 제조번호 또는 일련번호 구분(1-제조번호, 2-일련번호, 3-바코드/RFID) //reqDto.setFg("1"); // 제조번호 또는 일련번호 구분(1-제조번호, 2-일련번호, 3-바코드/RFID)
reqDto.setPg("1"); // 조회페이지 //reqDto.setPg("1"); // 조회페이지
// 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리
boolean isPrdValidDe = !isEmpty(reqDto.getT()) && !isEmpty(reqDto.getPrdValidDe());
List<NimsApiDto.MnfSeqInfo> list = new ArrayList<>(); List<NimsApiDto.MnfSeqInfo> list = new ArrayList<>();
while (true) { //while (true) {
NimsApiResult.Response<NimsApiDto.MnfSeqInfo> rslt = infNimsService.getMnfSeqInfo(reqDto); NimsApiResult.Response<NimsApiDto.MnfSeqInfo> rslt = infNimsService.getMnfSeqInfo(reqDto);
List<NimsApiDto.MnfSeqInfo> curList = rslt.getResult(); List<NimsApiDto.MnfSeqInfo> curList = rslt.getResult();
if (isEmpty(curList)) break; if(isPrdValidDe) {
for (NimsApiDto.MnfSeqInfo d : curList) {
if(!isEmpty(d.getPrdValidDe()) && d.getPrdValidDe().contains(reqDto.getPrdValidDe())){
list.add(d);
}
}
}else {
list.addAll(curList); list.addAll(curList);
list.sort((a, b) -> {
if (isEmpty(a.getPrdValidDe()) && isEmpty(b.getPrdValidDe()))
return 0;
if (isEmpty(a.getPrdValidDe()))
return -1;
if (isEmpty(b.getPrdValidDe()))
return 1;
return a.getPrdValidDe().compareTo(b.getPrdValidDe());
});
}
// 데이타 조회 결과 마지막 페이지 이거나 100건 이상인 경우 종료 ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> res = ApiBaseResponse.of(list);
if(rslt.isEndYn() || list.size() >= 200) break; res.setTotalCount(rslt.getBody().getTotalCount());
return res;
}
reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1)); @Override
public List<NimsApiDto.MnfSeqInfo> getMnfSeqInfo2(NimsApiRequest.MnfSeqInfoReq reqDto) {
if(isEmpty(reqDto.getK())){
reqDto.setK(getApiInfInfo(reqDto.getUserId()).get("apiKey"));
} }
//reqDto.setFg("1"); // 제조번호 또는 일련번호 구분(1-제조번호, 2-일련번호, 3-바코드/RFID)
reqDto.setPg("1"); // 조회페이지
// 유효기간을 기준으로 검색하면 시리얼조회건수가 많아(10000건이상인 경우등) 무한루프가 도는 것처럼 보여짐
// 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리 // 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리
boolean isPrdValidDe = !isEmpty(reqDto.getPrdValidDe()); boolean isPrdValidDe = !isEmpty(reqDto.getT()) && !isEmpty(reqDto.getPrdValidDe());
List<NimsApiDto.MnfSeqInfo> list = new ArrayList<>();
while (true) {
NimsApiResult.Response<NimsApiDto.MnfSeqInfo> rslt = infNimsService.getMnfSeqInfo(reqDto);
List<NimsApiDto.MnfSeqInfo> curList = rslt.getResult();
if (isEmpty(curList)) break;
if(isPrdValidDe) { if(isPrdValidDe) {
List<NimsApiDto.MnfSeqInfo> tempList = new ArrayList<>(); for (NimsApiDto.MnfSeqInfo d : curList) {
for (NimsApiDto.MnfSeqInfo d : list) {
if(!isEmpty(d.getPrdValidDe()) && d.getPrdValidDe().contains(reqDto.getPrdValidDe())){ if(!isEmpty(d.getPrdValidDe()) && d.getPrdValidDe().contains(reqDto.getPrdValidDe())){
tempList.add(d); list.add(d);
}
} }
return tempList;
} }
}else {
list.addAll(curList);
// 올림 차순 정렬 // 올림 차순 정렬
list.sort((a, b) -> { list.sort((a, b) -> {
if (isEmpty(a.getPrdValidDe()) && isEmpty(b.getPrdValidDe())) if (isEmpty(a.getPrdValidDe()) && isEmpty(b.getPrdValidDe()))
@ -238,6 +269,12 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
return 1; return 1;
return a.getPrdValidDe().compareTo(b.getPrdValidDe()); return a.getPrdValidDe().compareTo(b.getPrdValidDe());
}); });
}
// 데이타 조회 결과 마지막 페이지 이거나 100건 이상인 경우 종료
if(rslt.isEndYn() || list.size() > 100 || isPrdValidDe) break;
reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1));
}
return list; return list;
} }
@ -907,7 +944,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
for (NimsApiDto.ProductInfoKd d : list) { for (NimsApiDto.ProductInfoKd d : list) {
productCd = d.getPrductCd(); productCd = d.getPrductCd();
List<NimsApiDto.MnfSeqInfo> mnfList = getMnfSeqInfo( List<NimsApiDto.MnfSeqInfo> mnfList = getMnfSeqInfo2(
NimsApiRequest.MnfSeqInfoReq.builder() NimsApiRequest.MnfSeqInfoReq.builder()
.k(apiKey) .k(apiKey)
.fg("1") .fg("1")

@ -82,7 +82,15 @@ public class BizNimsController {
public ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getNimsMnfSeqInfo( public ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getNimsMnfSeqInfo(
@ModelAttribute NimsApiRequest.MnfSeqInfoReq dto @ModelAttribute NimsApiRequest.MnfSeqInfoReq dto
) { ) {
return ApiBaseResponse.of(bizNimsService.getMnfSeqInfo(dto)); return bizNimsService.getMnfSeqInfo(dto);
}
@Operation(summary = "NIMS 제조 일련 번호 정보 조회", description = "제보 일련 번호 정보 조회<br>NIMS API 호출 결과 Return<br><br><strong>아래 항목만 set</strong><br>p - 제품번호<br>userId - 사용자ID", tags = { "NIMS API" })
@RequestMapping(value = "/getNimsMnfSeqInfo2", method = { RequestMethod.POST, RequestMethod.GET })
public ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getNimsMnfSeqInfo2(
@ModelAttribute NimsApiRequest.MnfSeqInfoReq dto
) {
return ApiBaseResponse.of(bizNimsService.getMnfSeqInfo2(dto));
} }
@Operation(summary = "NIMS 관할 허가 관청 정보 조회", description = "관할 허가 관청 정보 조회<br><br>NIMS API 호출 결과를 DB에 저장후 결과 Return<br><br><strong>아래 항목만 set</strong><br>onm - 기관명<br>ocd - 기관코드<br>adr - 주소<br>dbSkipYn - N : db조회후 결과 없는경우만 API호출, Y : API 호출<br>userId - 사용자ID<br><strong>onm, ocd, adr중 하나는 필수</strong>", tags = { "NIMS API" }) @Operation(summary = "NIMS 관할 허가 관청 정보 조회", description = "관할 허가 관청 정보 조회<br><br>NIMS API 호출 결과를 DB에 저장후 결과 Return<br><br><strong>아래 항목만 set</strong><br>onm - 기관명<br>ocd - 기관코드<br>adr - 주소<br>dbSkipYn - N : db조회후 결과 없는경우만 API호출, Y : API 호출<br>userId - 사용자ID<br><strong>onm, ocd, adr중 하나는 필수</strong>", tags = { "NIMS API" })

@ -4,7 +4,6 @@ import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Objects; import java.util.Objects;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@ -51,7 +50,7 @@ public class ApiBaseResponse<T> {
private T data; private T data;
@Schema(requiredMode = REQUIRED, title = "실행 결과 건수", description = "실행 결과 건수", example = " ") @Schema(requiredMode = REQUIRED, title = "실행 결과 건수", description = "실행 결과 건수", example = " ")
private int totalCount; private int totalCount = 0;
@Schema(requiredMode = REQUIRED, title = "API 실행 성공 or 실패", description = "API 실행 성공(true) or 실패(false)", example = " ") @Schema(requiredMode = REQUIRED, title = "API 실행 성공 or 실패", description = "API 실행 성공(true) or 실패(false)", example = " ")
private Boolean success = Objects.equals(code, ResultCode.SUCCESS.getStatusCode()); private Boolean success = Objects.equals(code, ResultCode.SUCCESS.getStatusCode());
@ -102,20 +101,4 @@ public class ApiBaseResponse<T> {
this.message = message; this.message = message;
this.data = data; this.data = data;
} }
public int getTotalCount() {
if(data == null){
this.totalCount = 0;
}else {
if (Collection.class.isAssignableFrom(data.getClass())) {
this.totalCount = ((Collection<?>) data).size();
} else {
this.totalCount = 1;
}
}
return totalCount;
}
} }

Loading…
Cancel
Save