package com.dbnt.faisp.fipTarget.service; import com.dbnt.faisp.config.BaseService; import com.dbnt.faisp.equip.model.Equip; import com.dbnt.faisp.equip.model.Equip.EquipId; import com.dbnt.faisp.fipTarget.mapper.FipTargetMapper; import com.dbnt.faisp.fipTarget.model.PartInfo; import com.dbnt.faisp.fipTarget.model.PartInfo.PartInfoId; import com.dbnt.faisp.fipTarget.model.PartInfoFile; import com.dbnt.faisp.fipTarget.model.PartInfoFile.PartInfoFileId; import com.dbnt.faisp.fipTarget.repository.PartInfoFileRepository; import com.dbnt.faisp.fipTarget.repository.PartInfoRepository; import com.dbnt.faisp.publicBoard.model.PublicFile; import com.dbnt.faisp.util.ParamMap; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.time.LocalDateTime; import java.util.*; @Service @RequiredArgsConstructor public class FipTargetService extends BaseService { @Value("${spring.servlet.multipart.location}") protected String locationPath; private final PartInfoRepository partInfoRepository; private final PartInfoFileRepository partInfoFileRepository; private final FipTargetMapper fipTargetMapper; public List selectPartInfoManagerList(ParamMap param) { return fipTargetMapper.selectPartInfoManagerList(param); } @Transactional public void savePartInfo(PartInfo partInfo) { PartInfo dbPart = partInfoRepository.findFirstByOrderByPiSeqDesc(); if(dbPart == null) { partInfo.setPiSeq(1); partInfo.setVersionNo(1); partInfoRepository.save(partInfo); } else { partInfo.setPiSeq(dbPart.getPiSeq()+1); partInfo.setVersionNo(1); partInfoRepository.save(partInfo); } saveUploadFiles(partInfo.getPiSeq(),partInfo.getVersionNo(), partInfo.getMultipartFileList()); } private void saveUploadFiles(Integer piSeq,Integer versionNo, List multipartFileList) { PartInfoFile lastFileInfo = partInfoFileRepository.findTopByPiSeqAndVersionNoOrderByFileSeqDesc(piSeq,versionNo); int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); if(multipartFileList == null || multipartFileList.isEmpty()) { if(lastFileInfo == null || lastFileInfo.getOrigNm() == null ) { PartInfoFile fileInfo = new PartInfoFile(); fileInfo.setFileSeq(fileSeq); fileInfo.setPiSeq(piSeq); fileInfo.setVersionNo(versionNo); partInfoFileRepository.save(fileInfo); } } else { for(MultipartFile file : multipartFileList){ String saveName = UUID.randomUUID().toString(); String path = locationPath+File.separator+"publicFile"+File.separator; saveFile(file, new File(path+File.separator+saveName)); String originalFilename = file.getOriginalFilename(); int extnIdx = originalFilename.lastIndexOf("."); PartInfoFile fileInfo = new PartInfoFile(); fileInfo.setFileSeq(fileSeq++); fileInfo.setPiSeq(piSeq); fileInfo.setVersionNo(versionNo); fileInfo.setOrigNm(originalFilename.substring(0, extnIdx)); fileInfo.setFileExtn(originalFilename.substring(extnIdx+1)); fileInfo.setConvNm(saveName); fileInfo.setFileSize(calculationSize(file.getSize())); fileInfo.setFilePath(path); partInfoFileRepository.save(fileInfo); } } } public List selectPartInfoList(PartInfo partInfo) { return fipTargetMapper.selectPartInfoList(partInfo); } public Integer selectPartInfoListCnt(PartInfo partInfo) { return fipTargetMapper.selectPartInfoListCnt(partInfo); } public ParamMap selectWorkTypeTotal(PartInfo partInfo) { return fipTargetMapper.selectWorkTypeTotal(partInfo); } public PartInfo selectPartInfo(PartInfo partInfo) { return fipTargetMapper.selectPartInfo(partInfo); } public List selectPartInfoFile(PartInfo partInfo) { return fipTargetMapper.selectPartInfoFile(partInfo); } @Transactional public void updatePartInfo(PartInfo partInfo, List deleteFileSeq) { PartInfo dbPart = partInfoRepository.findById(new PartInfoId(partInfo.getPiSeq(), partInfo.getVersionNo())).orElse(null); PartInfo partTmp = new PartInfo(); partTmp.setPiSeq(dbPart.getPiSeq()); partTmp.setVersionNo(dbPart.getVersionNo()+1); partTmp.setMgtOrgan(partInfo.getMgtOrgan()); partTmp.setLandPolice(partInfo.getLandPolice()); partTmp.setPiUserSeq(partInfo.getPiUserSeq()); partTmp.setRentType(partInfo.getRentType()); partTmp.setRentPrice(partInfo.getRentPrice()); partTmp.setUtilityType(partInfo.getUtilityType()); partTmp.setUtilityPrice(partInfo.getUtilityPrice()); partTmp.setTerminalNm(partInfo.getTerminalNm()); partTmp.setMpWorkType(partInfo.getMpWorkType()); partTmp.setMpPeopleCnt(partInfo.getMpPeopleCnt()); partTmp.setMpDescription(partInfo.getMpDescription()); partTmp.setPlWorkType(partInfo.getPlWorkType()); partTmp.setPlPeopleCnt(partInfo.getPlPeopleCnt()); partTmp.setPlDescription(partInfo.getPlDescription()); partTmp.setWrtUserSeq(partInfo.getWrtUserSeq()); partTmp.setWrtNm(partInfo.getWrtNm()); partTmp.setWrtPart(partInfo.getWrtPart()); //첫번째 작성자 관서그대로입력 partTmp.setWrtOrgan(dbPart.getWrtOrgan()); partTmp.setWrtDt(partInfo.getWrtDt()); partInfoRepository.save(partTmp); //업데이트하는 버전 파일조회 List fileList = partInfoFileRepository.findByPiSeqAndVersionNoOrderByFileSeqAsc(partInfo.getPiSeq(),partInfo.getVersionNo()); if(fileList.get(0).getOrigNm() != null) { for(PartInfoFile fileInfo : fileList){ PartInfoFile tmpFile = new PartInfoFile(); tmpFile.setFileSeq(fileInfo.getFileSeq()); tmpFile.setPiSeq(fileInfo.getPiSeq()); tmpFile.setVersionNo(partTmp.getVersionNo()); tmpFile.setOrigNm(fileInfo.getOrigNm()); tmpFile.setConvNm(fileInfo.getConvNm()); tmpFile.setFileExtn(fileInfo.getFileExtn()); tmpFile.setFileSize(fileInfo.getFileSize()); tmpFile.setFilePath(fileInfo.getFilePath()); partInfoFileRepository.save(tmpFile); } } //수정시 삭제한 파일삭제 if(deleteFileSeq!=null && deleteFileSeq.size()>0){ deletePartInfoFile(partTmp.getPiSeq(),partTmp.getVersionNo(), deleteFileSeq); } //파일업로드 saveUploadFiles(partTmp.getPiSeq(),partTmp.getVersionNo(), partInfo.getMultipartFileList()); } private void deletePartInfoFile(Integer piSeq,Integer versionNo, List deleteFileSeq) { List partInfoFileList = partInfoFileRepository.findByPiSeqAndVersionNoOrderByFileSeqAsc(piSeq,versionNo); for(PartInfoFile file: partInfoFileList){ if(deleteFileSeq.contains(file.getFileSeq())){ deleteStoredFile(new File(file.getFilePath(), file.getConvNm())); partInfoFileRepository.deleteById(new PartInfoFileId(file.getFileSeq(),piSeq,versionNo)); } } } public List selectPartInfoSeq(PartInfo partInfo) { return fipTargetMapper.selectPartInfoSeq(partInfo); } public PartInfo selectPartInfoHistoryView(PartInfo partInfo) { return fipTargetMapper.selectPartInfoHistoryView(partInfo); } public List selectPartInfoFileHistoryView(PartInfo partInfo) { return fipTargetMapper.selectPartInfoFileHistoryView(partInfo); } @Transactional public void deletePartInfo(PartInfo partInfo) { //파일삭제 List partInfoFileList= selectPartInfoFile(partInfo); for(PartInfoFile file: partInfoFileList){ if(file.getOrigNm() != null){ deleteStoredFile(new File(file.getFilePath(), file.getConvNm())); } } partInfoFileRepository.deleteByPiSeq(partInfo.getPiSeq()); partInfoRepository.deleteByPiSeq(partInfo.getPiSeq()); } }