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 06505f4..5cdc18a 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 @@ -228,29 +228,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe return list; } - /** - *
-	 * 폐기연계보고 데이타를 API에서 조회후 DB 저장
-	 * 변경 이력 관리 등을 위해 orgUsrRptIdNo(원사용자보고식별번호)를 추가 하여 저장
-	 *
-	 * 데이타 필터링 적용을 위해 아래 순서로 진행
-	 * 0. 조회(저장)한 데이타 대상 에서 제외 (usrRptIdNo가 DB에 저장된 경우)
-	 * 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
-	 *    - orgUsrRptIdNo(원사용자보고식별번호) = 사용자보고식별번호(usrRptIdNo)
-	 * 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경)
-	 *   2-1. refUsrRptIdNo 필수 체크
-	 *   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
-	 *   2-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.DsuseRptInfoReq reqDto) { List nimsList = new ArrayList<>(); @@ -259,147 +237,11 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe reqDto.setK(apiInfInfo.get("apiKey")); reqDto.setGc(apiInfInfo.get("deptCd")); // 관할관청코드 - while(true) { - NimsApiResult.Response rslt = infNimsService.getDsuseRptInfo(reqDto); - List curList = rslt.getResultOrThrow(); - - if(isEmpty(curList)) break; - - nimsList.addAll(curList); - - if(rslt.isEndYn()) break; - reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1)); - } - - // FIXME: 미완료 보고관리-보고정보 매핑 처리 - // 미완료(종료)된 폐기 관리 목록 조회 - List dsuseMgts = getDsuseMgts(BizNimsRequest.DsuseMgtInq.builder() - .prgrsSttsCd(Constants.PRGRS_STTS_CD.COMPLETE.getCode()) - .build(), - false); - - ////////////////////////////////////////////////////////////////////////////// - // 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. 조회(저장)한 데이타 대상 에서 제외 (usrRptIdNo가 DB에 저장된 경우) - // 작업대상 데이타 List - List workList = new ArrayList<>(); - // 결과 return 작업 대상, 대상 데이타 List - List rtnTmplist = new ArrayList<>(); - List rtnlist = new ArrayList<>(); - for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) { - Map map = new HashMap<>(); - - // FIXME: API 적용후 적용 내용 삭제 /////////////////////// - if("신규".equals(nimsDto.getRptTyCd())) { - nimsDto.setRptTyCd(RPT_TY_CD.NEW.getCode()); - }else if("취소".equals(nimsDto.getRptTyCd())) { - nimsDto.setRptTyCd(RPT_TY_CD.CANCEL.getCode()); - }else if("변경".equals(nimsDto.getRptTyCd())){ - nimsDto.setRptTyCd(RPT_TY_CD.MODIFY.getCode()); - } - ///////////////////////////////////////////////////////// - - map.put("usrRptIdNo", nimsDto.getUsrRptIdNo()); - NimsApiDto.DsuseRptInfo infoDto = bizNimsMapper.selectDsuseRptInfoByUsrRptIdNo(map); - if(isEmpty(infoDto)){ - workList.add(nimsDto); - }else{ - // FIXME: API 적용 필요 - // API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상 - //if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){ - if("Y".equals(infoDto.getUseYn())){ - rtnTmplist.add(nimsDto); - rtnlist.add(nimsDto); - } - }; - } - - // 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 - for (NimsApiDto.DsuseRptInfo dto : workList) { - // 신규가 아닌 경우 skip - if(!RPT_TY_CD.NEW.getCode().equals(dto.getRptTyCd())) continue; - - - // 폐기 보고 정보 데이타 생성 - createDsuseRpt(dto, reqDto.getUserId()); - rtnTmplist.add(dto); - rtnlist.add(dto); - - // FIXME : 폐기 관리 데이타 매핑 - // FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우? - List newList = dto.mappingNewDsuseRptInfos(dsuseMgts); - if(newList.size() > 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]"); - } - if(!newList.isEmpty() && bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]"); - }; - } - - // 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경) - String errMsg = null; - for (NimsApiDto.DsuseRptInfo dto : workList) { - dto.setRgtr(reqDto.getUserId()); - - // 신규인 경우 skip - if(RPT_TY_CD.NEW.getCode().equals(dto.getRptTyCd())) continue; - - // 2-1. refUsrRptIdNo 필수 체크 - 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 - updateDsuseRptAndDsuseMgt(dto, reqDto.getUserId()); - - // 2-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성) - createDsuseRpt(dto, reqDto.getUserId()); - - // FIXME : API 적용 필요 - // 결과 return 대상 데이타 List에서 조회한 변경 대상이 있는 경우 replace - // 결과 return 대상 데이타 List에서 조회한 취소 대상이 있는 경우 삭제 - for(NimsApiDto.DsuseRptInfo d : rtnTmplist){ - if(d.getOrgUsrRptIdNo().equals(dto.getOrgUsrRptIdNo()) - && d.getUsrRptIdNo().equals(dto.getRefUsrRptIdNo())){ - rtnlist.remove(d); - - if(dto.getRptTyCd().equals(RPT_TY_CD.MODIFY.getCode())){ - rtnlist.add(dto); - } - }; - } - - // FIXME : 폐기 관리 데이타 매핑 - List newList = dto.mappingDsuseRptInfo(dsuseMgts); - if(newList.size() > 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]"); - } - if(bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){ - throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]"); - }; - } + List rtnList = saveFromfindDsuseRptDataByNimsApi(reqDto); - // return dtos; - return workList; + // FIXME: API연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요 + rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo())); + return rtnList; } //------------------------------------------------------------------------------------------------------ @@ -526,21 +368,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe /** *
 	 * 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
@@ -566,125 +394,30 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 
 		NimsApiRequest.DsuseRptInfoReq rptDto = NimsApiRequest.DsuseRptInfoReq.builder()
 			.k(apiInfInfo.get("apiKey"))
-			.fg("2")	// 조회기준일자 : 1-보고일자, 2-취급일자
-			.pg("1")
-			.fg2("")	// 보고 유형: ""- 전체, 0-신규, 1-취소, 2-변경
-			.se("AAR")	// 보고구분: AAR-폐기
+			.gc(apiInfInfo.get("deptCd"))
+			.se("AAR")		// 보고구분: AAR-폐기
+			.pg("1")		// 페이지번호
+			.fg("2")		// 조회기준일자 : 1-보고일자, 2-취급일자
+			.fg2("0")		// 보고 유형: ""- 전체, 0-신규, 1-취소, 2-변경
+			.ps("01")	    // "": 전체, 01: 확인, 02: 보류, 03: 정정, 04: 미처리
 			.sdt(dsuseMgtDto.getHdrDe())
 			.edt(dsuseMgtDto.getHdrDe())
 			.bc(dsuseMgtDto.getBsshCd())
-			.gc(apiInfInfo.get("deptCd"))
 			.build();
 
-		// 1. GET 폐기보고 데이타 목록 - NIMS API 호출
-		List nimsList = new ArrayList<>();
-		while(true) {
-			NimsApiResult.Response rslt = infNimsService.getDsuseRptInfo(rptDto);
-			List curList = rslt.getResultOrThrow();
-
-			if(isEmpty(curList)) break;
-
-			nimsList.addAll(curList);
-
-			if(rslt.isEndYn()) break;
-			rptDto.setPg(String.valueOf(Integer.parseInt(rptDto.getPg()) + 1));
-		}
-
-		// 신규 작업대상 데이타 List
-		List newList = new ArrayList<>();
-		// 결과 return 작업 대상, 대상 데이타 List
-		List rtnList = new ArrayList<>();
-
-		// 2. 신규 작업 대상(DB에 저장되지 않은 데이타) 및 결과 return 대상 List(DB데이타중 사용여부 "Y") 선별
-		for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) {
-			Map map = new HashMap<>();
-			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 연계 데이타 확인후 확정 필요
-				// API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상
-				//if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){
-				if("Y".equals(infoDto.getUseYn())){
-					//rtnTmplist.add(nimsDto);
-					rtnList.add(nimsDto);
-				}
-			};
-		}
-
-		// 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(!RPT_TY_CD.NEW.getCode().equals(dto.getRptTyCd())) continue;
-
-			// 폐기 보고 정보 데이타 생성
-			createDsuseRpt(dto, reqDto.getUserId());
-			// return List에 추가
-			rtnList.add(dto);
+		List rtnList = saveFromfindDsuseRptDataByNimsApi(rptDto);
 
-			// FIXME : 폐기 관리 데이타 매핑
-			// FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우?
+		for(NimsApiDto.DsuseRptInfo dto : rtnList){
+			// 7. FIXME : 폐기 관리 데이타와 매핑
 			BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto);
 			if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
-				if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) {
+				if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) != 1) {
 					throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
 				}
+				dto.setDscdmngId(dsuseMgtRes.getDscdmngId());
 			}
 		}
 
-		// 4. 신규 작업 대상중 취소,변경(보고구분 '1', '2')인 처리(DB 데이타 생성) & 결과 return 대상 List에 추가
-		String errMsg = null;
-		for (NimsApiDto.DsuseRptInfo dto : newList) {
-			// 신규인 경우 skip
-			if(RPT_TY_CD.NEW.getCode().equals(dto.getRptTyCd())) continue;
-
-			// 4-0) 참조사용자보고식별번호 필수 체크
-			if(isEmpty(dto.getRefUsrRptIdNo())){
-				throw ApiCustomException.create("데이타 오류[취소 및 변경인 경우 참조사용자식별번호(REF_USR_RPT_ID_NO) 필수]");
-			}
-
-			// 폐기관리 및 폐기보고 정보 변경
-			// 4-1) 사용자보고식별번호 = 참조사용자보고식별번호 인 데이타
-	        //    tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
-			// 4-2) 폐기 관리 테이블에 사용자보고식별번호 반영
-			//    -> 취소인 경우는 사용자/원사용자 식별번호 clear
-			//    -> 변경인 경우는 사용자보고식별번호 -> 참조사용자보고식별번호 update
-			updateDsuseRptAndDsuseMgt(dto, reqDto.getUserId());
-
-			// 4-3) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
-			// -> 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
-			createDsuseRpt(dto, reqDto.getUserId());
-
-			// 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);
-				};
-			}
-			// 6. return List에 현재 데이타 추가 - 변경인 경우만 추가
-			if(dto.getRptTyCd().equals("2")){
-				rtnList.add(dto);
-			}
-
-
-			// 7. FIXME : 폐기 관리 데이타 매핑
-			BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto);
-			if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
-				if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) {
-					throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
-				}
-			}
-		}
 		// FIXME: API연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요
 		rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo()));
 		return rtnList;
@@ -772,8 +505,6 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 		);
 	}
 
-
-
 	/**
 	 * 
 	 * 제품 추가 정보 set
@@ -783,7 +514,6 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 	 * 
*/ private void setDsuseMgtDtlAddProductInfo(List dtlList, String userId, String apiKey) { - for (BizNimsResponse.DsuseMgtDtlRes r : dtlList) { // 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm) if (isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())) { @@ -818,6 +548,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe .fg("1") .pg("1") .bc(r.getBsshCd()) + .userId(userId) .build() ); if (isEmpty(list)) { @@ -830,6 +561,128 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe } } + /** + *
+	 * NIMS API를 통해 폐기보고정보, 폐기보고 상세 생성
+	 * 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에 현재 데이타 추가 - 변경인 경우만 추가
+
+	 * @param reqDto NimsApiRequest.DsuseRptInfoReq
+	 * @param List 폐기보고 목록
+	 * 
+ */ + private List saveFromfindDsuseRptDataByNimsApi(NimsApiRequest.DsuseRptInfoReq reqDto) { + List nimsList = new ArrayList<>(); + + while(true) { + NimsApiResult.Response rslt = infNimsService.getDsuseRptInfo(reqDto); + List curList = rslt.getResultOrThrow(); + + if(isEmpty(curList)) break; + + nimsList.addAll(curList); + + if(rslt.isEndYn()) break; + reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1)); + } + + // 신규 작업대상 데이타 List + List newList = new ArrayList<>(); + // 결과 return 작업 대상, 대상 데이타 List + List rtnList = new ArrayList<>(); + + for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) { + // FIXME: API 적용후 적용 내용 삭제 /////////////////////// + if("신규".equals(nimsDto.getRptTyCd())) { + nimsDto.setRptTyCd(RPT_TY_CD.NEW.getCode()); + }else if("취소".equals(nimsDto.getRptTyCd())) { + nimsDto.setRptTyCd(RPT_TY_CD.CANCEL.getCode()); + }else if("변경".equals(nimsDto.getRptTyCd())){ + nimsDto.setRptTyCd(RPT_TY_CD.MODIFY.getCode()); + } + ///////////////////////////////////////////////////////// Map map = new HashMap<>(); + + + NimsApiDto.DsuseRptInfo savedMgtDto = bizNimsMapper.selectDsuseRptInfoByUsrRptIdNo(Map.of("usrRptIdNo", nimsDto.getUsrRptIdNo())); + if(isEmpty(savedMgtDto)){ + newList.add(nimsDto); + }else{ + // FIXME: API 적용 필요 + // API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상 + //if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){ + if("Y".equals(savedMgtDto.getUseYn())){ + nimsDto.setOrgUsrRptIdNo(savedMgtDto.getOrgUsrRptIdNo()); + rtnList.add(nimsDto); + } + }; + } + + // 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(!RPT_TY_CD.NEW.getCode().equals(dto.getRptTyCd())) continue; + + // 폐기 보고 정보 데이타 생성 + createDsuseRpt(dto, reqDto.getUserId()); + rtnList.add(dto); + } + + // 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경) + String errMsg = null; + for (NimsApiDto.DsuseRptInfo dto : newList) { + dto.setRgtr(reqDto.getUserId()); + + // 신규인 경우 skip + if(RPT_TY_CD.NEW.getCode().equals(dto.getRptTyCd())) continue; + + // 2-1. refUsrRptIdNo 필수 체크 + 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 + updateDsuseRptAndDsuseMgt(dto, reqDto.getUserId()); + + // 2-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성) + createDsuseRpt(dto, reqDto.getUserId()); + + // FIXME : API 적용 필요 + // 결과 return 대상 데이타 List에서 조회한 변경 대상이 있는 경우 replace + // 결과 return 대상 데이타 List에서 조회한 취소 대상이 있는 경우 삭제 + for(NimsApiDto.DsuseRptInfo d : rtnList){ + if(d.getOrgUsrRptIdNo().equals(dto.getOrgUsrRptIdNo()) + && d.getUsrRptIdNo().equals(dto.getRefUsrRptIdNo())){ + rtnList.remove(d); + + if(dto.getRptTyCd().equals(RPT_TY_CD.MODIFY.getCode())){ + rtnList.add(dto); + } + }; + } + } + return rtnList; + } + /** *
 	 * tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
@@ -992,8 +845,8 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
 	/**
 	 * 
 	 * file 저장 처리
-	 * @param infoType : 파일 정보 타입 : Constants.FILE_INFO_TYPE
-	 * @param infoKey : 파일 정보 키 - 폐기관리ID
+	 * @param infType : 파일 정보 타입 : Constants.FILE_INFO_TYPE
+	 * @param infKey : 파일 정보 키 - 폐기관리ID
 	 * @param subType : 파일 정보 서브 타입
 	 *                  -> 폐기제품이미지 : 폐기관리상세의 순번
 	 *                  -> 폐기이미지 : 이미지 순서
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 9d30c2c..e4d210a 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
@@ -191,7 +191,7 @@ public class BizNimsController {
     //     return ApiBaseResponse.of(bizNimsService.saveDsuseMgt(dto));
     // }
 
-    @Operation(summary = "폐기 보고 확인", description = "폐기 보고 확인

폐기 관리 데이터에 대한 폐기보고 매핑 대상 데이타 조회 return") + @Operation(summary = "폐기 보고 확인(폐기관리 데이타에 대한 폐기보고 매핑)", description = "폐기 보고 확인(폐기관리 데이타에 대한 폐기보고 매핑)

폐기 관리 데이터에 대한 폐기보고 매핑 대상 데이타 조회 return") @PostMapping("/getDsuseMgtMapping") public ApiBaseResponse> getDsuseMgtMapping( @RequestBody BizNimsRequest.DsuseMgt dto diff --git a/src/main/java/cokr/xit/adds/core/util/ApiUtil.java b/src/main/java/cokr/xit/adds/core/util/ApiUtil.java index fa74e85..8833923 100644 --- a/src/main/java/cokr/xit/adds/core/util/ApiUtil.java +++ b/src/main/java/cokr/xit/adds/core/util/ApiUtil.java @@ -18,6 +18,7 @@ import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.json.simple.JSONObject; import org.springframework.http.HttpHeaders; import org.xml.sax.SAXException; @@ -132,6 +133,22 @@ public class ApiUtil { return rslt.body(); } + /** + * Object -> data로 변환 + * @param request WebClient.Request + * @param obj Object + */ + public static void toData(final WebClient.Request request, final Object obj){ + if(ObjectUtils.isEmpty(obj)) return; + + JSONObject jsonObj = toObjByObj(obj, JSONObject.class); + for (Object key : jsonObj.keySet()) { + // API 호출 시 필요없는 파라메터 제외 + if("userId".equals(key) || "dbSkipYn".equals(key)) continue; + request.data((String) key, ObjectUtils.isEmpty(jsonObj.get(key))? StringUtils.EMPTY: jsonObj.get(key)); + } + } + /** * Object -> class로 변환 * @param obj Object @@ -146,6 +163,12 @@ public class ApiUtil { } } + /** + * Object -> TypeReference로 변환 + * @param obj Object + * @param typeRef TypeReference + * @return T + */ public static T toObjByObj(final Object obj, final TypeReference typeRef) { try { return ObjectUtils.isNotEmpty(obj)? new JSON().getObjectMapper().convertValue(obj, typeRef) : null; @@ -154,15 +177,12 @@ public class ApiUtil { } } - public static void toData(final WebClient.Request request, final Object obj){ - if(ObjectUtils.isEmpty(obj)) return; - //MultiValueMap formData = new LinkedMultiValueMap<>(); - JSONObject jsonObj = toObjByObj(obj, JSONObject.class); - for (Object key : jsonObj.keySet()) { - request.data((String) key, (String) jsonObj.get(key)); - } - } - + /** + * XML 유효성 검증 + * @param xmlStr String + * @param xsdFilePathName String + * @return boolean + */ public static boolean validateXml(final String xmlStr, final String xsdFilePathName) { try { FileInputStream fis = new FileInputStream(xsdFilePathName); @@ -178,6 +198,12 @@ public class ApiUtil { } } + /** + * XML 유효성 검증 + * @param xmlStr String + * @param xsdFilePath String + * @return boolean + */ public static boolean validateXmlFromXmlStr(final String xmlStr, final String xsdFilePath) { try { FileInputStream fis = new FileInputStream(xsdFilePath); @@ -193,6 +219,12 @@ public class ApiUtil { } } + /** + * XML 유효성 검증 + * @param xmlFilePath String + * @param xsdFilePath String + * @return boolean + */ public static boolean validateXmlFromFile(String xmlFilePath, final String xsdFilePath) { try (FileInputStream fileInputStream = new FileInputStream(xmlFilePath)) { byte[] bytes = fileInputStream.readAllBytes(); 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 9cb4fc4..2b934be 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 @@ -472,28 +472,32 @@ public class NimsApiDto { @JsonIgnore public BizNimsResponse.DsuseMgtRes mappingNewDsuseRptInfo(BizNimsResponse.DsuseMgtRes mgtDto) { // 폐기 신청서 접수 상태 데이타만 처리 - if (Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())) { - String rptInfo = String.join("", + //if (Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())) { + String rptInfoStr = String.join("", this.bsshCd, // 마약류취급자식별번호 this.hdrDe, // 취급일자 - this.dsuseSeCd, // 폐기구분코드 - this.dsusePrvCd, // 폐기사유코드 - this.dsuseMthCd, // 폐기방법코드 + // FIXME: API 적용 완료후 comment 제거 필요 + // this.dsuseSeCd, // 폐기구분코드 + // this.dsusePrvCd, // 폐기사유코드 + // this.dsuseMthCd, // 폐기방법코드 + ///////////////////////////////////////////////////////////////////// this.dsuseDe, // 폐기일자 String.valueOf(this.rndDtlRptCnt) // 수불상세보고수 ); - String mgtInfo = String.join("", + String mgtInfoStr = String.join("", mgtDto.getBsshCd(), // 마약류취급자식별번호 - mgtDto.getHdrDe(), // 취급일자 - mgtDto.getDsuseSeCd(), // 폐기구분코드 - mgtDto.getDsusePrvCd(), // 폐기사유코드 - mgtDto.getDsuseMthCd(), // 폐기방법코드 + mgtDto.getHdrDe(), + // FIXME: API 적용 완료후 comment 제거 필요// 취급일자 + // mgtDto.getDsuseSeCd(), // 폐기구분코드 + // mgtDto.getDsusePrvCd(), // 폐기사유코드 + // mgtDto.getDsuseMthCd(), // 폐기방법코드 + ///////////////////////////////////////////////////////////////// mgtDto.getDsuseDe(), // 폐기일자 String.valueOf(mgtDto.getRndDtlRptCnt()) // 수불상세보고수 ); // FIXME: 폐기관리와 폐기보고의 상품정보 일치 여부 set - 비교 필드 확정 필요 - if (rptInfo.equals(mgtInfo)) { + if (rptInfoStr.equals(mgtInfoStr)) { if (this.listDtl.size() == mgtDto.getDsuseMgtDtls().size()) { for (DsuseRptInfoDtl rptDtl : this.listDtl) { for (BizNimsRequest.DsuseMgtDtl mgtDtl : mgtDto.getDsuseMgtDtls()) { @@ -516,7 +520,7 @@ public class NimsApiDto { mgtDto.setRgtr(this.getRgtr()); return mgtDto; } - } + //} return null; } 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 d0e4b0f..6a2b29f 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 @@ -306,7 +306,7 @@ public class NimsApiRequest { /** * 폐기 보고 상태 - * 01: 확인, 02: 보류, 03: 정정, 04: 미처리 + * "": 전체, 01: 확인, 02: 보류, 03: 정정, 04: 미처리 */ @Schema(title = "상태", description = "상태", example = "01", allowableValues = {"01", "02", "03", "04"}) @Pattern(regexp = "^$|0[1-4]", message = "상태[폐기보고] 값을 확인해 주세요('': 전체, 01:확인, 02:보류, 03:정정, 04:미처리)") 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 fecd795..c10de8b 100644 --- a/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml +++ b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml @@ -481,7 +481,7 @@ , usr_rpt_id_no = #{usrRptIdNo} , org_usr_rpt_id_no = #{orgUsrRptIdNo} , rpt_ty_cd = #{rptTyCd} - , stts = #{status} + , stts = #{stts} , mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s') , mdfr = #{rgtr} WHERE dscdmng_id = #{dscdmngId}