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 4bef651..08b83af 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 @@ -40,6 +40,8 @@ public interface BizNimsMapper extends AbstractMapper { //------------------------------------------------------------------------------------------------------ // NIMS BIZ //------------------------------------------------------------------------------------------------------ + int insertDsuseMgtReceipt(final BizNimsRequest.DsuseMgtReceipt dto); + int updateDsuseMgtRslt(final BizNimsRequest.DsuseMgtRslt dto); int insertDsuseMgt(final BizNimsRequest.DsuseMgt dto); int insertDsuseMgtDtl(final BizNimsRequest.DsuseMgtDtl dto); List selectDsuseMgts(final BizNimsRequest.DsuseMgtInq 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 a119780..956e5ec 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 @@ -21,6 +21,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -38,68 +39,163 @@ import lombok.experimental.SuperBuilder; * */ public class BizNimsRequest { - /** - * 마약류 폐기 관리 마스터 request + * 마약류 폐기 관리 신청서 접수 request */ - @Schema(name = "DsuseMgt", description = "마약류 폐기 관리 마스터 DTO") - @Data + @Schema(name = "DsuseMgtReceipt", description = "마약류 폐기 관리 신청서 접수 DTO") + @Getter + //@Setter @NoArgsConstructor - @AllArgsConstructor @SuperBuilder @EqualsAndHashCode(callSuper = false) - public static class DsuseMgt2 extends AuditDto { + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class DsuseMgtReceipt extends AuditDto { + /** + * 폐기 관리 ID + */ @Schema(requiredMode = AUTO, title = "폐기 관리 ID", example = " ") private String dscdmngId; + /** + * 사용자 ID + */ @Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ") @NotEmpty(message = "사용자 ID는 필수 입니다") private String userId; /** *
-		 * 원 사용자 보고 식별 번호
-		 * 폐기 보고 생성시의 사용자 보고 식별 번호
-		 * 생성 > 변경 > 변경 > 취소 등의 보고시 매번 새로운 보고식별번호가 생성
-		 * => 추적을 위해 최초의 생성시 보고식별번호를 기록
-		 * YYYYMMDD
+		 * 폐기관리진행상태 - ADDS11
+		 * 01-폐기신청서 접수
+		 * 06-폐기통보서작성
+		 * 07-폐기내역서작성
+		 * 11-폐기보고확인
+		 * 21-폐기보고
+		 * 99-폐기보고완료
 		 * 
*/ - @Schema(requiredMode = REQUIRED, title = "원사용자보고식별번호", example = " ") - private String orgUsrRptIdNo; + @Schema(title = "폐기관리진행상태", example = "01") + @NotEmpty(message = "폐기관리진행상태는 필수 입니다") + private String prgrsSttsCd = Constants.PRGRS_STTS_CD.RECEIPT.getCode(); + + /** + * 마약류취급자식별번호 + */ + @Schema(title = "마약류취급자식별번호", example = "H00008333") + @NotEmpty(message = "마약류취급자식별번호는 필수 입니다") + private String bsshCd; + + /** + * 수불상세보고수 + */ + @Schema(requiredMode = REQUIRED, title = "수불상세보고수", example = "1") + @Positive(message="폐기보고 제품 건수(제품수불상세보고수)를 입력해 주세요(ex. 1)") + private Integer rndDtlRptCnt; /** *
-		 * 사용자 보고 식별 번호
-		 * 생성후 변경이나 취소시 새로운 보고식별번호로 update
+		 * 폐기 사유 코드
+		 * 01-파손, 02-변질,부패, 03-유효기간 또는 사용기한 경과
+		 * 04-유효 기간 임박, 05-사용 중단, 07-폐업, 08-환자 반납
+		 * 09-기타, 12-제조 공정중 폐기물
 		 * 
*/ - @Schema(requiredMode = REQUIRED, title = "사용자보고식별번호", example = " ") - private String usrRptIdNo; + @Schema(title = "폐기 사유 코드", example = "03") + @NotEmpty(message = "폐기 사유 코드는 필수 입니다") + private String dsusePrvCd; + } + + /** + * 마약류 폐기 관리 통보 및 결과 처리 request + */ + @Schema(name = "DsuseMgtRslt", description = "마약류 폐기 관리 통보 및 결과 처리 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @EqualsAndHashCode(callSuper = false) + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class DsuseMgtRslt extends AuditDto { + /** + * 폐기 관리 ID + */ + @Schema(requiredMode = REQUIRED, title = "폐기 관리 ID", example = " ") + private String dscdmngId; /** - * 마약류취급자식별번호 + * 사용자 ID */ - @JsonProperty(value = "BSSH_CD", required = true) - private String bsshCd; + @Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ") + @NotEmpty(message = "사용자 ID는 필수 입니다") + private String userId; /** *
-		 * 진행상태
-		 *
+		 * 폐기관리진행상태 - ADDS11
 		 * 01-폐기신청서 접수
-		 * 02-폐기보고 매핑
-		 * 11-민원수령처리(전자결재)
-		 * 21-폐기결과통보서 작성
-		 * 22-폐기결과보고서 작성
-		 * 31-기안 및 발송
-		 * 41-폐기보고
-		 * 99-종료
+		 * 06-폐기통보서작성
+		 * 07-폐기내역서작성
+		 * 11-폐기보고확인
+		 * 21-폐기보고
+		 * 99-폐기보고완료
 		 * 
*/ - @Schema(requiredMode = REQUIRED, title = "진행 상태 코드", example = " ", allowableValues = {"01", "02", "11", "21", "22", "31", "41", "99"}) - @Pattern(regexp = "01|02|11|22|31|41|99", message = "진행 상태 코드는 필수 입니다") + @Schema(title = "폐기관리진행상태", example = "01") + @NotEmpty(message = "폐기관리진행상태는 필수 입니다") private String prgrsSttsCd = Constants.PRGRS_STTS_CD.RECEIPT.getCode(); + + /** + *
+		 * 취급일자 - 폐기신청민원 처리일자(공문시행일자)
+		 * 
+ */ + @Schema(title = "취급일자", example = " ") + @Pattern(regexp = Constants.DATE_REGX, message = "취급일자를 정확히 입력해 주세요(yyyyMMdd)") + private String hdrDe; + + /** + * 보고일자 + */ + @Schema(title = "보고일자", example = " ") + @Pattern(regexp = Constants.DATE_REGX, message = "보고일자를 정확히 입력해 주세요(yyyyMMdd)") + private String rptDe; + + /** + *
+		 * 폐기 구분 코드
+		 * 1-보건소폐기, 2-공무원임회, 4-도난/분실/재해 발생 사고마약류
+		 * 
+ */ + @Schema(title = "폐기 구분 코드", example = " ") + @NotEmpty(message = "폐기 구분 코드는 필수 입니다") + private String dsuseSeCd; + + /** + *
+		 * 폐기 방법 코드
+		 * 1-소각, 2-중화, 3-가수 분해, 4-산화, 5-환원
+		 * 6-희석, 7-매물, 8-기타(파쇄,혼합), 9-사고
+		 * 
+ */ + @Schema(title = "폐기 방법 코드", example = " ") + @NotEmpty(message = "폐기 방법 코드는 필수 입니다") + private String dsuseMthCd; + + /** + * 폐기 장소 + */ + @Schema(title = "폐기 장소", example = " ") + @NotEmpty(message = "폐기 장소는 필수 입니다") + private String dsuseLoc; + + /** + *
+		 * 폐기일자
+		 * 
+ */ + @Schema(title = "폐기일자", example = " ") + @Pattern(regexp = Constants.DATE_REGX, message = "폐기일자를 정확히 입력해 주세요(yyyyMMdd)") + private String dsuseDe; } /** @@ -128,16 +224,13 @@ public class BizNimsRequest { /** *
-		 * 진행상태
-		 *
+		 * 폐기관리진행상태 - ADDS11
 		 * 01-폐기신청서 접수
-		 * 02-폐기보고 매핑
-		 * 11-민원수령처리(전자결재)
-		 * 21-폐기결과통보서 작성
-		 * 22-폐기결과보고서 작성
-		 * 31-기안 및 발송
-		 * 41-폐기보고
-		 * 99-종료
+		 * 06-폐기통보서작성
+		 * 07-폐기내역서작성
+		 * 11-폐기보고확인
+		 * 21-폐기보고
+		 * 99-폐기보고완료
 		 * 
*/ @Schema(title = "폐기관리진행상태", example = " ") @@ -158,7 +251,7 @@ public class BizNimsRequest { private Integer rndDtlRptCnt; /** - * 취급일자 + * 취급일자 - 폐기신청민원 처리일자(공문시행일자) */ @Schema(title = "취급일자", example = " ") @Pattern(regexp = Constants.DATE_REGX, message = "취급일자를 정확히 입력해 주세요(yyyyMMdd)") @@ -262,6 +355,66 @@ public class BizNimsRequest { List dsuseMgtDtls = new ArrayList<>(); } + /** + * 마약류 폐기 관리 마스터 request + */ + @Schema(name = "DsuseMgt", description = "마약류 폐기 관리 마스터 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @EqualsAndHashCode(callSuper = false) + public static class DsuseMgt2 extends AuditDto { + @Schema(requiredMode = AUTO, title = "폐기 관리 ID", example = " ") + private String dscdmngId; + + @Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ") + @NotEmpty(message = "사용자 ID는 필수 입니다") + private String userId; + + /** + *
+		 * 원 사용자 보고 식별 번호
+		 * 폐기 보고 생성시의 사용자 보고 식별 번호
+		 * 생성 > 변경 > 변경 > 취소 등의 보고시 매번 새로운 보고식별번호가 생성
+		 * => 추적을 위해 최초의 생성시 보고식별번호를 기록
+		 * YYYYMMDD
+		 * 
+ */ + @Schema(requiredMode = REQUIRED, title = "원사용자보고식별번호", example = " ") + private String orgUsrRptIdNo; + + /** + *
+		 * 사용자 보고 식별 번호
+		 * 생성후 변경이나 취소시 새로운 보고식별번호로 update
+		 * 
+ */ + @Schema(requiredMode = REQUIRED, title = "사용자보고식별번호", example = " ") + private String usrRptIdNo; + + /** + * 마약류취급자식별번호 + */ + @JsonProperty(value = "BSSH_CD", required = true) + private String bsshCd; + + /** + *
+		 * 폐기관리진행상태 - ADDS11
+		 * 01-폐기신청서 접수
+		 * 06-폐기통보서작성
+		 * 07-폐기내역서작성
+		 * 11-폐기보고확인
+		 * 21-폐기보고
+		 * 99-폐기보고완료
+		 * 
+ */ + @Schema(requiredMode = REQUIRED, title = "진행 상태 코드", example = " ", allowableValues = {"01", "02", "11", "21", "22", "31", "41", "99"}) + @Pattern(regexp = "01|02|11|22|31|41|99", message = "진행 상태 코드는 필수 입니다") + private String prgrsSttsCd = Constants.PRGRS_STTS_CD.RECEIPT.getCode(); + } + /** * 마약류 폐기 관리 상세 request */ @@ -288,59 +441,63 @@ public class BizNimsRequest { /** * 제품_코드 - 13자리 */ - @Schema(title = "제품코드", example = " ") + @Schema(requiredMode = REQUIRED, title = "제품코드", example = "8806718050823") @Pattern(regexp = "[0-9a-zA-Z]{13}", message = "제품코드는 13자리 입니다") private String prductCd; /** * 제품명 */ - @Schema(title = "제품명", example = " ") + @Schema(requiredMode = REQUIRED, title = "제품명", example = "아쿠아폴주20밀리리터(프로포폴) (20㎖)") @NotEmpty(message = "제품명은 필수 입니다") private String prductNm; /** * 최소유통단위 수량 : 1 ~ */ - @Schema(title = "최소유통단위수량", example = " ") + @Schema(requiredMode = REQUIRED, title = "최소유통단위수량", example = "1") @Positive(message="최소유통단위 수량을 입력해 주세요(ex. 1)") private Integer minDistbQy; /** * 낱개단위 수량 : 0 ~ */ - @Schema(title = "낱개단위수량", example = " ") + @Schema(requiredMode = REQUIRED, title = "낱개단위수량", example = "0") @PositiveOrZero(message = "낱개단위 수량은 필수 입니다(ex. 0)") private Integer pceQy; /** * 제조번호 - 20자리 이하 */ - @Schema(title = "제품번호", example = " ") - @Pattern(regexp = "[0-9a-zA-Z]{1,20}", message = "제조번호는 필수 입니다") + @Schema(requiredMode = REQUIRED, title = "제품제조번호", example = "A1111") + @Pattern(regexp = "[0-9a-zA-Z]{1,20}", message = "제품제조번호는 필수 입니다") private String mnfNo; /** * 제품 유효기한 일자 - yyyyMMdd */ - @Schema(title = "제품유효기간", example = " ") + @Schema(requiredMode = REQUIRED, title = "제품유효기간", example = "20300303") @Pattern(regexp = Constants.DATE_REGX, message = "제품 유효 기간을 정확히 입력해 주세요(yyyyMMdd)") private String prdValidDe; /** * 제조 일련번호 - 20자리 이하 */ - @Schema(title = "제조일련번호", example = " ") + @Schema(requiredMode = REQUIRED, title = "제조일련번호", example = "A11111111") @Pattern(regexp = "[0-9a-zA-Z]{1,20}", message = "제조 일련번호는 필수 입니다") private String mnfSeq; /** * 폐기 수량 */ - @Schema(title = "폐기수량", example = " ") + @Schema(requiredMode = REQUIRED, title = "폐기수량", example = "2") @Positive(message = "폐기 수량은 0보다 커야 합니다") private Integer dsuseQy; + // @Schema(title = "폐기제품이미지", example = " ") + // //@NotEmpty(message = "폐기제품이미지는 필수 입니다") + // private MultipartFile dsusePrdImgFile; + /** * 사용자보고식별번호 */ 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 3e084d8..84ac924 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 @@ -2,6 +2,8 @@ package cokr.xit.adds.biz.nims.service; import java.util.List; +import org.springframework.web.multipart.MultipartFile; + import cokr.xit.adds.biz.nims.model.BizNimsRequest; import cokr.xit.adds.biz.nims.model.BizNimsResponse; import cokr.xit.adds.inf.nims.model.NimsApiDto; @@ -54,6 +56,8 @@ public interface BizNimsService { //------------------------------------------------------------------------------------------------------ // NIMS BIZ //------------------------------------------------------------------------------------------------------ + BizNimsRequest.DsuseMgtReceipt saveDsuseMgtReceipt(final BizNimsRequest.DsuseMgtReceipt dto, final List dtls, List files); + BizNimsRequest.DsuseMgtRslt saveDsuseMgtRslt(final BizNimsRequest.DsuseMgtRslt dto, List files); BizNimsRequest.DsuseMgt saveDsuseMgt(final BizNimsRequest.DsuseMgt dto); List getDsuseMgts(final BizNimsRequest.DsuseMgtInq dto); void modifyPrgsSttsOfDsuseMgt(final BizNimsRequest.DsuseMgt 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 f3df58a..d637c87 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,5 +1,9 @@ package cokr.xit.adds.biz.nims.service.bean; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -8,9 +12,11 @@ import java.util.Map; import javax.validation.Validation; import javax.validation.Validator; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import cokr.xit.adds.biz.nims.dao.BizNimsMapper; import cokr.xit.adds.biz.nims.model.BizNimsRequest; @@ -28,6 +34,7 @@ import cokr.xit.adds.inf.nims.service.InfNimsService; import cokr.xit.foundation.component.AbstractServiceBean; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import lombok.val; /** *
@@ -48,6 +55,18 @@ import lombok.extern.slf4j.Slf4j;
 @RequiredArgsConstructor
 @Service
 public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsService {
+	/**
+	 * 보고서 저장 경로
+	 */
+	@Value("${app.file.rpt.path:}")
+	private String rptPath;
+
+	/**
+	 * 폐기이미지 저장 경로
+	 */
+	@Value("${app.file.img.path:d:/data/adds-api/img}")
+	private String dsuseImgPath;
+
 	/**
 	 * 관할군청코드
 	 */
@@ -201,7 +220,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 	 */
 	@Override
 	public List saveDsuseRptInfo(NimsApiRequest.DsuseRptInfoReq reqDto) {
-		List rsltList = new ArrayList<>();
+		List nimsList = new ArrayList<>();
 
 		while(true) {
 			NimsApiResult.Response rslt = infNimsService.getDsuseRptInfo(reqDto);
@@ -209,7 +228,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 
 			if(isEmpty(curList)) break;
 
-			rsltList.addAll(curList);
+			nimsList.addAll(curList);
 
 			if(rslt.isEndYn()) break;
 			reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1));
@@ -218,7 +237,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 		// FIXME: 미완료 보고관리-보고정보 매핑 처리
 		// 미완료(종료)된 폐기 관리 목록 조회
 		List dsuseMgts = getDsuseMgts(BizNimsRequest.DsuseMgtInq.builder()
-			.prgrsSttsCd(Constants.PRGRS_STTS_CD.END.getCode())
+			.prgrsSttsCd(Constants.PRGRS_STTS_CD.COMPLETE.getCode())
 			.build());
 
 		//////////////////////////////////////////////////////////////////////////////
@@ -243,19 +262,19 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 		// 결과 return 작업 대상, 대상 데이타 List
 		List rtnTmplist = new ArrayList<>();
 		List rtnlist = new ArrayList<>();
-		for (NimsApiDto.DsuseRptInfo dto : rsltList) {
+		for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) {
 			Map map = new HashMap<>();
-			map.put("usrRptIdNo", dto.getUsrRptIdNo());
+			map.put("usrRptIdNo", nimsDto.getUsrRptIdNo());
 			NimsApiDto.DsuseRptInfo infoDto = bizNimsMapper.selectDsuseRptInfoByUsrRptIdNo(map);
 			if(isEmpty(infoDto)){
-				workList.add(dto);
+				workList.add(nimsDto);
 			}else{
 				// FIXME: API 적용 필요
 				// API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상
 				//if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){
 				if("Y".equals(infoDto.getUseYn())){
-					rtnTmplist.add(dto);
-					rtnlist.add(dto);
+					rtnTmplist.add(nimsDto);
+					rtnlist.add(nimsDto);
 				}
 			};
 		}
@@ -265,18 +284,15 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 			// 신규가 아닌 경우 skip
 			if(!"0".equals(dto.getRptTyCd())) continue;
 
-			dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo());
-			dto.setRgtr(Constants.NIMS_API_USER_ID);
-
 
 			// 폐기 보고 정보 데이타 생성
-			createDsuseRpt(dto, true);
+			createDsuseRpt(dto);
 			rtnTmplist.add(dto);
 			rtnlist.add(dto);
 
 			// FIXME : 폐기 관리 데이타 매핑
 			// FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우?
-			List newList = dto.mappingNewDsuseRptInfo(dsuseMgts);
+			List newList = dto.mappingNewDsuseRptInfos(dsuseMgts);
 			if(newList.size() > 1){
 				throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]");
 			}
@@ -307,7 +323,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 			updateDsuseRptAndDsuseMgt(dto);
 
 			// 2-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성)
-			createDsuseRpt(dto, false);
+			createDsuseRpt(dto);
 
 			// FIXME : API 적용 필요
 			// 결과 return 대상 데이타 List에서 조회한 변경 대상이 있는 경우 replace
@@ -340,6 +356,79 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 	//------------------------------------------------------------------------------------------------------
 	// NIMS BIZ
 	//------------------------------------------------------------------------------------------------------
+	/**
+	 * 
+	 * 사고마약류폐기 신청 접수
+	 * @param dto BizNimsRequest.DsuseMgtReceipt
+	 * @return BizNimsRequest.DsuseMgt 생성된 폐기관리 정보
+	 * 
+ */ + public BizNimsRequest.DsuseMgtReceipt saveDsuseMgtReceipt(final BizNimsRequest.DsuseMgtReceipt dto, final List dtls, final List files) { + ApiUtil.validate(dto, null, validator); + if(dto.getRndDtlRptCnt() != dtls.size()) throw ApiCustomException.create("폐기물 보고수 오류[폐기물 갯수 확인]"); + ApiUtil.validate(dtls, null, validator); + dto.setRgtr(dto.getUserId()); + if(files.size() != dtls.size()) throw ApiCustomException.create("폐기물 파일 갯수 오류[파일 갯수 확인]"); + + if(bizNimsMapper.insertDsuseMgtReceipt(dto) == 1){ + int dtlCnt = 0; + for (BizNimsRequest.DsuseMgtDtl d : dtls) { + d.setDscdmngId(dto.getDscdmngId()); + d.setDscdmngSn(StringUtils.leftPad(dtlCnt + 1 + "", 3, "0")); + d.setRgtr(dto.getUserId()); + dtlCnt = dtlCnt + bizNimsMapper.insertDsuseMgtDtl(d); + + // FIXME : file upload + // files[dtlCnt].transferTo(new File("path")); + //d.setDsusePrdImgFile(null); + } + if(dtls.size() != dtlCnt) throw ApiCustomException.create("폐기 관리 상세 등록 실패"); + } else { + throw ApiCustomException.create("폐기 관리 마스터 등록 실패"); + } + return dto; + } + + /** + *
+	 * 사고마약류폐기 통보[결과]처리
+	 * @param dto BizNimsRequest.DsuseMgtReceipt
+	 * @return BizNimsRequest.DsuseMgt 생성된 폐기관리 정보
+	 * 
+ */ + public BizNimsRequest.DsuseMgtRslt saveDsuseMgtRslt(final BizNimsRequest.DsuseMgtRslt dto, final List files) { + ApiUtil.validate(dto, null, validator); + dto.setRgtr(dto.getUserId()); + + if(bizNimsMapper.updateDsuseMgtRslt(dto) == 1){ + int dtlCnt = 0; + String dirPath = dsuseImgPath + Constants.FILE_DLMTR + dto.getDscdmngId(); + File f = new File(dirPath); + if(!f.exists()) f.mkdirs(); + + for (MultipartFile mf : files) { + val name = mf.getOriginalFilename(); + val ext = name.substring(name.lastIndexOf(".")); + val filename = name.substring(0, name.lastIndexOf(".")); + + Path path = Paths.get(dirPath + Constants.FILE_DLMTR, name); + + + // FIXME : file upload + try { + mf.transferTo(path); + //FileCopyUtils.copy(mf.getInputStream(), Files.newOutputStream(path)); + } catch (IOException e) { + throw ApiCustomException.create(String.format("폐기 통보[결과] 처리:파일 업로드 실패[%s]", e.getMessage())); + } + //d.setDsusePrdImgFile(null); + } + + } else { + throw ApiCustomException.create("폐기 관리 정보 변경[통보(결과) 처리] 실패"); + } + return dto; + } /** *
@@ -395,163 +484,168 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 		return resList;
 	}
 
+	/**
+	 * 
+	 * saveDsuseRptInfo 대체 메소드 - 확인후 적용
+	 * 0. GET 폐기관리 데이타 정보
+	 * 1. GET 폐기보고 데이타 목록 - NIMS API 호출
+	 * 2. 신규 대상(DB에 저장되지 않은 데이타) 및 결과 return 대상 List(DB데이타중 사용여부 "Y") 선별
+	 * 3. 신규 대상중 신규(보고구분 '0')인 데이타 처리(DB 데이타 생성) & 결과 return 대상 List에 추가
+	 *    -> 신규(보고구분 '0')인 데이타 먼저 처리 -> 변경('2') 취소('1') 데이타 처리 가능
+	 * 4. 신규 대상중 취소,변경인 처리(DB 데이타 생성) & 결과 return 대상 List에 추가
+	 *    -> 0) 참조사용자보고식별번호 필수 체크
+	 *       1) 사용자보고식별번호 = 참조사용자보고식별번호 인 데이타
+	 *          tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
+	 *       2) 폐기 관리 테이블에 사용자보고식별번호 반영 FIXME - 반영 필요
+	 *          -> 취소인 경우는 사용자/원사용자 식별번호 clear
+	 *          -> 변경인 경우는 사용자보고식별번호 -> 참조사용자보고식별번호 update
+	 *       3) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
+	 *          -> 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
+	 * 5. 결과 return 대상 데이타 List에서 NIMS 변경 데이타인 경우 대상에서 제외
+	 * 6. return List에 현재 데이타 추가 - 변경인 경우만 추가
+	 * 7. FIXME : 폐기 관리 데이타 매핑
+	 * 8. 결과 sort 및 return
+	 * @param reqDto
+	 * @return
+	 * 
+ */ // FIXME: API 적용 필요 - nims API 확정후 // FIXME: saveDsuseRptInfo() 메소드를 활용할 수 있도록 구성 @Override public List getDsuseMgtMapping(BizNimsRequest.DsuseMgt reqDto) { + + // 0. GET 폐기관리 데이타 정보 + BizNimsResponse.DsuseMgtRes dsuseMgtDto = getDsuseMgts( + BizNimsRequest.DsuseMgtInq.builder() + .dscdmngIds(List.of(reqDto.getDscdmngId())) + .prgrsSttsCd(null) + .build()) + .get(0); + NimsApiRequest.DsuseRptInfoReq rptDto = NimsApiRequest.DsuseRptInfoReq.builder() .fg("1") .pg("1") .fg2("2") .se("AAR") - .fg3("1") + .fg3("1") // 조회기준일자 : 1-보고일자, 2-취급일자 .sdt("20220101") .edt("20220131") .bc(reqDto.getBsshCd()) .fg4(ofCd) .build(); - List rsltList = new ArrayList<>(); + // 1. GET 폐기보고 데이타 목록 - NIMS API 호출 + List nimsList = new ArrayList<>(); while(true) { NimsApiResult.Response rslt = infNimsService.getDsuseRptInfo(rptDto); List curList = rslt.getResultOrThrow(); if(isEmpty(curList)) break; - rsltList.addAll(curList); + nimsList.addAll(curList); if(rslt.isEndYn()) break; rptDto.setPg(String.valueOf(Integer.parseInt(rptDto.getPg()) + 1)); } - // GET 보고관리정보 - BizNimsResponse.DsuseMgtRes dsuseMgt = getDsuseMgts( - BizNimsRequest.DsuseMgtInq.builder() - .dscdmngIds(List.of(reqDto.getDscdmngId())) - .prgrsSttsCd(null) - .build()) - .get(0); - - ////////////////////////////////////////////////////////////////////////////// - // FIXME : 테스트를 위한 코드 - ////////////////////////////////////////////////////////////////////////////// - // for (NimsApiDto.DsuseRptInfo dto : rsltList) { - // // 폐기 관리 데이타 매핑 - // for(BizNimsResponse.DsuseMgtResponse mgtDto: dsuseMgts){ - // // 폐기 신청서 접수 상태 데이타만 처리 - // if(Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())){ - // dto.mappingDsuseRptInfo(mgtDto); - // }; - // } - // } - // if(true) return null; - ////////////////////////////////////////////////////////////////////////////// - - - // 0. 폐기보고 API 호출 결과 목록에서 기 조회(저장)한 데이타 대상 에서 제외 (usrRptIdNo가 DB에 저장된 경우) - // 작업대상 데이타 List - List workList = new ArrayList<>(); + // 신규 작업대상 데이타 List + List newList = new ArrayList<>(); // 결과 return 작업 대상, 대상 데이타 List - List rtnTmplist = new ArrayList<>(); - List rtnlist = new ArrayList<>(); - for (NimsApiDto.DsuseRptInfo dto : rsltList) { + List rtnList = new ArrayList<>(); + + // 2. 신규 작업 대상(DB에 저장되지 않은 데이타) 및 결과 return 대상 List(DB데이타중 사용여부 "Y") 선별 + for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) { Map map = new HashMap<>(); - map.put("usrRptIdNo", dto.getUsrRptIdNo()); + map.put("usrRptIdNo", nimsDto.getUsrRptIdNo()); NimsApiDto.DsuseRptInfo infoDto = bizNimsMapper.selectDsuseRptInfoByUsrRptIdNo(map); // 기조회(저장)한 데이타가 아니면 대상에 추가(usrRptIdNo가 DB에 저장되지 않은 경우) if(isEmpty(infoDto)){ - - + newList.add(nimsDto); // 기조회(저장)한 데이타 && 마지막 데이타(사용여부 'Y')인 경우는 return 대상에 추가 // 사용자보고번호가 참조사용자보고번호로 들어오는 변경 및 취소건에 의해 // return 대상에서 제외될 수 있슴 }else{ - // FIXME: API 적용 필요 + // FIXME: API 연계 데이타 확인후 확정 필요 // API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상 //if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){ if("Y".equals(infoDto.getUseYn())){ - rtnTmplist.add(dto); - rtnlist.add(dto); + //rtnTmplist.add(nimsDto); + rtnList.add(nimsDto); } }; } - // 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 - for (NimsApiDto.DsuseRptInfo dto : workList) { + // 3. 신규 작업 대상중 신규(보고구분 '0')인 데이타 처리(DB 데이타 생성) & 결과 return 대상 List에 추가 + // -> 신규(보고구분 '0')인 데이타 먼저 처리해야, 변경('2') 및 취소('1') 데이타 처리 가능 + // 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 + for (NimsApiDto.DsuseRptInfo dto : newList) { // 신규가 아닌 경우 skip if(!"0".equals(dto.getRptTyCd())) continue; - dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo()); - dto.setRgtr(Constants.NIMS_API_USER_ID); - - // 폐기 보고 정보 데이타 생성 - createDsuseRpt(dto, true); - rtnTmplist.add(dto); - rtnlist.add(dto); + createDsuseRpt(dto); + // return List에 추가 + rtnList.add(dto); // FIXME : 폐기 관리 데이타 매핑 // FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우? - List newList = List.of();////dto.mappingNewDsuseRptInfo(dsuseMgts); - if(newList.size() > 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]"); + BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto); + if(ObjectUtils.isNotEmpty(dsuseMgtRes)) { + if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) { + throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]"); + } } - if(bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]"); - }; } - // 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경) + // 4. 신규 작업 대상중 취소,변경(보고구분 '1', '2')인 처리(DB 데이타 생성) & 결과 return 대상 List에 추가 String errMsg = null; - for (NimsApiDto.DsuseRptInfo dto : workList) { - dto.setRgtr(Constants.NIMS_API_USER_ID); - + for (NimsApiDto.DsuseRptInfo dto : newList) { // 신규인 경우 skip if("0".equals(dto.getRptTyCd())) continue; - // 2-1. refUsrRptIdNo 필수 체크 + // 4-0) 참조사용자보고식별번호 필수 체크 if(isEmpty(dto.getRefUsrRptIdNo())){ throw ApiCustomException.create("데이타 오류[취소 및 변경인 경우 참조사용자식별번호(REF_USR_RPT_ID_NO) 필수]"); } - // 2-2. 폐기보고정보, 폐기관리 변경 - // 1) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update - // 2) tb_dsuse_mgt 변경 - // 조건 : 사용자보고식별번호 = 참조사용자보고식별번호 - // => usr_rpt_id_no -> refUsrRptIdNo update - // => 취소인 경우 use_yn = 'N' update + // 폐기관리 및 폐기보고 정보 변경 + // 4-1) 사용자보고식별번호 = 참조사용자보고식별번호 인 데이타 + // tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update + // 4-2) 폐기 관리 테이블에 사용자보고식별번호 반영 + // -> 취소인 경우는 사용자/원사용자 식별번호 clear + // -> 변경인 경우는 사용자보고식별번호 -> 참조사용자보고식별번호 update updateDsuseRptAndDsuseMgt(dto); - // 2-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성) - createDsuseRpt(dto, false); + // 4-3) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 + // -> 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성 + createDsuseRpt(dto); - // FIXME : API 적용 필요 - // 결과 return 대상 데이타 List에서 조회한 변경 대상이 있는 경우 replace - // 결과 return 대상 데이타 List에서 조회한 취소 대상이 있는 경우 삭제 - for(NimsApiDto.DsuseRptInfo d : rtnTmplist){ + // FIXME : API 적용후 확인 필요 + // 5. 결과 return 대상 데이타 List에서 NIMS 변경 데이타인 경우 대상에서 제외 + for(NimsApiDto.DsuseRptInfo d : rtnList){ if(d.getOrgUsrRptIdNo().equals(dto.getOrgUsrRptIdNo()) && d.getUsrRptIdNo().equals(dto.getRefUsrRptIdNo())){ - rtnlist.remove(d); - - if(dto.getRptTyCd().equals("2")){ - rtnlist.add(dto); - } + rtnList.remove(d); }; } + // 6. return List에 현재 데이타 추가 - 변경인 경우만 추가 + if(dto.getRptTyCd().equals("2")){ + rtnList.add(dto); + } - // FIXME : 폐기 관리 데이타 매핑 - List newList = List.of(); ////dto.mappingDsuseRptInfo(dsuseMgts); - if(newList.size() > 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]"); + + // 7. FIXME : 폐기 관리 데이타 매핑 + BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto); + if(ObjectUtils.isNotEmpty(dsuseMgtRes)) { + if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) { + throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]"); + } } - if(bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]"); - }; } - - // return dtos; - return workList; + // FIXME: API연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요 + rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo())); + return rtnList; } @Override @@ -671,52 +765,28 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe /** *
 	 * tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
-	 * => 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
+	 * 0) 부가 정보 set
+	 * 1) 원사용자보고식별번호 set
+	 * 2) 데이타 생성
+	 *   - 취소인 경우는 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) { + private void createDsuseRpt(NimsApiDto.DsuseRptInfo dto) { + dto.setRgtr(Constants.NIMS_API_USER_ID); dto.setRptTyCdNm(Constants.RPT_TY_CD.getName(dto.getRptTyCd())); dto.setDsuseSeCdNm(Constants.DSUSE_SE_CD.getName(dto.getDsuseSeCd())); dto.setDsusePrvCdNm(Constants.DSUSE_PRV_CD.getName(dto.getDsusePrvCd())); dto.setDsuseMthCdNm(Constants.DSUSE_MTH_CD.getName(dto.getDsuseMthCd())); - // FIXME : 폐기 관리 테이블에 사용자보고식별번호 반영 - // 원 사용자 식별 번호 set - 변경/취소 인 경우 - // 신규인 경우는 사용자보고식별번호로 설정 - 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("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 신규보고 데이타 누락]"); - } - } + // 신규가 아닌 경우 : 원사용자보고식별번호 조회 & set + if("0".equals(dto.getRptTyCd())){ + dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo()); + }else{ + setOrgUsrRptIdNo(dto); } - - // FIXME : 폐기 관리 테이블에 사용자보고식별번호 반영 if (bizNimsMapper.insertDsuseRptInfo(dto) == 1) { //취소인 경우 상세 데이타 등록 skip @@ -736,15 +806,53 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe /** *
-	 * tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
-	 * tb_dsuse_mgt
-	 * 조건 : 사용자보고식별번호 = 참조사용자보고식별번호
-	 *      => usr_rpt_id_no -> refUsrRptIdNo update
-	 *      => 취소인 경우 use_yn = 'N' update
+	 * 취소 또는 변경(rptTyCd : 1, 2)시 원사용자보고식별번호 조회 및 설정
+	 * 참조사용자보고식별번호 필수
+	 * => 사용자보고식별번호 = 참조사용자식별번호 조건 으로 조회
+	 * => 조회결과 참조사용자식별번호가 존재하지 않을때 까지 반복 조회(신규(rptTyCd : 0)인 경우 까지)
+	 * => 사용자보고식별번호를 원사용자보고식별번호로 설정
+	 * @param dto NIMS 폐기보고 데이타(NimsApiDto.DsuseRptInfo)
+	 * 
+ */ + private void setOrgUsrRptIdNo(NimsApiDto.DsuseRptInfo dto) { + // 원 사용자 식별 번호 set - 변경/취소 인 경우 + // 신규인 경우는 사용자보고식별번호로 설정 + + 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("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 신규보고 데이타 누락]"); + } + } + } + + /** + *
+	 * - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl
+	 *   사용자보고식별번호 = 참조사용자보고식별번호 인 데이타
+	 *   => tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
+	 * - tb_dsuse_mgt
+	 *   폐기 관리 테이블에 사용자보고식별번호 반영
+	 *   => 취소인 경우는 사용자/원사용자 식별번호 clear
+	 *   => 변경인 경우는 사용자보고식별번호 -> 참조사용자보고식별번호 update
 	 * @param dto NimsApiDto.DsuseRptInfo
 	 * 
*/ private void updateDsuseRptAndDsuseMgt(NimsApiDto.DsuseRptInfo dto) { + dto.setRgtr(Constants.NIMS_API_USER_ID); String errMsg; if ("1".equals(dto.getRptTyCd())) errMsg = "취소"; else errMsg = "변경"; @@ -765,9 +873,9 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe 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)); - } + // if ("2".equals(dto.getRptTyCd()) && dto.getRndDtlRptCnt() != cnt) { + // throw ApiCustomException.create(String.format("폐기 정보 상세 %s 실패", errMsg)); + // } } else { throw ApiCustomException.create(String.format("폐기 정보 %s 실패", 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 c588fdd..08878db 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 @@ -2,6 +2,7 @@ package cokr.xit.adds.biz.nims.web; import java.util.List; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import com.fasterxml.jackson.core.type.TypeReference; + import cokr.xit.adds.biz.nims.model.BizNimsRequest; import cokr.xit.adds.biz.nims.model.BizNimsResponse; import cokr.xit.adds.biz.nims.service.BizNimsService; @@ -19,6 +22,7 @@ import cokr.xit.adds.core.model.ApiBaseResponse; import cokr.xit.adds.core.util.XingUtils; import cokr.xit.adds.inf.nims.model.NimsApiDto; import cokr.xit.adds.inf.nims.model.NimsApiRequest; +import cokr.xit.foundation.data.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; @@ -93,6 +97,44 @@ public class BizNimsController { //------------------------------------------------------------------------------------------------------ // NIMS BIZ //------------------------------------------------------------------------------------------------------ + + /** + * 사고 마약류 폐기 관리 폐기 신청서 접수 + * @param dsuseMgtJsonStr 폐기신청 마스터 정보 JSON String + * @param dsuseMgtDtlsJsonStr 폐기신청 상세 정보 JSON String + * @param dsusePrdImgFiles 폐기신청 제품 이미지 파일 + * @return 폐기관리 신청서 접수 데이타 생성후 생성 정보 return + */ + @Operation(summary = "사고 마약류 폐기 관리 폐기 신청서 접수", description = "사고 마약류 폐기 관리 폐기 신청서 접수

폐기관리 신청서 접수 데이타 생성후 생성 정보 return") + @PostMapping(value = "/saveDsuseMgtReceipt") + public ApiBaseResponse saveDsuseMgtReceipt( + @RequestParam("dsuseMgtJsonStr") String dsuseMgtJsonStr, + @RequestParam("dsuseMgtDtlsJsonStr") String dsuseMgtDtlsJsonStr, + @RequestParam(value = "dsusePrdImgFiles") List dsusePrdImgFiles + ) { + JSON json = new JSON(); + BizNimsRequest.DsuseMgtReceipt receiptDto = json.parse(dsuseMgtJsonStr, new TypeReference<>() {}); + List dsuseMgtDtls = json.parse(dsuseMgtDtlsJsonStr, new TypeReference<>() {}); + return ApiBaseResponse.of(bizNimsService.saveDsuseMgtReceipt(receiptDto, dsuseMgtDtls, dsusePrdImgFiles)); + } + + /** + * 사고 마약류 폐기 통보[결과] 처리 + * @param dsuseMgtRsltJsonStr 폐기 통보[결과] JSON String + * @param dsuseDsuseImgFiles 폐기 이미지 파일 + * @return 폐기관리 폐기 통보[결과] 처리 정보 return + */ + @Operation(summary = "사고 마약류 폐기 관리 폐기 신청서 접수", description = "사고 마약류 폐기 관리 폐기 신청서 접수

폐기관리 신청서 접수 데이타 생성후 생성 정보 return") + @PostMapping(value = "/saveDsuseMgtRslt") + public ApiBaseResponse saveDsuseMgtRslt( + @RequestParam("dsuseMgtRsltJsonStr") String dsuseMgtRsltJsonStr, + @RequestParam(value = "dsuseDsuseImgFiles") List dsuseDsuseImgFiles + ) { + JSON json = new JSON(); + BizNimsRequest.DsuseMgtRslt rsltDto = json.parse(dsuseMgtRsltJsonStr, new TypeReference<>() {}); + return ApiBaseResponse.of(bizNimsService.saveDsuseMgtRslt(rsltDto, dsuseDsuseImgFiles)); + } + @Operation(summary = "사고 마약류 폐기 관리 생성", description = "사고 마약류 폐기 관리 생성

폐기관리 데이타 생성후 폐기보고 정보 return") @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = { @Content(mediaType = "application/json", examples = { @@ -187,7 +229,7 @@ public class BizNimsController { } @Operation(summary = "barcode 이미지 제품 제조 정보 조회", description = "barcode 이미지 제품 제조 정보 조회

barcode 이미지를 통한 제품 제조 정보 조회") - @PostMapping(value = "/getProductInfoByQrcodeImg", consumes = { "multipart/form-data" }) + @PostMapping(value = "/getProductInfoByQrcodeImg", consumes = { MediaType.MULTIPART_FORM_DATA_VALUE }) //@PostMapping(value = "/api/biz/nims/v1/getQrcode") public ApiBaseResponse getProductInfoByQrcodeImg( @RequestParam("uploadFiles") diff --git a/src/main/java/cokr/xit/adds/core/Constants.java b/src/main/java/cokr/xit/adds/core/Constants.java index b655986..becad1e 100644 --- a/src/main/java/cokr/xit/adds/core/Constants.java +++ b/src/main/java/cokr/xit/adds/core/Constants.java @@ -25,6 +25,7 @@ import lombok.Getter; public class Constants { public static final String API_URL_PATTERNS = "/*"; public static final Charset CHARSET_UTF8 = StandardCharsets.UTF_8; + public static final String FILE_DLMTR = System.getProperty("os.name").contains("Window") ? "\\" : "/"; public static final String DATE_REGX = "^[12]\\d{3}((0[1-9])|(1[0-2]))(0[1-9]|[12]\\d|3[01])$"; public static final String CUR_DATE_REGX = "^20([2-9][0-9])((0[1-9])|(1[0-2]))(0[1-9]|[12][0-9]|3[01])$"; @@ -140,10 +141,11 @@ public class Constants { } } - /** + /** *
      * 폐기 방법 코드 - ADDS05
-     * 1:소각, 2:중화, 3:가수분해, 4:산화, 5:환원, 6:희석, 7:매몰, 8:기타, 9:사고
+     * 1:소각, 2:중화, 3:가수분해, 4:산화, 5:환원,
+     * 6:희석, 7:매몰, 8:기타, 9:사고
      * 
*/ @Getter @@ -183,27 +185,22 @@ public class Constants { *
      * 폐기관리진행상태 - ADDS11
      * 01-폐기신청서 접수
-     * 02-폐기보고 매핑
-     * 11-민원수령처리(전자결재)
-     * 21-폐기결과통보서 작성
-     * 22-폐기결과보고서 작성
-     * 31-기안 및 발송
-     * 41-폐기보고
-     * 99-종료
+     * 06-폐기통보서작성
+     * 07-폐기내역서작성
+     * 11-폐기보고확인
+     * 21-폐기보고
+     * 99-폐기보고완료
      * 
*/ @Getter public enum PRGRS_STTS_CD { // 폐기보고신청서의 데이타 입력 생성 - 폐기관리 데이타 생성 RECEIPT("01", "폐기신청서접수"), + NOTICE_WRITE("06", "폐기결과통보서작성"), + REPORT_WRITE("07", "폐기내역서작성"), // 폐기보고 데이타 매핑 완료 - MAPPING("02", "폐기보고매핑"), - ACCEPT("11", "민원수령처리(전자결재)"), - NOTICE_WRITE("21", "폐기결과통보서작성"), - REPORT_WRITE("22", "폐기결과보고서작성"), - DRAFT("31", "기안 및 발송"), - REPORT("41", "폐기보고"), - END("99", "종료") + MAPPING("11", "폐기보고확인"), + COMPLETE("99", "폐기보고완료") ; private final String code; diff --git a/src/main/java/cokr/xit/adds/core/spring/aop/TraceLoggerAspect.java b/src/main/java/cokr/xit/adds/core/spring/aop/TraceLoggerAspect.java index ea519c9..0b04d6b 100644 --- a/src/main/java/cokr/xit/adds/core/spring/aop/TraceLoggerAspect.java +++ b/src/main/java/cokr/xit/adds/core/spring/aop/TraceLoggerAspect.java @@ -117,7 +117,7 @@ public class TraceLoggerAspect { HttpServletRequest request = attributes != null? attributes.getRequest(): null; //traceApiLogging(JsonUtils.toObjByObj(pjp.getArgs()[0], JSONObject.class), request); - traceApiLogging(json.parse(json.stringify(pjp.getArgs()[0]), new TypeReference() {}), request); + traceApiLogging(json.parse(json.stringify(pjp.getArgs()[0]), new TypeReference<>() {}), request); Object result = pjp.proceed(); //noinspection rawtypes diff --git a/src/main/java/cokr/xit/adds/core/spring/exception/CustomExceptionHandler.java b/src/main/java/cokr/xit/adds/core/spring/exception/CustomExceptionHandler.java index efd1fb9..4ad29b3 100644 --- a/src/main/java/cokr/xit/adds/core/spring/exception/CustomExceptionHandler.java +++ b/src/main/java/cokr/xit/adds/core/spring/exception/CustomExceptionHandler.java @@ -47,7 +47,7 @@ public class CustomExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { final String message = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage(); - return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), message, HttpStatus.BAD_REQUEST); + return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), message, HttpStatus.OK); } @@ -58,7 +58,7 @@ public class CustomExceptionHandler { */ @ExceptionHandler(IllegalArgumentException.class) public ResponseEntity> illegalArgumentException(IllegalArgumentException ex) { - return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.BAD_REQUEST); + return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.OK); } /** @@ -68,7 +68,7 @@ public class CustomExceptionHandler { */ @ExceptionHandler(NullPointerException.class) public ResponseEntity> handle(NullPointerException ex) { - return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.BAD_REQUEST); + return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.OK); } /** @@ -83,7 +83,7 @@ public class CustomExceptionHandler { return makeEntity(ResultCode.UNAUTHORIZED.getStatusCode(), ex.getMessage(), HttpStatus.UNAUTHORIZED); } - return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.BAD_REQUEST); + return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.OK); } /** @@ -100,7 +100,7 @@ public class CustomExceptionHandler { return makeEntity( ResultCode.INTERNAL_SERVER_ERROR.getStatusCode(), "Does not support request method '" + req.getMethod() + "'", - HttpStatus.INTERNAL_SERVER_ERROR + HttpStatus.OK ); } @@ -124,7 +124,7 @@ public class CustomExceptionHandler { sb.append(fieldError.getDefaultMessage()); sb.append(", "); } - return makeEntity(ResultCode.INVALID_DATA.getStatusCode(), sb.toString(), HttpStatus.valueOf(ResultCode.INVALID_DATA.getStatusCode())); + return makeEntity(ResultCode.INVALID_DATA.getStatusCode(), sb.toString(), HttpStatus.OK); } else if (ex instanceof HttpMessageNotReadableException) { resultCode = ResultCode.INVALID_DATA; @@ -139,7 +139,7 @@ public class CustomExceptionHandler { resultCode = ResultCode.INTERNAL_SERVER_ERROR; } - return makeEntity(resultCode.getStatusCode(), resultCode.getMessage(), HttpStatus.valueOf(resultCode.getStatusCode())); + return makeEntity(resultCode.getStatusCode(), resultCode.getMessage(), HttpStatus.OK); } /** @@ -152,7 +152,7 @@ public class CustomExceptionHandler { if (Objects.equals(ex.getCode(), ResultCode.NO_CONTENT.getStatusCode())){ return new ResponseEntity<>( ApiBaseResponse.builder() - .success(true) + .success(false) .code(ex.getCode()) .message(ex.getMessage()) .build(), @@ -160,7 +160,7 @@ public class CustomExceptionHandler { HttpStatus.OK ); } - return makeEntity(ex.getCode(), ex.getMessage(), HttpStatus.BAD_REQUEST); + return makeEntity(ex.getCode(), ex.getMessage(), HttpStatus.OK); } private ResponseEntity> makeEntity(final Integer code, final String message, final HttpStatus status) { diff --git a/src/main/java/cokr/xit/adds/core/util/JsonUtils.java b/src/main/java/cokr/xit/adds/core/util/JsonUtils.java index 3139c13..9ffd3e4 100644 --- a/src/main/java/cokr/xit/adds/core/util/JsonUtils.java +++ b/src/main/java/cokr/xit/adds/core/util/JsonUtils.java @@ -148,7 +148,7 @@ // */ // public static Map toMap(final String str) { // try { -// return ObjectUtils.isNotEmpty(str)? OM.readValue(str, new TypeReference>(){}) : null; +// return ObjectUtils.isNotEmpty(str)? OM.readValue(str, new TypeReference<>(){}) : null; // } catch (JsonProcessingException e) { // throw ApiCustomException.create(e.getLocalizedMessage()); // } diff --git a/src/main/java/cokr/xit/adds/inf/iros/service/bean/InfIrosServiceBean.java b/src/main/java/cokr/xit/adds/inf/iros/service/bean/InfIrosServiceBean.java index bbebb78..c8ba5ff 100644 --- a/src/main/java/cokr/xit/adds/inf/iros/service/bean/InfIrosServiceBean.java +++ b/src/main/java/cokr/xit/adds/inf/iros/service/bean/InfIrosServiceBean.java @@ -77,7 +77,7 @@ public class InfIrosServiceBean extends AbstractServiceBean implements InfIrosSe String rslt = ApiUtil.callIrosApi(irosUrl + drugPrdtMcpnDtlInq, params); IrosResponse result = null; try { - result = json.parse(rslt, new TypeReference>() {}); + result = json.parse(rslt, new TypeReference<>() {}); } catch (Exception e) { if(!isEmpty(e.getCause())){ diff --git a/src/main/java/cokr/xit/adds/inf/mois/service/bean/InfMoisServiceBean.java b/src/main/java/cokr/xit/adds/inf/mois/service/bean/InfMoisServiceBean.java index 83c24eb..f6cd290 100644 --- a/src/main/java/cokr/xit/adds/inf/mois/service/bean/InfMoisServiceBean.java +++ b/src/main/java/cokr/xit/adds/inf/mois/service/bean/InfMoisServiceBean.java @@ -43,6 +43,7 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import cokr.xit.adds.biz.nims.service.BizNimsService; +import cokr.xit.adds.core.Constants; import cokr.xit.adds.core.spring.exception.ApiCustomException; import cokr.xit.adds.core.util.DateUtils; import cokr.xit.adds.inf.mois.model.MoisExchangeRequest; @@ -110,7 +111,6 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe private final BizNimsService bizNimsService; - private static final String delimiter = System.getProperty("os.name").contains("Window") ? "\\" : "/"; private static final String bodyText = """ 1. 귀 기관의 무궁한 발전을 기원합니다. @@ -170,7 +170,8 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe public void saveResultExchange() { File dirPath = new File(dataRootPath + receiveTemp); List files = listFilesUsingDirectoryStream(dataRootPath + receiveTemp); - files.sort((a, b) -> b.getName().compareTo(a.getName())); + // 올림차순 정렬 + files.sort((a, b) -> a.getName().compareTo(b.getName())); List> rcvTgtFiles = new ArrayList<>(); List dtoList = new ArrayList<>(); @@ -183,9 +184,9 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe log.info("srcPath : {}", srcPath); log.info("srcFileNam : {}", srcFileName); rcvTgtFiles.add(Map.of( - "inFolder", srcPath + delimiter + srcFileName, + "inFolder", srcPath + Constants.FILE_DLMTR + srcFileName, "outFolder", - dataRootPath + receiveDir + srcPath.substring(srcPath.lastIndexOf(delimiter) + 1) + delimiter, + dataRootPath + receiveDir + srcPath.substring(srcPath.lastIndexOf(Constants.FILE_DLMTR) + 1) + Constants.FILE_DLMTR, "delFolder", srcPath )); @@ -210,7 +211,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe } } catch (Exception e) { for(Map m : rcvTgtFiles) { - String[] items = m.get("inFolder").split(delimiter); + String[] items = m.get("inFolder").split(Constants.FILE_DLMTR); String fileName = items[items.length-1]; String inFile = m.get("outFolder")+fileName; String outFile = m.get("inFolder").replace(fileName, ""); @@ -328,7 +329,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe //transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); DOMSource source = new DOMSource(doc); - try(FileOutputStream fio = new FileOutputStream(new File(path + delimiter + "exchange.xml"));) { + try(FileOutputStream fio = new FileOutputStream(new File(path + Constants.FILE_DLMTR + "exchange.xml"));) { StreamResult result = new StreamResult(fio); transformer.transform(source, result); }catch (SecurityException | IOException e) { @@ -410,7 +411,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe sb.append("sender_systemname=").append(header.getSenderSystemname()).append("\n"); sb.append("administrative_num=").append(header.getAdministrativeNum()).append("\n"); - try(PrintWriter fw = new PrintWriter(dirPath+ delimiter + "header.inf", "euc-kr");){ + try(PrintWriter fw = new PrintWriter(dirPath+ Constants.FILE_DLMTR + "header.inf", "euc-kr");){ fw.write(sb.toString()); fw.flush(); } catch (FileNotFoundException | UnsupportedEncodingException e) { @@ -422,7 +423,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe final String path = dataRootPath + sendTemp + pathName; File dirPath = new File(path); - try(PrintWriter fw = new PrintWriter(dirPath + delimiter + "eof.inf", "euc-kr");){ + try(PrintWriter fw = new PrintWriter(dirPath + Constants.FILE_DLMTR + "eof.inf", "euc-kr");){ fw.write(StringUtils.EMPTY); fw.flush(); } catch (FileNotFoundException | UnsupportedEncodingException e) { 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 2940c24..51fd53a 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 @@ -6,6 +6,7 @@ import java.util.List; import javax.validation.Valid; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.annotation.JsonAlias; @@ -436,63 +437,85 @@ public class NimsApiDto { *
*/ @JsonIgnore - public List mappingNewDsuseRptInfo(List dsuseMgts){ + public List mappingNewDsuseRptInfos(List dsuseMgts){ List newList = new ArrayList<>(); for(BizNimsResponse.DsuseMgtRes mgtDto: dsuseMgts) { - // 폐기 신청서 접수 상태 데이타만 처리 - if (Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())) { - String rptInfo = String.join("", - this.bsshCd, // 마약류취급자식별번호 - this.hdrDe, // 취급일자 - this.rptDe, // 보고일자 - this.dsuseSeCd, // 폐기구분코드 - this.dsusePrvCd, // 폐기사유코드 - this.dsuseMthCd, // 폐기방법코드 - this.dsuseDe, // 폐기일자 - String.valueOf(this.rndDtlRptCnt) // 수불상세보고수 - ); - String mgtInfo = String.join("", - mgtDto.getBsshCd(), // 마약류취급자식별번호 - mgtDto.getHdrDe(), // 취급일자 - mgtDto.getRptDe(), // 보고일자 - mgtDto.getDsuseSeCd(), // 폐기구분코드 - mgtDto.getDsusePrvCd(), // 폐기사유코드 - mgtDto.getDsuseMthCd(), // 폐기방법코드 - mgtDto.getDsuseDe(), // 폐기일자 - String.valueOf(mgtDto.getRndDtlRptCnt()) // 수불상세보고수 - ); - - // FIXME: 폐기관리와 폐기보고의 상품정보 일치 여부 set - 비교 필드 확정 필요 - if (rptInfo.equals(mgtInfo)) { - if (this.dsuseRptInfoDtls.size() == mgtDto.getDsuseMgtDtls().size()) { - for (DsuseRptInfoDtl rptDtl : this.dsuseRptInfoDtls) { - for (BizNimsRequest.DsuseMgtDtl mgtDtl : mgtDto.getDsuseMgtDtls()) { - if (rptDtl.getPrductCd().equals(mgtDtl.getPrductCd()) - // && rptDtl.getMnfNo().equals(mgtDtl.getMnfNo()) - // && rptDtl.getPrdValidDe().equals(mgtDtl.getPrdValidDe()) - // && rptDtl.getMnfSeq().equals(mgtDtl.getMnfSeq()) - && rptDtl.getDsuseQy().equals(mgtDtl.getDsuseQy())) { - mgtDtl.setValidYn("Y"); - break; - } + BizNimsResponse.DsuseMgtRes dsuseMgtRes = mappingNewDsuseRptInfo(mgtDto); + if(ObjectUtils.isNotEmpty(dsuseMgtRes)) { + newList.add(dsuseMgtRes); + } + } + return newList; + } + + /** + *
+         * 폐기 관리 정보에 폐기 보고 정보 매핑 처리
+         * -> 사용자보고라인식별번호가 매핑되지 않은 경우 - 신규인 경우
+         * -> 폐기관리진행상태가 폐기신청서 접수인 상태의 데이타 대상
+         *
+         * 1. 폐기 관리 정보와 폐기 보고 정보가 동일한 데이타 매핑
+         * 2. 폐기관리 데이타 set
+         *    -> 폐기보고진생상태 - 폐기보고매핑(02)으로 set
+         *    -> 사용자보고식별번호, 원사용자보고식별번호, 보고유형코드, 처리상태 set
+         * @param mgtDto BizNimsResponse.DsuseMgtRes 진행중인 폐기관리목록
+         * @return BizNimsResponse.DsuseMgtRes 매핑 데이타
+         * 
+ */ + @JsonIgnore + public BizNimsResponse.DsuseMgtRes mappingNewDsuseRptInfo(BizNimsResponse.DsuseMgtRes mgtDto) { + // 폐기 신청서 접수 상태 데이타만 처리 + if (Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())) { + String rptInfo = String.join("", + this.bsshCd, // 마약류취급자식별번호 + this.hdrDe, // 취급일자 + this.rptDe, // 보고일자 + this.dsuseSeCd, // 폐기구분코드 + this.dsusePrvCd, // 폐기사유코드 + this.dsuseMthCd, // 폐기방법코드 + this.dsuseDe, // 폐기일자 + String.valueOf(this.rndDtlRptCnt) // 수불상세보고수 + ); + String mgtInfo = String.join("", + mgtDto.getBsshCd(), // 마약류취급자식별번호 + mgtDto.getHdrDe(), // 취급일자 + mgtDto.getRptDe(), // 보고일자 + mgtDto.getDsuseSeCd(), // 폐기구분코드 + mgtDto.getDsusePrvCd(), // 폐기사유코드 + mgtDto.getDsuseMthCd(), // 폐기방법코드 + mgtDto.getDsuseDe(), // 폐기일자 + String.valueOf(mgtDto.getRndDtlRptCnt()) // 수불상세보고수 + ); + + // FIXME: 폐기관리와 폐기보고의 상품정보 일치 여부 set - 비교 필드 확정 필요 + if (rptInfo.equals(mgtInfo)) { + if (this.dsuseRptInfoDtls.size() == mgtDto.getDsuseMgtDtls().size()) { + for (DsuseRptInfoDtl rptDtl : this.dsuseRptInfoDtls) { + for (BizNimsRequest.DsuseMgtDtl mgtDtl : mgtDto.getDsuseMgtDtls()) { + if (rptDtl.getPrductCd().equals(mgtDtl.getPrductCd()) + // && rptDtl.getMnfNo().equals(mgtDtl.getMnfNo()) + // && rptDtl.getPrdValidDe().equals(mgtDtl.getPrdValidDe()) + // && rptDtl.getMnfSeq().equals(mgtDtl.getMnfSeq()) + && rptDtl.getDsuseQy().equals(mgtDtl.getDsuseQy())) { + mgtDtl.setValidYn("Y"); + break; } } } - mgtDto.setUsrRptIdNo(this.usrRptIdNo); - mgtDto.setOrgUsrRptIdNo(this.orgUsrRptIdNo); - mgtDto.setRptTyCd(this.rptTyCd); - mgtDto.setStts(this.status); - mgtDto.setPrgrsSttsCd(Constants.PRGRS_STTS_CD.MAPPING.getCode()); - mgtDto.setRgtr(this.getRgtr()); - newList.add(mgtDto); } + mgtDto.setUsrRptIdNo(this.usrRptIdNo); + mgtDto.setOrgUsrRptIdNo(this.orgUsrRptIdNo); + mgtDto.setRptTyCd(this.rptTyCd); + mgtDto.setStts(this.status); + mgtDto.setPrgrsSttsCd(Constants.PRGRS_STTS_CD.MAPPING.getCode()); + mgtDto.setRgtr(this.getRgtr()); + return mgtDto; } } - return newList; + return null; } - /** *
          * 폐기 관리 정보에 폐기 보고 정보 매핑 처리
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 5b995a2..d707a90 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
@@ -86,7 +86,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 		if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
 
 		String rslt = ApiUtil.callNimsApi(nimsUrl + bsshInfoStV1, dto);
-		NimsApiResult result = json.parse(rslt, new TypeReference>() {});
+		NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 		return result.getResponse();
 	}
 
@@ -98,7 +98,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 		if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
 
 		String rslt = ApiUtil.callNimsApi(nimsUrl + productinfoKd, dto);
-		NimsApiResult result = json.parse(rslt, new TypeReference>() {});
+		NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 		return result.getResponse();
 	}
 
@@ -110,7 +110,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 		if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
 
 		String rslt = ApiUtil.callNimsApi(nimsUrl + seqinfo, dto);
-		NimsApiResult result = json.parse(rslt, new TypeReference>() {});
+		NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 		return result.getResponse();
 	}
 
@@ -125,7 +125,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 	// 	}
 	//
 	// 	String rslt = ApiUtil.callNimsApi(nimsUrl + officeinfo, dto);
-	// 	NimsApiResult result = json.parse(rslt, new TypeReference>() {});
+	// 	NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 	// 	return result.getResponse();
 	// }
 	//
@@ -142,7 +142,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 	// 	}
 	//
 	// 	String rslt = ApiUtil.callNimsApi(nimsUrl + placeinfoV1, dto);
-	// 	NimsApiResult result = json.parse(rslt, new TypeReference>() {});
+	// 	NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 	// 	return result.getResponse();
 	// }
 
@@ -155,7 +155,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
 		ApiUtil.checkYmdError(dto.getEdt(), "edt");
 
 		//String rslt = ApiUtil.callNimsApi(nimsUrl + reportinfo, dto);
-		//NimsApiResult result = json.parse(rslt, new TypeReference>() {});
+		//NimsApiResult result = json.parse(rslt, new TypeReference<>() {});
 		//return result.getResponse();
 
 		return getDsuseRptResponse();
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 5c88a08..bcb11f7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -202,3 +202,7 @@ app:
   log:
     parameter-enabled: true
     response-enabled: true
+  file:
+    root.path: ${app.data.root.path}/${spring.application.name}
+    rpt.path: ${app.file.root.path}/rpt
+    img.path: ${app.file.root.path}/img
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 2729a15..cc64a0f 100644
--- a/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml
+++ b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml
@@ -179,6 +179,51 @@
     
     
     
+    
+        /** nims-mysql-mapper|insertDsuseMgtReceipt-폐기관리 신청서 정보 생성|julim  */
+        
+            SELECT NVL(MAX(dscdmng_id), CONCAT(DATE_FORMAT(now(), '%Y%m'),'0000')) + 1
+              FROM tb_dsuse_mgt
+             WHERE dscdmng_id LIKE CONCAT(DATE_FORMAT(now(), '%Y%m'), '%');
+        
+        INSERT INTO tb_dsuse_mgt (
+            dscdmng_id,             /* 폐기관리ID */
+            user_id,                /* 사용자ID */
+            prgrs_stts_cd,          /* 폐기관리진행상태코드 */
+            bssh_cd,                /* 마약류취급자식별ID */
+            rnd_dtl_rpt_cnt,        /* 수불상세보고수 */
+            dsuse_prv_cd,           /* 폐기사유코드 */
+            use_yn,
+            reg_dt,
+            rgtr
+        ) VALUES (
+            #{dscdmngId},
+            #{userId},
+            #{prgrsSttsCd},
+            #{bsshCd},
+            #{rndDtlRptCnt},
+            #{dsusePrvCd},
+            'Y',
+            DATE_FORMAT(now(), '%Y%m%d%H%i%s'),
+            #{rgtr}
+        )
+    
+
+    
+        /** nims-mysql-mapper|updateDsuseMgtRslt-폐기관리 정보 변경|julim  */
+        UPDATE tb_dsuse_mgt
+           SET prgrs_stts_cd = #{prgrsSttsCd}
+             , hdr_de = #{hdrDe}
+             , rpt_de = #{rptDe}
+             , dsuse_se_cd = #{dsuseSeCd}
+             , dsuse_mth_cd = #{dsuseMthCd}
+             , dsuse_loc = #{dsuseLoc}
+             , dsuse_de = #{dsuseDe}
+             , mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s')
+             , mdfr = #{rgtr}
+         WHERE dscdmng_id = #{dscdmngId}
+    
+
     
         /** nims-mysql-mapper|insertDsuseMgt-폐기관리 생성|julim  */
         
@@ -270,6 +315,12 @@
         
     
 
+    
+
     
         SELECT tdm.dscdmng_id,          /** 폐기관리ID */
                tdm.user_id,             /** 사용자ID */
@@ -362,6 +413,12 @@
         WHERE dscdmng_id = #{dscdmngId}
     
 
+    
+
     
     
     
@@ -529,7 +586,7 @@
              , mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s')
              , mdfr = #{rgtr}
          WHERE usr_rpt_id_no = #{refUsrRptIdNo}
-           AND use_yn = 'Y'
+           -- AND use_yn = 'Y'
     
 
     
diff --git a/src/main/resources/static/dsuseMgtReceipt.html b/src/main/resources/static/dsuseMgtReceipt.html
new file mode 100644
index 0000000..64a25cc
--- /dev/null
+++ b/src/main/resources/static/dsuseMgtReceipt.html
@@ -0,0 +1,100 @@
+
+
+
+
+    
+    
+    
+
+    폐기 신청서 접수
+
+    
+    
+    
+
+
+
+
+
+ +
+
+ +
+ + + + + + + diff --git a/src/main/resources/static/dsuseMgtRslt.html b/src/main/resources/static/dsuseMgtRslt.html new file mode 100644 index 0000000..ca4410e --- /dev/null +++ b/src/main/resources/static/dsuseMgtRslt.html @@ -0,0 +1,80 @@ + + + + + + + + + 폐기 통보[결과] 처리 + + + + + + + + +
+ +
+
+ +
+ + + + + + + diff --git a/src/test/java/cokr/xit/adds/inf/iros/IrosRestfulTest.java b/src/test/java/cokr/xit/adds/inf/iros/IrosRestfulTest.java index 6ff03fb..5dd61a4 100644 --- a/src/test/java/cokr/xit/adds/inf/iros/IrosRestfulTest.java +++ b/src/test/java/cokr/xit/adds/inf/iros/IrosRestfulTest.java @@ -63,8 +63,7 @@ public class IrosRestfulTest { request.uri(uri + urlParam); }); - IrosResponse parse = new JSON().parse(rslt.body(), - new TypeReference>() { + IrosResponse parse = new JSON().parse(rslt.body(), new TypeReference<>() { }); System.out.println(parse); diff --git a/src/test/java/cokr/xit/adds/inf/mois/model/ExchangeDtoTest.java b/src/test/java/cokr/xit/adds/inf/mois/model/ExchangeDtoTest.java index 6b57d8e..2e2a650 100644 --- a/src/test/java/cokr/xit/adds/inf/mois/model/ExchangeDtoTest.java +++ b/src/test/java/cokr/xit/adds/inf/mois/model/ExchangeDtoTest.java @@ -193,7 +193,7 @@ public class ExchangeDtoTest { XML xml = new XML(); //ApiUtil.validateXmlFromXmlStr(content, "src/main/resources/xsd/pack.xsd"); - ExchangeDto dto2 = xml.parse(content, new TypeReference() {}); + ExchangeDto dto2 = xml.parse(content, new TypeReference<>() {}); log.info("dto: {}", dto2); xml.write(System.out, dto2, true); @@ -226,7 +226,7 @@ public class ExchangeDtoTest { XML xml = new XML(); //ApiUtil.validateXmlFromXmlStr(content, "src/main/resources/xsd/pack.xsd"); - ExchangeDto dto2 = xml.parse(content, new TypeReference() {}); + ExchangeDto dto2 = xml.parse(content, new TypeReference<>() {}); log.info("dto: {}", dto2); xml.write(System.out, dto2, true); diff --git a/src/test/java/cokr/xit/adds/inf/mois/model/ExchangepackDtoTest.java b/src/test/java/cokr/xit/adds/inf/mois/model/ExchangepackDtoTest.java index c90033e..dff7aec 100644 --- a/src/test/java/cokr/xit/adds/inf/mois/model/ExchangepackDtoTest.java +++ b/src/test/java/cokr/xit/adds/inf/mois/model/ExchangepackDtoTest.java @@ -87,7 +87,7 @@ public class ExchangepackDtoTest { // xmlMapper.writeValue(System.out, dto); XML xml = new XML(); - ExchangepackDto dto = xml.parse(exchangeXml, new TypeReference() {}); + ExchangepackDto dto = xml.parse(exchangeXml, new TypeReference<>() {}); log.info("dto: {}", dto); xml.write(System.out, dto, true); } diff --git a/src/test/java/cokr/xit/adds/inf/mois/model/PackDtoTest.java b/src/test/java/cokr/xit/adds/inf/mois/model/PackDtoTest.java index 9ae5e2e..4345c4d 100644 --- a/src/test/java/cokr/xit/adds/inf/mois/model/PackDtoTest.java +++ b/src/test/java/cokr/xit/adds/inf/mois/model/PackDtoTest.java @@ -53,7 +53,7 @@ public class PackDtoTest { String content = new String(bytes); ApiUtil.validateXmlFromXmlStr(content, "src/main/resources/xsd/pack.xsd"); - PackDto dto = xml.parse(content, new TypeReference() {}); + PackDto dto = xml.parse(content, new TypeReference<>() {}); log.info("dto: {}", dto); xml.write(System.out, dto, true);