package com.dbnt.sims.equip.service; import com.dbnt.sims.equip.mapper.EquipMapper; import com.dbnt.sims.equip.model.CellPhone; import com.dbnt.sims.equip.model.Equip; import com.dbnt.sims.equip.model.Equip.EquipId; import com.dbnt.sims.equip.model.EquipFile; import com.dbnt.sims.equip.model.EquipFile.EquipFileId; import com.dbnt.sims.equip.model.EquipLog; import com.dbnt.sims.equip.model.UseList; import com.dbnt.sims.equip.model.UseList.UseListId; import com.dbnt.sims.equip.repository.CellPhoneRepository; import com.dbnt.sims.equip.repository.EquipFileRepository; import com.dbnt.sims.equip.repository.EquipLogRepository; import com.dbnt.sims.equip.repository.EquipRepository; import com.dbnt.sims.equip.repository.UseListRepository; import com.dbnt.sims.userInfo.model.UserInfo; import com.dbnt.sims.util.ParamMap; import com.dbnt.sims.util.Utils; 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.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; @Service @RequiredArgsConstructor public class EquipService { @Value("${spring.servlet.multipart.location}") protected String locationPath; private final EquipRepository equipRepository; private final EquipFileRepository equipFileRepository; private final EquipLogRepository equipLogRepository; private final CellPhoneRepository cellPhoneRepository; private final UseListRepository useListRepository; private final EquipMapper equipMapper; SimpleDateFormat Date = new SimpleDateFormat("yyyy"); String year = Date.format(new Date()); @Transactional public void saveEquip(Equip equip, MultipartHttpServletRequest request) { Equip dbEquip = equipRepository.findFirstByOrderByEquKeyDesc(); try { if(dbEquip == null) { equip.setEquKey(1); equip.setVersionNo(1); equipRepository.save(equip); } else { equip.setEquKey(dbEquip.getEquKey()+1); equip.setVersionNo(1); equipRepository.save(equip); } saveFile(equip,request); EquipLog equLog = new EquipLog(); equLog.setEquType(equip.getEquType()); equLog.setDetailType(equip.getDetailType()); equLog.setElContents("입력"); equLog.setWrtNm(equip.getWrtNm()); equLog.setWrtOrgan(equip.getWrtOrgan()); equLog.setWrtDt(equip.getWrtDt()); equipLogRepository.save(equLog); } catch (Exception e) { e.printStackTrace(); } } public void saveFile(Equip equip, MultipartHttpServletRequest mRequest) throws Exception { try { String path = locationPath; String FileSize; File dir = new File(path); if(!dir.exists()) dir.mkdir(); //파일등록 List mFiles = mRequest.getFiles("file"); for(int i = 0; i < mFiles.size(); i++) { MultipartFile mFile = mFiles.get(i); FileSize = calculationSize(mFile.getSize()); if(!"".equals(mFile.getOriginalFilename())){ String fileName = mFile.getOriginalFilename(); if(fileName.contains("\\")){ String notSecuredFileName = fileName.substring(fileName.lastIndexOf("\\") +1); fileName = ("".equals(notSecuredFileName) || null == notSecuredFileName) ? fileName : notSecuredFileName; }; String fileExt = Utils.getFileExtention(fileName); String saveName = Utils.generationSaveName() + "." + fileExt; FileCopyUtils.copy(mFile.getBytes(), new File(path, saveName)); EquipFile equipFile = new EquipFile(); equipFile.setEquKey(equip.getEquKey()); equipFile.setVersionNo(equip.getVersionNo()); equipFile.setOrigNm(fileName); equipFile.setConvNm(saveName); equipFile.setFileExtn(fileExt); equipFile.setFilePath(path); equipFile.setFileSize(FileSize); equipFileRepository.save(equipFile); } else { EquipFile equipFile = new EquipFile(); equipFile.setEquKey(equip.getEquKey()); equipFile.setVersionNo(equip.getVersionNo()); equipFileRepository.save(equipFile); } } } catch (Exception e) { throw e; } } private String calculationSize(double fileSize){ String[] units = {"bytes", "KB", "MB", "GB", "TB", "PB"}; double unitSelector = Math.floor(Math.log(fileSize)/Math.log(1024)); if(fileSize>0){ return Math.round((fileSize/Math.pow(1024, unitSelector))*100)/100d+" "+units[(int)unitSelector]; }else{ return ""; } } public List selectEquipStatus(Equip equip) { return equipMapper.selectEquipStatus(equip); } public List selectEquipList(Equip equip) { return equipMapper.selectEquipList(equip); } public Integer selectEquipListCnt(Equip equip) { return equipMapper.selectEquipListCnt(equip); } public Equip selectEquipInfo(Equip equip) { return equipMapper.selectEquipInfo(equip); } @Transactional public int updateEquip(Equip equip, MultipartHttpServletRequest request) { try { Equip dbEquip = equipRepository.findById(new EquipId(equip.getEquKey(), equip.getVersionNo())).orElse(null); Equip equipTmp = new Equip(); equipTmp.setEquKey(dbEquip.getEquKey()); equipTmp.setVersionNo(dbEquip.getVersionNo()+1); equipTmp.setMgtOrgan(equip.getMgtOrgan()); equipTmp.setEquType(equip.getEquType()); equipTmp.setDetailType(equip.getDetailType()); equipTmp.setStoredYear(equip.getStoredYear()); equipTmp.setItemQty(equip.getItemQty()); equipTmp.setItemCondition(equip.getItemCondition()); equipTmp.setNote(equip.getNote()); equipTmp.setWrtOrgan(equip.getWrtOrgan()); equipTmp.setWrtNm(equip.getWrtNm()); equipTmp.setWrtDt(equip.getWrtDt()); equipRepository.save(equipTmp); updateFile(equip,equipTmp,request); EquipLog equLog = new EquipLog(); equLog.setEquType(equip.getEquType()); equLog.setDetailType(equip.getDetailType()); equLog.setElContents("수정"); equLog.setWrtNm(equip.getWrtNm()); equLog.setWrtOrgan(equip.getWrtOrgan()); equLog.setWrtDt(equip.getWrtDt()); equipLogRepository.save(equLog); } catch (Exception e) { e.printStackTrace(); } return equip.getEquKey(); } public void updateFile(Equip equip,Equip equipTmp, MultipartHttpServletRequest mRequest) throws Exception { try { String path = locationPath; String FileSize; File dir = new File(path); if(!dir.exists()) dir.mkdir(); //이미지 삭제했을경우 if(equip.getDeleteFileKey() != null) { EquipFile equFile = new EquipFile(); equFile.setEquKey(equip.getDeleteFileKey()); equFile.setVersionNo(equip.getDeleteFileVnum()); EquipFile dbEquFile = equipFileRepository.findById(new EquipFileId(equFile.getEquKey(), equFile.getVersionNo())).orElse(null); if(dbEquFile != null) { File file = new File(dbEquFile.getFilePath(), dbEquFile.getConvNm()); if(file.exists()) { file.delete(); } } } //파일등록 List mFiles = mRequest.getFiles("file"); for(int i = 0; i < mFiles.size(); i++) { MultipartFile mFile = mFiles.get(i); FileSize = calculationSize(mFile.getSize()); if(!"".equals(mFile.getOriginalFilename())){ String fileName = mFile.getOriginalFilename(); if(fileName.contains("\\")){ String notSecuredFileName = fileName.substring(fileName.lastIndexOf("\\") +1); fileName = ("".equals(notSecuredFileName) || null == notSecuredFileName) ? fileName : notSecuredFileName; }; String fileExt = Utils.getFileExtention(fileName); String saveName = Utils.generationSaveName() + "." + fileExt; FileCopyUtils.copy(mFile.getBytes(), new File(path, saveName)); EquipFile equipFile = new EquipFile(); equipFile.setEquKey(equipTmp.getEquKey()); equipFile.setVersionNo(equipTmp.getVersionNo()); equipFile.setOrigNm(fileName); equipFile.setConvNm(saveName); equipFile.setFileExtn(fileExt); equipFile.setFilePath(path); equipFile.setFileSize(FileSize); equipFileRepository.save(equipFile); } else if(equip.getNoUpdateImg() != null) { EquipFile equipFile = new EquipFile(); equipFile.setEquKey(equipTmp.getEquKey()); equipFile.setVersionNo(equipTmp.getVersionNo()); EquipFile dbEquFile = equipFileRepository.findById(new EquipFileId(equip.getEquKey(), equip.getVersionNo())).orElse(null); equipFile.setOrigNm(dbEquFile.getOrigNm()); equipFile.setConvNm(dbEquFile.getConvNm()); equipFile.setFileExtn(dbEquFile.getFileExtn()); equipFile.setFilePath(dbEquFile.getFilePath()); equipFile.setFileSize(dbEquFile.getFileSize()); equipFileRepository.save(equipFile); } else { EquipFile equipFile = new EquipFile(); equipFile.setEquKey(equipTmp.getEquKey()); equipFile.setVersionNo(equipTmp.getVersionNo()); equipFileRepository.save(equipFile); } } } catch (Exception e) { throw e; } } public ParamMap selectEduType(Equip equip) { return equipMapper.selectEduType(equip); } public List selectHistoryView(Equip equip) { return equipRepository.findByEquKeyOrderByWrtDtDesc(equip.getEquKey()); } public Equip selectHistoryDetail(Equip equip) { return equipMapper.selectHistoryDetail(equip); } @Transactional public void equipDelete(List equip,UserInfo loginUser) { for(Equip equ: equip) { //파일삭제 Equip dbEquip = equipMapper.selectEquipInfo(equ); if(dbEquip.getOrigNm() != null) { File file = new File(dbEquip.getFilePath(), dbEquip.getConvNm()); if(file.exists()) { file.delete(); } } equipRepository.deleteByEquKey(equ.getEquKey()); equipFileRepository.deleteByEquKey(equ.getEquKey()); EquipLog equLog = new EquipLog(); equLog.setEquType(dbEquip.getEquType()); equLog.setDetailType(dbEquip.getDetailType()); equLog.setElContents("삭제"); equLog.setWrtNm(loginUser.getUserId()); equLog.setWrtOrgan(loginUser.getOgCd()); equLog.setWrtDt(LocalDateTime.now()); equipLogRepository.save(equLog); } } public List selectEquipLogList(EquipLog equipLog) { return equipMapper.selectEquipLogList(equipLog); } public Integer selectEquipLogListCnt(EquipLog equipLog) { return equipMapper.selectEquipLogListCnt(equipLog); } public String selectEquipFirstId(Equip equip) { return equipMapper.selectEquipFirstId(equip); } @Transactional public Integer saveCellPhone(CellPhone cellPhone) { return cellPhoneRepository.save(cellPhone).getPhoneKey(); } public List selectCellPhoneList(CellPhone cellPhone) { return equipMapper.selectCellPhoneList(cellPhone); } public Integer selectCellPhoneListCnt(CellPhone cellPhone) { return equipMapper.selectCellPhoneListCnt(cellPhone); } public CellPhone selectCellPhoneInfo(Integer phoneKey) { return cellPhoneRepository.findById(phoneKey).orElse(null); } @Transactional public void deleteCellPhone(List cellPhone) { cellPhoneRepository.deleteAll(cellPhone); } public List selectOrganList(UseList useList) { return equipMapper.selectOrganList(useList); } @Transactional public void saveUse(UseList useList) { useList.setYear(year); Integer useNo = equipMapper.selectLastUseNo(useList); if(useNo == null) { useList.setUseNo(year+"-001"); useList.setVersionNo(1); } else { useList.setUseNo(year+"-"+String.format("%03d", useNo+1)); useList.setVersionNo(1); } useListRepository.save(useList); } public List selectUseList(UseList useList) { return equipMapper.selectUseList(useList); } public Integer selectUseListCnt(UseList useList) { return equipMapper.selectUseListCnt(useList); } public UseList selectUseInfo(UseList useList) { return equipMapper.selectUseInfo(useList); } @Transactional public UseList updateUse(UseList useList) { UseList dbUseList = useListRepository .findById(new UseListId(useList.getMgtOrgan(),useList.getUseNo(),useList.getVersionNo(),useList.getUseType())).orElse(null); UseList useTmp = new UseList(); useTmp.setMgtOrgan(dbUseList.getMgtOrgan()); useTmp.setUseNo(dbUseList.getUseNo()); useTmp.setVersionNo(dbUseList.getVersionNo()+1); useTmp.setUseType(dbUseList.getUseType()); useTmp.setUseDt(useList.getUseDt()); useTmp.setDetailType(useList.getDetailType()); useTmp.setDetailSelf(useList.getDetailSelf()); useTmp.setPeopleCnt(useList.getPeopleCnt()); useTmp.setDescription(useList.getDescription()); useTmp.setWrtOrgan(useList.getWrtOrgan()); useTmp.setWrtPart(useList.getWrtPart()); useTmp.setWrtUserSeq(useList.getWrtUserSeq()); useTmp.setWrtNm(useList.getWrtNm()); useTmp.setWrtDt(useList.getWrtDt()); return useListRepository.save(useTmp); } public List selectUseInfoList(UseList useList) { return useListRepository.findByMgtOrganAndUseNoAndUseTypeOrderByVersionNoDesc(useList.getMgtOrgan(),useList.getUseNo(),useList.getUseType()); } @Transactional public void useDelete(List useList) { for(UseList use:useList) { useListRepository.deleteByMgtOrganAndUseNoAndUseType(use.getMgtOrgan(),use.getUseNo(),use.getUseType()); } } }