|
|
|
@ -6,6 +6,8 @@ import java.util.ArrayList;
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
@ -24,6 +26,7 @@ import kr.xit.fims.biz.ec.model.CtznSttemntDTO;
|
|
|
|
|
import kr.xit.fims.biz.ec.model.EcNatlNewspaperRcvReqDTO;
|
|
|
|
|
import kr.xit.fims.biz.ec.model.NatlNewspaperRcvDTO;
|
|
|
|
|
import kr.xit.fims.biz.ec.model.NatlNewspaperRcvXmlDTO;
|
|
|
|
|
import kr.xit.framework.biz.cmm.model.CmmFileDtlDTO;
|
|
|
|
|
import kr.xit.framework.biz.cmm.model.CmmFileMstDTO;
|
|
|
|
|
import kr.xit.framework.biz.cmm.service.ICmmFileService;
|
|
|
|
|
import kr.xit.framework.support.exception.BizRuntimeException;
|
|
|
|
@ -67,13 +70,23 @@ public class EcNatlNewspaperService implements IEcNatlNewspaperService {
|
|
|
|
|
* @param dto
|
|
|
|
|
* </pre>
|
|
|
|
|
*/
|
|
|
|
|
@SuppressWarnings("ConstantConditions")
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void saveEsbRvcParse(final EcNatlNewspaperRcvReqDTO dto) {
|
|
|
|
|
String filePath = dto.getFilePath();
|
|
|
|
|
AtomicInteger index = new AtomicInteger();
|
|
|
|
|
// CmmFileMstDTO fstMstDTO = null;
|
|
|
|
|
// CmmFileDtlDTO pngDtlDTO = null;
|
|
|
|
|
|
|
|
|
|
dto.getXmlFileInfoList().forEach((fi) -> {
|
|
|
|
|
// Receive XML File Parsing
|
|
|
|
|
NatlNewspaperRcvXmlDTO xmlDto = XmlParseUtils.readXmlToObject(NatlNewspaperRcvXmlDTO.class, filePath+"/"+fi.getFileNm());
|
|
|
|
|
// XML 첨부파일 정보
|
|
|
|
|
NatlNewspaperRcvXmlDTO.AppendFileInfoDTO appendFileDto = xmlDto.getAppendFileInfo();
|
|
|
|
|
// XML 첨부파일 수 : 위도 경도 .png 파일 포함(첨부파일중 가장 마지막 index)
|
|
|
|
|
int fileCnt = Integer.parseInt(appendFileDto.getApndfilcount());
|
|
|
|
|
if(fileCnt == 1) throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, "첨부된 파일이 부정확 합니다(위경도 파일은 필수 요소 입니다)");
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
|
// interface table save
|
|
|
|
@ -90,13 +103,37 @@ public class EcNatlNewspaperService implements IEcNatlNewspaperService {
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
|
CtznSttemntDTO ctznSttemntDTO = setCtznSttemntDTOFromRcvXml(xmlDto);
|
|
|
|
|
ctznSttemntMapper.insertEcCtznSttemnt(ctznSttemntDTO);
|
|
|
|
|
ctznSttemntDTO.getSttemntDetailDTOs().forEach(dtl -> {
|
|
|
|
|
|
|
|
|
|
index.set(0);
|
|
|
|
|
CmmFileMstDTO fstMstDTO = null;
|
|
|
|
|
CmmFileDtlDTO pngDtlDTO = null;
|
|
|
|
|
for(CtznSttemntDTO.CtznSttemntDetailDTO dtl : ctznSttemntDTO.getSttemntDetailDTOs()){
|
|
|
|
|
ctznSttemntMapper.insertEcCtznSttemntDetail(dtl);
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
|
// 첨부파일 저장
|
|
|
|
|
//-------------------------------------------------------------
|
|
|
|
|
saveAppendFiles(xmlDto, dtl);
|
|
|
|
|
});
|
|
|
|
|
// 첨부파일이 있고, 단속사진 업로드가 끝나지 않은경우(단속사진중 마지막 1장은 위도/경도 파일(.png 필수)로 제외)
|
|
|
|
|
|
|
|
|
|
// if(fileCnt >= 2 && fileCnt - 1 >= index.get()) {
|
|
|
|
|
if(index.get() == 0) {
|
|
|
|
|
fstMstDTO = saveAppendFiles(xmlDto, appendFileDto, dtl, index.get(), fileCnt);
|
|
|
|
|
}else {
|
|
|
|
|
if(Checks.isEmpty(pngDtlDTO)) {
|
|
|
|
|
if (fstMstDTO == null || fstMstDTO.getCmmFileDtls().size() == 0)
|
|
|
|
|
throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, "시민신고 첨부 파일 처리중 오류가 발생하였습니다.");
|
|
|
|
|
|
|
|
|
|
for (CmmFileDtlDTO dtlDto : fstMstDTO.getCmmFileDtls()) {
|
|
|
|
|
if (Objects.equals(dtlDto.getFileExtsn(), "png")) {
|
|
|
|
|
pngDtlDTO = dtlDto;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
saveFstOverAppendFiles(xmlDto, appendFileDto, dtl, pngDtlDTO, index.get());
|
|
|
|
|
}
|
|
|
|
|
index.addAndGet(1);
|
|
|
|
|
// }
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -114,6 +151,8 @@ public class EcNatlNewspaperService implements IEcNatlNewspaperService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private CtznSttemntDTO setCtznSttemntDTOFromRcvXml(NatlNewspaperRcvXmlDTO xmlDto){
|
|
|
|
|
CtznSttemntDTO dto = new CtznSttemntDTO();
|
|
|
|
|
List<CtznSttemntDTO.CtznSttemntDetailDTO> dtlList = new ArrayList<>();
|
|
|
|
@ -242,9 +281,114 @@ public class EcNatlNewspaperService implements IEcNatlNewspaperService {
|
|
|
|
|
//TODO: 단속정보별 파일 저장 하도록 적용 필요 - 2건 단속자료면 1번은 1번 파일만, 2번은 2번 파일만
|
|
|
|
|
//TODO: 단속정보를 보여줄 때는 모든 이미지 정보 보여준다(insterfaceSeqN 별로 - 어느 DTL항목 파일인지는 당근 표시해야지!!!)
|
|
|
|
|
//TODO: .png는 각각 set - 파일 업로드는 1번만
|
|
|
|
|
private void saveAppendFiles(NatlNewspaperRcvXmlDTO xmlDto, CtznSttemntDTO.CtznSttemntDetailDTO sttemntDetailDTO) {
|
|
|
|
|
private CmmFileMstDTO saveAppendFiles(
|
|
|
|
|
NatlNewspaperRcvXmlDTO xmlDto,
|
|
|
|
|
NatlNewspaperRcvXmlDTO.AppendFileInfoDTO appendFileDto,
|
|
|
|
|
CtznSttemntDTO.CtznSttemntDetailDTO sttemntDetailDTO,
|
|
|
|
|
int index,
|
|
|
|
|
int pngFileIndex) {
|
|
|
|
|
|
|
|
|
|
// 첨부 파일 생성
|
|
|
|
|
//int fileCnt = Integer.parseInt(appendFileDto.getApndfilcount());
|
|
|
|
|
List<MultipartFile> mfList = new ArrayList<>();
|
|
|
|
|
Class<?> clz = appendFileDto.getClass();
|
|
|
|
|
String dateStr = DateUtils.getToday("");
|
|
|
|
|
dateStr = dateStr.substring(0,4) + "/" + dateStr.substring(4);
|
|
|
|
|
String makeDir = "/" + dateStr;
|
|
|
|
|
String makePath = uploadRoot + uploadNewsPaperPath + makeDir;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Method method = clz.getMethod("getPetiFilePath" + (index + 1) + "V", null);
|
|
|
|
|
String petiFileNm = (String)method.invoke(appendFileDto, null);
|
|
|
|
|
method = clz.getMethod("getApndfilcont" + (index + 1), null);
|
|
|
|
|
String petiFileStr = (String)method.invoke(appendFileDto, null);
|
|
|
|
|
|
|
|
|
|
//TODO: 실제 저장할 파일명 생성후 파일 내용 저장
|
|
|
|
|
//String saveFileName = CommUtils.getStringFromUUID();
|
|
|
|
|
//CommUtils.saveFileFromBytes(saveFileName, makePath, Base64.decode(petiFileStr.getBytes()));
|
|
|
|
|
// 실제 저장된 파일명 set
|
|
|
|
|
//method = clz.getMethod("setPetiFileName" + (idx + 1), String.class);
|
|
|
|
|
//method.invoke(appendFileDto, saveFileName);
|
|
|
|
|
|
|
|
|
|
//TODO: 원본 파일명으로 파일 생성후 파일 업로드
|
|
|
|
|
mfList.add(CommUtils.createMutipartFileFromBytes(petiFileNm, makePath, Base64.decode(petiFileStr.getBytes())));
|
|
|
|
|
|
|
|
|
|
// 최초 파일 업로드인 경우, png 파일 같이 업로드
|
|
|
|
|
if(index == 0) {
|
|
|
|
|
method = clz.getMethod("getPetiFilePath" + pngFileIndex + "V", null);
|
|
|
|
|
petiFileNm = (String)method.invoke(appendFileDto, null);
|
|
|
|
|
method = clz.getMethod("getApndfilcont" + pngFileIndex, null);
|
|
|
|
|
petiFileStr = (String)method.invoke(appendFileDto, null);
|
|
|
|
|
mfList.add(CommUtils.createMutipartFileFromBytes(petiFileNm, makePath, Base64.decode(petiFileStr.getBytes())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//method.invoke(dto, StringUtils.cleanPath(makePath + mf.getOriginalFilename()));
|
|
|
|
|
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
|
|
|
|
|
e.getStackTrace();
|
|
|
|
|
throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
CmmFileMstDTO fileMstDTO = new CmmFileMstDTO();
|
|
|
|
|
fileMstDTO.setJobSeCode(FimsConst.FileJobSeCode.NATL_NEWS_PAPER_RCV.getCode());
|
|
|
|
|
fileMstDTO.setFileJobId(sttemntDetailDTO.getInterfaceSeqN()+sttemntDetailDTO.getCtznSttemntDetailSn());
|
|
|
|
|
fileMstDTO.setUploadeJobPath(uploadNewsPaperPath);
|
|
|
|
|
fileMstDTO.setFileDirPath(FimsConst.FileDirDepth.DAY.getCode());
|
|
|
|
|
|
|
|
|
|
return cmmFileService.saveFiles(fileMstDTO, mfList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private CmmFileMstDTO saveFstOverAppendFiles(
|
|
|
|
|
final NatlNewspaperRcvXmlDTO xmlDto,
|
|
|
|
|
final NatlNewspaperRcvXmlDTO.AppendFileInfoDTO appendFileDto,
|
|
|
|
|
final CtznSttemntDTO.CtznSttemntDetailDTO sttemntDetailDTO,
|
|
|
|
|
final CmmFileDtlDTO pngFileDtlDto,
|
|
|
|
|
int index) {
|
|
|
|
|
|
|
|
|
|
// 첨부 파일 생성
|
|
|
|
|
//int fileCnt = Integer.parseInt(appendFileDto.getApndfilcount());
|
|
|
|
|
List<MultipartFile> mfList = new ArrayList<>();
|
|
|
|
|
Class<?> clz = appendFileDto.getClass();
|
|
|
|
|
String dateStr = DateUtils.getToday("");
|
|
|
|
|
dateStr = dateStr.substring(0,4) + "/" + dateStr.substring(4);
|
|
|
|
|
String makeDir = "/" + dateStr;
|
|
|
|
|
String makePath = uploadRoot + uploadNewsPaperPath + makeDir;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Method method = clz.getMethod("getPetiFilePath" + (index + 1) + "V", null);
|
|
|
|
|
String petiFileNm = (String)method.invoke(appendFileDto, null);
|
|
|
|
|
method = clz.getMethod("getApndfilcont" + (index + 1), null);
|
|
|
|
|
String petiFileStr = (String)method.invoke(appendFileDto, null);
|
|
|
|
|
|
|
|
|
|
//TODO: 실제 저장할 파일명 생성후 파일 내용 저장
|
|
|
|
|
//String saveFileName = CommUtils.getStringFromUUID();
|
|
|
|
|
//CommUtils.saveFileFromBytes(saveFileName, makePath, Base64.decode(petiFileStr.getBytes()));
|
|
|
|
|
// 실제 저장된 파일명 set
|
|
|
|
|
//method = clz.getMethod("setPetiFileName" + (idx + 1), String.class);
|
|
|
|
|
//method.invoke(appendFileDto, saveFileName);
|
|
|
|
|
|
|
|
|
|
//TODO: 원본 파일명으로 파일 생성후 파일 업로드
|
|
|
|
|
mfList.add(CommUtils.createMutipartFileFromBytes(petiFileNm, makePath, Base64.decode(petiFileStr.getBytes())));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//method.invoke(dto, StringUtils.cleanPath(makePath + mf.getOriginalFilename()));
|
|
|
|
|
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
|
|
|
|
|
e.getStackTrace();
|
|
|
|
|
throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
CmmFileMstDTO fileMstDTO = new CmmFileMstDTO();
|
|
|
|
|
fileMstDTO.setJobSeCode(FimsConst.FileJobSeCode.NATL_NEWS_PAPER_RCV.getCode());
|
|
|
|
|
fileMstDTO.setFileJobId(sttemntDetailDTO.getInterfaceSeqN()+sttemntDetailDTO.getCtznSttemntDetailSn());
|
|
|
|
|
fileMstDTO.setUploadeJobPath(uploadNewsPaperPath);
|
|
|
|
|
fileMstDTO.setFileDirPath(FimsConst.FileDirDepth.DAY.getCode());
|
|
|
|
|
|
|
|
|
|
return cmmFileService.saveCtznSttemntFiles(fileMstDTO, mfList, pngFileDtlDto);
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
private void saveAppendFiles2(
|
|
|
|
|
NatlNewspaperRcvXmlDTO xmlDto,
|
|
|
|
|
NatlNewspaperRcvXmlDTO.AppendFileInfoDTO appendFileDto,
|
|
|
|
|
CtznSttemntDTO.CtznSttemntDetailDTO sttemntDetailDTO,
|
|
|
|
|
int index) {
|
|
|
|
|
// 첨부 파일 생성
|
|
|
|
|
NatlNewspaperRcvXmlDTO.AppendFileInfoDTO appendFileDto = xmlDto.getAppendFileInfo();
|
|
|
|
|
int fileCnt = Integer.parseInt(appendFileDto.getApndfilcount());
|
|
|
|
|
List<MultipartFile> mfList = new ArrayList<>();
|
|
|
|
|
if(fileCnt > 0) {
|
|
|
|
@ -287,10 +431,7 @@ public class EcNatlNewspaperService implements IEcNatlNewspaperService {
|
|
|
|
|
cmmFileService.saveFiles(fileMstDTO, mfList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
@SuppressWarnings("DuplicatedCode")
|
|
|
|
|