diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/MonitoringController.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/MonitoringController.java index 1f18c1e5..72e94201 100644 --- a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/MonitoringController.java +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/MonitoringController.java @@ -3,8 +3,11 @@ package com.dbnt.faisp.main.fpiMgt.monitoring; import com.dbnt.faisp.main.authMgt.service.AuthMgtService; import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanApprv; import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanBoard; +import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlan; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignation; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationApprv; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResult; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultApprv; import com.dbnt.faisp.main.fpiMgt.monitoring.service.MonitoringService; import com.dbnt.faisp.main.userInfo.model.UserInfo; import lombok.RequiredArgsConstructor; @@ -109,7 +112,7 @@ public class MonitoringController { // 첩보수집활동 > 해양외사모니 } @GetMapping("/designationEditModal") - public ModelAndView planEditModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringDesignation md){ + public ModelAndView designationEditModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringDesignation md){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/designationEditModal"); if(md.getMdKey()!=null){ md = monitoringService.selectDesignation(md.getMdKey()); @@ -154,6 +157,147 @@ public class MonitoringController { // 첩보수집활동 > 해양외사모니 apprv.setSaveDt(LocalDateTime.now()); return monitoringService.designationStateChange(apprv); } + + @GetMapping("/resultList/{type}") + public ModelAndView resultList(@AuthenticationPrincipal UserInfo loginUser,@PathVariable("type") String type, MonitoringResult mr){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/resultList"); + + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/monitoring/resultList/all").get(0).getAccessAuth(); + if(type.equals("all")) { + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신이 작성한 문서만 열람가능 + mr.setWrtUserSeq(loginUser.getUserSeq()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + mr.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + }else if(type.equals("stay") || type.equals("commit")) { + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신의 관서 내에서 작성한 문서만 열람가능 + mr.setWrtOrgan(loginUser.getOgCd()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + mr.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + } + //결재권한 확인 + String apprvAuth = authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/monitoring/resultList/all").get(0).getApprovalAuth(); + if(type.equals("stay")) { + if(apprvAuth==null) { + if(!accessAuth.equals("ACC003")){ + mr.setWrtUserSeq(loginUser.getUserSeq()); + mr.setUserType("normalStayList"); + }else{ + mr.setUserType("managerStayList"); + } + }else{ + mav.addObject("userNm", loginUser.getUserNm()); + switch (apprvAuth){ + case "APC004": // 계장대행 + case "APC003": // 계장 // 결재대기 문서 조회 + mr.setMrState("DST002"); + break; + case "APC002": // 부장대행 + case "APC001": // 부장 // 계장승인 문서 조회 + mr.setMrState("DST004"); + break; + } + } + }else if(type.equals("commit")){ + if(apprvAuth==null) { + if(!accessAuth.equals("ACC003")){ + mr.setWrtUserSeq(loginUser.getUserSeq()); + mr.setUserType("normalCommitList"); + }else{ + mr.setUserType("managerCommitList"); + } + }else{ + switch (apprvAuth) { + case "APC004": // 계장대행 + case "APC003": // 계장 // 계장반려, 계장승인 문서 조회 + mr.setUserType("sectionCommitList"); + break; + case "APC002": // 부장대행 + case "APC001": // 부장 // 부장반려, 부장승인 문서 조회 + mr.setUserType("headCommitList"); + break; + } + } + } + mav.addObject("accessAuth", accessAuth); + mav.addObject("apprvAuth", apprvAuth); + mr.setQueryInfo(); + mav.addObject("mrList", monitoringService.selectResultList(mr)); + mr.setContentCnt(monitoringService.selectResultListCnt(mr)); + mr.setPaginationInfo(); + mav.addObject("type", type); + mav.addObject("searchUrl", "/monitoring/resultList/"+type); + mav.addObject("searchParams", mr); + return mav; + } + + @GetMapping("/resultEditModal") + public ModelAndView resultEditModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringResult mr){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/resultEditModal"); + if(mr.getMrKey()!=null){ + mr = monitoringService.selectResult(mr.getMrKey()); + } + + mav.addObject("mr", mr); + return mav; + } + + @GetMapping("/designationListModal") + public ModelAndView designationListModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringDesignation md){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/designationListModal"); + md.setFirstIndex(0); + md.setRowCnt(9999); + mav.addObject("designationList", monitoringService.selectDesignationList(md)); + return mav; + } + + @PostMapping("/saveResult") + public Integer saveResult(@AuthenticationPrincipal UserInfo loginUser,MonitoringResult mr, + MultipartHttpServletRequest request, @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ + mr.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + if(mr.getMrKey() == null) { + mr.setWrtOrgan(loginUser.getOgCd()); + mr.setWrtPart(loginUser.getOfcCd()); + mr.setWrtUserGrd(loginUser.getTitleCd()); + mr.setWrtUserSeq(loginUser.getUserSeq()); + mr.setWrtUserNm(loginUser.getUserNm()); + mr.setWrtDt(LocalDateTime.now()); + } + return monitoringService.saveResult(mr,deleteFileSeq); + } + + @GetMapping("/resultViewModal") + public ModelAndView resultViewModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringResult mr){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/resultViewModal"); + mr = monitoringService.selectResult(mr.getMrKey()); + mav.addObject("mr", mr); + mav.addObject("userSeq",loginUser.getUserSeq()); + //메뉴권한 확인 + mav.addObject("accessAuth", authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/monitoring/resultList/all").get(0).getAccessAuth()); + mav.addObject("apprvAuth", authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/monitoring/resultList/all").get(0).getApprovalAuth()); + return mav; + } + + @PostMapping("/resultStateChange") + public Integer resultStateChange(@AuthenticationPrincipal UserInfo loginUser, MonitoringResultApprv apprv){ + apprv.setUserSeq(loginUser.getUserSeq()); + apprv.setUserGrd(loginUser.getTitleCd()); + apprv.setUserNm(loginUser.getUserNm()); + apprv.setSaveDt(LocalDateTime.now()); + return monitoringService.resultStateChange(apprv); + } } diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/mapper/MonitoringMapper.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/mapper/MonitoringMapper.java index ff575e41..8e066113 100644 --- a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/mapper/MonitoringMapper.java +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/mapper/MonitoringMapper.java @@ -3,6 +3,7 @@ package com.dbnt.faisp.main.fpiMgt.monitoring.mapper; import org.apache.ibatis.annotations.Mapper; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignation; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResult; import java.util.List; @@ -13,5 +14,9 @@ public interface MonitoringMapper { Integer selectDesignationListCnt(MonitoringDesignation md); + List selectResultList(MonitoringResult mr); + + Integer selectResultListCnt(MonitoringResult mr); + } diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResult.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResult.java new file mode 100644 index 00000000..982f47fb --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResult.java @@ -0,0 +1,88 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.model; + +import com.dbnt.faisp.config.BaseModel; +import com.dbnt.faisp.main.fpiMgt.affair.model.AffairFile; +import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanApprv; + +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.ArrayList; +import java.util.List; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "monitoring_result") +public class MonitoringResult extends BaseModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "mr_key") + private Integer mrKey; + @Column(name = "md_key") + private Integer mdKey; + @Column(name = "mr_title") + private String mrTitle; + @Column(name = "mr_sdate") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate mrSdate; + @Column(name = "mr_edate") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate mrEdate; + @Column(name = "mr_price") + private Integer mrPrice; + @Column(name = "mr_state") + private String mrState; + @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 Integer fileCnt; + @Transient + private String userType; + @Transient + private MonitoringDesignation md; + @Transient + private List apprvList; + @Transient + private List fileList; + @Transient + private List resultInfoList; + @Transient + private List multipartFileList; + @Transient + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate mdDt; + @Transient + private String mdName; + @Transient + private String mdRank; + @Transient + private String mdNationality; + + + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultApprv.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultApprv.java new file mode 100644 index 00000000..aa8b501f --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultApprv.java @@ -0,0 +1,47 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.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 = "monitoring_result_apprv") +@IdClass(MonitoringResultApprv.MonitoringResultApprvId.class) +public class MonitoringResultApprv { + @Id + @Column(name = "mr_key") + private Integer mrKey; + @Id + @Column(name = "apprv_seq") + private Integer apprvSeq; + @Column(name = "state") + private String state; + @Column(name = "user_seq") + private Integer userSeq; + @Column(name = "user_grd") + private String userGrd; + @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 MonitoringResultApprvId implements Serializable { + private Integer mrKey; + private Integer apprvSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultFile.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultFile.java new file mode 100644 index 00000000..295bc4ab --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultFile.java @@ -0,0 +1,47 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.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 = "monitoring_result_file") +@IdClass(MonitoringResultFile.MonitoringResultFileId.class) +public class MonitoringResultFile extends FileInfo { + @Id + @Column(name = "mr_key") + private Integer mrKey; + @Id + @Column(name = "file_seq") + private Integer fileSeq; + @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 MonitoringResultFileId implements Serializable { + private Integer mrKey; + private Integer fileSeq; + } + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultInfo.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultInfo.java new file mode 100644 index 00000000..491f6f22 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringResultInfo.java @@ -0,0 +1,57 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.model; + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "monitoring_result_info") +@IdClass(MonitoringResultInfo.MonitoringResultInfoId.class) +public class MonitoringResultInfo { + @Id + @Column(name = "mr_key") + private Integer mrKey; + @Id + @Column(name = "info_seq") + private Integer infoSeq; + @Column(name = "contact_date") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate contactDate; + @Column(name = "contact_stime") + private String contactStime; + @Column(name = "contact_etime") + private String contactEtime; + @Column(name = "contact_info") + private String contactInfo; + + + + @Override +public String toString() { + return "MonitoringResultInfo [mrKey=" + mrKey + ", infoSeq=" + infoSeq + ", contactDate=" + contactDate + + ", contactStime=" + contactStime + ", contactEtime=" + contactEtime + ", contactInfo=" + contactInfo + + "]"; +} + + + +@Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class MonitoringResultInfoId implements Serializable { + private Integer mrKey; + private Integer infoSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultApprvRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultApprvRepository.java new file mode 100644 index 00000000..1f86d616 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultApprvRepository.java @@ -0,0 +1,18 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultApprv; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringResultApprvRepository extends JpaRepository { + + List findByMrKey(Integer mrKey); + + Optional findTopByMrKeyOrderByApprvSeqDesc(Integer mrKey); + + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultFileRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultFileRepository.java new file mode 100644 index 00000000..8af4a0c0 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultFileRepository.java @@ -0,0 +1,18 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultFile; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringResultFileRepository extends JpaRepository { + + List findByMrKey(Integer mrKey); + + Optional findTopByMrKeyOrderByFileSeqDesc(Integer mrKey); + + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultInfoRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultInfoRepository.java new file mode 100644 index 00000000..e0ab6628 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultInfoRepository.java @@ -0,0 +1,18 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultInfo; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringResultInfoRepository extends JpaRepository { + + void deleteByMrKey(Integer mrKey); + + List findByMrKey(Integer mrKey); + + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultRepository.java new file mode 100644 index 00000000..2715150d --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringResultRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResult; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringResultRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/service/MonitoringService.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/service/MonitoringService.java index ab54c57b..de68c98e 100644 --- a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/service/MonitoringService.java +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/service/MonitoringService.java @@ -13,14 +13,23 @@ import com.dbnt.faisp.main.fpiMgt.affairPlan.repository.PlanApprvRepository; import com.dbnt.faisp.main.fpiMgt.affairPlan.repository.PlanBoardRepository; import com.dbnt.faisp.main.fpiMgt.affairPlan.repository.PlanFileRepository; import com.dbnt.faisp.main.fpiMgt.affairPlan.repository.PlanMainInfoRepository; +import com.dbnt.faisp.main.fpiMgt.affairResult.model.ResultInfo; import com.dbnt.faisp.main.fpiMgt.monitoring.mapper.MonitoringMapper; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignation; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationApprv; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationFile; import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationFile.monitoringDesignationFileId; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResult; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultApprv; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultFile; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultInfo; import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringDesignationApprvRepository; import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringDesignationFileRepository; import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringDesignationRepository; +import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultApprvRepository; +import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultFileRepository; +import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultInfoRepository; +import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultRepository; import com.dbnt.faisp.main.userInfo.model.UserAlarm; import com.dbnt.faisp.main.userInfo.service.UserAlarmService; import lombok.RequiredArgsConstructor; @@ -41,6 +50,10 @@ public class MonitoringService extends BaseService { private final MonitoringDesignationApprvRepository monitoringDesignationApprvRepository; private final MonitoringDesignationFileRepository monitoringDesignationFileRepository; private final MonitoringDesignationRepository monitoringDesignationRepository; + private final MonitoringResultRepository monitoringResultRepository; + private final MonitoringResultApprvRepository monitoringResultApprvRepository; + private final MonitoringResultFileRepository monitoringResultFileRepository; + private final MonitoringResultInfoRepository monitoringResultInfoRepository; private final MonitoringMapper monitoringMapper; @Transactional @@ -140,6 +153,112 @@ public class MonitoringService extends BaseService { return monitoringDesignationFileRepository.findById(new monitoringDesignationFileId(parentKey,fileSeq)).orElse(null); } + @Transactional + public Integer saveResult(MonitoringResult mr, List deleteFileSeq) { + Integer mrKey = monitoringResultRepository.save(mr).getMrKey(); + if(deleteFileSeq != null && deleteFileSeq.size()>0){ + deleteResultFile(mrKey, deleteFileSeq); + } + if(mr.getMultipartFileList()!=null){ + saveResultUploadFiles(mrKey, mr.getMultipartFileList()); + } + if (mr.getResultInfoList() != null){ + saveResultInfoList(mrKey, mr.getResultInfoList()); + } + if(mr.getMrState().equals("DST002")){ + //작성완료일 때 계장 결재 사용자에게 알림 발송. + userAlarmService.sendAlarmToApprvUser(mrKey, mr.getWrtOrgan(), "APC003", 37, "해양외사 모니터링 모니터링보고에 결재대기 문서가 있습니다."); + userAlarmService.sendAlarmToApprvUser(mrKey, mr.getWrtOrgan(), "APC004", 37, "해양외사 모니터링 모니터링보고에 결재대기 문서가 있습니다."); + } + return mrKey; + } + + private void deleteResultFile(Integer mrKey, List deleteFileSeq) { + List resultFileList = monitoringResultFileRepository.findByMrKey(mrKey); + for(MonitoringResultFile file: resultFileList){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); + monitoringResultFileRepository.delete(file); + } + } + } + + private void saveResultUploadFiles(Integer mrKey, List multipartFileList){ + MonitoringResultFile lastFileInfo = monitoringResultFileRepository.findTopByMrKeyOrderByFileSeqDesc(mrKey).orElse(null); + int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); + for(MultipartFile file : multipartFileList){ + String saveName = UUID.randomUUID().toString(); + String path = locationPath+monitoringPath; + saveFile(file, new File(path+File.separator+saveName)); + + String originalFilename = file.getOriginalFilename(); + int extnIdx = originalFilename.lastIndexOf("."); + MonitoringResultFile fileInfo = new MonitoringResultFile(); + fileInfo.setMrKey(mrKey); + 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); + monitoringResultFileRepository.save(fileInfo); + } + } + + private void saveResultInfoList(Integer mrKey, List resultInfoList){ + monitoringResultInfoRepository.deleteByMrKey(mrKey); + for(MonitoringResultInfo info: resultInfoList){ + info.setMrKey(mrKey); + } + monitoringResultInfoRepository.saveAll(resultInfoList); + } + + public List selectResultList(MonitoringResult mr) { + return monitoringMapper.selectResultList(mr); + } + + public Integer selectResultListCnt(MonitoringResult mr) { + return monitoringMapper.selectResultListCnt(mr); + } + + public MonitoringResult selectResult(Integer mrKey) { + MonitoringResult savedReslut = monitoringResultRepository.findById(mrKey).orElse(null); + if (savedReslut != null) { + savedReslut.setMd(monitoringDesignationRepository.findById(savedReslut.getMdKey()).orElse(null)); + savedReslut.setResultInfoList(monitoringResultInfoRepository.findByMrKey(mrKey)); + savedReslut.setFileList(monitoringResultFileRepository.findByMrKey(mrKey)); + savedReslut.setApprvList(monitoringResultApprvRepository.findByMrKey(mrKey)); + } + return savedReslut; + } + + public Integer resultStateChange(MonitoringResultApprv apprv) { + MonitoringResult saveResult = monitoringResultRepository.findById(apprv.getMrKey()).orElse(null); + saveResult.setMrState(apprv.getState()); + MonitoringResultApprv lastApprv = monitoringResultApprvRepository.findTopByMrKeyOrderByApprvSeqDesc(apprv.getMrKey()).orElse(null); + apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); + monitoringResultApprvRepository.save(apprv); + + switch (apprv.getState()){ + case "DST004": + // 계장승인시 부장 결재권자에게 알림 발송. + userAlarmService.sendAlarmToApprvUser(saveResult.getMrKey(), saveResult.getWrtOrgan(), "APC001", 37, "해양외사 모니터링 모니터링보고에 결재대기 문서가 있습니다."); + userAlarmService.sendAlarmToApprvUser(saveResult.getMrKey(), saveResult.getWrtOrgan(), "APC002", 37, "해양외사 모니터링 모니터링보고에 결재대기 문서가 있습니다."); + break; + case "DST003": + case "DST005": + // 반려시 작성자에게 반려 알림 발송 + userAlarmService.sendAlarmToWrtUser(saveResult.getMrKey(), saveResult.getWrtUserSeq(), 36, saveResult.getMrTitle()+" 문서가 반려되었습니다."); + break; + case "DST006": + // 부장승인시 작성자에게 승인 알림 발송 + userAlarmService.sendAlarmToWrtUser(saveResult.getMrKey(), saveResult.getWrtUserSeq(), 36, saveResult.getMrTitle()+" 문서가 승인되었습니다."); + break; + } + return apprv.getMrKey(); + } + + } diff --git a/src/main/resources/mybatisMapper/MonitoringMapper.xml b/src/main/resources/mybatisMapper/MonitoringMapper.xml index 42c6ee90..4181a7fa 100644 --- a/src/main/resources/mybatisMapper/MonitoringMapper.xml +++ b/src/main/resources/mybatisMapper/MonitoringMapper.xml @@ -97,4 +97,106 @@ from monitoring_designation md + + + + and mr.wrt_user_seq = #{wrtUserSeq} + + + and mr.wrt_user_nm like '%'||#{wrtUserNm}||'%' + + + and mr.wrt_organ = #{wrtOrgan} + + + and mr.mr_title like '%'||#{mrTitle}||'%' + + + and mr.mr_state = #{mrState} + + + + and mr.wrt_dt >= #{startDate}::date + + + and mr.wrt_dt <= #{endDate}::date+1 + + + + and mr.wrt_organ in + + #{organCd} + + + + + and mr_state in ('DST002', 'DST004') + + + and mr_state in ('DST003', 'DST005', 'DST006') + + + and mr_state in ('DST003', 'DST004', 'DST005', 'DST006') + + + and mr_state in ('DST003', 'DST005', 'DST006') + + + and mr_state in ('DST002', 'DST004') + + + and mr_state in ('DST003', 'DST005', 'DST006') + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/img/logoNew.png b/src/main/resources/static/img/logoNew.png index d5137758..7a7dba21 100644 Binary files a/src/main/resources/static/img/logoNew.png and b/src/main/resources/static/img/logoNew.png differ diff --git a/src/main/resources/static/js/igActivities/fpiMgt/monitoring/result.js b/src/main/resources/static/js/igActivities/fpiMgt/monitoring/result.js new file mode 100644 index 00000000..4f4427f9 --- /dev/null +++ b/src/main/resources/static/js/igActivities/fpiMgt/monitoring/result.js @@ -0,0 +1,204 @@ +$(function(){ + $("#dateSelectorDiv").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); +}) + +$(document).on('click', '#allTab', function (){ + location.href = "/monitoring/resultList/all"; +}) +$(document).on('click', '#stayTab', function (){ + location.href = "/monitoring/resultList/stay"; +}) +$(document).on('click', '#commitTab', function (){ + location.href = "/monitoring/resultList/commit"; +}) + +$(document).on('click', '#addBtn', function (){ + getResultEditModal(null); +}) + +function getResultEditModal(mrKey){ + $.ajax({ + url: '/monitoring/resultEditModal', + data: {mrKey: mrKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#resultEditModalContent").empty().append(html) + $("#mrSdate,#mrEdate").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); + setUploadDiv(); + $("#resultEditModal").modal('show'); + }, + error:function(e){ + ajaxErrorAction(e); + } + }); +} + +$(document).on('click', '#designationListModalBtn', function (){ + //const opKey = $("input[name=opKey]").val(); + $.ajax({ + url: '/monitoring/designationListModal', + data: { + + }, + type: 'GET', + dataType:"html", + success: function(html){ + $("#designationListModalContent").empty().append(html); + //if(opKey != ""){ + // $(".rowChkBox[value="+opKey+"]").prop("checked", true); + // } + $("#designationListModal").modal('show'); + }, + error:function(e){ + ajaxErrorAction(e); + } + }); +}) + +$(document).on('click', '#getDesignationBtn', function (){ + if($(".rowChkBox:checked").length < 1){ + alert("정보협력자를 선택해주세요."); + return false; + } + if($(".rowChkBox:checked").length > 1){ + alert("한명만 선택해주세요."); + return false; + } + const opKey = $(".rowChkBox:checked").val(); + const tr= $(".rowChkBox:checked").parents(".designationTr"); + $("#mdDt").val(tr.find(".mdDt").val()); + $("#mdName").val(tr.find(".mdName").val()); + $("#mdNationality").val(tr.find(".mdNationality").val()); + $("#mdRank").val(tr.find(".mdRank").val()); + $("input[name=mdKey]").val(tr.find(".rowChkBox").val()); + $("#designationListModal").modal("hide"); +}) + +$(document).on('click', '#resultInfoAddBtn', function (){ + const childCommentDiv = $(this).parents(".resultInfoRow"); + const infoFm = $("#infoFmOrigin").children().clone() + $("#resultInfoRow").append(infoFm); + infoFm.find(".contactDate").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); +}) + +$(document).on('click', '#editBtn', function (){ + $("#resultViewModal").modal('hide'); + getResultEditModal($(this).attr("data-mrkey")); +}) + +$(document).on('click', '#saveBtn', function (){ + if(confirm("저장하시겠습니까?")){ + saveResult('DST002'); + } +}) + +$(document).on('click', '#saveTempBtn', function (){ + if(confirm("임시저장 하시겠습니까?")){ + saveResult('DST001'); + } +}) + +function saveResult(mrState){ + contentFade("in"); + const formData = new FormData($("#resultEditForm")[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")); + }) + formData.append('mrState', mrState); + + $.each($("#resultInfoRow").find(".infoRow"), function (idx, div){ + // const position = $(div).find(".normalSailorPosition").val(); + // let sailorKey = $(div).find(".sailorKey").val(); + // if(sailorKey!==undefined){ + // formData.append('sailorList['+(idx)+'].sailorKey', sailorKey); + // } + formData.append('resultInfoList['+(idx)+'].infoSeq', idx+1); + formData.append('resultInfoList['+(idx)+'].contactDate', $(div).find(".contactDate").val()); + formData.append('resultInfoList['+(idx)+'].contactStime', $(div).find(".contactStime").val()); + formData.append('resultInfoList['+(idx)+'].contactEtime', $(div).find(".contactEtime").val()); + formData.append('resultInfoList['+(idx)+'].contactInfo', $(div).find(".contactInfo").val()); + + }); + $.ajax({ + type : 'POST', + data : formData, + url : "/monitoring/saveResult", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + location.reload(); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) +} + +$(document).on('click', '.resultTr', function (){ + getResultViewModal(Number($(this).find(".mrKey").val())); +}) + +function getResultViewModal(mrKey){ + $.ajax({ + url: '/monitoring/resultViewModal', + data: {mrKey: mrKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#resultViewModalBody").empty().append(html) + $("#resultViewModal").modal('show'); + }, + error:function(e){ + ajaxErrorAction(e); + } + }); +} + +$(document).on('click', '.apprvBtn', function (){ + $("#viewModalApprvValue").val($(this).attr("data-planstate")); + const approval = $(this).val(); + if(confirm(approval+"하시겠습니까?")){ + const formData = new FormData($("#apprvForm")[0]); + contentFade("in") + $.ajax({ + type : 'POST', + data : formData, + url : "/monitoring/resultStateChange", + processData: false, + contentType: false, + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(result) { + alert(approval+"되었습니다"); + getResultViewModal(result); + contentFade("out"); + }, + error : function(xhr, status) { + alert(approval+"처리를 실패하였습니다."); + contentFade("out"); + } + }) + } +}) + diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationListModal.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationListModal.html new file mode 100644 index 00000000..d52b94b4 --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationListModal.html @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultEditModal.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultEditModal.html new file mode 100644 index 00000000..44085f62 --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultEditModal.html @@ -0,0 +1,188 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultList.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultList.html new file mode 100644 index 00000000..ffe210c9 --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultList.html @@ -0,0 +1,197 @@ + + + + + +
+
+ + + +
+

모니터링 보고

+

첩보수집활동 > 해양외사 모니터링 > 모니터링 보고

+
+
+
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
순번제목사업기간대상자관서부서작성자작성일시상태
대상지정일성명국적계급
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+ + + + + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultViewModal.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultViewModal.html new file mode 100644 index 00000000..c1453626 --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/resultViewModal.html @@ -0,0 +1,167 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/ivsgt/ivsgt.html b/src/main/resources/templates/ivsgt/ivsgt.html index 114b4e93..ac23f194 100644 --- a/src/main/resources/templates/ivsgt/ivsgt.html +++ b/src/main/resources/templates/ivsgt/ivsgt.html @@ -21,7 +21,7 @@
-
+
diff --git a/src/main/resources/templates/user/myInfo.html b/src/main/resources/templates/user/myInfo.html index 88c37e6c..fe01903f 100644 --- a/src/main/resources/templates/user/myInfo.html +++ b/src/main/resources/templates/user/myInfo.html @@ -16,9 +16,10 @@
-

마이페이지

+
+
마이페이지
-
+