feat: 일련번호 조회(seqinfo_pub) API 적용

제품조회 반영(업체의 제품 조회 되도록)
main
Jonguk. Lim 3 months ago
parent 9db90b9d82
commit 37052ea41c

@ -33,7 +33,7 @@ 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);
ApiBaseResponse<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.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);

@ -149,20 +149,22 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
List<NimsApiDto.ProductInfoKd> list = new ArrayList<>(); List<NimsApiDto.ProductInfoKd> list = new ArrayList<>();
// DB 조회 ////////////////////////////////////////////////////////////////////////////////////////
if("N".equals(reqDto.getDbSkipYn())) { // TODO: API 적용후 DB 조회 skip 처리
list = bizNimsMapper.selectProductInfos(reqDto); // if("N".equals(reqDto.getDbSkipYn())) {
if (!isEmpty(list)){ // list = bizNimsMapper.selectProductInfos(reqDto);
if(isMnfSeqInfo){ // if (!isEmpty(list)){
if(isEmpty(reqDto.getK())){ // if(isMnfSeqInfo){
productInfoaddMnfSeqs(list, getApiInfInfo(reqDto.getUserId()).get("apiKey")); // if(isEmpty(reqDto.getK())){
}else { // productInfoaddMnfSeqs(list, reqDto.getBc(), getApiInfInfo(reqDto.getUserId()).get("apiKey"));
productInfoaddMnfSeqs(list, reqDto.getK()); // }else {
} // productInfoaddMnfSeqs(list, reqDto.getBc(), reqDto.getK());
} // }
return list; // }
} // return list;
} // }
// }
///////////////////////////////////////////////////////////////
if(isEmpty(reqDto.getK())){ if(isEmpty(reqDto.getK())){
reqDto.setK(getApiInfInfo(reqDto.getUserId()).get("apiKey")); 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); list.addAll(curList);
if(rslt.isEndYn()) break; if(rslt.isEndYn()) break;
@ -201,84 +203,28 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
//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<>();
//while (true) {
NimsApiResult.Response<NimsApiDto.MnfSeqInfo> rslt = infNimsService.getMnfSeqInfo(reqDto);
List<NimsApiDto.MnfSeqInfo> curList = rslt.getResult(); NimsApiResult.Response<NimsApiDto.MnfSeqInfo> rslt = infNimsService.getMnfSeqInfo(reqDto);
List<NimsApiDto.MnfSeqInfo> list = rslt.getResult();
if(isPrdValidDe) { // 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리
for (NimsApiDto.MnfSeqInfo d : curList) { if(!isEmpty(list) && (!isEmpty(reqDto.getT()) && !isEmpty(reqDto.getVd()))) {
if(!isEmpty(d.getPrdValidDe()) && d.getPrdValidDe().contains(reqDto.getPrdValidDe())){ list.sort((a, b) -> {
list.add(d); if (isEmpty(a.getPrdValidDe()) && isEmpty(b.getPrdValidDe()))
} return 0;
} if (isEmpty(a.getPrdValidDe()))
}else { return -1;
list.addAll(curList); 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<List<NimsApiDto.MnfSeqInfo>> res = ApiBaseResponse.of(list); ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> res = ApiBaseResponse.of(list);
res.setTotalCount(rslt.getBody().getTotalCount()); res.setTotalCount(rslt.getBody().getTotalCount());
return res; return res;
} }
@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"); // 조회페이지
// 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리
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) {
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 @Override
public List<NimsApiDto.JurisdictionGovInfo> getJurisdictionGovInfo(final NimsApiRequest.JurisdictionGovInfoReq reqDto) { public List<NimsApiDto.JurisdictionGovInfo> getJurisdictionGovInfo(final NimsApiRequest.JurisdictionGovInfoReq reqDto) {
List<NimsApiDto.JurisdictionGovInfo> list = new ArrayList<>(); List<NimsApiDto.JurisdictionGovInfo> list = new ArrayList<>();
@ -443,7 +389,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
map.put("dscdmngId", dto.getDscdmngId()); map.put("dscdmngId", dto.getDscdmngId());
List<BizNimsResponse.DsuseMgtDtlRes> dsuseRptInfoDtls = bizNimsMapper.selectDsuseMgtDtls(map); List<BizNimsResponse.DsuseMgtDtlRes> dsuseRptInfoDtls = bizNimsMapper.selectDsuseMgtDtls(map);
if(isForDoc) setDsuseMgtDtlAddProductInfo(dsuseRptInfoDtls, reqDto.getUserId(), apiKey); if(isForDoc) setDsuseMgtDtlAddProductInfo(dsuseRptInfoDtls, dto.getBsshCd(), reqDto.getUserId(), apiKey);
dto.getDsuseMgtDtls().addAll(dsuseRptInfoDtls); dto.getDsuseMgtDtls().addAll(dsuseRptInfoDtls);
} }
@ -565,7 +511,6 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
.fg("1") .fg("1")
.pg("1") .pg("1")
.p(mnfSeqInfo.getPrductCd()) .p(mnfSeqInfo.getPrductCd())
.dbSkipYn("N")
.userId(userId) .userId(userId)
.build(); .build();
List<NimsApiDto.ProductInfoKd> productInfoKds = saveProductInfoKd(prdReq, false); List<NimsApiDto.ProductInfoKd> productInfoKds = saveProductInfoKd(prdReq, false);
@ -610,7 +555,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
* @param dtlList <NimsApiDto.DsuseRptInfoDtl> * @param dtlList <NimsApiDto.DsuseRptInfoDtl>
* </pre> * </pre>
*/ */
private void setDsuseMgtDtlAddProductInfo(List<BizNimsResponse.DsuseMgtDtlRes> dtlList, String userId, String apiKey) { private void setDsuseMgtDtlAddProductInfo(List<BizNimsResponse.DsuseMgtDtlRes> dtlList, String bsshCd, String userId, String apiKey) {
for (BizNimsResponse.DsuseMgtDtlRes r : dtlList) { for (BizNimsResponse.DsuseMgtDtlRes r : dtlList) {
// 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm) // 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm)
if (isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())) { if (isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())) {
@ -899,7 +844,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
* @param apiKey Api Key * @param apiKey Api Key
* </pre> * </pre>
*/ */
private void productInfoaddMnfSeqs(final List<NimsApiDto.ProductInfoKd> list, final String apiKey) { private void productInfoaddMnfSeqs(final List<NimsApiDto.ProductInfoKd> list, final String bsshCd, final String apiKey) {
String productCd = ""; String productCd = "";
try { try {
@ -913,6 +858,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
.fg("1") .fg("1")
.pg("1") .pg("1")
.p(d.getPrductCd()) .p(d.getPrductCd())
.bc(bsshCd)
.userId("") .userId("")
.build() .build()
); );
@ -997,4 +943,48 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
return files.get(0).getId(); return files.get(0).getId();
} }
private 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"); // 조회페이지
// 시리얼번호 및 제조번호 기준 검색후, 결과내에서 유효기간으로 필터링 하도록 처리
boolean isPrdValidDe = !isEmpty(reqDto.getT()) && !isEmpty(reqDto.getVd());
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) {
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;
}
} }

@ -85,13 +85,13 @@ public class BizNimsController {
return 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" }) // @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 }) // @RequestMapping(value = "/getNimsMnfSeqInfo2", method = { RequestMethod.POST, RequestMethod.GET })
public ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getNimsMnfSeqInfo2( // public ApiBaseResponse<List<NimsApiDto.MnfSeqInfo>> getNimsMnfSeqInfo2(
@ModelAttribute NimsApiRequest.MnfSeqInfoReq dto // @ModelAttribute NimsApiRequest.MnfSeqInfoReq dto
) { // ) {
return ApiBaseResponse.of(bizNimsService.getMnfSeqInfo2(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" })
@RequestMapping(value = "/getNimsJurisdictionGovInfo", method = { RequestMethod.POST, RequestMethod.GET }) @RequestMapping(value = "/getNimsJurisdictionGovInfo", method = { RequestMethod.POST, RequestMethod.GET })

@ -198,15 +198,11 @@ public class NimsApiRequest {
/** /**
* <pre> * <pre>
* DB skip *
* DB NIMS API
* true DB skip
*
* </pre> * </pre>
*/ */
@Schema(title = "DB 조회 skip 여부", description = "DB 조회 skip 여부(DB 조회 없이 NIMS API호출 하려면 Y)", example = "N") @Schema(title = "마약류취급자번호", description = "마약류취급자번호", example = " ")
@Builder.Default private String bc;
private String dbSkipYn = "N";
/** /**
* <pre> * <pre>
@ -384,11 +380,17 @@ public class NimsApiRequest {
@Pattern(regexp = "^$|[A-Z0-9]{1,}", message = "번호는 영숫자(A~Z, 0~9)만 입력가능합니다") @Pattern(regexp = "^$|[A-Z0-9]{1,}", message = "번호는 영숫자(A~Z, 0~9)만 입력가능합니다")
private String t = StringUtils.EMPTY; private String t = StringUtils.EMPTY;
/**
*
*/
@Schema(title = "마약류 취급자 식별 번호", description = "마약류 취급자 식별 번호", example = " ")
private String bc;
/** /**
* *
*/ */
@Schema(title = "유효기간", description = "유효기간", example = " ") @Schema(title = "유효기간", description = "유효기간", example = " ")
private String prdValidDe; private String vd;
/** /**
* <pre> * <pre>

@ -57,7 +57,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
private String productinfoKd; private String productinfoKd;
/** /**
* API URL * API URL
*/ */
@Value("${app.inf.nims.api.seqinfo}") @Value("${app.inf.nims.api.seqinfo}")
private String seqinfo; private String seqinfo;
@ -95,18 +95,30 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
ApiUtil.validate(dto, null, validator); ApiUtil.validate(dto, null, validator);
if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null); 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<NimsApiDto.ProductInfoKd> result = json.parse(rslt, new TypeReference<>() {}); NimsApiResult<NimsApiDto.ProductInfoKd> result = json.parse(rslt, new TypeReference<>() {});
return result.getResponse(); return result.getResponse();
} }
/**
* API URL
* @param dto NimsApiRequest.MnfSeqInfoReq
* @return NimsApiResult.Response<NimsApiDto.MnfSeqInfo>
*/
@Override @Override
//@TraceLogging
public NimsApiResult.Response<NimsApiDto.MnfSeqInfo> getMnfSeqInfo(NimsApiRequest.MnfSeqInfoReq dto) { public NimsApiResult.Response<NimsApiDto.MnfSeqInfo> getMnfSeqInfo(NimsApiRequest.MnfSeqInfoReq dto) {
ApiUtil.validate(dto, null, validator); ApiUtil.validate(dto, null, validator);
if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null); 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<NimsApiDto.MnfSeqInfo> result = json.parse(rslt, new TypeReference<>() {}); NimsApiResult<NimsApiDto.MnfSeqInfo> result = json.parse(rslt, new TypeReference<>() {});
return result.getResponse(); return result.getResponse();
} }

@ -52,7 +52,7 @@ public class InfNimsController {
return ApiBaseResponse.of(infNimsService.getProductInfoKd(dto)); return ApiBaseResponse.of(infNimsService.getProductInfoKd(dto));
} }
@Operation(summary = "제조 일련 번호 정보 조회", description = "제조 일련 번호 정보 조회") @Operation(summary = "제조 일련 번호 정보 조회(업체별)", description = "제조 일련 번호 정보 조회(업체별)")
@PostMapping("/getMnfSeqInfo") @PostMapping("/getMnfSeqInfo")
public ApiBaseResponse<NimsApiResult.Response<NimsApiDto.MnfSeqInfo>> getMnfSeqInfo( public ApiBaseResponse<NimsApiResult.Response<NimsApiDto.MnfSeqInfo>> getMnfSeqInfo(
@RequestBody NimsApiRequest.MnfSeqInfoReq dto @RequestBody NimsApiRequest.MnfSeqInfoReq dto

@ -4,7 +4,7 @@ app:
api: api:
bsshinfoStV1: /api/bsshinfo_st_v1.do bsshinfoStV1: /api/bsshinfo_st_v1.do
productinfoKd: /api/productinfo_kd.do productinfoKd: /api/productinfo_kd.do
seqinfo: /api/seqinfo.do seqinfo: /api/seqinfo_pub.do
officeinfo: /api/officeinfo.do officeinfo: /api/officeinfo.do
placeinfoV1: /api/placeinfo_v1.do placeinfoV1: /api/placeinfo_v1.do
dsuseresult: /api/dsuseresult.do dsuseresult: /api/dsuseresult.do

Loading…
Cancel
Save