|
|
@ -228,29 +228,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
return list;
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* <pre>
|
|
|
|
|
|
|
|
* 폐기연계보고 데이타를 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<NimsApiDto.DsuseRptInfo>
|
|
|
|
|
|
|
|
* </pre>
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public List<NimsApiDto.DsuseRptInfo> saveDsuseRptInfo(NimsApiRequest.DsuseRptInfoReq reqDto) {
|
|
|
|
public List<NimsApiDto.DsuseRptInfo> saveDsuseRptInfo(NimsApiRequest.DsuseRptInfoReq reqDto) {
|
|
|
|
List<NimsApiDto.DsuseRptInfo> nimsList = new ArrayList<>();
|
|
|
|
List<NimsApiDto.DsuseRptInfo> nimsList = new ArrayList<>();
|
|
|
@ -259,147 +237,11 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
reqDto.setK(apiInfInfo.get("apiKey"));
|
|
|
|
reqDto.setK(apiInfInfo.get("apiKey"));
|
|
|
|
reqDto.setGc(apiInfInfo.get("deptCd")); // 관할관청코드
|
|
|
|
reqDto.setGc(apiInfInfo.get("deptCd")); // 관할관청코드
|
|
|
|
|
|
|
|
|
|
|
|
while(true) {
|
|
|
|
List<NimsApiDto.DsuseRptInfo> rtnList = saveFromfindDsuseRptDataByNimsApi(reqDto);
|
|
|
|
NimsApiResult.Response<NimsApiDto.DsuseRptInfo> rslt = infNimsService.getDsuseRptInfo(reqDto);
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> 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<BizNimsResponse.DsuseMgtRes> 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<NimsApiDto.DsuseRptInfo> workList = new ArrayList<>();
|
|
|
|
|
|
|
|
// 결과 return 작업 대상, 대상 데이타 List
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> rtnTmplist = new ArrayList<>();
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> rtnlist = new ArrayList<>();
|
|
|
|
|
|
|
|
for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) {
|
|
|
|
|
|
|
|
Map<String, String> 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<BizNimsResponse.DsuseMgtRes> 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<BizNimsResponse.DsuseMgtRes> newList = dto.mappingDsuseRptInfo(dsuseMgts);
|
|
|
|
|
|
|
|
if(newList.size() > 1){
|
|
|
|
|
|
|
|
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){
|
|
|
|
|
|
|
|
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// return dtos;
|
|
|
|
// FIXME: API연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요
|
|
|
|
return workList;
|
|
|
|
rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo()));
|
|
|
|
|
|
|
|
return rtnList;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
|
@ -526,21 +368,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* <pre>
|
|
|
|
* <pre>
|
|
|
|
* saveDsuseRptInfo 대체 메소드 - 확인후 적용
|
|
|
|
* 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에 현재 데이타 추가 - 변경인 경우만 추가
|
|
|
|
* 6. return List에 현재 데이타 추가 - 변경인 경우만 추가
|
|
|
|
* 7. FIXME : 폐기 관리 데이타 매핑
|
|
|
|
* 7. FIXME : 폐기 관리 데이타 매핑
|
|
|
|
* 8. 결과 sort 및 return
|
|
|
|
* 8. 결과 sort 및 return
|
|
|
@ -566,125 +394,30 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
|
|
|
|
|
|
|
|
NimsApiRequest.DsuseRptInfoReq rptDto = NimsApiRequest.DsuseRptInfoReq.builder()
|
|
|
|
NimsApiRequest.DsuseRptInfoReq rptDto = NimsApiRequest.DsuseRptInfoReq.builder()
|
|
|
|
.k(apiInfInfo.get("apiKey"))
|
|
|
|
.k(apiInfInfo.get("apiKey"))
|
|
|
|
.fg("2") // 조회기준일자 : 1-보고일자, 2-취급일자
|
|
|
|
.gc(apiInfInfo.get("deptCd"))
|
|
|
|
.pg("1")
|
|
|
|
.se("AAR") // 보고구분: AAR-폐기
|
|
|
|
.fg2("") // 보고 유형: ""- 전체, 0-신규, 1-취소, 2-변경
|
|
|
|
.pg("1") // 페이지번호
|
|
|
|
.se("AAR") // 보고구분: AAR-폐기
|
|
|
|
.fg("2") // 조회기준일자 : 1-보고일자, 2-취급일자
|
|
|
|
|
|
|
|
.fg2("0") // 보고 유형: ""- 전체, 0-신규, 1-취소, 2-변경
|
|
|
|
|
|
|
|
.ps("01") // "": 전체, 01: 확인, 02: 보류, 03: 정정, 04: 미처리
|
|
|
|
.sdt(dsuseMgtDto.getHdrDe())
|
|
|
|
.sdt(dsuseMgtDto.getHdrDe())
|
|
|
|
.edt(dsuseMgtDto.getHdrDe())
|
|
|
|
.edt(dsuseMgtDto.getHdrDe())
|
|
|
|
.bc(dsuseMgtDto.getBsshCd())
|
|
|
|
.bc(dsuseMgtDto.getBsshCd())
|
|
|
|
.gc(apiInfInfo.get("deptCd"))
|
|
|
|
|
|
|
|
.build();
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
|
|
// 1. GET 폐기보고 데이타 목록 - NIMS API 호출
|
|
|
|
List<NimsApiDto.DsuseRptInfo> rtnList = saveFromfindDsuseRptDataByNimsApi(rptDto);
|
|
|
|
List<NimsApiDto.DsuseRptInfo> nimsList = new ArrayList<>();
|
|
|
|
|
|
|
|
while(true) {
|
|
|
|
|
|
|
|
NimsApiResult.Response<NimsApiDto.DsuseRptInfo> rslt = infNimsService.getDsuseRptInfo(rptDto);
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> 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<NimsApiDto.DsuseRptInfo> newList = new ArrayList<>();
|
|
|
|
|
|
|
|
// 결과 return 작업 대상, 대상 데이타 List
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> rtnList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 신규 작업 대상(DB에 저장되지 않은 데이타) 및 결과 return 대상 List(DB데이타중 사용여부 "Y") 선별
|
|
|
|
|
|
|
|
for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) {
|
|
|
|
|
|
|
|
Map<String, String> 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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// FIXME : 폐기 관리 데이타 매핑
|
|
|
|
for(NimsApiDto.DsuseRptInfo dto : rtnList){
|
|
|
|
// FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우?
|
|
|
|
// 7. FIXME : 폐기 관리 데이타와 매핑
|
|
|
|
BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto);
|
|
|
|
BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto);
|
|
|
|
if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
|
|
|
|
if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
|
|
|
|
if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) {
|
|
|
|
if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) != 1) {
|
|
|
|
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
|
|
|
|
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연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요
|
|
|
|
// FIXME: API연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요
|
|
|
|
rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo()));
|
|
|
|
rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo()));
|
|
|
|
return rtnList;
|
|
|
|
return rtnList;
|
|
|
@ -772,8 +505,6 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* <pre>
|
|
|
|
* <pre>
|
|
|
|
* 제품 추가 정보 set
|
|
|
|
* 제품 추가 정보 set
|
|
|
@ -783,7 +514,6 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
* </pre>
|
|
|
|
* </pre>
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void setDsuseMgtDtlAddProductInfo(List<BizNimsResponse.DsuseMgtDtlRes> dtlList, String userId, String apiKey) {
|
|
|
|
private void setDsuseMgtDtlAddProductInfo(List<BizNimsResponse.DsuseMgtDtlRes> dtlList, String userId, String apiKey) {
|
|
|
|
|
|
|
|
|
|
|
|
for (BizNimsResponse.DsuseMgtDtlRes r : dtlList) {
|
|
|
|
for (BizNimsResponse.DsuseMgtDtlRes r : dtlList) {
|
|
|
|
// 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm)
|
|
|
|
// 마약항정구분(nrcdSeNm), 중점일반구분(prtmSenm)
|
|
|
|
if (isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())) {
|
|
|
|
if (isEmpty(r.getNrcdSeNm()) || isEmpty(r.getPrtmSeNm())) {
|
|
|
@ -818,6 +548,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
.fg("1")
|
|
|
|
.fg("1")
|
|
|
|
.pg("1")
|
|
|
|
.pg("1")
|
|
|
|
.bc(r.getBsshCd())
|
|
|
|
.bc(r.getBsshCd())
|
|
|
|
|
|
|
|
.userId(userId)
|
|
|
|
.build()
|
|
|
|
.build()
|
|
|
|
);
|
|
|
|
);
|
|
|
|
if (isEmpty(list)) {
|
|
|
|
if (isEmpty(list)) {
|
|
|
@ -830,6 +561,128 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* <pre>
|
|
|
|
|
|
|
|
* 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<NimsApiDto.DsuseRptInfo> 폐기보고 목록
|
|
|
|
|
|
|
|
* </pre>
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private List<NimsApiDto.DsuseRptInfo> saveFromfindDsuseRptDataByNimsApi(NimsApiRequest.DsuseRptInfoReq reqDto) {
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> nimsList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while(true) {
|
|
|
|
|
|
|
|
NimsApiResult.Response<NimsApiDto.DsuseRptInfo> rslt = infNimsService.getDsuseRptInfo(reqDto);
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> 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<NimsApiDto.DsuseRptInfo> newList = new ArrayList<>();
|
|
|
|
|
|
|
|
// 결과 return 작업 대상, 대상 데이타 List
|
|
|
|
|
|
|
|
List<NimsApiDto.DsuseRptInfo> 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<String, String> 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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* <pre>
|
|
|
|
* <pre>
|
|
|
|
* tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
|
|
|
|
* tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
|
|
|
@ -992,8 +845,8 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* <pre>
|
|
|
|
* <pre>
|
|
|
|
* file 저장 처리
|
|
|
|
* file 저장 처리
|
|
|
|
* @param infoType : 파일 정보 타입 : Constants.FILE_INFO_TYPE
|
|
|
|
* @param infType : 파일 정보 타입 : Constants.FILE_INFO_TYPE
|
|
|
|
* @param infoKey : 파일 정보 키 - 폐기관리ID
|
|
|
|
* @param infKey : 파일 정보 키 - 폐기관리ID
|
|
|
|
* @param subType : 파일 정보 서브 타입
|
|
|
|
* @param subType : 파일 정보 서브 타입
|
|
|
|
* -> 폐기제품이미지 : 폐기관리상세의 순번
|
|
|
|
* -> 폐기제품이미지 : 폐기관리상세의 순번
|
|
|
|
* -> 폐기이미지 : 이미지 순서
|
|
|
|
* -> 폐기이미지 : 이미지 순서
|
|
|
|