From 03a0cbbd45b2fdb2ad86f89a85f128ac1e32c5d4 Mon Sep 17 00:00:00 2001 From: "Jonguk. Lim" Date: Wed, 24 Apr 2024 19:48:57 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8F=90=EA=B8=B0=EC=97=B0=EA=B3=84=EB=B3=B4?= =?UTF-8?q?=EA=B3=A0=EC=A0=95=EB=B3=B4=EC=A1=B0=ED=9A=8C=20=EB=B0=98?= =?UTF-8?q?=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 | 7 +- .../adds/biz/nims/service/BizNimsService.java | 21 ++- .../nims/service/bean/BizNimsServiceBean.java | 162 +++++++++++++++++- .../adds/biz/nims/web/BizNimsController.java | 22 ++- .../xit/adds/inf/nims/model/NimsApiDto.java | 35 ++-- .../adds/inf/nims/model/NimsApiRequest.java | 8 + .../adds/inf/nims/service/InfNimsService.java | 2 +- .../nims/service/bean/InfNimsServiceBean.java | 138 +++++++-------- .../adds/inf/nims/web/InfNimsController.java | 2 +- src/main/resources/config/application-inf.yml | 2 + src/main/resources/database/DDL/adds_nims.sql | 94 +++++----- .../sql/mapper/biz/nims-mysql-mapper.xml | 127 +++++++++++++- src/main/resources/sql/work/nims_work.sql | 35 ++++ 14 files changed, 512 insertions(+), 151 deletions(-) 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 089081d..4ac61a7 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 @@ -1,5 +1,7 @@ package cokr.xit.adds.biz.nims.dao; +import java.util.Map; + import org.egovframe.rte.psl.dataaccess.mapper.Mapper; import cokr.xit.adds.biz.nims.model.BizNimsRequest; @@ -33,6 +35,12 @@ public interface BizNimsMapper extends AbstractMapper { //------------------------------------------------------------------------------------------------------ // NIMS BIZ //------------------------------------------------------------------------------------------------------ + int insertDsuseRptInfo(NimsApiDto.DsuseRptInfo dto); + int insertDsuseRptInfoDtl(NimsApiDto.DsuseRptInfoDtl dto); + int updateCancelDsuseRptInfo(NimsApiDto.DsuseRptInfo dto); + int updateCancelDsuseRptInfoDtl(NimsApiDto.DsuseRptInfo dto); + Map recusiveRefUsrRptIdNo(String refUsrRptIdNo); + int insertDsuseMgt(BizNimsRequest.DsuseMgt dto); int insertDsuseMgtDtl(BizNimsRequest.DsuseMgtDtl dto); int updateCancelDsuseMgt(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 6bea3ae..244b364 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 @@ -45,7 +45,7 @@ public class BizNimsRequest { @AllArgsConstructor @SuperBuilder @EqualsAndHashCode(callSuper = false) - public static class DsuseMgt extends NimsApiDto.DsuseRpt { + public static class DsuseMgt extends NimsApiDto.DsuseRptInfo { @Schema(requiredMode = AUTO, title = "폐기 관리 ID", example = " ") private String dscdmngId; @@ -72,9 +72,6 @@ public class BizNimsRequest { @Pattern(regexp = "01|02|11|22|31|41|42|99", message = "진행 상태 코드는 필수 입니다") private String prgrsSttsCd = "01"; - @Schema(requiredMode = AUTO, title = "보고 접수 번호", example = " ") - private String rptRceptNo; - @Schema(requiredMode = REQUIRED) @Builder.Default @Valid @@ -108,7 +105,7 @@ public class BizNimsRequest { @AllArgsConstructor @SuperBuilder @EqualsAndHashCode(callSuper = false) - public static class DsuseMgtDtl extends NimsApiDto.DsuseRptDtl { + public static class DsuseMgtDtl extends NimsApiDto.DsuseRptInfoDtl { @Schema(requiredMode = AUTO, title = "폐기 관리 ID", example = " ") private String dscdmngId; 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 4e5b84d..022125b 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 @@ -30,7 +30,26 @@ public interface BizNimsService { List getMnfSeqInfo(NimsApiRequest.MnfSeqInfoRequest dto); List getJurisdictionGovInfo(NimsApiRequest.JurisdictionGovInfoRequest dto); List saveStorageInfo(NimsApiRequest.StorageInfoRequest dto); - List getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto); + + /** + *
+	 * 폐기연계보고 데이타를 API에서 조회후 DB 저장
+	 * 변경 이력 관리 등을 위해 orgUsrRptIdNo(원사용자보고식별번호)를 추가 하여 저장
+	 *
+	 * 데이타 필터링 적용을 위해 아래 순서로 진행
+	 * 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
+	 *    - orgUsrRptIdNo(원사용자보고식별번호) = 사용자보고식별번호(usrRptIdNo)
+	 * 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경)
+	 *   2-1. refUsrRptIdNo 필수 체크
+	 *   2-2. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
+	 *   3-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
+	 *        => 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
+	 * @param dto NimsApiRequest.DsuseRptInfoRequest
+	 * @return List
+	 * 
+ */ + List saveDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto); + List getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto); //------------------------------------------------------------------------------------------------------ // NIMS BIZ 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 5ed1dbf..9a7e088 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 @@ -1,6 +1,7 @@ package cokr.xit.adds.biz.nims.service.bean; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import javax.validation.Validation; @@ -119,25 +120,90 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe return list; } + /** + *
+	 * 폐기연계보고 데이타를 API에서 조회후 DB 저장
+	 * 변경 이력 관리 등을 위해 orgUsrRptIdNo(원사용자보고식별번호)를 추가 하여 저장
+	 *
+	 * 데이타 필터링 적용을 위해 아래 순서로 진행
+	 * 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
+	 *    - orgUsrRptIdNo(원사용자보고식별번호) = 사용자보고식별번호(usrRptIdNo)
+	 * 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경)
+	 *   2-1. refUsrRptIdNo 필수 체크
+	 *   2-2. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
+	 *   3-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
+	 *        => 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
+	 * @param reqDto NimsApiRequest.DsuseRptInfoRequest
+	 * @return List
+	 * 
+ */ + @Override + public List saveDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest reqDto) { + /* + 데이타 필터링 (보고유형코드 0인 데이타 제거) - API 서버에서 필터링을 하지 않은 경우 + 1. 취소 skip : 보고유형코드(rptTyCd)가 1-취소인 경우, refUsrRptIdNo에 해당 되는 데이타 + 2. 변경 데이타 적용 : 보고유형코드(rptTyCd)가 2-변경인 경우 + */ + NimsApiResult.Response result = infNimsService.getDsuseRptInfo(reqDto); + List list = result.getResultOrThrow(); + + // 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 + for (NimsApiDto.DsuseRptInfo dto : list) { + dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo()); + dto.setRgtr(Constants.NIMS_API_USER_ID); + + // 신규가 아닌 경우 skip + if(!"0".equals(dto.getRptTyCd())) continue; + + createDsuseRpt(dto, true); + } + + // 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경) + String errMsg = null; + for (NimsApiDto.DsuseRptInfo dto : list) { + dto.setRgtr(Constants.NIMS_API_USER_ID); + + // 신규인 경우 skip + if("0".equals(dto.getRptTyCd())) continue; + + // 2-1. refUsrRptIdNo 필수 체크 + if(isEmpty(dto.getRefUsrRptIdNo())){ + throw ApiCustomException.create("데이타 오류[취소 및 변경인 경우 참조사용자식별번호(REF_USR_RPT_ID_NO) 필수]"); + } + + // 2-2. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update + updateDsuseRpt(dto); + + // 3-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성) + createDsuseRpt(dto, false); + } + + + + + // return dtos; + return list; + } + /** *
 	 * 폐기보고서 정보 조회
 	 * 데이타 필터링 (보고유형코드 0인 데이타 제거) - API 서버에서 필터링을 하지 않은 경우
 	 * 1. 취소 skip : 보고유형코드(rptTyCd)가 1-취소인 경우, refUsrRptIdNo에 해당 되는 데이타
 	 * 2. 변경  데이타 적용 : 보고유형코드(rptTyCd)가 2-변경인 경우
-	 * -> refUsrRptIdNo에 해당 되는  데이타
+	 *    => refUsrRptIdNo에 해당 되는  데이타
 	 * @param dto
 	 * @return
 	 * 
*/ @Override - public List getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto) { + public List getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto) { /* 데이타 필터링 (보고유형코드 0인 데이타 제거) - API 서버에서 필터링을 하지 않은 경우 1. 취소 skip : 보고유형코드(rptTyCd)가 1-취소인 경우, refUsrRptIdNo에 해당 되는 데이타 2. 변경 데이타 적용 : 보고유형코드(rptTyCd)가 2-변경인 경우 */ - NimsApiResult.Response result = infNimsService.getDsuseRptInfo(dto); + NimsApiResult.Response result = infNimsService.getDsuseRptInfo(dto); return result.getResultOrThrow(); } @@ -152,6 +218,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe // 신규 처리 for (BizNimsRequest.DsuseMgt dto : dtos) { + dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo()); dto.setRgtr(Constants.NIMS_API_USER_ID); // 신규가 아닌 경우 skip @@ -175,15 +242,96 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe // 폐기관리 데이타 disable(미사용) updateDsuseMgt(dto); - // 취소인 경우 데이타 생성 skip - if ("1".equals(dto.getRptTyCd())) continue; - - // 변경인 경우 데이타 생성 createDsuseMgt(dto); } return dtos; } + /** + * tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update + * + * @param dto NimsApiDto.DsuseRptInfo + */ + private void updateDsuseRpt(NimsApiDto.DsuseRptInfo dto) { + String errMsg; + if ("1".equals(dto.getRptTyCd())) errMsg = "취소"; + else errMsg = "변경"; + + if (bizNimsMapper.updateCancelDsuseRptInfo(dto) == 1) { + int cnt = bizNimsMapper.updateCancelDsuseRptInfoDtl(dto); + if(cnt == 0) throw ApiCustomException.create(String.format("폐기 정보 상세 %s 실패", errMsg)); + + // 변경인 경우 상세 데이타 건수와 일치 하지 않는 경우 오류 처리 + if ("2".equals(dto.getRptTyCd()) && dto.getRndDtlRptCnt() != cnt) { + throw ApiCustomException.create(String.format("폐기 정보 상세 %s 실패", errMsg)); + } + + } else { + throw ApiCustomException.create(String.format("폐기 정보 %s 실패", errMsg)); + } + } + + /** + *
+	 * tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
+	 * => 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
+	 *
+	 * 원사용자보고식별번호 조회
+	 * 1. 신규(rptTyCd : 0) - 사용자보고식별번호
+	 * 2. 취소 또는 변경(rptTyCd : 1, 2) - 참조사용자보고식별번호 필수
+	 * => 사용자보고식별번호 = 참조사용자식별번호 조건 으로 조회
+	 * => 조회결과 참조사용자식별번호가 존재하지 않을때 까지 반복 조회(신규(rptTyCd : 0)인 경우 까지)
+	 * => 사용자보고식별번호를 원사용자보고식별번호로 설정
+	 * @param dto NimsApiDto.DsuseRptInfo
+	 * @param isNew boolean
+	 * 
+ */ + private void createDsuseRpt(NimsApiDto.DsuseRptInfo dto, boolean isNew) { + if(!isNew){ + + String refUsrRptIdNo = dto.getRefUsrRptIdNo(); + + // 참조사용자보고식별번호로 원사용자보고식별번호조회 + while(true) { + Map map = bizNimsMapper.recusiveRefUsrRptIdNo(refUsrRptIdNo); + if(map == null) throw ApiCustomException.create("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 데이타 누락]"); + + if(!isEmpty(map.get("refUsrRptIdNo"))){ + refUsrRptIdNo = map.get("refUsrRptIdNo"); + continue; + } + + if("0".equals(map.get("rptTyCd"))){ + dto.setOrgUsrRptIdNo(map.get("usrRptIdNo")); + break; + } else { + throw ApiCustomException.create("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 신규보고 데이타 누락]"); + } + } + } + + + //취소인 경우 상세 데이타 등록 skip + //if("1".equals(dto.getRptTyCd())) return; + + + if (bizNimsMapper.insertDsuseRptInfo(dto) == 1) { + + //취소인 경우 상세 데이타 등록 skip + if("1".equals(dto.getRptTyCd())) return; + + int dtlCnt = 0; + for (NimsApiDto.DsuseRptInfoDtl d : dto.getDsuseRptInfoDtls()) { + d.setRgtr(Constants.NIMS_API_USER_ID); + dtlCnt = dtlCnt + bizNimsMapper.insertDsuseRptInfoDtl(d); + } + if (dto.getRndDtlRptCnt() != dtlCnt) + throw ApiCustomException.create("폐기 정보 상세 등록 실패"); + } else { + throw ApiCustomException.create("폐기 정보 등록 실패"); + } + } + private void updateDsuseMgt(BizNimsRequest.DsuseMgt dto) { String errMsg; if ("1".equals(dto.getRptTyCd())) errMsg = "취소"; 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 d99324e..1381c9d 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 @@ -86,12 +86,12 @@ public class BizNimsController { return ApiBaseResponse.of(bizNimsService.saveStorageInfo(dto)); } - @Operation(summary = "NIMS API - 폐기 보고 정보 조회", description = "폐기 보고 정보 조회

NIMS API 호출 결과 Return
폐기보고관리 화면에서 사용") + @Operation(summary = "NIMS API - 폐기 보고 정보 조회", description = "폐기 보고 정보 조회

NIMS API 호출 결과를 DB에 저장후 Return") @PostMapping("/getDsuseRptInfo") - public ApiBaseResponse> getDsuseRptInfo( + public ApiBaseResponse> getDsuseRptInfo( @RequestBody @Validated NimsApiRequest.DsuseRptInfoRequest dto ) { - return ApiBaseResponse.of(bizNimsService.getDsuseRptInfo(dto)); + return ApiBaseResponse.of(bizNimsService.saveDsuseRptInfo(dto)); } //------------------------------------------------------------------------------------------------------ @@ -130,7 +130,9 @@ public class BizNimsController { "userId":"userid1", "USR_RPT_ID_NO":"usrRptIdNo1111", "REF_USR_RPT_ID_NO":null, - "BSSH_CD":"bsshCd", + "BSSH_CD":"H00008333", + "BSSH_NM":"수지미래산부인과의원", + "INDUTY_NM":"마약류취급의료업", "RPT_TY_CD":"0", "RND_DTL_RPT_CNT":2, "HDR_DE":"20240401", @@ -179,7 +181,9 @@ public class BizNimsController { "userId":"userid1", "USR_RPT_ID_NO":"usrRptIdNo2222", "REF_USR_RPT_ID_NO":null, - "BSSH_CD":"bsshCd", + "BSSH_CD":"H00008333", + "BSSH_NM":"수지미래산부인과의원", + "INDUTY_NM":"마약류취급의료업", "RPT_TY_CD":"0", "RND_DTL_RPT_CNT":2, "HDR_DE":"20240401", @@ -228,7 +232,9 @@ public class BizNimsController { "userId":"userid1", "USR_RPT_ID_NO":"usrRptIdNo3333", "REF_USR_RPT_ID_NO":"usrRptIdNo1111", - "BSSH_CD":"bsshCd", + "BSSH_CD":"H00008333", + "BSSH_NM":"수지미래산부인과의원", + "INDUTY_NM":"마약류취급의료업", "RPT_TY_CD":"2", "RND_DTL_RPT_CNT":2, "HDR_DE":"20240401", @@ -277,7 +283,9 @@ public class BizNimsController { "userId":"userid1", "USR_RPT_ID_NO":"usrRptIdNo4444", "REF_USR_RPT_ID_NO":"usrRptIdNo2222", - "BSSH_CD":"bsshCd", + "BSSH_CD":"H00008333", + "BSSH_NM":"수지미래산부인과의원", + "INDUTY_NM":"마약류취급의료업", "RPT_TY_CD":"1", "RND_DTL_RPT_CNT":0, "HDR_DE":"20240401", 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 d970315..f2c66e5 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 @@ -208,7 +208,7 @@ public class NimsApiDto { @NoArgsConstructor @AllArgsConstructor @SuperBuilder - public static class DsuseRpt { + public static class DsuseRptInfo extends AuditDto { /** * 사용자 보고 식별 번호 @@ -229,6 +229,18 @@ public class NimsApiDto { @JsonProperty(value = "BSSH_CD", required = true) private String bsshCd; + /** + * 마약류취급자명업체명 + */ + @JsonProperty(value = "BSSH_NM", required = true) + private String bsshNm; + + /** + * 업종명 + */ + @JsonProperty(value = "INDUTY_NM", required = true) + private String indutyNm; + /** * 보고 유형 코드(0-신규,1-취소,2-변경) */ @@ -299,13 +311,18 @@ public class NimsApiDto { @JsonProperty(value = "RPT_PRG_STTS_CD", required = true) private String rptPrgSttsCd; + /** + * 원사용자보고식별번호 + */ + //@JsonProperty(value = "USR_RPT_ID_NO", required = true) + private String orgUsrRptIdNo; /** * 폐기보고상세 목록 */ @Builder.Default @Valid - private List dsuseRptDtls = new ArrayList<>(); + private List dsuseRptInfoDtls = new ArrayList<>(); } @Getter @@ -313,7 +330,7 @@ public class NimsApiDto { @NoArgsConstructor @AllArgsConstructor @SuperBuilder - public static class DsuseRptDtl { + public static class DsuseRptInfoDtl extends AuditDto { /** * 사용자 보고 식별 번호 */ @@ -368,18 +385,6 @@ public class NimsApiDto { @JsonProperty(value = "MNF_SEQ") private String mnfSeq; - /** - * 저장소 번호 - */ - @JsonProperty(value = "STORGE_NO", required = true) - private String storgeNo; - - /** - * 저장소명 - */ - @JsonProperty(value = "STORGE_NM", required = true) - private String storgeNm; - /** * 이동 유형 코드 * 1102: 재고차감, 1170: 재고미차감 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 a5fb4dd..75e6f0b 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 @@ -279,6 +279,14 @@ public class NimsApiRequest { @Schema(title = "폐기 보고 진행 상태", description = "폐기 보고 진행 상태", example = " ", allowableValues = {"0", "1", "2", "3"}) String ps; + /** + * FIXME : 속성명 확정 필요 + * 4050149 - 수지구보건소 + */ + @Schema(title = "관할관청기관코드", description = "관할관청기관코드", example = "4050149") + @NotEmpty(message = "관할 관청 기관 코드는 필수 입니다") + String fg4; + } /** 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 a2cf1ea..bc3d1d8 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 @@ -30,5 +30,5 @@ public interface InfNimsService { NimsApiResult.Response getStorageInfo(NimsApiRequest.StorageInfoRequest dto); - NimsApiResult.Response getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto); + NimsApiResult.Response getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest 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 05bc577..14fb9c8 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 @@ -1,5 +1,6 @@ package cokr.xit.adds.inf.nims.service.bean; +import java.util.ArrayList; import java.util.List; import javax.validation.Validation; @@ -50,6 +51,12 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe @Value("${app.inf.nims.api-key}") private String nimsApiKey; + /** + * 관할관청코드 + */ + @Value("${app.inf.nims.ofCd}") + private String ofCd; + @Value("${app.inf.nims.api.bsshinfoStV1}") private String bsshInfoStV1; @@ -140,8 +147,9 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe } @Override - public NimsApiResult.Response getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto) { + public NimsApiResult.Response getDsuseRptInfo(NimsApiRequest.DsuseRptInfoRequest dto) { dto.setK(nimsApiKey); + dto.setFg4(ofCd); ApiUtil.validate(dto, null, validator); ApiUtil.checkYmdError(dto.getSdt(), "sdt"); ApiUtil.checkYmdError(dto.getEdt(), "edt"); @@ -153,71 +161,67 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe return getDsuseRptResponse(); } - private NimsApiResult.Response getDsuseRptResponse() { - NimsApiDto.DsuseRptDtl dtl1 = NimsApiDto.DsuseRptDtl.builder() - .usrRptIdNo("usrRptIdNo1111") - .usrRptLnIdNo("dsuseRptDtlIdNo11") - .prductCd("상품코드") - .prductNm("제품명") - .minDistbQy(1) - .pceQy(0) - .mnfNo("제조번호") - .prdValidDe("20240401") - .mnfSeq("-") - .storgeNo("저장소번호") - .storgeNm("저장소명") - .mvmnTyCd("1102") - .dsuseQy(30) - .build(); - NimsApiDto.DsuseRptDtl dtl2 = NimsApiDto.DsuseRptDtl.builder() - .usrRptIdNo("usrRptIdNo1111") - .usrRptLnIdNo("dsuseRptDtlIdNo22") - .prductCd("상품코드1") - .prductNm("제품명1") - .minDistbQy(1) - .pceQy(0) - .mnfNo("제조번호1") - .prdValidDe("20240401") - .mnfSeq("-") - .storgeNo("저장소번호1") - .storgeNm("저장소명1") - .mvmnTyCd("1102") - .dsuseQy(10) - .build(); - - NimsApiDto.DsuseRpt dsuseRpt = NimsApiDto.DsuseRpt.builder() - .bsshCd("bsshCd") - .usrRptIdNo("usrRptIdNo1111") - .rptTyCd("0") - .rndDtlRptCnt(2) - .hdrDe("20240401") - .rptDe("20240401") - .dsuseSeCd("1") - .dsusePrvCd("01") - .dsuseMthCd("1") - .dsuseLoc("보건소") - .status("0") - .rptPrgSttsCd("0") - .dsuseRptDtls(List.of(dtl1, dtl2)) - .build(); - - NimsApiDto.DsuseRpt dsuseRpt2 = NimsApiDto.DsuseRpt.builder() - .bsshCd("bsshCd") - .usrRptIdNo("usrRptIdNo2222") - .rptTyCd("0") - .rndDtlRptCnt(2) - .hdrDe("20240401") - .rptDe("20240401") - .dsuseSeCd("1") - .dsusePrvCd("01") - .dsuseMthCd("1") - .dsuseLoc("보건소") - .status("0") - .rptPrgSttsCd("0") - .dsuseRptDtls(List.of(dtl1, dtl2)) - .build(); + private NimsApiResult.Response getDsuseRptResponse() { + + //List usrRptIdNoList = List.of("11111", "22222", "33333", "44444", "55555", "66666"); + List usrRptIdNoList = List.of("11111", "22222", "33333", "44444", "55555", "66666", "77777"); + List usrRptLnIdNoList = List.of("111111111", "222222222"); + //List rptTyCds = List.of("0", "0", "0", "0", "1", "2", "1"); + List rptTyCds = List.of("0", "0", "0", "0", "1", "2", "2"); + List refUsrRptIdNos = List.of("11111", "33333", "66666"); + List dsuseRpts = new ArrayList<>(); + + int refIdx = 0; + for(int i = 0; ibuilder() + return NimsApiResult.Response.builder() .header( NimsApiResult.Header.builder() .resultCd(0) @@ -225,8 +229,8 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe .build() ) .body( - NimsApiResult.Body.builder() - .list(List.of(dsuseRpt, dsuseRpt2)) + NimsApiResult.Body.builder() + .list(dsuseRpts) .isEndYn("Y") .nRecord(2) .totalCount(2) 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 03efacd..710f46f 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 @@ -78,7 +78,7 @@ public class InfNimsController { @Operation(summary = "폐기 보고 정보 조회", description = "폐기 보고 정보 조회") @PostMapping("/getDsuseRptInfo") - public ApiBaseResponse> getDsuseRptInfo( + public ApiBaseResponse> getDsuseRptInfo( @RequestBody NimsApiRequest.DsuseRptInfoRequest dto ) { return ApiBaseResponse.of(infNimsService.getDsuseRptInfo(dto)); diff --git a/src/main/resources/config/application-inf.yml b/src/main/resources/config/application-inf.yml index 95f2e29..e649eaa 100644 --- a/src/main/resources/config/application-inf.yml +++ b/src/main/resources/config/application-inf.yml @@ -1,6 +1,8 @@ app: inf: nims: + # 관할관청기관코드 : 4050149 - 수지구보건소 + ofCd: 4050149 # 기관명 onm: 수지구보건소 bssh-cd: TST000543 diff --git a/src/main/resources/database/DDL/adds_nims.sql b/src/main/resources/database/DDL/adds_nims.sql index 5b622b0..7b51dec 100644 --- a/src/main/resources/database/DDL/adds_nims.sql +++ b/src/main/resources/database/DDL/adds_nims.sql @@ -19,28 +19,68 @@ CREATE TABLE tb_bssh_info mdfcn_dt varchar(14) NULL COMMENT '수정_일시', mdfr varchar(10) NULL COMMENT '수정자', PRIMARY KEY (bssh_cd) + ) COMMENT '취급자_정보'; +CREATE TABLE tb_dsuse_rpt_info +( + usr_rpt_id_no varchar(30) NOT NULL COMMENT '사용자_보고_식별_번호', + ref_usr_rpt_id_no varchar(30) NULL COMMENT '참조_사용자_보고_식별_번호', + bssh_cd varchar(10) NOT NULL COMMENT '마약류취급자식별_번호', + bssh_nm varchar(120) NOT NULL COMMENT '업체_명', + induty_nm varchar(200) NOT NULL COMMENT '업종_명', + rpt_ty_cd varchar(1) NULL COMMENT '보고_유형_코드(0-신규,1-취소,2-변경)', + rnd_dtl_rpt_cnt decimal NULL COMMENT '수불_상세_보고_수', + hdr_de varchar(8) NULL COMMENT '취급_일자', + rpt_de varchar(8) NULL COMMENT '보고_일자', + dsuse_se_cd varchar(10) NULL COMMENT '폐기_구분_코드', + dsuse_prv_cd varchar(10) NULL COMMENT '폐기_사유_코드', + dsuse_mth_cd varchar(10) NULL COMMENT '폐기_방법_코드', + dsuse_loc varchar(120) NULL COMMENT '폐기_장소', + dsuse_de varchar(80) NULL COMMENT '폐기_일자', + status varchar(1) NULL COMMENT '처리상태(0-정상,1-취소,2-변경)', + rpt_prg_stts_cd varchar(10) NULL COMMENT '보고_진행_상태_코드', + org_usr_rpt_id_no varchar(30) null comment '원_사용자_보고_식별_번호' + use_yn varchar(1) NOT NULL COMMENT '사용_여부', + reg_dt varchar(14) NOT NULL COMMENT '등록_일시', + rgtr varchar(10) NOT NULL COMMENT '등록자', + mdfcn_dt varchar(14) NULL COMMENT '수정_일시', + mdfr varchar(10) NULL COMMENT '수정자', + PRIMARY KEY (usr_rpt_id_no) +) COMMENT '폐기_보고_정보'; +create or replace index idx_tb_dsuse_rpt_info_01 + on adds.tb_dsuse_rpt_info (org_usr_rpt_id_no) + comment '원_사용자_보고_식별_번호 인덱스'; + +CREATE TABLE tb_dsuse_rpt_info_dtl +( + usr_rpt_id_no varchar(30) NOT NULL COMMENT '사용자_보고_식별_번호', + usr_rpt_ln_id_no varchar(35) NOT NULL COMMENT '사용자_보고_라인_식별_번호', + prduct_cd varchar(14) NOT NULL COMMENT '제품_코드', + prduct_nm varchar(300) NOT NULL COMMENT '제품_명', + min_distb_qy decimal NULL COMMENT '최소_유통단위_수량', + pce_qy decimal NULL COMMENT '낱개단위_수량', + mnf_no varchar(20) NULL COMMENT '제조_번호', + prd_valid_de varchar(8) NULL COMMENT '제품_유효기한_일자', + mnf_seq varchar(42) NULL COMMENT '제조_일련번호', + mvmn_ty_cd varchar(4) NOT NULL COMMENT '이동_유형_코드', + dsuse_qy decimal NOT NULL COMMENT '폐기_수량', + use_yn varchar(1) NOT NULL COMMENT '사용_여부', + reg_dt varchar(14) NOT NULL COMMENT '등록_일시', + rgtr varchar(10) NOT NULL COMMENT '등록자', + mdfcn_dt varchar(14) NULL COMMENT '수정_일시', + mdfr varchar(10) NULL COMMENT '수정자', + PRIMARY KEY (usr_rpt_id_no, usr_rpt_ln_id_no), + constraint fk_dsuse_rpt_info_dtl_to_dsuse_rpt_info + foreign key (usr_rpt_id_no) references tb_dsuse_mgt (usr_rpt_id_no) +) COMMENT '폐기_보고_정보_상세'; + CREATE TABLE tb_dsuse_mgt ( dscdmng_id varchar(10) NOT NULL COMMENT '폐기관리_id', usr_rpt_id_no varchar(30) NOT NULL COMMENT '사용자_보고_식별_번호', - ref_usr_rpt_id_no varchar(30) NULL COMMENT '참조_사용자_보고_식별_번호', user_id varchar(10) NULL COMMENT '사용자_아이디', prgrs_stts_cd varchar(10) NULL COMMENT '진행_상태_코드', - bssh_cd varchar(10) NOT NULL COMMENT '마약류취급자식별_번호', - rpt_rcept_no varchar(30) NULL COMMENT '보고_접수_번호', - rpt_ty_cd varchar(1) NULL COMMENT '보고_유형_코드(0-신규,1-취소,2-변경)', - rnd_dtl_rpt_cnt decimal NULL COMMENT '수불_상세_보고_수', - hdr_de varchar(8) NULL COMMENT '취급_일자', - rpt_de varchar(8) NULL COMMENT '보고_일자', - dsuse_se_cd varchar(10) NULL COMMENT '폐기_구분_코드', - dsuse_prv_cd varchar(10) NULL COMMENT '폐기_사유_코드', - dsuse_mth_cd varchar(10) NULL COMMENT '폐기_방법_코드', - dsuse_loc varchar(120) NULL COMMENT '폐기_장소', - dsuse_de varchar(80) NULL COMMENT '폐기_일자', - status varchar(1) NULL COMMENT '처리상태(0-정상,1-취소,2-변경)', - rpt_prg_stts_cd varchar(10) NULL COMMENT '보고_진행_상태_코드', use_yn varchar(1) NOT NULL COMMENT '사용_여부', reg_dt varchar(14) NOT NULL COMMENT '등록_일시', rgtr varchar(10) NOT NULL COMMENT '등록자', @@ -49,32 +89,6 @@ CREATE TABLE tb_dsuse_mgt PRIMARY KEY (dscdmng_id, usr_rpt_id_no) ) COMMENT '폐기관리'; -CREATE TABLE tb_dsuse_mgt_dtl -( - dscdmng_id varchar(10) NOT NULL COMMENT '폐기관리_id', - usr_rpt_id_no varchar(30) NOT NULL COMMENT '사용자_보고_식별_번호', - usr_rpt_ln_id_no varchar(35) NOT NULL COMMENT '사용자_보고_라인_식별_번호', - prduct_cd varchar(14) NOT NULL COMMENT '제품_코드', - prduct_nm varchar(300) NULL COMMENT '제품_명', - min_distb_qy decimal NULL COMMENT '최소_유통단위_수량', - pce_qy decimal NULL COMMENT '낱개단위_수량', - mnf_no varchar(20) NULL COMMENT '제조_번호', - prd_valid_de varchar(8) NULL COMMENT '제품_유효기한_일자', - mnf_seq varchar(42) NULL COMMENT '제조_일련번호', - storge_no varchar(16) NULL COMMENT '저장소_번호', - storge_nm varchar(100) NULL COMMENT '저장소명', - mvmn_ty_cd varchar(4) NULL COMMENT '이동_유형_코드', - dsuse_qy decimal NOT NULL COMMENT '폐기_수량', - use_yn varchar(1) NOT NULL COMMENT '사용_여부', - reg_dt varchar(14) NOT NULL COMMENT '등록_일시', - rgtr varchar(10) NOT NULL COMMENT '등록자', - mdfcn_dt varchar(14) NULL COMMENT '수정_일시', - mdfr varchar(10) NULL COMMENT '수정자', - PRIMARY KEY (dscdmng_id, usr_rpt_id_no, usr_rpt_ln_id_no), - constraint fk_dsuse_mgt_to_dtl_dsuse_mgt - foreign key (dscdmng_id, usr_rpt_id_no) references tb_dsuse_mgt (dscdmng_id, usr_rpt_id_no) -) COMMENT '폐기관리_상세'; - CREATE TABLE tb_storge_info ( bssh_cd varchar(10) NOT NULL COMMENT '마약류취급자식별_번호', 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 faed9a7..3824c33 100644 --- a/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml +++ b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml @@ -146,6 +146,121 @@ + + /** nims-mysql-mapper|insertDsuseRptInfo-폐기보고정보 생성|julim */ + INSERT INTO tb_dsuse_rpt_info (usr_rpt_id_no, /* 사용자보고식별번호 */ + ref_usr_rpt_id_no, /* 참조사용자식별번호 */ + bssh_cd, /* 마약류취급자식별번호 */ + bssh_nm, /* 마약류취급자명 */ + induty_nm, /* 업종명 */ + rpt_ty_cd, /* 보고유형코드 : AAR - 폐기보고 */ + rnd_dtl_rpt_cnt, /* 수불상세보고수 */ + hdr_de, /* 취급일자 */ + rpt_de, /* 보고일자 */ + dsuse_se_cd, /* 폐기구분코드 */ + dsuse_prv_cd, /* 폐기사유코드 */ + dsuse_mth_cd, /* 폐기방법코드 */ + dsuse_loc, /* 폐기장소 */ + dsuse_de, /* 폐기일자 */ + status, /* 상태 */ + rpt_prg_stts_cd, /* 보고진행상태코드 */ + org_usr_rpt_id_no, /* 원본사용자보고식별번호 */ + use_yn, + reg_dt, + rgtr) + VALUES (#{usrRptIdNo}, + #{refUsrRptIdNo}, + #{bsshCd}, + #{bsshNm}, + #{indutyNm}, + #{rptTyCd}, + #{rndDtlRptCnt}, + #{hdrDe}, + #{rptDe}, + #{dsuseSeCd}, + #{dsusePrvCd}, + #{dsuseMthCd}, + #{dsuseLoc}, + #{dsuseDe}, + #{status}, + #{rptPrgSttsCd}, + #{orgUsrRptIdNo}, + IF(#{rptTyCd} = '1', 'N', 'Y'), + DATE_FORMAT(now(), '%Y%m%d%H%i%s'), + #{rgtr}) + + + + /** nims-mysql-mapper|insertDsuseRptInfoDtl-폐기보고정보 상세 생성|julim */ + INSERT INTO tb_dsuse_rpt_info_dtl ( + usr_rpt_id_no, /* 사용자보고식별번호 */ + usr_rpt_ln_id_no, /* 사용자보고라인식별번호 */ + prduct_cd, /* 제품코드 */ + prduct_nm, /* 제품명 */ + min_distb_qy, /* 최소유통단위수량 */ + pce_qy, /* 낱개단위수량 */ + mnf_no, /* 제조번호 */ + prd_valid_de, /* 제품유효기한일자 */ + mnf_seq, /* 제품일련번호 */ + mvmn_ty_cd, /* 이동유형코드 */ + dsuse_qy, /* 폐기수량 */ + use_yn, + reg_dt, + rgtr + ) VALUES ( + #{usrRptIdNo}, + #{usrRptLnIdNo}, + #{prductCd}, + #{prductNm}, + #{minDistbQy}, + #{pceQy}, + #{mnfNo}, + #{prdValidDe}, + #{mnfSeq}, + #{mvmnTyCd}, + #{dsuseQy}, + 'Y', + DATE_FORMAT(now(), '%Y%m%d%H%i%s'), + #{rgtr} + ) + + + + + /** nims-mysql-mapper|updateCancelDsuseRptInfo-폐기보고정보 취소|julim */ + UPDATE tb_dsuse_rpt_info + SET use_yn = 'N' + , mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s') + , mdfr = #{rgtr} + WHERE usr_rpt_id_no = #{refUsrRptIdNo} + AND use_yn = 'Y' + + + + /** nims-mysql-mapper|updateCancelDsuseRptInfoDtl-폐기보고정보 상세 취소|julim */ + UPDATE tb_dsuse_rpt_info_dtl + SET use_yn = 'N' + , mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s') + , mdfr = #{rgtr} + WHERE usr_rpt_id_no = #{refUsrRptIdNo} + AND use_yn = 'Y' + + + @@ -162,7 +277,8 @@ user_id, /* 사용자ID */ prgrs_stts_cd, /* 폐기관리진행상태코드 */ bssh_cd, /* 마약류취급자식별번호 */ - rpt_rcept_no, /* 보고접수번호 */ + bssh_nm, /* 마약류취급자명 */ + induty_nm, /* 업종명 */ rpt_ty_cd, /* 보고유형코드 : AAR - 폐기보고 */ rnd_dtl_rpt_cnt, /* 수불상세보고수 */ hdr_de, /* 취급일자 */ @@ -184,7 +300,8 @@ #{userId}, #{prgrsSttsCd}, #{bsshCd}, - #{rptRceptNo}, + #{bsshNm}, + #{indutyNm}, #{rptTyCd}, #{rndDtlRptCnt}, #{hdrDe}, @@ -215,8 +332,6 @@ mnf_no, /* 제조번호 */ prd_valid_de, /* 제품유효기한일자 */ mnf_seq, /* 제품일련번호 */ - storge_no, /* 저장소번호 */ - storge_nm, /* 저장소명 */ mvmn_ty_cd, /* 이동유형코드 */ dsuse_qy, /* 폐기수량 */ use_yn, @@ -233,8 +348,6 @@ #{mnfNo}, #{prdValidDe}, #{mnfSeq}, - #{storgeNo}, - #{storgeNm}, #{mvmnTyCd}, #{dsuseQy}, 'Y', @@ -254,7 +367,7 @@ - /** nims-mysql-mapper|updateCancelDsuseMgtDtl-폐기관리 상세 취소 조회|julim */ + /** nims-mysql-mapper|updateCancelDsuseMgtDtl-폐기관리 상세 취소|julim */ UPDATE tb_dsuse_mgt_dtl SET use_yn = 'N' , mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s') diff --git a/src/main/resources/sql/work/nims_work.sql b/src/main/resources/sql/work/nims_work.sql index 54ccd2b..b1cd1ef 100644 --- a/src/main/resources/sql/work/nims_work.sql +++ b/src/main/resources/sql/work/nims_work.sql @@ -82,3 +82,38 @@ select tdm.dscdmng_id /* 폐기관리ID */ on tdm.bssh_cd = tsi.bssh_cd where tdm.dscdmng_id = '2024040001'; +select * +from tb_dsuse_rpt_info +where use_yn = 'Y'; + + + +WITH RECURSIVE temp ( + usr_rpt_id_no, rpt_ty_cd, ref_usr_rpt_id_no, depth, path +) AS (select usr_rpt_id_no + , rpt_ty_cd + , ref_usr_rpt_id_no + , 0 + , usr_rpt_id_no + from tb_dsuse_rpt_info + where 1=1 + -- and use_yn = 'Y' + and ref_usr_rpt_id_no is null + UNION ALL + select tdri.usr_rpt_id_no + , tdri.rpt_ty_cd + , tdri.ref_usr_rpt_id_no + , tgt.depth + 1 + , concat(tgt.path, ',', tdri.usr_rpt_id_no) + from tb_dsuse_rpt_info tdri + INNER JOIN temp tgt + ON tdri.ref_usr_rpt_id_no = tgt.usr_rpt_id_no + ) + select usr_rpt_id_no + , rpt_ty_cd + , ref_usr_rpt_id_no + , depth + , path +from temp +order by temp.path; +