diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java new file mode 100644 index 00000000..33163b51 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java @@ -0,0 +1,196 @@ +package com.dbnt.faisp.fpiMgt.affairResult; + +import com.dbnt.faisp.authMgt.service.AuthMgtService; +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultApprv; +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard; +import com.dbnt.faisp.fpiMgt.affairResult.service.ResultService; +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.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/affairResult") +public class ResultController { // 첩보수집활동 > 외사경찰 견문관리 > 계획수립 + private final ResultService resultService; + private final AuthMgtService authMgtService; + + @GetMapping("/resultMgt") + public ModelAndView resultMgtPage(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultMgt"); + mav.addObject("page", "main"); + mav.addObject("searchUrl", "/affairResult/resultMgt"); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getAccessAuth(); + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신이 작성한 문서만 열람가능 + resultBoard.setWrtUserSeq(loginUser.getUserSeq()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + resultBoard.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + //결재권한 확인 + String apprvAuth = authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getApprovalAuth(); + mav.addObject("accessAuth", accessAuth); + mav.addObject("apprvAuth", apprvAuth); + resultBoard.setQueryInfo(); + mav.addObject("resultList", resultService.selectResultBoardList(resultBoard)); + resultBoard.setContentCnt(resultService.selectResultBoardListCnt(resultBoard)); + resultBoard.setPaginationInfo(); + mav.addObject("searchParams", resultBoard); + return mav; + } + + @GetMapping("/stayPage") + public ModelAndView apprvStayPage(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultMgt"); + mav.addObject("page", "stay"); + mav.addObject("searchUrl", "/affairResult/stayPage"); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getAccessAuth(); + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신의 관서 내에서 작성한 문서만 열람가능 + resultBoard.setWrtOrgan(loginUser.getOgCd()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + resultBoard.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + //결재권한 확인 + String apprvAuth = authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getApprovalAuth(); + if(apprvAuth==null) { + if(!accessAuth.equals("ACC003")){ + resultBoard.setWrtUserSeq(loginUser.getUserSeq()); + resultBoard.setUserType("normalStayList"); + }else{ + resultBoard.setUserType("managerStayList"); + } + }else{ + mav.addObject("userNm", loginUser.getUserNm()); + switch (apprvAuth){ + case "APC004": // 계장대행 + case "APC003": // 계장 // 결재대기 문서 조회 + resultBoard.setResultState("DST002"); + break; + case "APC002": // 부장대행 + case "APC001": // 부장 // 계장승인 문서 조회 + resultBoard.setResultState("DST004"); + break; + } + } + mav.addObject("accessAuth", accessAuth); + mav.addObject("apprvAuth", apprvAuth); + resultBoard.setQueryInfo(); + mav.addObject("resultList", resultService.selectResultBoardList(resultBoard)); + resultBoard.setContentCnt(resultService.selectResultBoardListCnt(resultBoard)); + resultBoard.setPaginationInfo(); + mav.addObject("searchParams", resultBoard); + return mav; + } + + @GetMapping("/commitPage") + public ModelAndView apprvCommitPage(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultMgt"); + mav.addObject("page", "commit"); + mav.addObject("searchUrl", "/affairResult/commitPage"); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getAccessAuth(); + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신의 관서 내에서 작성한 문서만 열람가능 + resultBoard.setWrtOrgan(loginUser.getOgCd()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + resultBoard.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + //결재권한 확인 + String apprvAuth = authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getApprovalAuth(); + if(apprvAuth==null) { + if(!accessAuth.equals("ACC003")){ + resultBoard.setWrtUserSeq(loginUser.getUserSeq()); + resultBoard.setUserType("normalCommitList"); + }else{ + resultBoard.setUserType("managerCommitList"); + } + }else{ + switch (apprvAuth) { + case "APC004": // 계장대행 + case "APC003": // 계장 // 계장반려, 계장승인 문서 조회 + resultBoard.setUserType("sectionCommitList"); + break; + case "APC002": // 부장대행 + case "APC001": // 부장 // 부장반려, 부장승인 문서 조회 + resultBoard.setUserType("headCommitList"); + break; + } + } + mav.addObject("accessAuth", accessAuth); + mav.addObject("apprvAuth", apprvAuth); + resultBoard.setQueryInfo(); + mav.addObject("resultList", resultService.selectResultBoardList(resultBoard)); + resultBoard.setContentCnt(resultService.selectResultBoardListCnt(resultBoard)); + resultBoard.setPaginationInfo(); + mav.addObject("searchParams", resultBoard); + return mav; + } + + @GetMapping("/resultEditModal") + public ModelAndView resultEditModal(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultEditModal"); + if(resultBoard.getResultKey()!=null){ + resultBoard = resultService.selectResultBoard(resultBoard.getResultKey()); + }else{ + resultBoard.setWrtOrgan(loginUser.getOgCd()); + resultBoard.setWrtPart(loginUser.getOfcCd()); + resultBoard.setWrtUserSeq(loginUser.getUserSeq()); + resultBoard.setWrtUserNm(loginUser.getUserNm()); + resultBoard.setWrtDt(LocalDateTime.now()); + } + mav.addObject("result", resultBoard); + return mav; + } + + @GetMapping("/resultViewModal") + public ModelAndView resultViewModal(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultViewModal"); + resultBoard = resultService.selectResultBoard(resultBoard.getResultKey()); + mav.addObject("result", resultBoard); + mav.addObject("userSeq",loginUser.getUserSeq()); + //메뉴권한 확인 + mav.addObject("accessAuth", authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getAccessAuth()); + mav.addObject("apprvAuth", authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/affairResult/resultMgt").get(0).getApprovalAuth()); + return mav; + } + + @PostMapping("/saveResult") + public Integer saveResult(ResultBoard resultBoard, + @RequestParam(value = "resultInfos", required = false) List resultInfos, + @RequestParam(value = "detailResultInfos", required = false)List detailResultInfos, + MultipartHttpServletRequest request, + @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ + resultBoard.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + return resultService.saveResultBoard(resultBoard, resultInfos, detailResultInfos, deleteFileSeq); + } + + + @PostMapping("/resultStateChange") + public Integer resultStateChange(@AuthenticationPrincipal UserInfo loginUser, ResultApprv apprv){ + apprv.setUserSeq(loginUser.getUserSeq()); + apprv.setUserNm(loginUser.getUserNm()); + apprv.setSaveDt(LocalDateTime.now()); + return resultService.resultStateChange(apprv); + } +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/mapper/ResultMapper.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/mapper/ResultMapper.java new file mode 100644 index 00000000..f5d7c6b6 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/mapper/ResultMapper.java @@ -0,0 +1,14 @@ +package com.dbnt.faisp.fpiMgt.affairResult.mapper; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ResultMapper { + + List selectResultBoardList(ResultBoard resultBoard); + + Integer selectResultBoardListCnt(ResultBoard resultBoard); +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultApprv.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultApprv.java new file mode 100644 index 00000000..02bad243 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultApprv.java @@ -0,0 +1,45 @@ +package com.dbnt.faisp.fpiMgt.affairResult.model; + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "result_apprv") +@IdClass(ResultApprv.ResultApprvId.class) +public class ResultApprv { + @Id + @Column(name = "result_key") + private Integer resultKey; + @Id + @Column(name = "apprv_seq") + private Integer apprvSeq; + @Column(name = "state") + private String state; + @Column(name = "user_seq") + private Integer userSeq; + @Column(name = "user_nm") + private String userNm; + @Column(name = "etc") + private String etc; + @Column(name = "save_dt") + private LocalDateTime saveDt; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class ResultApprvId implements Serializable { + private Integer resultKey; + private Integer apprvSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java new file mode 100644 index 00000000..be232e96 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java @@ -0,0 +1,70 @@ +package com.dbnt.faisp.fpiMgt.affairResult.model; + +import com.dbnt.faisp.config.BaseModel; +import lombok.Getter; +import lombok.NoArgsConstructor; +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; +import java.time.LocalDateTime; +import java.util.List; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "result_board") +public class ResultBoard extends BaseModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "result_key") + private Integer resultKey; + @Column(name = "result_state") + private String resultState; + @Column(name = "clear_title") + private String clearTitle; + @Column(name = "result_title") + private String resultTitle; + @Column(name = "start_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startDt; + @Column(name = "end_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endDt; + @Column(name = "plan_price") + private Double planPrice; + @Column(name = "use_price") + private Double usePrice; + @Column(name = "wrt_organ") + private String wrtOrgan; + @Column(name = "wrt_part") + private String wrtPart; + @Column(name = "wrt_user_seq") + private Integer wrtUserSeq; + @Column(name = "wrt_user_grd") + private String wrtUserGrd; + @Column(name = "wrt_user_nm") + private String wrtUserNm; + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Transient + private String userType; + @Transient + private Integer fileCnt; + @Transient + private List apprvList; + @Transient + private List fileList; + @Transient + private List multipartFileList; + +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultFile.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultFile.java new file mode 100644 index 00000000..56a792df --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultFile.java @@ -0,0 +1,49 @@ +package com.dbnt.faisp.fpiMgt.affairResult.model; + +import com.dbnt.faisp.config.FileInfo; +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; +import java.io.Serializable; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "result_file") +@IdClass(ResultFile.ResultFileId.class) +public class ResultFile extends FileInfo { + @Id + @Column(name = "result_key") + private Integer resultKey; + @Id + @Column(name = "file_seq") + private Integer fileSeq; + @Column(name = "file_type") + private String fileType; + @Column(name = "orig_nm") + private String origNm; + @Column(name = "conv_nm") + private String convNm; + @Column(name = "file_extn") + private String fileExtn; + @Column(name = "file_size") + private String fileSize; + @Column(name = "save_path") + private String savePath; + + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class ResultFileId implements Serializable { + private Integer resultKey; + private Integer fileSeq; + } + +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultApprvRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultApprvRepository.java new file mode 100644 index 00000000..8db6c39f --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultApprvRepository.java @@ -0,0 +1,14 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultApprv; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface ResultApprvRepository extends JpaRepository { + Optional findTopByResultKeyOrderByApprvSeqDesc(Integer resultKey); + + List findByResultKey(Integer resultKey); +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultBoardRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultBoardRepository.java new file mode 100644 index 00000000..0338ebb8 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultBoardRepository.java @@ -0,0 +1,9 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ResultBoardRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultFileRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultFileRepository.java new file mode 100644 index 00000000..a0730013 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultFileRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultFile; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface ResultFileRepository extends JpaRepository { + List findByResultKey(Integer resultKey); + Optional findTopByResultKeyOrderByFileSeqDesc(Integer resultKey); +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java new file mode 100644 index 00000000..fd979a73 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java @@ -0,0 +1,104 @@ +package com.dbnt.faisp.fpiMgt.affairResult.service; + + +import com.dbnt.faisp.config.BaseService; +import com.dbnt.faisp.config.FileInfo; +import com.dbnt.faisp.fpiMgt.affairResult.mapper.ResultMapper; +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultApprv; +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard; +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultFile; +import com.dbnt.faisp.fpiMgt.affairResult.repository.ResultApprvRepository; +import com.dbnt.faisp.fpiMgt.affairResult.repository.ResultBoardRepository; +import com.dbnt.faisp.fpiMgt.affairResult.repository.ResultFileRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.List; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class ResultService extends BaseService { // 월간계획 + private final ResultBoardRepository resultBoardRepository; + private final ResultFileRepository resultFileRepository; + private final ResultApprvRepository resultApprvRepository; + private final ResultMapper resultMapper; + + public List selectResultBoardList(ResultBoard resultBoard) { + return resultMapper.selectResultBoardList(resultBoard); + } + + public Integer selectResultBoardListCnt(ResultBoard resultBoard) { + return resultMapper.selectResultBoardListCnt(resultBoard); + } + + public ResultBoard selectResultBoard(Integer resultKey) { + ResultBoard savedResult = resultBoardRepository.findById(resultKey).orElse(null); + if (savedResult != null) { + savedResult.setFileList(resultFileRepository.findByResultKey(resultKey)); + savedResult.setApprvList(resultApprvRepository.findByResultKey(resultKey)); + } + return savedResult; + } + + @Transactional + public Integer saveResultBoard(ResultBoard resultBoard, List resultInfos, List detailResultInfos, List deleteFileSeq) { + Integer resultKey = resultBoardRepository.save(resultBoard).getResultKey(); + if(deleteFileSeq != null && deleteFileSeq.size()>0){ + deleteResultFile(resultKey, deleteFileSeq); + } + if(resultBoard.getMultipartFileList()!=null){ + saveUploadFiles(resultKey, resultBoard.getMultipartFileList()); + } + return resultKey; + } + + private void saveUploadFiles(Integer resultKey, List multipartFileList){ + ResultFile lastFileInfo = resultFileRepository.findTopByResultKeyOrderByFileSeqDesc(resultKey).orElse(null); + int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); + for(MultipartFile file : multipartFileList){ + String saveName = UUID.randomUUID().toString(); + String path = locationPath+File.separator+"affairResult"+File.separator; + saveFile(file, new File(path+File.separator+saveName)); + + String originalFilename = file.getOriginalFilename(); + int extnIdx = originalFilename.lastIndexOf("."); + ResultFile fileInfo = new ResultFile(); + fileInfo.setResultKey(resultKey); + 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); + resultFileRepository.save(fileInfo); + } + } + + private void deleteResultFile(Integer resultKey, List deleteFileSeq) { + List resultFileList = resultFileRepository.findByResultKey(resultKey); + for(ResultFile file: resultFileList){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); + resultFileRepository.delete(file); + } + } + } + + public FileInfo selectResultFile(Integer resultKey, Integer fileSeq) { + return resultFileRepository.findById(new ResultFile.ResultFileId(resultKey, fileSeq)).orElse(null); + } + + @Transactional + public Integer resultStateChange(ResultApprv apprv) { + ResultBoard savedResult = resultBoardRepository.findById(apprv.getResultKey()).orElse(null); + savedResult.setResultState(apprv.getState()); + ResultApprv lastApprv = resultApprvRepository.findTopByResultKeyOrderByApprvSeqDesc(apprv.getResultKey()).orElse(null); + apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); + resultApprvRepository.save(apprv); + return apprv.getApprvSeq(); + } +} diff --git a/src/main/resources/mybatisMapper/ResultMapper.xml b/src/main/resources/mybatisMapper/ResultMapper.xml new file mode 100644 index 00000000..8c803b40 --- /dev/null +++ b/src/main/resources/mybatisMapper/ResultMapper.xml @@ -0,0 +1,94 @@ + + + + + + + + + and a.wrt_user_seq = #{wrtUserSeq} + + + and a.wrt_user_nm like '%'||#{wrtUserNm}||'%' + + + and a.wrt_organ = #{wrtOrgan} + + + and a.content_title like '%'||#{contentTitle}||'%' + + + and a.result_state = #{resultState} + + + + and a.result_dt >= #{startDate}::date + + + and a.result_dt <= #{endDate}::date+1 + + + + + and a.wrt_dt >= #{startDate}::date + + + and a.wrt_dt <= #{endDate}::date+1 + + + + and a.wrt_organ in + + #{organCd} + + + + + and a.result_state in ('DST002', 'DST004') + + + and a.result_state in ('DST003', 'DST005', 'DST006') + + + and a.result_state in ('DST003', 'DST004', 'DST005', 'DST006') + + + and a.result_state in ('DST003', 'DST005', 'DST006') + + + and a.result_state in ('DST002', 'DST004') + + + and a.result_state in ('DST003', 'DST005', 'DST006') + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js b/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js new file mode 100644 index 00000000..ae2e8054 --- /dev/null +++ b/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js @@ -0,0 +1,187 @@ +let files = []; + +$(function(){ + $("#dateSelectorDiv").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); +}) + +$(document).on('click', '#planTab', function (){ + location.href = "/affairPlan/planMgt"; +}) +$(document).on('click', '#stayTab', function (){ + location.href = "/affairPlan/stayPage"; +}) +$(document).on('click', '#commitTab', function (){ + location.href = "/affairPlan/commitPage"; +}) + +$(document).on('click', '#addPlanBtn', function (){ + getPlanEditModal(null) +}) +$(document).on('click', '#editPlanBtn', function (){ + $("#planViewModal").modal('hide'); + getPlanEditModal(Number($("#planViewBody").find("[name='planKey']").val())); +}) + +$(document).on('click', '#planAddBtn', function (){ + $("#planDiv").append("") +}) + +$(document).on('click', '#detailPlanAddBtn', function (){ + 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('DST002') +}) + +$(document).on('click', '#saveTempBtn', function (){ + savePlan('DST001') +}) + +$(document).on('click', '.planTr', function (){ + $(".trChkBox").prop("checked", false); + $(this).find(".trChkBox").prop("checked", true); + getPlanViewModal(Number($(this).find(".planKey").val())); +}) + +$(document).on('click', '.apprvBtn', function (){ + $("#apprvFormPlanKey").val($("#viewModalPlanKey").val()); + $("#viewModalApprvValue").val($(this).attr("data-planstate")); + if(confirm($(this).val()+"하시겠습니까?")){ + const formData = new FormData($("#apprvForm")[0]); + contentFade("in") + $.ajax({ + type : 'POST', + data : formData, + url : "/affairPlan/planStateChange", + processData: false, + contentType: false, + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(result) { + alert("저장되었습니다") + getPlanViewModal(result); + contentFade("out"); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다."); + contentFade("out"); + } + }) + } +}) + +function getPlanViewModal(planKey){ + $.ajax({ + url: '/affairPlan/planViewModal', + data: {planKey: planKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#planViewBody").empty().append(html) + $("#planViewModal").modal('show'); + }, + error:function(){ + + } + }); +} + +function getPlanEditModal(planKey){ + $.ajax({ + url: '/affairPlan/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']] + ] + }); + setUploadDiv(); + }, + error:function(){ + + } + }); +} +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 : "/affairPlan/savePlan", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + $("#planEditModal").modal('hide'); + getPlanViewModal(result); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + } + } +} + + +function contentCheck(){ + let flag = true; + if(!$("#contentTitle").val()){ + alert("제목을 입력해주세요.") + flag = false; + } + if(!$("#planDt").val()){ + alert("시행일자를 입력해주세요.") + flag = false; + } + flag = fileCheck(flag, files); + return flag; +} \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultEditModal.html b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultEditModal.html new file mode 100644 index 00000000..b198307a --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultEditModal.html @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html new file mode 100644 index 00000000..72355dbf --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html @@ -0,0 +1,181 @@ + + + + + +
+
+

첩보수집활동 > 외사경찰 견문관리 > 계획수립

+

계획수립

+ + +
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
제목시행일자관서부서작성자작성일시첨부파일상태
임시저장결재대기계장반려계장결재부장반려부장결재
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultViewModal.html b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultViewModal.html new file mode 100644 index 00000000..3a60b1be --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultViewModal.html @@ -0,0 +1,139 @@ + + + + + \ No newline at end of file