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..569deef 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 @@ -8,6 +8,7 @@ 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; @@ -201,7 +202,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 +210,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)); @@ -243,19 +244,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 +266,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 +305,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 @@ -395,163 +393,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 +674,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 +715,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 +782,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/inf/mois/service/bean/InfMoisServiceBean.java b/src/main/java/cokr/xit/adds/inf/mois/service/bean/InfMoisServiceBean.java index 83c24eb..74c11b4 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 @@ -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<>(); 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/resources/sql/mapper/biz/nims-mysql-mapper.xml b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml
index 2729a15..782d196 100644
--- a/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml
+++ b/src/main/resources/sql/mapper/biz/nims-mysql-mapper.xml
@@ -270,6 +270,12 @@
         
     
 
+    
+
     
         SELECT tdm.dscdmng_id,          /** 폐기관리ID */
                tdm.user_id,             /** 사용자ID */
@@ -362,6 +368,12 @@
         WHERE dscdmng_id = #{dscdmngId}
     
 
+    
+
     
     
     
@@ -529,7 +541,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'