diff --git a/build.gradle b/build.gradle index a1d09fe6..c505fc82 100644 --- a/build.gradle +++ b/build.gradle @@ -33,10 +33,4 @@ dependencies { runtimeOnly 'org.postgresql:postgresql:42.3.6' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor:2.7.2' annotationProcessor 'org.projectlombok:lombok:1.18.24' - testImplementation 'org.springframework.boot:spring-boot-starter-test:2.7.2' - testImplementation 'org.springframework.security:spring-security-test:5.7.2' -} - -tasks.named('test') { - useJUnitPlatform() } diff --git a/src/main/java/com/dbnt/faisp/controller/AuthMgtController.java b/src/main/java/com/dbnt/faisp/authMgt/AuthMgtController.java similarity index 82% rename from src/main/java/com/dbnt/faisp/controller/AuthMgtController.java rename to src/main/java/com/dbnt/faisp/authMgt/AuthMgtController.java index 5c31aac7..efa6543f 100644 --- a/src/main/java/com/dbnt/faisp/controller/AuthMgtController.java +++ b/src/main/java/com/dbnt/faisp/authMgt/AuthMgtController.java @@ -1,18 +1,13 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.authMgt; -import com.dbnt.faisp.authMgt.AuthMgtService; -import com.dbnt.faisp.authMgt.model.AccessConfig; -import com.dbnt.faisp.authMgt.model.ApprovalConfig; +import com.dbnt.faisp.authMgt.service.AuthMgtService; import com.dbnt.faisp.authMgt.model.AuthMgt; -import com.dbnt.faisp.menuMgt.MenuMgtService; -import com.dbnt.faisp.userInfo.UserInfoService; +import com.dbnt.faisp.userInfo.service.UserInfoService; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import java.util.List; - @RestController @RequiredArgsConstructor diff --git a/src/main/java/com/dbnt/faisp/authMgt/AuthMgtService.java b/src/main/java/com/dbnt/faisp/authMgt/service/AuthMgtService.java similarity index 96% rename from src/main/java/com/dbnt/faisp/authMgt/AuthMgtService.java rename to src/main/java/com/dbnt/faisp/authMgt/service/AuthMgtService.java index cb00586e..b7e99e4f 100644 --- a/src/main/java/com/dbnt/faisp/authMgt/AuthMgtService.java +++ b/src/main/java/com/dbnt/faisp/authMgt/service/AuthMgtService.java @@ -1,4 +1,4 @@ -package com.dbnt.faisp.authMgt; +package com.dbnt.faisp.authMgt.service; import com.dbnt.faisp.authMgt.mapper.AuthMgtMapper; import com.dbnt.faisp.authMgt.model.AccessConfig; diff --git a/src/main/java/com/dbnt/faisp/controller/CodeMgtController.java b/src/main/java/com/dbnt/faisp/codeMgt/CodeMgtController.java similarity index 90% rename from src/main/java/com/dbnt/faisp/controller/CodeMgtController.java rename to src/main/java/com/dbnt/faisp/codeMgt/CodeMgtController.java index b0a2d3ee..edfb551c 100644 --- a/src/main/java/com/dbnt/faisp/controller/CodeMgtController.java +++ b/src/main/java/com/dbnt/faisp/codeMgt/CodeMgtController.java @@ -1,7 +1,7 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.codeMgt; import com.dbnt.faisp.codeMgt.model.CodeCatg; -import com.dbnt.faisp.codeMgt.CodeMgtService; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; diff --git a/src/main/java/com/dbnt/faisp/codeMgt/CodeMgtService.java b/src/main/java/com/dbnt/faisp/codeMgt/service/CodeMgtService.java similarity index 98% rename from src/main/java/com/dbnt/faisp/codeMgt/CodeMgtService.java rename to src/main/java/com/dbnt/faisp/codeMgt/service/CodeMgtService.java index 47dcfdb7..c03b5591 100644 --- a/src/main/java/com/dbnt/faisp/codeMgt/CodeMgtService.java +++ b/src/main/java/com/dbnt/faisp/codeMgt/service/CodeMgtService.java @@ -1,4 +1,4 @@ -package com.dbnt.faisp.codeMgt; +package com.dbnt.faisp.codeMgt.service; import com.dbnt.faisp.codeMgt.model.CodeCatg; import com.dbnt.faisp.codeMgt.model.CodeMgt; diff --git a/src/main/java/com/dbnt/faisp/controller/BaseController.java b/src/main/java/com/dbnt/faisp/config/BaseController.java similarity index 85% rename from src/main/java/com/dbnt/faisp/controller/BaseController.java rename to src/main/java/com/dbnt/faisp/config/BaseController.java index 74364e06..2cb3efba 100644 --- a/src/main/java/com/dbnt/faisp/controller/BaseController.java +++ b/src/main/java/com/dbnt/faisp/config/BaseController.java @@ -1,13 +1,9 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.config; -import com.dbnt.faisp.authMgt.AuthMgtService; -import com.dbnt.faisp.menuMgt.MenuMgtService; -import com.dbnt.faisp.menuMgt.model.MenuMgt; -import com.dbnt.faisp.organMgt.OrganConfigService; +import com.dbnt.faisp.menuMgt.service.MenuMgtService; +import com.dbnt.faisp.organMgt.service.OrganConfigService; import com.dbnt.faisp.userInfo.model.UserInfo; -import com.dbnt.faisp.codeMgt.CodeMgtService; -import com.dbnt.faisp.codeMgt.model.CodeCatg; -import com.dbnt.faisp.codeMgt.model.CodeMgt; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -15,9 +11,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; -import java.util.ArrayList; -import java.util.List; - import javax.servlet.http.HttpSession; @RestController diff --git a/src/main/java/com/dbnt/faisp/config/BaseService.java b/src/main/java/com/dbnt/faisp/config/BaseService.java new file mode 100644 index 00000000..60fc895a --- /dev/null +++ b/src/main/java/com/dbnt/faisp/config/BaseService.java @@ -0,0 +1,29 @@ +package com.dbnt.faisp.config; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; + +@Service +@RequiredArgsConstructor +public class BaseService { + + @Value("${spring.servlet.multipart.location}") + protected String locationPath; + + protected 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 void deleteStoredFile(File deleteFile){ + deleteFile.delete(); + } +} diff --git a/src/main/java/com/dbnt/faisp/config/FileController.java b/src/main/java/com/dbnt/faisp/config/FileController.java new file mode 100644 index 00000000..d26f0179 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/config/FileController.java @@ -0,0 +1,100 @@ +package com.dbnt.faisp.config; + +import com.dbnt.faisp.fpiMgt.monthPlan.service.MonthPlanService; +import com.dbnt.faisp.userInfo.model.UserInfo; +import lombok.RequiredArgsConstructor; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; + +@RestController +@RequiredArgsConstructor +public class FileController { + + private final MonthPlanService monthPlanService; + + @GetMapping("/file/fileDownload") + public void fileDownload(HttpServletRequest request, + HttpServletResponse response, + String board, + Integer parentKey, + Integer fileSeq) { + FileInfo downloadFile = null; + switch (board){ + case "monthPlan": + downloadFile = monthPlanService.selectPlanFile(parentKey, fileSeq); + break; + } + + BufferedInputStream in; + BufferedOutputStream out; + try { + File file = new File(downloadFile.getSavePath(), downloadFile.getConvNm()); + + setDisposition(downloadFile.getFullName(), request, response); + in = new BufferedInputStream(new FileInputStream(file)); + out = new BufferedOutputStream(response.getOutputStream()); + FileCopyUtils.copy(in, out); + out.flush(); + if(out!=null) out.close(); + if(in!=null )in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException { + String browser = getBrowser(request); + + String dispositionPrefix = "attachment; filename="; + String encodedFilename = null; + + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < filename.length(); i++) { + char c = filename.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } else { + throw new IOException("Not supported browser"); + } + + response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); + + if ("Opera".equals(browser)) { + response.setContentType("application/octet-stream;charset=UTF-8"); + } + } + + private String getBrowser(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1) { + return "MSIE"; + } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 + return "Trident"; + } else if (header.indexOf("Chrome") > -1) { + return "Chrome"; + } else if (header.indexOf("Opera") > -1) { + return "Opera"; + } + return "Firefox"; + } +} diff --git a/src/main/java/com/dbnt/faisp/config/FileInfo.java b/src/main/java/com/dbnt/faisp/config/FileInfo.java new file mode 100644 index 00000000..43fc9b12 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/config/FileInfo.java @@ -0,0 +1,25 @@ +package com.dbnt.faisp.config; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.Column; +import javax.persistence.Transient; +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +public class FileInfo { + + private String origNm; + private String convNm; + private String fileExtn; + private String fileSize; + private String savePath; + + public String getFullName(){ + return getOrigNm()+"."+getFileExtn(); + } +} diff --git a/src/main/java/com/dbnt/faisp/controller/FpiMgtController.java b/src/main/java/com/dbnt/faisp/fpiMgt/FpiMgtController.java similarity index 71% rename from src/main/java/com/dbnt/faisp/controller/FpiMgtController.java rename to src/main/java/com/dbnt/faisp/fpiMgt/FpiMgtController.java index e3dffd27..0bc0391e 100644 --- a/src/main/java/com/dbnt/faisp/controller/FpiMgtController.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/FpiMgtController.java @@ -1,15 +1,15 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.fpiMgt; -import com.dbnt.faisp.fpiMgt.monthPlan.MonthPlanService; +import com.dbnt.faisp.fpiMgt.monthPlan.service.MonthPlanService; import com.dbnt.faisp.fpiMgt.monthPlan.model.BoardPlan; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; @RestController @@ -45,10 +45,21 @@ public class FpiMgtController { // 외사경찰견문관리 return mav; } + @GetMapping("/planViewModal") + public ModelAndView planViewModal(BoardPlan boardPlan){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monthPlan/planViewModal"); + boardPlan = monthPlanService.selectBoardPlan(boardPlan.getPlanKey()); + mav.addObject("plan", boardPlan); + return mav; + } + @PostMapping("/savePlan") public Integer savePlan(BoardPlan boardPlan, @RequestParam(value = "planInfos", required = false) List planInfos, - @RequestParam(value = "detailPlanInfos", required = false)List detailPlanInfos){ - return monthPlanService.saveBoardPlan(boardPlan, planInfos, detailPlanInfos); + @RequestParam(value = "detailPlanInfos", required = false)List detailPlanInfos, + MultipartHttpServletRequest request, + @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ + boardPlan.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + return monthPlanService.saveBoardPlan(boardPlan, planInfos, detailPlanInfos, deleteFileSeq); } } diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/MonthPlanService.java b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/MonthPlanService.java deleted file mode 100644 index 15dce4c0..00000000 --- a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/MonthPlanService.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.dbnt.faisp.fpiMgt.monthPlan; - - -import com.dbnt.faisp.fpiMgt.monthPlan.mapper.MonthPlanMapper; -import com.dbnt.faisp.fpiMgt.monthPlan.model.BoardPlan; -import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanFile; -import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanMainInfo; -import com.dbnt.faisp.fpiMgt.monthPlan.repository.BoardPlanRepository; -import com.dbnt.faisp.fpiMgt.monthPlan.repository.PlanFileRepository; -import com.dbnt.faisp.fpiMgt.monthPlan.repository.PlanMainInfoRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.persistence.Transient; -import java.util.List; - -@Service -@RequiredArgsConstructor -public class MonthPlanService { - private final BoardPlanRepository boardPlanRepository; - private final PlanFileRepository planFileRepository; - private final PlanMainInfoRepository planMainInfoRepository; - private final MonthPlanMapper monthPlanMapper; - - public BoardPlan selectBoardPlan(Integer planKey) { - BoardPlan savedPlan = boardPlanRepository.findById(planKey).orElse(null); - savedPlan.setFileList(planFileRepository.findByPlanKey(planKey)); - savedPlan.setMainInfoList(planMainInfoRepository.findByPlanKey(planKey)); - return savedPlan; - } - - @Transactional - public Integer saveBoardPlan(BoardPlan boardPlan, List planInfos, List detailPlanInfos) { - Integer planKey = boardPlanRepository.save(boardPlan).getPlanKey(); - Integer infoSeq = savePlanMainInfos(planKey,0, "S", planInfos);//요약 summery - savePlanMainInfos(planKey, infoSeq, "D", detailPlanInfos);//상세 detail - return planKey; - } - - private Integer savePlanMainInfos(Integer planKey, Integer planSeq, String infoType, List infoList){ - for(String info: infoList){ - PlanMainInfo planMainInfo = new PlanMainInfo(); - planMainInfo.setPlanKey(planKey); - planMainInfo.setPlanSeq(++planSeq); - planMainInfo.setPlanType(infoType); - planMainInfo.setPlanInfo(info); - planMainInfoRepository.save(planMainInfo); - } - return planSeq; - } - - public List selectBoardPlanList(BoardPlan boardPlan) { - return monthPlanMapper.selectBoardPlanList(boardPlan); - } - - public Integer selectBoardPlanListCnt(BoardPlan boardPlan) { - return monthPlanMapper.selectBoardPlanListCnt(boardPlan); - } -} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/BoardPlan.java b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/BoardPlan.java index 83fc72e2..476ee286 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/BoardPlan.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/BoardPlan.java @@ -7,6 +7,7 @@ import lombok.Setter; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.multipart.MultipartFile; import javax.persistence.*; import java.time.LocalDate; @@ -52,9 +53,13 @@ public class BoardPlan extends BaseModel { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private LocalDateTime wrtDt; + @Transient + private Integer fileCnt; @Transient private List mainInfoList; @Transient private List fileList; + @Transient + private List multipartFileList; } diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/PlanFile.java b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/PlanFile.java index a412f390..6e0bc846 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/PlanFile.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/model/PlanFile.java @@ -1,5 +1,6 @@ package com.dbnt.faisp.fpiMgt.monthPlan.model; +import com.dbnt.faisp.config.FileInfo; import lombok.*; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; @@ -15,7 +16,7 @@ import java.io.Serializable; @DynamicUpdate @Table(name = "plan_file") @IdClass(PlanFile.PlanFileId.class) -public class PlanFile{ +public class PlanFile extends FileInfo { @Id @Column(name = "plan_key") private Integer planKey; @@ -29,7 +30,7 @@ public class PlanFile{ @Column(name = "file_extn") private String fileExtn; @Column(name = "file_size") - private Integer fileSize; + private String fileSize; @Column(name = "save_path") private String savePath; diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/repository/PlanFileRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/repository/PlanFileRepository.java index 908e11bf..ad6796a6 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/repository/PlanFileRepository.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/repository/PlanFileRepository.java @@ -4,8 +4,10 @@ import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanFile; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; +import java.util.Optional; public interface PlanFileRepository extends JpaRepository { List findByPlanKey(Integer planKey); + Optional findByPlanKeyOrderByFileSeqDesc(Integer planKey); } diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/service/MonthPlanService.java b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/service/MonthPlanService.java new file mode 100644 index 00000000..98d17a31 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/monthPlan/service/MonthPlanService.java @@ -0,0 +1,128 @@ +package com.dbnt.faisp.fpiMgt.monthPlan.service; + + +import com.dbnt.faisp.config.BaseService; +import com.dbnt.faisp.config.FileInfo; +import com.dbnt.faisp.fpiMgt.monthPlan.mapper.MonthPlanMapper; +import com.dbnt.faisp.fpiMgt.monthPlan.model.BoardPlan; +import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanFile; +import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanMainInfo; +import com.dbnt.faisp.fpiMgt.monthPlan.repository.BoardPlanRepository; +import com.dbnt.faisp.fpiMgt.monthPlan.repository.PlanFileRepository; +import com.dbnt.faisp.fpiMgt.monthPlan.repository.PlanMainInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.persistence.Transient; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class MonthPlanService extends BaseService { + private final BoardPlanRepository boardPlanRepository; + private final PlanFileRepository planFileRepository; + private final PlanMainInfoRepository planMainInfoRepository; + private final MonthPlanMapper monthPlanMapper; + + public BoardPlan selectBoardPlan(Integer planKey) { + BoardPlan savedPlan = boardPlanRepository.findById(planKey).orElse(null); + if (savedPlan != null) { + savedPlan.setFileList(planFileRepository.findByPlanKey(planKey)); + savedPlan.setMainInfoList(planMainInfoRepository.findByPlanKey(planKey)); + } + return savedPlan; + } + + @Transactional + public Integer saveBoardPlan(BoardPlan boardPlan, List planInfos, List detailPlanInfos, List deleteFileSeq) { + Integer planKey = boardPlanRepository.save(boardPlan).getPlanKey(); + Integer infoSeq = savePlanMainInfos(planKey,0, "S", planInfos);//요약 summery + savePlanMainInfos(planKey, infoSeq, "D", detailPlanInfos);//상세 detail + if(deleteFileSeq.size()>0){ + deletePlanFile(planKey, deleteFileSeq); + } + if(boardPlan.getMultipartFileList()!=null){ + saveUploadFiles(planKey, boardPlan.getMultipartFileList()); + } + return planKey; + } + + private Integer savePlanMainInfos(Integer planKey, Integer planSeq, String infoType, List infoList){ + for(String info: infoList){ + PlanMainInfo planMainInfo = new PlanMainInfo(); + planMainInfo.setPlanKey(planKey); + planMainInfo.setPlanSeq(++planSeq); + planMainInfo.setPlanType(infoType); + planMainInfo.setPlanInfo(info); + planMainInfoRepository.save(planMainInfo); + } + return planSeq; + } + + public List selectBoardPlanList(BoardPlan boardPlan) { + return monthPlanMapper.selectBoardPlanList(boardPlan); + } + + public Integer selectBoardPlanListCnt(BoardPlan boardPlan) { + return monthPlanMapper.selectBoardPlanListCnt(boardPlan); + } + + private void saveUploadFiles(Integer planKey, List multipartFileList){ + PlanFile lastFileInfo = planFileRepository.findByPlanKeyOrderByFileSeqDesc(planKey).orElse(null); + int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); + for(MultipartFile file : multipartFileList){ + String saveName = UUID.randomUUID().toString(); + String path = locationPath+File.separator+"monthPlan"+File.separator; + + File saveFile = new File(path+File.separator+saveName); + if(file.getSize()!=0){ // 저장될 파일 확인 + if(!saveFile.exists()){ // 저장될 경로 확인 + if(saveFile.getParentFile().mkdirs()){ + try{ + saveFile.createNewFile(); + }catch (IOException e){ + e.printStackTrace(); + } + } + } + try { + file.transferTo(saveFile); + }catch (IllegalStateException | IOException e){ + e.printStackTrace(); + } + } + + String originalFilename = file.getOriginalFilename(); + int extnIdx = originalFilename.lastIndexOf("."); + PlanFile fileInfo = new PlanFile(); + fileInfo.setPlanKey(planKey); + fileInfo.setFileSeq(fileSeq++); + fileInfo.setOrigNm(originalFilename.substring(0, extnIdx)); + fileInfo.setFileExtn(originalFilename.substring(extnIdx+1)); + fileInfo.setConvNm(saveName); + fileInfo.setFileSize(calculationSize(file.getSize())); + fileInfo.setSavePath(path); + planFileRepository.save(fileInfo); + } + } + + public void deletePlanFile(Integer planKey, List deleteFileSeq) { + List planFileList = planFileRepository.findByPlanKey(planKey); + for(PlanFile file: planFileList){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); + planFileRepository.delete(file); + } + } + } + + public FileInfo selectPlanFile(Integer parentKey, Integer fileSeq) { + return planFileRepository.findById(new PlanFile.PlanFileId(parentKey, fileSeq)).orElse(null); + } +} diff --git a/src/main/java/com/dbnt/faisp/controller/MenuMgtController.java b/src/main/java/com/dbnt/faisp/menuMgt/MenuMgtController.java similarity index 91% rename from src/main/java/com/dbnt/faisp/controller/MenuMgtController.java rename to src/main/java/com/dbnt/faisp/menuMgt/MenuMgtController.java index 81a3ed9a..4d5f14ea 100644 --- a/src/main/java/com/dbnt/faisp/controller/MenuMgtController.java +++ b/src/main/java/com/dbnt/faisp/menuMgt/MenuMgtController.java @@ -1,7 +1,7 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.menuMgt; -import com.dbnt.faisp.codeMgt.CodeMgtService; -import com.dbnt.faisp.menuMgt.MenuMgtService; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.menuMgt.service.MenuMgtService; import com.dbnt.faisp.menuMgt.model.MenuMgt; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/dbnt/faisp/menuMgt/MenuMgtService.java b/src/main/java/com/dbnt/faisp/menuMgt/service/MenuMgtService.java similarity index 99% rename from src/main/java/com/dbnt/faisp/menuMgt/MenuMgtService.java rename to src/main/java/com/dbnt/faisp/menuMgt/service/MenuMgtService.java index 9cd4c5af..3a6ee419 100644 --- a/src/main/java/com/dbnt/faisp/menuMgt/MenuMgtService.java +++ b/src/main/java/com/dbnt/faisp/menuMgt/service/MenuMgtService.java @@ -1,4 +1,4 @@ -package com.dbnt.faisp.menuMgt; +package com.dbnt.faisp.menuMgt.service; import com.dbnt.faisp.menuMgt.mapper.MenuMgtMapper; import com.dbnt.faisp.menuMgt.model.MenuMgt; diff --git a/src/main/java/com/dbnt/faisp/controller/OrganConfigController.java b/src/main/java/com/dbnt/faisp/organMgt/OrganConfigController.java similarity index 93% rename from src/main/java/com/dbnt/faisp/controller/OrganConfigController.java rename to src/main/java/com/dbnt/faisp/organMgt/OrganConfigController.java index 73e9cc94..68f133a0 100644 --- a/src/main/java/com/dbnt/faisp/controller/OrganConfigController.java +++ b/src/main/java/com/dbnt/faisp/organMgt/OrganConfigController.java @@ -1,8 +1,8 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.organMgt; -import com.dbnt.faisp.codeMgt.CodeMgtService; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; import com.dbnt.faisp.codeMgt.model.CodeMgt; -import com.dbnt.faisp.organMgt.OrganConfigService; +import com.dbnt.faisp.organMgt.service.OrganConfigService; import com.dbnt.faisp.organMgt.model.OrganConfig; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java b/src/main/java/com/dbnt/faisp/organMgt/service/OrganConfigService.java similarity index 95% rename from src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java rename to src/main/java/com/dbnt/faisp/organMgt/service/OrganConfigService.java index c3a06497..fcfcf4d8 100644 --- a/src/main/java/com/dbnt/faisp/organMgt/OrganConfigService.java +++ b/src/main/java/com/dbnt/faisp/organMgt/service/OrganConfigService.java @@ -1,4 +1,4 @@ -package com.dbnt.faisp.organMgt; +package com.dbnt.faisp.organMgt.service; import com.dbnt.faisp.organMgt.mapper.OrganConfigMapper; import com.dbnt.faisp.organMgt.model.OrganConfig; diff --git a/src/main/java/com/dbnt/faisp/controller/TranslatorController.java b/src/main/java/com/dbnt/faisp/translator/TranslatorController.java similarity index 81% rename from src/main/java/com/dbnt/faisp/controller/TranslatorController.java rename to src/main/java/com/dbnt/faisp/translator/TranslatorController.java index 42db0725..cba00566 100644 --- a/src/main/java/com/dbnt/faisp/controller/TranslatorController.java +++ b/src/main/java/com/dbnt/faisp/translator/TranslatorController.java @@ -1,19 +1,15 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.translator; -import com.dbnt.faisp.authMgt.AuthMgtService; -import com.dbnt.faisp.codeMgt.CodeMgtService; -import com.dbnt.faisp.menuMgt.MenuMgtService; -import com.dbnt.faisp.menuMgt.model.MenuMgt; -import com.dbnt.faisp.organMgt.OrganConfigService; -import com.dbnt.faisp.translator.TranslatorService; +import com.dbnt.faisp.authMgt.service.AuthMgtService; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.menuMgt.service.MenuMgtService; +import com.dbnt.faisp.organMgt.service.OrganConfigService; import com.dbnt.faisp.translator.model.Translator; -import com.dbnt.faisp.translator.model.TranslatorCrr; -import com.dbnt.faisp.userInfo.UserInfoService; +import com.dbnt.faisp.translator.service.TranslatorService; +import com.dbnt.faisp.userInfo.service.UserInfoService; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; -import java.util.List; - import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -45,11 +41,9 @@ public class TranslatorController { } @PostMapping("/insertTranslatorInfo") - @ResponseBody - public String insertTranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator, @RequestParam List tCrr) { + public String insertTranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator) { translator.setWrtNm(loginUser.getUserId()); translator.setWrtOrgan(loginUser.getOgCd()); - System.out.println("@@="+tCrr); return translatorSevice.insertTranslatorInfo(translator); } diff --git a/src/main/java/com/dbnt/faisp/translator/service/TranslatorService.java b/src/main/java/com/dbnt/faisp/translator/service/TranslatorService.java new file mode 100644 index 00000000..a8b66d19 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/translator/service/TranslatorService.java @@ -0,0 +1,92 @@ +package com.dbnt.faisp.translator.service; + +import com.dbnt.faisp.menuMgt.mapper.MenuMgtMapper; +import com.dbnt.faisp.menuMgt.model.MenuMgt; +import com.dbnt.faisp.menuMgt.repository.MenuMgtRepository; +import com.dbnt.faisp.translator.mapper.TranslatorMapper; +import com.dbnt.faisp.translator.model.Translator; +import com.dbnt.faisp.translator.model.Translator.TranslatorId; +import com.dbnt.faisp.translator.repository.TranslatorRepository; +import com.dbnt.faisp.userInfo.model.UserInfo; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.Transient; + +import java.time.LocalDateTime; +import java.util.*; + +@Service +@RequiredArgsConstructor +public class TranslatorService { + + private final TranslatorRepository translatorRepository; + private final TranslatorMapper translatorMapper; + + public String insertTranslatorInfo(Translator translator) { + Translator dbTranslator = translatorRepository.findFirstByOrderByTranslatorKeyDesc(); + translator.setWrtDt(LocalDateTime.now()); + if (dbTranslator == null) { + translator.setTranslatorKey(1); + translator.setVersionNo(1); + translatorRepository.save(translator); + return translatorRepository.save(translator).getTrName(); + } else { + translator.setTranslatorKey(dbTranslator.getTranslatorKey() + 1); + translator.setVersionNo(1); + return translatorRepository.save(translator).getTrName(); + } + + } + + public List selectTranslatorList(Translator translator) { + return translatorMapper.selectTranslatorList(translator); + } + + public Integer selectTranslatorListCnt(Translator translator) { + return translatorMapper.selectTranslatorListCnt(translator); + } + + public Translator selectTranslatorView(Translator translator) { + return translatorRepository.findById(new TranslatorId(translator.getTranslatorKey(), translator.getVersionNo())) + .orElse(null); + } + + @Transactional + public void updatetranslatorInfo(Translator translator) { + Translator dbTranslator = translatorRepository + .findById(new TranslatorId(translator.getTranslatorKey(), translator.getVersionNo())).orElse(null); + Translator translatorTmp = new Translator(); + translatorTmp.setTranslatorKey(dbTranslator.getTranslatorKey()); + translatorTmp.setVersionNo(dbTranslator.getVersionNo() + 1); + translatorTmp.setOgdp1(translator.getOgdp1()); + translatorTmp.setTrLang(translator.getTrLang()); + translatorTmp.setTrCareer(translator.getTrCareer()); + translatorTmp.setTrName(translator.getTrName()); + translatorTmp.setTrSex(translator.getTrSex()); + translatorTmp.setTrPhone(translator.getTrPhone()); + translatorTmp.setTrNny(translator.getTrNny()); + translatorTmp.setTrAge(translator.getTrAge()); + translatorTmp.setTrEdu(translator.getTrEdu()); + translatorTmp.setTrCft(translator.getTrCft()); + translatorTmp.setTrVisa(translator.getTrVisa()); + translatorTmp.setAptDt(translator.getAptDt()); + translatorTmp.setDmlYn(translator.getDmlYn()); + translatorTmp.setRemark(translator.getRemark()); + translatorTmp.setWrtNm(translator.getWrtNm()); + translatorTmp.setWrtDt(LocalDateTime.now()); + translatorTmp.setWrtOrgan(translator.getWrtOrgan()); + translatorRepository.save(translatorTmp); + } + + public List selectHistoryList(Translator translator) { + return translatorMapper.selectHistoryList(translator); + } + + public Translator HistoryView(Translator translator) { + return translatorMapper.HistoryView(translator); + } + +} diff --git a/src/main/java/com/dbnt/faisp/controller/UserInfoController.java b/src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java similarity index 86% rename from src/main/java/com/dbnt/faisp/controller/UserInfoController.java rename to src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java index 68a662ab..b55e9cc6 100644 --- a/src/main/java/com/dbnt/faisp/controller/UserInfoController.java +++ b/src/main/java/com/dbnt/faisp/userInfo/UserInfoController.java @@ -1,7 +1,7 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.userInfo; import com.dbnt.faisp.userInfo.model.UserInfo; -import com.dbnt.faisp.userInfo.UserInfoService; +import com.dbnt.faisp.userInfo.service.UserInfoService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/src/main/java/com/dbnt/faisp/userInfo/UserInfoService.java b/src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java similarity index 98% rename from src/main/java/com/dbnt/faisp/userInfo/UserInfoService.java rename to src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java index 3da40c8a..286b80b4 100644 --- a/src/main/java/com/dbnt/faisp/userInfo/UserInfoService.java +++ b/src/main/java/com/dbnt/faisp/userInfo/service/UserInfoService.java @@ -1,4 +1,4 @@ -package com.dbnt.faisp.userInfo; +package com.dbnt.faisp.userInfo.service; import com.dbnt.faisp.config.Role; import com.dbnt.faisp.userInfo.mapper.UserInfoMapper; diff --git a/src/main/java/com/dbnt/faisp/controller/userMgtController.java b/src/main/java/com/dbnt/faisp/userInfo/userMgtController.java similarity index 89% rename from src/main/java/com/dbnt/faisp/controller/userMgtController.java rename to src/main/java/com/dbnt/faisp/userInfo/userMgtController.java index 324c79b2..b7789d8d 100644 --- a/src/main/java/com/dbnt/faisp/controller/userMgtController.java +++ b/src/main/java/com/dbnt/faisp/userInfo/userMgtController.java @@ -1,10 +1,9 @@ -package com.dbnt.faisp.controller; +package com.dbnt.faisp.userInfo; -import com.dbnt.faisp.authMgt.AuthMgtService; -import com.dbnt.faisp.codeMgt.CodeMgtService; -import com.dbnt.faisp.menuMgt.MenuMgtService; -import com.dbnt.faisp.menuMgt.model.MenuMgt; -import com.dbnt.faisp.userInfo.UserInfoService; +import com.dbnt.faisp.authMgt.service.AuthMgtService; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.menuMgt.service.MenuMgtService; +import com.dbnt.faisp.userInfo.service.UserInfoService; import com.dbnt.faisp.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; @@ -37,7 +36,7 @@ public class userMgtController { mav.addObject("searchParams", userInfo); return mav; } - + @GetMapping("/userEditModal") public ModelAndView menuEditModal(UserInfo userInfo){ ModelAndView mav = new ModelAndView("adminPage/userMgt/userEditModal"); diff --git a/src/main/resources/mybatisMapper/MonthPlanMapper.xml b/src/main/resources/mybatisMapper/MonthPlanMapper.xml index b114d3ed..a0ff1752 100644 --- a/src/main/resources/mybatisMapper/MonthPlanMapper.xml +++ b/src/main/resources/mybatisMapper/MonthPlanMapper.xml @@ -14,10 +14,10 @@ a.wrt_organ, a.wrt_nm, a.wrt_dt, - b.file_seq + b.fileCnt from board_plan a left outer join (select plan_key, - max(file_seq) as file_seq + count(file_seq) as fileCnt from plan_file group by plan_key) b on a.plan_key = b.plan_key diff --git a/src/main/resources/static/js/common.js b/src/main/resources/static/js/common.js index 25c3d83b..d0d011c4 100644 --- a/src/main/resources/static/js/common.js +++ b/src/main/resources/static/js/common.js @@ -45,4 +45,47 @@ $(document).on('mouseenter', '.secondMenuLink', function (event){ $(document).on('mouseleave', '.menuDiv', function (){ $(".secondMenu").hide(); $(".thirdMenu").hide(); +}) + +$(document).on('change', '#fileInputer', function (){ + for(const file of this.files){ + setFileDiv(file, files.push(file)); + } + this.value = null; +}) + +function byteCalculation(size) { + const bytes = parseInt(size); + const s = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB']; + const e = Math.floor(Math.log(bytes)/Math.log(1024)); + + if(e === "-Infinity") return "0 "+s[0]; + else return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+" "+s[e]; + +} + +$(document).on('click', '.fileDelete', function (){ + const target = $(this); + files[Number(target.attr("data-fileidx"))].isDelete = true; + target.parent().remove(); + const uploadDiv = $("#uploadDiv"); + if(uploadDiv.children().length === 0){ + uploadDiv.append("
파일을 업로드 해주세요."); + } +}) +$(document).on('click', '.uploadedFileDelete', function (){ + const target = $(this).parent().find("span")[0]; + if(target.className===""){ + target.className = "text-decoration-line-through"; + }else{ + target.className = ""; + } +}) + +$(document).on('click', '.fileDownLink', function (){ + let url = "/file/fileDownload?" + url += "board="+$(this).attr("data-board"); + url += "&parentKey="+Number($("#viewModalPlanKey").val()); + url += "&fileSeq="+$(this).attr("data-fileseq"); + window.open(encodeURI(url)); }) \ No newline at end of file diff --git a/src/main/resources/static/js/igActivities/fpiMgt/monthPlan.js b/src/main/resources/static/js/igActivities/fpiMgt/monthPlan.js index 86bea80a..0d62a2aa 100644 --- a/src/main/resources/static/js/igActivities/fpiMgt/monthPlan.js +++ b/src/main/resources/static/js/igActivities/fpiMgt/monthPlan.js @@ -1,72 +1,184 @@ +let files = []; $(document).on('click', '#addPlanBtn', function (){ - $.ajax({ - url: '/fpiMgt/planEditModal', - data: {planKey: null}, - type: 'GET', - dataType:"html", - success: function(html){ - $("#planEditBody").empty().append(html) - $("#planEditModal").modal('show'); - $("#planDt").datepicker({ - format: "yyyy-mm-dd", - language: "ko" - }); - }, - error:function(){ + getEditModal(null) +}) - } - }); +$(document).on('click', '.planTr', function (){ + getViewModal(Number($(this).find(".planKey").val())); +}) +$(document).on('click', '#editPlanBtn', function (){ + $("#planViewModal").modal('hide'); + getEditModal(Number($("#planViewBody").find("[name='planKey']").val())); }) $(document).on('click', '#planAddBtn', function (){ - $("#planDiv").append("") + $("#planDiv").append("") }) $(document).on('click', '#detailPlanAddBtn', function (){ - const detailPlanDiv = $("#detailPlanDiv"); - detailPlanDiv.append(""); - const lastAppendTextarea = detailPlanDiv.children()[detailPlanDiv.children().length-1]; - $(lastAppendTextarea).summernote({ + const detailPlanDiv = $("#detailPlanDiv"); + detailPlanDiv.append(""); + const lastAppendTextarea = detailPlanDiv.children()[detailPlanDiv.children().length-1]; + $(lastAppendTextarea).summernote({ + lang:'ko-KR', + height: 120, + disableDragAndDrop: true, + toolbar: [ + ['style', ['style']], + ['font', ['bold', 'underline', 'clear']], + ['color', ['color']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']] + ] + }); +}) + +$(document).on('click', '#savePlanBtn', function (){ + savePlan('S') +}) +$(document).on('click', '#saveTempBtn', function (){ + savePlan('T') +}) + +function getViewModal(planKey){ + $.ajax({ + url: '/fpiMgt/planViewModal', + data: {planKey: planKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#planViewBody").empty().append(html) + $("#planViewModal").modal('show'); + }, + error:function(){ + + } + }); +} + +function getEditModal(planKey){ + $.ajax({ + url: '/fpiMgt/planEditModal', + data: {planKey: planKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#planEditModalContent").empty().append(html) + $("#planEditModal").modal('show'); + $("#planDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("[name='detailPlanInfos']").summernote({ lang:'ko-KR', height: 120, disableDragAndDrop: true, toolbar: [ - ['style', ['style']], - ['font', ['bold', 'underline', 'clear']], - ['color', ['color']], - ['para', ['ul', 'ol', 'paragraph']], - ['table', ['table']] + ['style', ['style']], + ['font', ['bold', 'underline', 'clear']], + ['color', ['color']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']] ] - }); -}) + }); + setUploadDiv(); + }, + error:function(){ -$(document).on('click', '#savePlanBtn', function (){ - savePlan('S') -}) -$(document).on('click', '#saveTempBtn', function (){ - savePlan('T') -}) - -function savePlan(planState){ - if(confirm("저장하시겠습니까?")){ - $("#planState").val(planState); - contentFade("in"); - const formData = new FormData($("#planEditForm")[0]); - $.ajax({ - type : 'POST', - data : formData, - url : "/fpiMgt/savePlan", - processData: false, - contentType: false, - success : function(result) { - debugger - contentFade("out"); - }, - error : function(xhr, status) { - alert("저장에 실패하였습니다.") - contentFade("out"); - } - }) } + }); +} +function setUploadDiv(){ + files = []; + $("#uploadDiv").on("dragenter", function(e) { + // $(this).addClass('drag-over'); + }).on("dragleave", function(e) { + // $(this).removeClass('drag-over'); + }).on("dragover", function(e) { + e.stopPropagation(); + e.preventDefault(); + }).on('drop', function(e) { + e.preventDefault(); + // $(this).removeClass('drag-over'); + for(const file of e.originalEvent.dataTransfer.files){ + setFileDiv(file, files.push(file)); + } + }).on('click', function (e){ + if(e.target.className.indexOf("ileDelete")<0){ + $("#fileInputer").click(); + } + }); +} +function savePlan(planState){ + if(contentCheck()){ + if(confirm("저장하시겠습니까?")){ + $("#planState").val(planState); + contentFade("in"); + const formData = new FormData($("#planEditForm")[0]); + for(const file of files) { + if(!file.isDelete) + formData.append('uploadFiles', file, file.name); + } + $(".text-decoration-line-through").each(function (idx, el){ + formData.append('fileSeq', $(el).attr("data-fileseq")); + }) + $.ajax({ + type : 'POST', + data : formData, + url : "/fpiMgt/savePlan", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + $("#planEditModal").modal('hide'); + getViewModal(result); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + } + } +} + +function setFileDiv(file, idx){ + const uploadDiv = $("#uploadDiv"); + if($(".uploadedFileDelete").length===0 && $(".fileDelete").length === 0){ + uploadDiv.empty(); + } + let fileInfo = "
"; + fileInfo += file.name+" "+byteCalculation(file.size)+" "; + fileInfo += "삭제"; + fileInfo += "
"; + uploadDiv.append(fileInfo); +} + +function contentCheck(){ + let flag = true; + if(!$("#contentTitle").val()){ + alert("제목을 입력해주세요.") + flag = false; + } + if(!$("#planDt").val()){ + alert("시행일자를 입력해주세요.") + flag = false; + } + let totalSize = 0; + for(const file of files) { + if(!file.isDelete){ + totalSize+=file.size; + if(file.size>209715200){ + alert("파일당 사이즈는 200MB을 넘길 수 없습니다.") + flag = false; + } + } + } + if(totalSize>524288000){ + alert("첨부파일의 용량 합은 500MB를 넘길 수 없습니다.") + flag = false; + } + return flag; } \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monthPlan/apprvCommitTab.html b/src/main/resources/templates/igActivities/fpiMgt/monthPlan/apprvCommitTab.html new file mode 100644 index 00000000..d6a0066d --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monthPlan/apprvCommitTab.html @@ -0,0 +1,94 @@ + + +
+ +
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
제목시행일자작성자작성일시첨부파일상태
계장결재계장반려부장결재부장반려임시저장결재대기
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monthPlan/apprvStayTab.html b/src/main/resources/templates/igActivities/fpiMgt/monthPlan/apprvStayTab.html new file mode 100644 index 00000000..d6a0066d --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monthPlan/apprvStayTab.html @@ -0,0 +1,94 @@ + + +
+ +
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
제목시행일자작성자작성일시첨부파일상태
계장결재계장반려부장결재부장반려임시저장결재대기
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monthPlan/monthPlan.html b/src/main/resources/templates/igActivities/fpiMgt/monthPlan/monthPlan.html index 4891206e..25f773ae 100644 --- a/src/main/resources/templates/igActivities/fpiMgt/monthPlan/monthPlan.html +++ b/src/main/resources/templates/igActivities/fpiMgt/monthPlan/monthPlan.html @@ -25,7 +25,7 @@
-
+
@@ -63,13 +63,14 @@ - + + - + 계장결재 계장반려 부장결재 @@ -122,19 +123,25 @@