From 37052ea41c3173ad237dbc6c948578911750ee5c Mon Sep 17 00:00:00 2001 From: "Jonguk. Lim" Date: Thu, 22 Aug 2024 17:52:26 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9D=BC=EB=A0=A8=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C(seqinfo=5Fpub)=20API=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=20=20=20=20=20=20=EC=A0=9C=ED=92=88=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=B0=98=EC=98=81(=EC=97=85=EC=B2=B4=EC=9D=98=20=EC=A0=9C?= =?UTF-8?q?=ED=92=88=20=EC=A1=B0=ED=9A=8C=20=EB=90=98=EB=8F=84=EB=A1=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adds/biz/nims/service/BizNimsService.java | 2 +- .../nims/service/bean/BizNimsServiceBean.java | 166 ++++++++---------- .../adds/biz/nims/web/BizNimsController.java | 14 +- .../adds/inf/nims/model/NimsApiRequest.java | 18 +- .../nims/service/bean/InfNimsServiceBean.java | 20 ++- .../adds/inf/nims/web/InfNimsController.java | 2 +- .../resources/config/application-nims.yml | 2 +- 7 files changed, 114 insertions(+), 110 deletions(-) diff --git a/src/main/java/cokr/xit/adds/biz/nims/service/BizNimsService.java b/src/main/java/cokr/xit/adds/biz/nims/service/BizNimsService.java index 471ff99..f7860ab 100644 --- a/src/main/java/cokr/xit/adds/biz/nims/service/BizNimsService.java +++ b/src/main/java/cokr/xit/adds/biz/nims/service/BizNimsService.java @@ -33,7 +33,7 @@ public interface BizNimsService { List saveBsshInfoSt(final NimsApiRequest.BsshInfoReq dto); List saveProductInfoKd(final NimsApiRequest.ProductInfoReq dto, boolean isMnfSeqInfo); ApiBaseResponse> getMnfSeqInfo(final NimsApiRequest.MnfSeqInfoReq dto); - List getMnfSeqInfo2(final NimsApiRequest.MnfSeqInfoReq dto); +// List getMnfSeqInfo2(final NimsApiRequest.MnfSeqInfoReq dto); List getJurisdictionGovInfo(final NimsApiRequest.JurisdictionGovInfoReq dto); List getNimsDsuseRptInfo(final NimsApiRequest.DsuseRptInfoReq dto); diff --git a/src/main/java/cokr/xit/adds/biz/nims/service/bean/BizNimsServiceBean.java b/src/main/java/cokr/xit/adds/biz/nims/service/bean/BizNimsServiceBean.java index 5c0b6ae..6ef6d6b 100644 --- a/src/main/java/cokr/xit/adds/biz/nims/service/bean/BizNimsServiceBean.java +++ b/src/main/java/cokr/xit/adds/biz/nims/service/bean/BizNimsServiceBean.java @@ -149,20 +149,22 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe List list = new ArrayList<>(); - // DB 조회 - if("N".equals(reqDto.getDbSkipYn())) { - list = bizNimsMapper.selectProductInfos(reqDto); - if (!isEmpty(list)){ - if(isMnfSeqInfo){ - if(isEmpty(reqDto.getK())){ - productInfoaddMnfSeqs(list, getApiInfInfo(reqDto.getUserId()).get("apiKey")); - }else { - productInfoaddMnfSeqs(list, reqDto.getK()); - } - } - return list; - } - } + //////////////////////////////////////////////////////////////////////////////////////// + // TODO: API 적용후 DB 조회 skip 처리 + // if("N".equals(reqDto.getDbSkipYn())) { + // list = bizNimsMapper.selectProductInfos(reqDto); + // if (!isEmpty(list)){ + // if(isMnfSeqInfo){ + // if(isEmpty(reqDto.getK())){ + // productInfoaddMnfSeqs(list, reqDto.getBc(), getApiInfInfo(reqDto.getUserId()).get("apiKey")); + // }else { + // productInfoaddMnfSeqs(list, reqDto.getBc(), reqDto.getK()); + // } + // } + // return list; + // } + // } + /////////////////////////////////////////////////////////////// if(isEmpty(reqDto.getK())){ reqDto.setK(getApiInfInfo(reqDto.getUserId()).get("apiKey")); @@ -184,7 +186,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe } // 제조 번호, 일련번호, 유효기간 정보 목록 추가 - if(isMnfSeqInfo) productInfoaddMnfSeqs(curList, reqDto.getK()); + if(isMnfSeqInfo) productInfoaddMnfSeqs(curList, reqDto.getBc(), reqDto.getK()); list.addAll(curList); if(rslt.isEndYn()) break; @@ -201,84 +203,28 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe //reqDto.setFg("1"); // 제조번호 또는 일련번호 구분(1-제조번호, 2-일련번호, 3-바코드/RFID) //reqDto.setPg("1"); // 조회페이지 - // 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리 - boolean isPrdValidDe = !isEmpty(reqDto.getT()) && !isEmpty(reqDto.getPrdValidDe()); - List list = new ArrayList<>(); - //while (true) { - NimsApiResult.Response rslt = infNimsService.getMnfSeqInfo(reqDto); - List curList = rslt.getResult(); + NimsApiResult.Response rslt = infNimsService.getMnfSeqInfo(reqDto); + List list = rslt.getResult(); - if(isPrdValidDe) { - for (NimsApiDto.MnfSeqInfo d : curList) { - if(!isEmpty(d.getPrdValidDe()) && d.getPrdValidDe().contains(reqDto.getPrdValidDe())){ - list.add(d); - } - } - }else { - list.addAll(curList); + // 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리 + if(!isEmpty(list) && (!isEmpty(reqDto.getT()) && !isEmpty(reqDto.getVd()))) { + 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()); + }); } - 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()); - }); - ApiBaseResponse> res = ApiBaseResponse.of(list); res.setTotalCount(rslt.getBody().getTotalCount()); return res; } - @Override - public List 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"); // 조회페이지 - - // 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리 - boolean isPrdValidDe = !isEmpty(reqDto.getT()) && !isEmpty(reqDto.getPrdValidDe()); - List list = new ArrayList<>(); - while (true) { - NimsApiResult.Response rslt = infNimsService.getMnfSeqInfo(reqDto); - - List 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.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건 이상인 경우 종료 - if(rslt.isEndYn() || list.size() > 100 || isPrdValidDe) break; - - reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1)); - } - return list; - } - @Override public List getJurisdictionGovInfo(final NimsApiRequest.JurisdictionGovInfoReq reqDto) { List list = new ArrayList<>(); @@ -443,7 +389,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe Map map = new HashMap<>(); map.put("dscdmngId", dto.getDscdmngId()); List dsuseRptInfoDtls = bizNimsMapper.selectDsuseMgtDtls(map); - if(isForDoc) setDsuseMgtDtlAddProductInfo(dsuseRptInfoDtls, reqDto.getUserId(), apiKey); + if(isForDoc) setDsuseMgtDtlAddProductInfo(dsuseRptInfoDtls, dto.getBsshCd(), reqDto.getUserId(), apiKey); dto.getDsuseMgtDtls().addAll(dsuseRptInfoDtls); } @@ -565,7 +511,6 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe .fg("1") .pg("1") .p(mnfSeqInfo.getPrductCd()) - .dbSkipYn("N") .userId(userId) .build(); List productInfoKds = saveProductInfoKd(prdReq, false); @@ -610,7 +555,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe * @param dtlList * */ - private void setDsuseMgtDtlAddProductInfo(List dtlList, String userId, String apiKey) { + private void setDsuseMgtDtlAddProductInfo(List dtlList, String bsshCd, String userId, String apiKey) { for (BizNimsResponse.DsuseMgtDtlRes r : dtlList) { // 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm) if (isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())) { @@ -899,7 +844,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe * @param apiKey Api Key * */ - private void productInfoaddMnfSeqs(final List list, final String apiKey) { + private void productInfoaddMnfSeqs(final List list, final String bsshCd, final String apiKey) { String productCd = ""; try { @@ -913,6 +858,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe .fg("1") .pg("1") .p(d.getPrductCd()) + .bc(bsshCd) .userId("") .build() ); @@ -997,4 +943,48 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe return files.get(0).getId(); } + + private List 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"); // 조회페이지 + + // 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리 + boolean isPrdValidDe = !isEmpty(reqDto.getT()) && !isEmpty(reqDto.getVd()); + List list = new ArrayList<>(); + while (true) { + NimsApiResult.Response rslt = infNimsService.getMnfSeqInfo(reqDto); + + List curList = rslt.getResult(); + + if (isEmpty(curList)) break; + + if(isPrdValidDe) { + for (NimsApiDto.MnfSeqInfo d : curList) { + if(!isEmpty(d.getPrdValidDe()) && d.getPrdValidDe().contains(reqDto.getVd())){ + list.add(d); + } + } + }else { + 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건 이상인 경우 종료 + if(rslt.isEndYn() || list.size() > 100 || isPrdValidDe) break; + + reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1)); + } + return list; + } } diff --git a/src/main/java/cokr/xit/adds/biz/nims/web/BizNimsController.java b/src/main/java/cokr/xit/adds/biz/nims/web/BizNimsController.java index 343cec9..ce29cad 100644 --- a/src/main/java/cokr/xit/adds/biz/nims/web/BizNimsController.java +++ b/src/main/java/cokr/xit/adds/biz/nims/web/BizNimsController.java @@ -85,13 +85,13 @@ public class BizNimsController { return bizNimsService.getMnfSeqInfo(dto); } - @Operation(summary = "NIMS 제조 일련 번호 정보 조회", description = "제보 일련 번호 정보 조회
NIMS API 호출 결과 Return

아래 항목만 set
p - 제품번호
userId - 사용자ID", tags = { "NIMS API" }) - @RequestMapping(value = "/getNimsMnfSeqInfo2", method = { RequestMethod.POST, RequestMethod.GET }) - public ApiBaseResponse> getNimsMnfSeqInfo2( - @ModelAttribute NimsApiRequest.MnfSeqInfoReq dto - ) { - return ApiBaseResponse.of(bizNimsService.getMnfSeqInfo2(dto)); - } + // @Operation(summary = "NIMS 제조 일련 번호 정보 조회", description = "제보 일련 번호 정보 조회
NIMS API 호출 결과 Return

아래 항목만 set
p - 제품번호
userId - 사용자ID", tags = { "NIMS API" }) + // @RequestMapping(value = "/getNimsMnfSeqInfo2", method = { RequestMethod.POST, RequestMethod.GET }) + // public ApiBaseResponse> getNimsMnfSeqInfo2( + // @ModelAttribute NimsApiRequest.MnfSeqInfoReq dto + // ) { + // return ApiBaseResponse.of(bizNimsService.getMnfSeqInfo2(dto)); + // } @Operation(summary = "NIMS 관할 허가 관청 정보 조회", description = "관할 허가 관청 정보 조회

NIMS API 호출 결과를 DB에 저장후 결과 Return

아래 항목만 set
onm - 기관명
ocd - 기관코드
adr - 주소
dbSkipYn - N : db조회후 결과 없는경우만 API호출, Y : API 호출
userId - 사용자ID
onm, ocd, adr중 하나는 필수", tags = { "NIMS API" }) @RequestMapping(value = "/getNimsJurisdictionGovInfo", method = { RequestMethod.POST, RequestMethod.GET }) diff --git a/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiRequest.java b/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiRequest.java index 4386160..a00effc 100644 --- a/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiRequest.java +++ b/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiRequest.java @@ -198,15 +198,11 @@ public class NimsApiRequest { /** *
-         * DB 조회 skip 여부
-         * DB먼저 조회 하고 없는 경우 NIMS API 조회 호출
-         * true 인 경우 DB 조회 skip
-         * 업무상 필요에 의해 추가
+         * 마약류취급자번호
          * 
*/ - @Schema(title = "DB 조회 skip 여부", description = "DB 조회 skip 여부(DB 조회 없이 NIMS API호출 하려면 Y)", example = "N") - @Builder.Default - private String dbSkipYn = "N"; + @Schema(title = "마약류취급자번호", description = "마약류취급자번호", example = " ") + private String bc; /** *
@@ -384,11 +380,17 @@ public class NimsApiRequest {
         @Pattern(regexp = "^$|[A-Z0-9]{1,}", message = "번호는 영숫자(A~Z, 0~9)만 입력가능합니다")
         private String t = StringUtils.EMPTY;
 
+        /**
+         * 마약류 취급자 식별 번호
+         */
+        @Schema(title = "마약류 취급자 식별 번호", description = "마약류 취급자 식별 번호", example = " ")
+        private String bc;
+
         /**
          * 유효기간
          */
         @Schema(title = "유효기간", description = "유효기간", example = " ")
-        private String prdValidDe;
+        private String vd;
 
         /**
          * 
diff --git a/src/main/java/cokr/xit/adds/inf/nims/service/bean/InfNimsServiceBean.java b/src/main/java/cokr/xit/adds/inf/nims/service/bean/InfNimsServiceBean.java
index 7b6cad6..4794b4e 100644
--- a/src/main/java/cokr/xit/adds/inf/nims/service/bean/InfNimsServiceBean.java
+++ b/src/main/java/cokr/xit/adds/inf/nims/service/bean/InfNimsServiceBean.java
@@ -57,7 +57,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 	private String productinfoKd;
 
 	/**
-	 * 마약류 제품 제조번호 정보 조회 API URL
+	 * 업체별 마약류 제품 제조번호 정보 조회 API URL
 	 */
 	@Value("${app.inf.nims.api.seqinfo}")
 	private String seqinfo;
@@ -95,18 +95,30 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 		ApiUtil.validate(dto, null, validator);
 		if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
 
-		String rslt = ApiUtil.callNimsApi(nimsUrl + productinfoKd, dto);
+		//FIXME: 운영기 반영 이후 주석 제거
+		//String rslt = ApiUtil.callNimsApi(nimsUrl + productinfoKd, dto);
+		dto.setK("998003699950fa950b798c9edea1b38f3cfbcf3b77e03e419");
+		String rslt = ApiUtil.callNimsApi("https://test.nims.or.kr" + productinfoKd, dto);
 		NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 		return result.getResponse();
 	}
 
+	/**
+	 * 업체별 상품일련번호 정보 조회 API URL
+	 * @param dto NimsApiRequest.MnfSeqInfoReq
+	 * @return NimsApiResult.Response
+	 */
 	@Override
-	//@TraceLogging
 	public NimsApiResult.Response getMnfSeqInfo(NimsApiRequest.MnfSeqInfoReq dto) {
 		ApiUtil.validate(dto, null, validator);
 		if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
 
-		String rslt = ApiUtil.callNimsApi(nimsUrl + seqinfo, dto);
+		//FIXME: 운영기 반영 이후 주석 제거
+		//String rslt = ApiUtil.callNimsApi(nimsUrl + seqinfo, dto);
+		//dto.setK("1d6646562470902a61fc334c83a249cdcc5dc753426942138ee04342e66c8128");
+		dto.setK("998003699950fa950b798c9edea1b38f3cfbcf3b77e03e419");
+		dto.setBc("");
+		String rslt = ApiUtil.callNimsApi("https://test.nims.or.kr" + seqinfo, dto);
 		NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 		return result.getResponse();
 	}
diff --git a/src/main/java/cokr/xit/adds/inf/nims/web/InfNimsController.java b/src/main/java/cokr/xit/adds/inf/nims/web/InfNimsController.java
index 345c4c7..c2dab5c 100644
--- a/src/main/java/cokr/xit/adds/inf/nims/web/InfNimsController.java
+++ b/src/main/java/cokr/xit/adds/inf/nims/web/InfNimsController.java
@@ -52,7 +52,7 @@ public class InfNimsController {
 		return ApiBaseResponse.of(infNimsService.getProductInfoKd(dto));
 	}
 
-	@Operation(summary = "제조 일련 번호 정보 조회", description = "제조 일련 번호 정보 조회")
+	@Operation(summary = "제조 일련 번호 정보 조회(업체별)", description = "제조 일련 번호 정보 조회(업체별)")
 	@PostMapping("/getMnfSeqInfo")
 	public ApiBaseResponse> getMnfSeqInfo(
 		@RequestBody NimsApiRequest.MnfSeqInfoReq dto
diff --git a/src/main/resources/config/application-nims.yml b/src/main/resources/config/application-nims.yml
index f4540b9..263320c 100644
--- a/src/main/resources/config/application-nims.yml
+++ b/src/main/resources/config/application-nims.yml
@@ -4,7 +4,7 @@ app:
       api:
         bsshinfoStV1: /api/bsshinfo_st_v1.do
         productinfoKd: /api/productinfo_kd.do
-        seqinfo: /api/seqinfo.do
+        seqinfo: /api/seqinfo_pub.do
         officeinfo: /api/officeinfo.do
         placeinfoV1: /api/placeinfo_v1.do
         dsuseresult: /api/dsuseresult.do