From b4daeec93f74c9e93f6e4320e5ef3c791982a2bb Mon Sep 17 00:00:00 2001 From: "Jonguk. Lim" Date: Tue, 30 Apr 2024 16:27:38 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8F=90=EA=B8=B0=EA=B4=80=EB=A6=AC=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xit/adds/biz/nims/dao/BizNimsMapper.java | 8 +- .../adds/biz/nims/model/BizNimsRequest.java | 36 ++++ .../adds/biz/nims/model/BizNimsResponse.java | 14 ++ .../adds/biz/nims/service/BizNimsService.java | 4 +- .../nims/service/bean/BizNimsServiceBean.java | 93 ++++++++-- .../adds/biz/nims/web/BizNimsController.java | 24 ++- .../xit/adds/core/model/ApiBaseResponse.java | 17 +- .../config/P6SpySqlMultilineFormat.java | 42 ----- .../xit/adds/inf/iros/model/IrosResponse.java | 14 +- .../xit/adds/inf/nims/model/NimsApiDto.java | 174 +++++++++--------- .../adds/inf/nims/model/NimsApiRequest.java | 134 +++++++------- .../adds/inf/nims/model/NimsApiResult.java | 15 +- .../adds/inf/nims/service/InfNimsService.java | 4 +- .../nims/service/bean/InfNimsServiceBean.java | 28 +-- .../adds/inf/nims/web/InfNimsController.java | 16 +- .../sql/mapper/biz/nims-mysql-mapper.xml | 162 ++++++++++++---- 16 files changed, 493 insertions(+), 292 deletions(-) delete mode 100644 src/main/java/cokr/xit/adds/core/spring/config/P6SpySqlMultilineFormat.java diff --git a/src/main/java/cokr/xit/adds/biz/nims/dao/BizNimsMapper.java b/src/main/java/cokr/xit/adds/biz/nims/dao/BizNimsMapper.java index 11c25c3..c8db8ad 100644 --- a/src/main/java/cokr/xit/adds/biz/nims/dao/BizNimsMapper.java +++ b/src/main/java/cokr/xit/adds/biz/nims/dao/BizNimsMapper.java @@ -31,7 +31,7 @@ public interface BizNimsMapper extends AbstractMapper { // NIMS API CALL //------------------------------------------------------------------------------------------------------ int mergeBsshInfoSt(NimsApiDto.BsshInfoSt dto); - // int mergeProductInfoKd(NimsApiDto.ProductInfoKd dto); + int mergeProductInfoKd(NimsApiDto.ProductInfoKd dto); // int mergeStorgeInfo(NimsApiDto.StorageInfo dto); //------------------------------------------------------------------------------------------------------ @@ -47,7 +47,11 @@ public interface BizNimsMapper extends AbstractMapper { int insertDsuseMgt(BizNimsRequest.DsuseMgt dto); NimsApiDto.DsuseRptInfo selectDsuseRptInfoByUsrRptIdNo(Map map); - List selectDsuseMgt(List dsuseMgtIds); + List selectDsuseRptInfoDtls(Map map); + + + List selectSavedDsuseMgts(List dsuseMgtIds); + List selectDsuseMgts(BizNimsRequest.DsuseMgtInq dto); // int insertDsuseMgtDtl(BizNimsRequest.DsuseMgtDtl dto); // int updateCancelDsuseMgtDtl(BizNimsRequest.DsuseMgt dto); diff --git a/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsRequest.java b/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsRequest.java index 4fc76cd..603f963 100644 --- a/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsRequest.java +++ b/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsRequest.java @@ -2,6 +2,8 @@ package cokr.xit.adds.biz.nims.model; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.*; +import java.util.List; + import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; @@ -97,6 +99,40 @@ public class BizNimsRequest { private String prgrsSttsCd = "01"; } + /** + * 마약류 폐기 관리 조회 request + */ + @Schema(name = "DsuseMgtInq", description = "마약류 폐기 관리 조회 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @EqualsAndHashCode(callSuper = false) + public static class DsuseMgtInq { + @Schema(requiredMode = AUTO, title = "폐기 관리 ID 목록", example = "[\"2024040001\", \"2024040002\"]") + private List dscdmngIds; + + @Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ") + @NotEmpty(message = "사용자 ID는 필수 입니다") + private String userId; + + /** + *
+		 * 진행상태
+		 *
+		 * 01-폐기보고 접수
+		 * 02-폐기보고 확인
+		 * 11-민원수령처리(전자결재)
+		 * 21-폐기결과통보서 작성
+		 * 22-폐기결과보고서 작성
+		 * 31-기안 및 발송
+		 * 41-폐기보고
+		 * 99-종료
+		 * 
+ */ + @Schema(requiredMode = REQUIRED, title = "진행 상태 코드", example = " ", allowableValues = {"01", "02", "11", "22", "31", "41", "99"}) + private String prgrsSttsCd = "01"; + } /** * 마약류 폐기 관리 상세 request */ diff --git a/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsResponse.java b/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsResponse.java index e91e5b1..f325274 100644 --- a/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsResponse.java +++ b/src/main/java/cokr/xit/adds/biz/nims/model/BizNimsResponse.java @@ -64,5 +64,19 @@ public class BizNimsResponse { * 허가번호 */ private String prmisnNo; + + // /** + // *
+		//  * 업체명
+		//  * 
+ // */ + // private String nrcdSeNm; + // + // /** + // *
+		//  * 업체구분명
+		//  * 
+ // */ + // private String prtmSeNm; } } 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 ec037e9..68e2d18 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 @@ -27,7 +27,7 @@ public interface BizNimsService { // NIMS API CALL //------------------------------------------------------------------------------------------------------ List saveBsshInfoSt(NimsApiRequest.BsshInfoRequest dto); - // List saveProductInfoKd(NimsApiRequest.ProductInfoRequest dto); + List saveProductInfoKd(NimsApiRequest.ProductInfoRequest dto); // List getMnfSeqInfo(NimsApiRequest.MnfSeqInfoRequest dto); // List getJurisdictionGovInfo(NimsApiRequest.JurisdictionGovInfoRequest dto); // List saveStorageInfo(NimsApiRequest.StorageInfoRequest dto); @@ -60,6 +60,8 @@ public interface BizNimsService { List saveDsuseMgt(List dtos); + List getDsuseMgts(BizNimsRequest.DsuseMgtInq dto); + // BizNimsAarDto.AarHeader getTgtDsuseRptData(BizNimsRequest.DsuseMgt dto); // BizNimsAarDto.AarHeader createTgtDsuseRptData(BizNimsAarDto.AarHeader 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 99182ef..9d003b4 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 @@ -66,7 +66,9 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe @Override public List saveBsshInfoSt(BsshInfoRequest dto) { NimsApiResult.Response result = infNimsService.getBsshInfoSt(dto); - List list = result.getResultOrThrow(); + List list = result.getResult(); + + if(isEmpty(list)) return list; for (BsshInfoSt d : list) { d.setRgtr(Constants.NIMS_API_USER_ID); @@ -75,18 +77,20 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe return list; } - // @Override - // public List saveProductInfoKd(ProductInfoRequest dto) { - // NimsApiResult.Response result = infNimsService.getProductInfoKd(dto); - // List list = result.getResultOrThrow(); - // - // for (ProductInfoKd d : list) { - // d.setRgtr(Constants.NIMS_API_USER_ID); - // bizNimsMapper.mergeProductInfoKd(d); - // } - // return list; - // } - // + @Override + public List saveProductInfoKd(NimsApiRequest.ProductInfoRequest dto) { + NimsApiResult.Response result = infNimsService.getProductInfoKd(dto); + List list = result.getResult(); + + if(isEmpty(list)) return list; + + for (NimsApiDto.ProductInfoKd d : list) { + d.setRgtr(Constants.NIMS_API_USER_ID); + bizNimsMapper.mergeProductInfoKd(d); + } + return list; + } + // @Override // public List getMnfSeqInfo(NimsApiRequest.MnfSeqInfoRequest dto) { // NimsApiResult.Response response = infNimsService.getMnfSeqInfo(dto); @@ -218,7 +222,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe bizNimsMapper.insertDsuseMgt(dto); dscdmngIds.add(dto.getDscdmngId()); } - List resList = bizNimsMapper.selectDsuseMgt(dscdmngIds); + List resList = bizNimsMapper.selectSavedDsuseMgts(dscdmngIds); // 마약류취급업체의 허가번호(prmisnNo), 대표자명(rprsntvNm) set setAddBsshInfo(resList); @@ -226,7 +230,25 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe return resList; } + @Override + public List getDsuseMgts(BizNimsRequest.DsuseMgtInq dto) { + List resList = bizNimsMapper.selectDsuseMgts(dto); + + resList.forEach(r -> { + r.setRptTyCdNm(Constants.RPT_TY_CD.getName(r.getRptTyCd())); + r.setDsuseSeCdNm(Constants.DSUSE_SE_CD.getName(r.getDsuseSeCd())); + r.setDsusePrvCdNm(Constants.DSUSE_PRV_CD.getName(r.getDsusePrvCd())); + r.setDsuseMthCdNm(Constants.DSUSE_MTH_CD.getName(r.getDsuseMthCd())); + Map map = new HashMap<>(); + map.put("usrRptIdNo", r.getUsrRptIdNo()); + List dsuseRptInfoDtls = bizNimsMapper.selectDsuseRptInfoDtls(map); + setAddProductInfo(dsuseRptInfoDtls); + r.getDsuseRptInfoDtls().addAll(bizNimsMapper.selectDsuseRptInfoDtls(map)); + }); + + return resList; + } //------------------------------------------------------------------------------------------------------ // private method @@ -344,6 +366,11 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe */ private void setAddBsshInfo(List resList) { resList.forEach(r -> { + r.setRptTyCdNm(Constants.RPT_TY_CD.getName(r.getRptTyCd())); + r.setDsuseSeCdNm(Constants.DSUSE_SE_CD.getName(r.getDsuseSeCd())); + r.setDsusePrvCdNm(Constants.DSUSE_PRV_CD.getName(r.getDsusePrvCd())); + r.setDsuseMthCdNm(Constants.DSUSE_MTH_CD.getName(r.getDsuseMthCd())); + if(isEmpty(r.getPrmisnNo())){ List list = saveBsshInfoSt( BsshInfoRequest.builder() @@ -352,13 +379,49 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe .bc(r.getBsshCd()) .build() ); - if(list.isEmpty()) throw ApiCustomException.create("데이타 오류[마약류취급자식별번호에 해당하는 데이타가 없습니다.]"); + if(isEmpty(list)){ + // FIXME : 데이타 정상 흐름 확인후 comment 제거 + return; + //throw ApiCustomException.create(String.format("데이타 오류(마약류취급자식별번호[%s]에 해당하는 데이타가 없습니다)", r.getBsshCd())); + } r.setPrmisnNo(list.get(0).getPrmisnNo()); r.setRprsntvNm(list.get(0).getRprsntvNm()); } }); } + /** + *
+	 * 제품 추가 정보 set
+	 * 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm) set
+	 * @param dtlList 
+	 * 
+ */ + private void setAddProductInfo(List dtlList) { + + dtlList.forEach(r -> { + //if() + if(isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())){ + //NimsApiResult.Response result = infNimsService.getProductInfoKd( + + List list = saveProductInfoKd( + NimsApiRequest.ProductInfoRequest.builder() + .fg("1") + .pg("1") + .p(r.getPrductCd()) + .build() + ); + if(isEmpty(list)){ + // FIXME : 데이타 정상 흐름 확인후 comment 제거 + return; + //throw ApiCustomException.create(String.format("데이타 오류(제품코드[%s]에 해당하는 데이타가 없습니다)", r.getPrductCd())); + } + r.setNrcdSeNm(list.get(0).getNrcdSeNm()); + r.setPrtmSeNm(list.get(0).getPrtmSeNm()); + } + }); + } + 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 bae8b36..ee4c524 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 @@ -53,14 +53,14 @@ public class BizNimsController { return ApiBaseResponse.of(bizNimsService.saveBsshInfoSt(dto)); } - // @Operation(summary = "마약류 상품 정보 조회(NIMS API)", description = "마약류 상품정보 조회

NIMS API 호출 결과를 DB에 저장후 결과 Return") - // @PostMapping(value = "/getProductInfoKd") - // public ApiBaseResponse> getMnfSeqInfo( - // @RequestBody @Validated NimsApiRequest.ProductInfoRequest dto - // ) { - // return ApiBaseResponse.of(bizNimsService.saveProductInfoKd(dto)); - // } - // + @Operation(summary = "마약류 상품 정보 조회(NIMS API)", description = "마약류 상품정보 조회

NIMS API 호출 결과를 DB에 저장후 결과 Return") + @PostMapping(value = "/getProductInfoKd") + public ApiBaseResponse> getMnfSeqInfo( + @RequestBody @Validated NimsApiRequest.ProductInfoRequest dto + ) { + return ApiBaseResponse.of(bizNimsService.saveProductInfoKd(dto)); + } + // @Operation(summary = "제조 일련 번호 정보 조회(NIMS API)", description = "제보 일련 번호 정보 조회

NIMS API 호출 결과 Return") // @PostMapping(value = "/getMnfSeqInfo") // public ApiBaseResponse> getMnfSeqInfo( @@ -127,6 +127,14 @@ public class BizNimsController { return ApiBaseResponse.of(bizNimsService.saveDsuseMgt(dtos)); } + @Operation(summary = "사고 마약류 폐기 관리 목록 조회", description = "사고 마약류 폐기 관리 목록 조회") + @PostMapping(value = "/getDsuseMgts") + public ApiBaseResponse> getDsuseMgts( + @RequestBody BizNimsRequest.DsuseMgtInq dto + ) { + return ApiBaseResponse.of(bizNimsService.getDsuseMgts(dto)); + } + /* @Operation(summary = "폐기 보고 관리 대상 연계 데이타 생성 조회", description = "폐기 보고 관리 대상 연계 데이타 생성 조회") @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = { diff --git a/src/main/java/cokr/xit/adds/core/model/ApiBaseResponse.java b/src/main/java/cokr/xit/adds/core/model/ApiBaseResponse.java index 442c987..6684472 100644 --- a/src/main/java/cokr/xit/adds/core/model/ApiBaseResponse.java +++ b/src/main/java/cokr/xit/adds/core/model/ApiBaseResponse.java @@ -7,6 +7,8 @@ import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Objects; +import org.apache.commons.lang3.ObjectUtils; + import com.fasterxml.jackson.annotation.JsonRootName; import io.swagger.v3.oas.annotations.media.Schema; @@ -71,9 +73,16 @@ public class ApiBaseResponse { } private ApiBaseResponse(T data) { - this.code = ResultCode.SUCCESS.getStatusCode(); - this.message = ResultCode.findByStatusCode(code).getMessage(); - this.data = data; + + if(ObjectUtils.isEmpty(data)) { + this.code = ResultCode.NO_CONTENT.getStatusCode(); + this.message = ResultCode.NO_CONTENT.getMessage(); + this.data = null; + }else{ + this.code = ResultCode.SUCCESS.getStatusCode(); + this.message = ResultCode.findByStatusCode(code).getMessage(); + this.data = data; + } } private ApiBaseResponse(T data, ResultCode resultCode) { @@ -101,7 +110,7 @@ public class ApiBaseResponse { }else { if (Collection.class.isAssignableFrom(data.getClass())) { - this.totalCount = (((Collection) data).size()); + this.totalCount = ((Collection) data).size(); } else { this.totalCount = 1; diff --git a/src/main/java/cokr/xit/adds/core/spring/config/P6SpySqlMultilineFormat.java b/src/main/java/cokr/xit/adds/core/spring/config/P6SpySqlMultilineFormat.java deleted file mode 100644 index eb57518..0000000 --- a/src/main/java/cokr/xit/adds/core/spring/config/P6SpySqlMultilineFormat.java +++ /dev/null @@ -1,42 +0,0 @@ -package cokr.xit.adds.core.spring.config;// package cokr.xit.adds.core.config; -// -// import javax.annotation.PostConstruct; -// -// import org.apache.commons.lang3.StringUtils; -// import org.springframework.context.annotation.Configuration; -// -// import com.p6spy.engine.spy.P6SpyOptions; -// import com.p6spy.engine.spy.appender.MessageFormattingStrategy; -// -// -// /** -// *
-//  * description : P6Spy SQL 로그 Multiline 출력 포맷 Custom
-//  *               - sql이 있는 경우만 출력
-//  *               - prepared, url(DB), now 출력 제거
-//  * author      : julim
-//  * date        : 2023-04-28
-//  * ======================================================================
-//  * 변경일         변경자        변경 내용
-//  * ----------------------------------------------------------------------
-//  * 2023-04-28    julim       최초 생성
-//  *
-//  * 
-// * @see com.p6spy.engine.spy.appender.MultiLineFormat -// */ -// -// @Configuration -// public class P6SpySqlMultilineFormat implements MessageFormattingStrategy { -// -// @PostConstruct -// public void setLogMessageFormat() { -// P6SpyOptions.getActiveInstance().setLogMessageFormat(this.getClass().getName()); -// } -// -// @Override -// public String formatMessage(final int connectionId, final String now, final long elapsed, final String category, final String prepared, final String sql, final String url) { -// if(StringUtils.isEmpty(sql)) return StringUtils.EMPTY; -// -// return "connection " + connectionId + " | took " + elapsed + "ms | " + category + "\n" + sql +";"; -// } -// } diff --git a/src/main/java/cokr/xit/adds/inf/iros/model/IrosResponse.java b/src/main/java/cokr/xit/adds/inf/iros/model/IrosResponse.java index fd37291..8d26872 100644 --- a/src/main/java/cokr/xit/adds/inf/iros/model/IrosResponse.java +++ b/src/main/java/cokr/xit/adds/inf/iros/model/IrosResponse.java @@ -45,9 +45,11 @@ public class IrosResponse { */ @JsonIgnore public List getResultOrThrow() { - if(!ObjectUtils.isEmpty(getResult())) return getResult(); if("00".equals(header.resultCode)){ - throw ApiCustomException.create(ResultCode.NO_CONTENT); + if(ObjectUtils.isEmpty(body.items)) { + throw ApiCustomException.create(ResultCode.NO_CONTENT); + } + return body.items; } throw Objects.requireNonNull(ApiCustomException.of(header.resultCode, header.resultMsg)); } @@ -59,15 +61,11 @@ public class IrosResponse { * @return List or null */ @JsonIgnore - public List getResultOrNull() { - return getResult(); - } - - private List getResult() { + public List getResult() { if("00".equals(header.resultCode)) { return body.items; } - return null; + throw Objects.requireNonNull(ApiCustomException.of(header.resultCode, header.resultMsg)); } @Getter diff --git a/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiDto.java b/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiDto.java index 99f1444..2a30d89 100644 --- a/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiDto.java +++ b/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiDto.java @@ -113,87 +113,87 @@ public class NimsApiDto { private String prmisnNo; } - // /** - // * 상품 정보 조회 response - // */ - // @Getter - // @NoArgsConstructor - // @AllArgsConstructor - // @SuperBuilder - // public static class ProductInfoKd extends AuditDto { - // /** - // * 품목코드 - // */ - // @JsonAlias("PRDUCT_CD") - // private String prductCd; - // - // /** - // * 제품대표코드 - // */ - // @JsonAlias("PRDLST_MST_CD") - // private String prdlstMstCd; - // - // /** - // * 제품명 - // */ - // @JsonAlias("PRDUCT_NM") - // private String prductNm; - // - // /** - // * 마약/항정 구분명 - // */ - // @JsonAlias("NRCD_SE_NM") - // private String nrcdSeNm; - // - // /** - // * 중점/일반 구분 - // */ - // @JsonAlias("PRTM_SE_NM") - // private String prtmSeNm; - // - // /** - // * 제품최소유통단위수량 - // * 제품규격정보(고정값 = 1) - // */ - // @JsonAlias("PRD_MIN_DISTB_QY") - // private Integer prdMinDistbQy; - // - // /** - // * 제품최소유통단위 - // */ - // @JsonAlias("STD_PACKNG_STLE_NM") - // private String stdPackngStleNm; - // - // /** - // * 제품총낱개단위수량 - // */ - // @JsonAlias("PRD_TOT_PCE_QY") - // private Integer prdTotPceQy; - // - // /** - // * 제품낱개단위 - // */ - // @JsonAlias("PCE_CO_UNIT_NM") - // private String pceCoUnitNm; - // - // /** - // * 마약류취급자식별번호 - // */ - // @JsonAlias("BSSH_CD") - // private String bsshCd; - // - // /** - // * 등록일 - // */ - // @JsonAlias("RGS_DT") - // private String rgsDt; - // - // /** - // * 변경일 - // */ - // @JsonAlias("UPD_DT") - // private String updDt; - // } + /** + * 상품 정보 조회 response + */ + @Getter + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + public static class ProductInfoKd extends AuditDto { + /** + * 품목코드 + */ + @JsonAlias("PRDUCT_CD") + private String prductCd; + + /** + * 제품대표코드 + */ + @JsonAlias("PRDLST_MST_CD") + private String prdlstMstCd; + + /** + * 제품명 + */ + @JsonAlias("PRDUCT_NM") + private String prductNm; + + /** + * 마약/항정 구분명 + */ + @JsonAlias("NRCD_SE_NM") + private String nrcdSeNm; + + /** + * 중점/일반 구분 + */ + @JsonAlias("PRTM_SE_NM") + private String prtmSeNm; + + /** + * 제품최소유통단위수량 + * 제품규격정보(고정값 = 1) + */ + @JsonAlias("PRD_MIN_DISTB_QY") + private Integer prdMinDistbQy; + + /** + * 제품최소유통단위 + */ + @JsonAlias("STD_PACKNG_STLE_NM") + private String stdPackngStleNm; + + /** + * 제품총낱개단위수량 + */ + @JsonAlias("PRD_TOT_PCE_QY") + private Integer prdTotPceQy; + + /** + * 제품낱개단위 + */ + @JsonAlias("PCE_CO_UNIT_NM") + private String pceCoUnitNm; + + /** + * 마약류취급자식별번호 + */ + @JsonAlias("BSSH_CD") + private String bsshCd; + + /** + * 등록일 + */ + @JsonAlias("RGS_DT") + private String rgsDt; + + /** + * 변경일 + */ + @JsonAlias("UPD_DT") + private String updDt; + } /** * 폐기보고 response @@ -203,7 +203,7 @@ public class NimsApiDto { @NoArgsConstructor @AllArgsConstructor @SuperBuilder - public static class DsuseRptInfo extends AuditDto implements Cloneable { + public static class DsuseRptInfo extends AuditDto { /** * 사용자 보고 식별 번호 @@ -399,6 +399,16 @@ public class NimsApiDto { */ @JsonAlias("DSUSE_QY") private Integer dsuseQy; + + /** + * 마약/항정 구분 + */ + private String nrcdSeNm; + + /** + * 중점/일반 구분 + */ + private String prtmSeNm; } // /** 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 6e8b01d..7a3de85 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 @@ -111,73 +111,73 @@ public class NimsApiRequest { String fg2 = "1"; } - // /** - // * 상품 정보 조회 request - // */ - // @Schema(name = "ProductInfoRequest", description = "상품 정보 조회 request") - // @Data - // @NoArgsConstructor - // @AllArgsConstructor - // @Builder - // public static class ProductInfoRequest { - // /** - // * 인증키 - // */ - // @Schema(requiredMode = REQUIRED, title = "인증키", description = "인증키", example = "998003699950fa950b798c9edea1b38f3cfbcf3b77e03e419") - // @NotEmpty(message = "인증키는 필수 입니다") - // String k; - // - // /** - // * 조회범위 - // * 1-전체, 2-내거래품목, 3-청구코드매핑 - // */ - // @Schema(requiredMode = REQUIRED, title = "조회범위(1-전체, 2-내거래처 품목, 3-청구코드 매핑)", description = "조회범위(1-전체, 2-내거래처 품목, 3-청구코드 매핑)", example = "1", allowableValues = {"1", "2", "3"}) - // @Pattern(regexp = "[1-3]", message = "조회범위는 필수 입니다(1-전체, 2-내거래처 품목, 3-청구코드 매핑)") - // String fg; - // - // /** - // * 조회 페이지 - // */ - // @Schema(requiredMode = REQUIRED, title = "조회 페이지", description = "조회 페이지", example = "1") - // @Pattern(regexp = "[0-9]{1,}", message = "조회 페이지는 필수 입니다") - // String pg; - // - // /** - // * 기준일자 이후 - // * yyyyMMdd - // */ - // @Schema(title = "기준일자(yyyyMMdd-이후일자)", description = "기준일자(yyyyMMdd-이후일자)", example = " ") - // @Pattern(regexp = "^$|"+Constants.DATE_REGX, message = "기준 일자는 8자리 입니다(yyyyMMdd)") - // @Builder.Default - // String ymd = StringUtils.EMPTY; - // - // /** - // * 중점/일반 구분 - // * 1:중점 - // * 2:일반 - // */ - // @Schema(title = "중점|일반 구분(all, 1:중점, 2:일반)", description = "중점|일반 구분(all, 1:중점, 2:일반)", example = " ", allowableValues = {"", "1", "2"}) - // @Pattern(regexp = "^$|[12]", message = "중점|일반 구분은 1 또는 2 입니다(1:중점, 2:일반)") - // @Builder.Default - // String fg2 = StringUtils.EMPTY; - // - // /** - // * 제품코드 - // * 제품코드(like 검색) - // * 조회범위(pg)가 3인 경우 청구 코드 - // */ - // @Schema(title = "제품코드", description = "제품코드", example = " ") - // @Pattern(regexp = "^$|[0-9a-zA-Z]{13}", message = "제품코드는 13자리 입니다") - // @Builder.Default - // String p = StringUtils.EMPTY; - // - // /** - // * 제품명(like 검색) - // */ - // @Schema(title = "제품명", description = "제품명", example = " ") - // @Builder.Default - // String pn = StringUtils.EMPTY; - // } + /** + * 상품 정보 조회 request + */ + @Schema(name = "ProductInfoRequest", description = "상품 정보 조회 request") + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class ProductInfoRequest { + /** + * 인증키 + */ + @Schema(requiredMode = REQUIRED, title = "인증키", description = "인증키", example = "998003699950fa950b798c9edea1b38f3cfbcf3b77e03e419") + @NotEmpty(message = "인증키는 필수 입니다") + String k; + + /** + * 조회범위 + * 1-전체, 2-내거래품목, 3-청구코드매핑 + */ + @Schema(requiredMode = REQUIRED, title = "조회범위(1-전체, 2-내거래처 품목, 3-청구코드 매핑)", description = "조회범위(1-전체, 2-내거래처 품목, 3-청구코드 매핑)", example = "1", allowableValues = {"1", "2", "3"}) + @Pattern(regexp = "[1-3]", message = "조회범위는 필수 입니다(1-전체, 2-내거래처 품목, 3-청구코드 매핑)") + String fg; + + /** + * 조회 페이지 + */ + @Schema(requiredMode = REQUIRED, title = "조회 페이지", description = "조회 페이지", example = "1") + @Pattern(regexp = "[0-9]{1,}", message = "조회 페이지는 필수 입니다") + String pg; + + /** + * 기준일자 이후 + * yyyyMMdd + */ + @Schema(title = "기준일자(yyyyMMdd-이후일자)", description = "기준일자(yyyyMMdd-이후일자)", example = " ") + @Pattern(regexp = "^$|"+Constants.DATE_REGX, message = "기준 일자는 8자리 입니다(yyyyMMdd)") + @Builder.Default + String ymd = StringUtils.EMPTY; + + /** + * 중점/일반 구분 + * 1:중점 + * 2:일반 + */ + @Schema(title = "중점|일반 구분(all, 1:중점, 2:일반)", description = "중점|일반 구분(all, 1:중점, 2:일반)", example = " ", allowableValues = {"", "1", "2"}) + @Pattern(regexp = "^$|[12]", message = "중점|일반 구분은 1 또는 2 입니다(1:중점, 2:일반)") + @Builder.Default + String fg2 = StringUtils.EMPTY; + + /** + * 제품코드 + * 제품코드(like 검색) + * 조회범위(pg)가 3인 경우 청구 코드 + */ + @Schema(title = "제품코드", description = "제품코드", example = " ") + @Pattern(regexp = "^$|[0-9a-zA-Z]{13}", message = "제품코드는 13자리 입니다") + @Builder.Default + String p = StringUtils.EMPTY; + + /** + * 제품명(like 검색) + */ + @Schema(title = "제품명", description = "제품명", example = " ") + @Builder.Default + String pn = StringUtils.EMPTY; + } @Schema(name = "DsuseRptInfoRequest", description = "폐기 보고 정보 조회 request") @Data diff --git a/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiResult.java b/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiResult.java index fce409e..d3dbbe7 100644 --- a/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiResult.java +++ b/src/main/java/cokr/xit/adds/inf/nims/model/NimsApiResult.java @@ -68,9 +68,11 @@ public class NimsApiResult { */ @JsonIgnore public List getResultOrThrow() { - if(!ObjectUtils.isEmpty(getResult())) return getResult(); if(header.resultCd == 0 || header.resultCd == 8){ - throw ApiCustomException.create(ResultCode.NO_CONTENT); + if(ObjectUtils.isEmpty(body.list)) { + throw ApiCustomException.create(ResultCode.NO_CONTENT); + } + return body.list; } throw Objects.requireNonNull(ApiCustomException.of(header)); } @@ -82,15 +84,12 @@ public class NimsApiResult { * @return List or null */ @JsonIgnore - public List getResultOrNull() { - return getResult(); - } - - private List getResult() { + public List getResult() { + //return getResult(); if(header.resultCd == 0 || header.resultCd == 8) { return body.list; } - return null; + throw Objects.requireNonNull(ApiCustomException.of(header)); } } diff --git a/src/main/java/cokr/xit/adds/inf/nims/service/InfNimsService.java b/src/main/java/cokr/xit/adds/inf/nims/service/InfNimsService.java index d0e381b..6b9fce0 100644 --- a/src/main/java/cokr/xit/adds/inf/nims/service/InfNimsService.java +++ b/src/main/java/cokr/xit/adds/inf/nims/service/InfNimsService.java @@ -22,8 +22,8 @@ import cokr.xit.adds.inf.nims.model.NimsApiResult; public interface InfNimsService { NimsApiResult.Response getBsshInfoSt(NimsApiRequest.BsshInfoRequest dto); - // NimsApiResult.Response getProductInfoKd(NimsApiRequest.ProductInfoRequest dto); - // + NimsApiResult.Response getProductInfoKd(NimsApiRequest.ProductInfoRequest dto); + // NimsApiResult.Response getMnfSeqInfo(NimsApiRequest.MnfSeqInfoRequest dto); // // NimsApiResult.Response getJurisdictionGovInfo(NimsApiRequest.JurisdictionGovInfoRequest dto); 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 20d9ddd..1c6b6aa 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 @@ -90,18 +90,18 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe return result.getResponse(); } - // @Override - // @TraceLogging - // public NimsApiResult.Response getProductInfoKd(NimsApiRequest.ProductInfoRequest dto) { - // dto.setK(nimsApiKey); - // ApiUtil.validate(dto, null, validator); - // if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null); - // - // String rslt = ApiUtil.callNimsApi(nimsUrl + productinfoKd, dto); - // NimsApiResult result = json.parse(rslt, new TypeReference>() {}); - // return result.getResponse(); - // } - // + @Override + @TraceLogging + public NimsApiResult.Response getProductInfoKd(NimsApiRequest.ProductInfoRequest dto) { + dto.setK(nimsApiKey); + ApiUtil.validate(dto, null, validator); + if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null); + + String rslt = ApiUtil.callNimsApi(nimsUrl + productinfoKd, dto); + NimsApiResult result = json.parse(rslt, new TypeReference>() {}); + return result.getResponse(); + } + // @Override // @TraceLogging // public NimsApiResult.Response getMnfSeqInfo(NimsApiRequest.MnfSeqInfoRequest dto) { @@ -176,7 +176,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe NimsApiDto.DsuseRptInfoDtl dtl1 = NimsApiDto.DsuseRptInfoDtl.builder() .usrRptIdNo(usrRptIdNoList.get(i)) .usrRptLnIdNo(usrRptLnIdNoList.get(0)+i) - .prductCd("상품코드") + .prductCd("8806718050823") .prductNm("제품명") .minDistbQy(1) .pceQy(0) @@ -189,7 +189,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe NimsApiDto.DsuseRptInfoDtl dtl2 = NimsApiDto.DsuseRptInfoDtl.builder() .usrRptIdNo(usrRptIdNoList.get(i)) .usrRptLnIdNo(usrRptLnIdNoList.get(1)+i) - .prductCd("상품코드1") + .prductCd("8806718050822") .prductNm("제품명1") .minDistbQy(1) .pceQy(0) 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 e6f78a6..caf82ba 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 @@ -44,14 +44,14 @@ public class InfNimsController { return ApiBaseResponse.of(infNimsService.getBsshInfoSt(dto)); } - // @Operation(summary = "마약류 상품 정보 조회", description = "마약류 상품정보 조회") - // @PostMapping("/getProductInfoKd") - // public ApiBaseResponse> getProductInfoKd( - // @RequestBody NimsApiRequest.ProductInfoRequest dto - // ) { - // return ApiBaseResponse.of(infNimsService.getProductInfoKd(dto)); - // } - // + @Operation(summary = "마약류 상품 정보 조회", description = "마약류 상품정보 조회") + @PostMapping("/getProductInfoKd") + public ApiBaseResponse> getProductInfoKd( + @RequestBody NimsApiRequest.ProductInfoRequest dto + ) { + return ApiBaseResponse.of(infNimsService.getProductInfoKd(dto)); + } + // @Operation(summary = "제조 일련 번호 정보 조회", description = "제조 일련 번호 정보 조회") // @PostMapping("/getMnfSeqInfo") // public ApiBaseResponse> getMnfSeqInfo( diff --git a/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml index 75ad66d..67afe0e 100644 --- a/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml +++ b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml @@ -10,18 +10,18 @@ /** nims-mysql-mapper|mergeBsshInfoSt-마약류취급자정보 생성/변경|julim */ INSERT INTO tb_bssh_info( - bssh_cd, - bssh_nm, - induty_nm, - hdnt_cd, - hdnt_nm, - bizrno, - rprsntv_nm, - chrg_nm, - hptl_no, - join_yn, - bssh_stts_nm, - prmisn_no, + bssh_cd, /* 마약류취급자식별번호 */ + bssh_nm, /* 마약류취급자명 */ + induty_nm, /* 업종명 */ + hdnt_cd, /* 의료업자구분 */ + hdnt_nm, /* 의료업자구분명 */ + bizrno, /* 사업자등록번호 */ + rprsntv_nm, /* 대표자명 */ + chrg_nm, /* 담당자명 */ + hptl_no, /* 요양기관번호 */ + join_yn, /* 회원가입여부 */ + bssh_stts_nm, /* 마약류취급자상태명 */ + prmisn_no, /* 허가번호 */ use_yn, reg_dt, rgtr @@ -43,20 +43,72 @@ #{rgtr} ) ON DUPLICATE KEY UPDATE - bssh_nm = #{bsshNm}, - induty_nm = #{indutyNm}, - hdnt_cd = #{hdntCd}, - hdnt_nm = #{hdntNm}, - bizrno = #{bizrno}, - rprsntv_nm = #{rprsntvNm}, - chrg_nm = #{chrgNm}, - hptl_no = #{hptlNo}, - join_yn = #{joinYn}, - bssh_stts_nm = #{bsshSttusNm}, - prmisn_no = #{prmisnNo}, + bssh_nm = #{bsshNm}, /* 마약류취급자명 */ + induty_nm = #{indutyNm}, /* 업종명 */ + hdnt_cd = #{hdntCd}, /* 의료업자구분 */ + hdnt_nm = #{hdntNm}, /* 의료업자구분명 */ + bizrno = #{bizrno}, /* 사업자등록번호 */ + rprsntv_nm = #{rprsntvNm}, /* 대표자명 */ + chrg_nm = #{chrgNm}, /* 담당자명 */ + hptl_no = #{hptlNo}, /* 요약기관번호 */ + join_yn = #{joinYn}, /* 가입여부 */ + bssh_stts_nm = #{bsshSttusNm}, /* 마약류취급자상태명 */ + prmisn_no = #{prmisnNo}, /* 허가번호 */ mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s'), mdfr = #{rgtr} + + + /** nims-mysql-mapper|mergeProductInfoKd-상품정보 생성|julim */ + INSERT INTO tb_prduct_info( + prduct_cd, /* 제품코드 */ + prdlst_mst_cd, /* 제품대표코드 */ + prduct_nm, /* 제품명 */ + nrcd_se_nm, /* 마약항정구분 */ + prtm_se_nm, /* 중점일반구분 */ + prd_min_distb_qy, /* 최소유통단위수량 - 제품규격정보(고정값=1) */ + std_packng_stle_nm, /* 제품최소유통단위 */ + prd_tot_pce_qy, /* 제품총낱개단위수량 */ + pce_co_unit_nm, /* 제품낱개단위 */ + bssh_cd, /* 마약류취급자식별번호 */ + rgs_dt, /* 등록일 */ + upd_dt, /* 변경일 */ + use_yn, + reg_dt, + rgtr + ) VALUES ( + #{prductCd}, + #{prdlstMstCd}, + #{prductNm}, + #{nrcdSeNm}, + #{prtmSeNm}, + #{prdMinDistbQy}, + #{stdPackngStleNm}, + #{prdTotPceQy}, + #{pceCoUnitNm}, + #{bsshCd}, + #{rgsDt}, + #{updDt}, + 'Y', + DATE_FORMAT(now(), '%Y%m%d%H%i%s'), + #{rgtr} + ) + ON DUPLICATE KEY UPDATE + prdlst_mst_cd = #{prdlstMstCd}, /* 제품대표코드 */ + prduct_nm = #{prductNm}, /* 제품명 */ + nrcd_se_nm = #{nrcdSeNm}, /* 마약항정구분 */ + prtm_se_nm = #{prtmSeNm}, /* 중점일반구분 */ + prd_min_distb_qy = #{prdMinDistbQy}, /* 최소유통단위수량 - 제품규격정보(고정값=1) */ + std_packng_stle_nm = #{stdPackngStleNm}, /* 제품최소유통단위 */ + prd_tot_pce_qy = #{prdTotPceQy}, /* 제품총낱개단위수량 */ + pce_co_unit_nm = #{pceCoUnitNm}, /* 제품낱개단위 */ + bssh_cd = #{bsshCd}, /* 마약류취급자식별번호 */ + rgs_dt = #{rgsDt}, /* 등록일 */ + upd_dt = #{updDt}, /* 변경일 */ + mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s'), + mdfr = #{rgtr} + + @@ -97,6 +149,40 @@ + + /** nims-mysql-mapper|insertDsuseRptInfo-폐기보고정보 생성|julim */ INSERT INTO tb_dsuse_rpt_info ( @@ -248,8 +334,25 @@ ) - + /** nims-mysql-mapper|selectSavedDsuseMgts-저장 폐기관리목록 조회|julim */ + + WHERE tdm.dscdmng_id IN + + #{item} + + + + + + SELECT tdm.dscdmng_id /** 폐기관리ID */ , tdm.user_id /** 사용자ID */ , tdm.usr_rpt_id_no /** 사용자보고식별번호 */ @@ -274,13 +377,10 @@ JOIN tb_dsuse_rpt_info tdri ON (tdm.org_usr_rpt_id_no = tdri.org_usr_rpt_id_no AND tdm.usr_rpt_id_no = tdri.usr_rpt_id_no) - LEFT OUTER JOIN tb_bssh_info tbi + LEFT JOIN tb_bssh_info tbi ON tdri.bssh_cd = tbi.bssh_cd - WHERE tdm.dscdmng_id IN - - #{item} - - + +