From 716d5ba86d18ab4b295b1d586400a58100c8e1be Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Tue, 10 Jan 2023 17:59:17 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=ED=95=B4=EC=96=91=EC=99=B8=EC=82=AC?= =?UTF-8?q?=20=EB=AA=A8=EB=8B=88=ED=84=B0=EB=A7=81=20=EB=8C=80=EC=83=81?= =?UTF-8?q?=EC=9E=90=EC=A7=80=EC=A0=95=EB=B3=B4=EA=B3=A0=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=B0=8F=20=EC=A4=91=EA=B0=84=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dbnt/faisp/config/BaseService.java | 2 + .../monitoring/MonitoringController.java | 158 ++++++++++++++++ .../monitoring/mapper/MonitoringMapper.java | 17 ++ .../model/MonitoringDesignation.java | 84 +++++++++ .../model/MonitoringDesignationApprv.java | 47 +++++ .../model/MonitoringDesignationFile.java | 47 +++++ .../MonitoringDesignationApprvRepository.java | 17 ++ .../MonitoringDesignationFileRepository.java | 17 ++ .../MonitoringDesignationRepository.java | 13 ++ .../monitoring/service/MonitoringService.java | 139 ++++++++++++++ src/main/resources/application-dev.properties | 1 + .../resources/application-prod.properties | 1 + .../resources/application-test.properties | 1 + .../mybatisMapper/MonitoringMapper.xml | 100 ++++++++++ .../fpiMgt/monitoring/designation.js | 126 +++++++++++++ .../monitoring/designationEditModal.html | 107 +++++++++++ .../fpiMgt/monitoring/designationList.html | 176 ++++++++++++++++++ .../monitoring/designationViewModal.html | 151 +++++++++++++++ 18 files changed, 1204 insertions(+) create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/MonitoringController.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/mapper/MonitoringMapper.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignation.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationApprv.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationFile.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationApprvRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationFileRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/service/MonitoringService.java create mode 100644 src/main/resources/mybatisMapper/MonitoringMapper.xml create mode 100644 src/main/resources/static/js/igActivities/fpiMgt/monitoring/designation.js create mode 100644 src/main/resources/templates/igActivities/fpiMgt/monitoring/designationEditModal.html create mode 100644 src/main/resources/templates/igActivities/fpiMgt/monitoring/designationList.html create mode 100644 src/main/resources/templates/igActivities/fpiMgt/monitoring/designationViewModal.html diff --git a/src/main/java/com/dbnt/faisp/config/BaseService.java b/src/main/java/com/dbnt/faisp/config/BaseService.java index 0aa2f599..bf6295fd 100644 --- a/src/main/java/com/dbnt/faisp/config/BaseService.java +++ b/src/main/java/com/dbnt/faisp/config/BaseService.java @@ -50,6 +50,8 @@ public class BaseService { protected String activityCasePath; @Value("${file.dir.majorStatus}") protected String majorStatusPath; + @Value("${file.dir.monitoring}") + protected String monitoringPath; protected String calculationSize(double fileSize){ String[] units = {"bytes", "KB", "MB", "GB", "TB", "PB"}; 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 new file mode 100644 index 00000000..e9a23f32 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/MonitoringController.java @@ -0,0 +1,158 @@ +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.monitoring.model.MonitoringDesignation; +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationApprv; +import com.dbnt.faisp.main.fpiMgt.monitoring.service.MonitoringService; +import com.dbnt.faisp.main.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("/monitoring") +public class MonitoringController { // 첩보수집활동 > 해양외사모니터링 + private final MonitoringService monitoringService; + private final AuthMgtService authMgtService; + + @GetMapping("/designationList/{type}") + public ModelAndView designationList(@AuthenticationPrincipal UserInfo loginUser,@PathVariable("type") String type, MonitoringDesignation md){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/designationList"); + + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/monitoring/designationList/all").get(0).getAccessAuth(); + if(type.equals("all")) { + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신이 작성한 문서만 열람가능 + md.setWrtUserSeq(loginUser.getUserSeq()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + md.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + }else if(type.equals("stay") || type.equals("commit")) { + switch (accessAuth){ + case "ACC001": // 조회 + case "ACC002": // 작성 // 자신의 관서 내에서 작성한 문서만 열람가능 + md.setWrtOrgan(loginUser.getOgCd()); + break; + case "ACC003": // 관리 // 자신 외 하위 기관에서 작성한 문서 열람가능 + md.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); + break; + } + } + //결재권한 확인 + String apprvAuth = authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/monitoring/designationList/all").get(0).getApprovalAuth(); + if(type.equals("stay")) { + if(apprvAuth==null) { + if(!accessAuth.equals("ACC003")){ + md.setWrtUserSeq(loginUser.getUserSeq()); + md.setUserType("normalStayList"); + }else{ + md.setUserType("managerStayList"); + } + }else{ + mav.addObject("userNm", loginUser.getUserNm()); + switch (apprvAuth){ + case "APC004": // 계장대행 + case "APC003": // 계장 // 결재대기 문서 조회 + md.setMdState("DST002"); + break; + case "APC002": // 부장대행 + case "APC001": // 부장 // 계장승인 문서 조회 + md.setMdState("DST004"); + break; + } + } + }else if(type.equals("commit")){ + if(apprvAuth==null) { + if(!accessAuth.equals("ACC003")){ + md.setWrtUserSeq(loginUser.getUserSeq()); + md.setUserType("normalCommitList"); + }else{ + md.setUserType("managerCommitList"); + } + }else{ + switch (apprvAuth) { + case "APC004": // 계장대행 + case "APC003": // 계장 // 계장반려, 계장승인 문서 조회 + md.setUserType("sectionCommitList"); + break; + case "APC002": // 부장대행 + case "APC001": // 부장 // 부장반려, 부장승인 문서 조회 + md.setUserType("headCommitList"); + break; + } + } + } + mav.addObject("accessAuth", accessAuth); + mav.addObject("apprvAuth", apprvAuth); + md.setQueryInfo(); + mav.addObject("mdList", monitoringService.selectDesignationList(md)); + md.setContentCnt(monitoringService.selectDesignationListCnt(md)); + md.setPaginationInfo(); + mav.addObject("type", type); + mav.addObject("searchParams", md); + return mav; + } + + @GetMapping("/designationEditModal") + public ModelAndView planEditModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringDesignation md){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/designationEditModal"); + if(md.getMdKey()!=null){ + + } + + mav.addObject("md", md); + return mav; + } + + @PostMapping("/saveDesignation") + public Integer saveDesignation(@AuthenticationPrincipal UserInfo loginUser,MonitoringDesignation md, + MultipartHttpServletRequest request, @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ + md.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + if(md.getMdKey() == null) { + md.setWrtOrgan(loginUser.getOgCd()); + md.setWrtPart(loginUser.getOfcCd()); + md.setWrtUserGrd(loginUser.getTitleCd()); + md.setWrtUserSeq(loginUser.getUserSeq()); + md.setWrtUserNm(loginUser.getUserNm()); + md.setWrtDt(LocalDateTime.now()); + } + return monitoringService.saveDesignation(md,deleteFileSeq); + } + + @GetMapping("/designationViewModal") + public ModelAndView designationViewModal(@AuthenticationPrincipal UserInfo loginUser, MonitoringDesignation md){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monitoring/designationViewModal"); + md = monitoringService.selectDesignation(md.getMdKey()); + mav.addObject("md", md); + mav.addObject("userSeq",loginUser.getUserSeq()); + //메뉴권한 확인 + mav.addObject("accessAuth", authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/monitoring/designationList/all").get(0).getAccessAuth()); + mav.addObject("apprvAuth", authMgtService.selectApprovalConfigList(loginUser.getUserSeq(), "/monitoring/designationList/all").get(0).getApprovalAuth()); + return mav; + } + + @PostMapping("/designationStateChange") + public Integer designationStateChange(@AuthenticationPrincipal UserInfo loginUser, MonitoringDesignationApprv apprv){ + apprv.setUserSeq(loginUser.getUserSeq()); + apprv.setUserGrd(loginUser.getTitleCd()); + apprv.setUserNm(loginUser.getUserNm()); + apprv.setSaveDt(LocalDateTime.now()); + return monitoringService.designationStateChange(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 new file mode 100644 index 00000000..ff575e41 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/mapper/MonitoringMapper.java @@ -0,0 +1,17 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.mapper; + +import org.apache.ibatis.annotations.Mapper; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignation; + +import java.util.List; + +@Mapper +public interface MonitoringMapper { + + List selectDesignationList(MonitoringDesignation md); + + Integer selectDesignationListCnt(MonitoringDesignation md); + + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignation.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignation.java new file mode 100644 index 00000000..0119ec1e --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignation.java @@ -0,0 +1,84 @@ +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.List; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "monitoring_designation") +public class MonitoringDesignation extends BaseModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "md_key") + private Integer mdKey; + @Column(name = "md_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate mdDt; + @Column(name = "md_title") + private String mdTitle; + @Column(name = "md_name") + private String mdName; + @Column(name = "md_nationality") + private String mdNationality; + @Column(name = "md_rank") + private String mdRank; + @Column(name = "md_birth") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate mdBirth; + @Column(name = "md_address") + private String mdAddress; + @Column(name = "md_career") + private String mdCareer; + @Column(name = "md_etc") + private String mdEtc; + @Column(name = "md_reason") + private String mdReason; + @Column(name = "md_plan") + private String mdPlan; + @Column(name = "md_state") + private String mdState; + @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 List apprvList; + @Transient + private List fileList; + @Transient + private List multipartFileList; + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationApprv.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationApprv.java new file mode 100644 index 00000000..42a95c38 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationApprv.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_designation_apprv") +@IdClass(MonitoringDesignationApprv.monitoringDesignationApprvId.class) +public class MonitoringDesignationApprv { + @Id + @Column(name = "md_key") + private Integer mdKey; + @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 monitoringDesignationApprvId implements Serializable { + private Integer mdKey; + private Integer apprvSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationFile.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationFile.java new file mode 100644 index 00000000..c987f410 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/model/MonitoringDesignationFile.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_designation_file") +@IdClass(MonitoringDesignationFile.monitoringDesignationFileId.class) +public class MonitoringDesignationFile extends FileInfo { + @Id + @Column(name = "md_key") + private Integer mdKey; + @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 monitoringDesignationFileId implements Serializable { + private Integer mdKey; + private Integer fileSeq; + } + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationApprvRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationApprvRepository.java new file mode 100644 index 00000000..558baf5b --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationApprvRepository.java @@ -0,0 +1,17 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationApprv; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringDesignationApprvRepository extends JpaRepository { + + List findByMdKey(Integer mdKey); + + Optional findTopByMdKeyOrderByApprvSeqDesc(Integer mdKey); + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationFileRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationFileRepository.java new file mode 100644 index 00000000..988ed5a7 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationFileRepository.java @@ -0,0 +1,17 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationFile; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringDesignationFileRepository extends JpaRepository { + + List findByMdKey(Integer mdKey); + + Optional findTopByMdKeyOrderByFileSeqDesc(Integer mdKey); + +} diff --git a/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationRepository.java b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationRepository.java new file mode 100644 index 00000000..bc73b7da --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/repository/MonitoringDesignationRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.repository; + +import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignation; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface MonitoringDesignationRepository 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 new file mode 100644 index 00000000..d52166ca --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/fpiMgt/monitoring/service/MonitoringService.java @@ -0,0 +1,139 @@ +package com.dbnt.faisp.main.fpiMgt.monitoring.service; + + +import com.dbnt.faisp.config.BaseService; +import com.dbnt.faisp.config.FileInfo; +import com.dbnt.faisp.main.authMgt.service.AuthMgtService; +import com.dbnt.faisp.main.fpiMgt.affairPlan.mapper.PlanMapper; +import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanApprv; +import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanBoard; +import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanFile; +import com.dbnt.faisp.main.fpiMgt.affairPlan.model.PlanMainInfo; +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.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.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.userInfo.model.UserAlarm; +import com.dbnt.faisp.main.userInfo.service.UserAlarmService; +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.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class MonitoringService extends BaseService { + private final UserAlarmService userAlarmService; + private final MonitoringDesignationApprvRepository monitoringDesignationApprvRepository; + private final MonitoringDesignationFileRepository monitoringDesignationFileRepository; + private final MonitoringDesignationRepository monitoringDesignationRepository; + private final MonitoringMapper monitoringMapper; + + @Transactional + public Integer saveDesignation(MonitoringDesignation md, List deleteFileSeq) { + Integer mdKey = monitoringDesignationRepository.save(md).getMdKey(); + if(deleteFileSeq != null && deleteFileSeq.size()>0){ + deleteDesignationFile(mdKey, deleteFileSeq); + } + if(md.getMultipartFileList()!=null){ + saveDesignationUploadFiles(mdKey, md.getMultipartFileList()); + } + if(md.getMdState().equals("DST002")){ + //작성완료일 때 계장 결재 사용자에게 알림 발송. + userAlarmService.sendAlarmToApprvUser(mdKey, md.getWrtOrgan(), "APC003", 36, "해양외사 모니터링 지정보고에 결재대기 문서가 있습니다."); + userAlarmService.sendAlarmToApprvUser(mdKey, md.getWrtOrgan(), "APC004", 36, "해양외사 모니터링 지정보고에 결재대기 문서가 있습니다."); + } + return mdKey; + } + + private void deleteDesignationFile(Integer mdKey, List deleteFileSeq) { + List designationFileList = monitoringDesignationFileRepository.findByMdKey(mdKey); + for(MonitoringDesignationFile file: designationFileList){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); + monitoringDesignationFileRepository.delete(file); + } + } + } + + private void saveDesignationUploadFiles(Integer mdKey, List multipartFileList){ + MonitoringDesignationFile lastFileInfo = monitoringDesignationFileRepository.findTopByMdKeyOrderByFileSeqDesc(mdKey).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("."); + MonitoringDesignationFile fileInfo = new MonitoringDesignationFile(); + fileInfo.setMdKey(mdKey); + 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); + monitoringDesignationFileRepository.save(fileInfo); + } + } + + public List selectDesignationList(MonitoringDesignation md) { + return monitoringMapper.selectDesignationList(md); + } + + public Integer selectDesignationListCnt(MonitoringDesignation md) { + return monitoringMapper.selectDesignationListCnt(md); + } + + public MonitoringDesignation selectDesignation(Integer mdKey) { + MonitoringDesignation savedDesignation = monitoringDesignationRepository.findById(mdKey).orElse(null); + if (savedDesignation != null) { + savedDesignation.setFileList(monitoringDesignationFileRepository.findByMdKey(mdKey)); + savedDesignation.setApprvList(monitoringDesignationApprvRepository.findByMdKey(mdKey)); + } + return savedDesignation; + } + + public Integer designationStateChange(MonitoringDesignationApprv apprv) { + MonitoringDesignation saveddesignation = monitoringDesignationRepository.findById(apprv.getMdKey()).orElse(null); + saveddesignation.setMdState(apprv.getState()); + MonitoringDesignationApprv lastApprv = monitoringDesignationApprvRepository.findTopByMdKeyOrderByApprvSeqDesc(apprv.getMdKey()).orElse(null); + apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); + monitoringDesignationApprvRepository.save(apprv); + + switch (apprv.getState()){ + case "DST004": + // 계장승인시 부장 결재권자에게 알림 발송. + userAlarmService.sendAlarmToApprvUser(saveddesignation.getMdKey(), saveddesignation.getWrtOrgan(), "APC001", 36, "해양외사 모니터링 지정보고에 결재대기 문서가 있습니다."); + userAlarmService.sendAlarmToApprvUser(saveddesignation.getMdKey(), saveddesignation.getWrtOrgan(), "APC002", 36, "해양외사 모니터링 지정보고에 결재대기 문서가 있습니다."); + break; + case "DST003": + case "DST005": + // 반려시 작성자에게 반려 알림 발송 + userAlarmService.sendAlarmToWrtUser(saveddesignation.getMdKey(), saveddesignation.getWrtUserSeq(), 36, saveddesignation.getMdTitle()+" 문서가 반려되었습니다."); + break; + case "DST006": + // 부장승인시 작성자에게 승인 알림 발송 + userAlarmService.sendAlarmToWrtUser(saveddesignation.getMdKey(), saveddesignation.getWrtUserSeq(), 36, saveddesignation.getMdTitle()+" 문서가 승인되었습니다."); + break; + } + return apprv.getMdKey(); + } + + + +} diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index b1f487b8..6b608379 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -27,6 +27,7 @@ file.dir.cia.foreigner=/cia/foreigner file.dir.cia.edu=/cia/edu file.dir.activityCase=/activityCase file.dir.majorStatus=/majorStatus +file.dir.monitoring=/monitoring editor.img.view=/file/editorFileDisplay?fileNm= diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 98c95c7d..dd431e44 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -27,6 +27,7 @@ file.dir.cia.foreigner=/cia/foreigner file.dir.cia.edu=/cia/edu file.dir.activityCase=/activityCase file.dir.majorStatus=/majorStatus +file.dir.monitoring=/monitoring editor.img.view=/file/editorFileDisplay?fileNm= diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 7800bbd2..e3eb20e9 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -26,6 +26,7 @@ file.dir.cia.foreigner=/cia/foreigner file.dir.cia.edu=/cia/edu file.dir.activityCase=/activityCase file.dir.majorStatus=/majorStatus +file.dir.monitoring=/monitoring editor.img.view=/file/editorFileDisplay?fileNm= diff --git a/src/main/resources/mybatisMapper/MonitoringMapper.xml b/src/main/resources/mybatisMapper/MonitoringMapper.xml new file mode 100644 index 00000000..0782c3d1 --- /dev/null +++ b/src/main/resources/mybatisMapper/MonitoringMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + and md.wrt_user_seq = #{wrtUserSeq} + + + and md.wrt_user_nm like '%'||#{wrtUserNm}||'%' + + + and md.wrt_organ = #{wrtOrgan} + + + and md.md_title like '%'||#{mdTitle}||'%' + + + and md.md_state = #{mdState} + + + + and md.md_dt >= #{startDate}::date + + + and md.md_dt <= #{endDate}::date+1 + + + + + and md.wrt_dt >= #{startDate}::date + + + and md.wrt_dt <= #{endDate}::date+1 + + + + and md.wrt_organ in + + #{organCd} + + + + + and md_state in ('DST002', 'DST004') + + + and md_state in ('DST003', 'DST005', 'DST006') + + + and md_state in ('DST003', 'DST004', 'DST005', 'DST006') + + + and md_state in ('DST003', 'DST005', 'DST006') + + + and md_state in ('DST002', 'DST004') + + + and md_state in ('DST003', 'DST005', 'DST006') + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/igActivities/fpiMgt/monitoring/designation.js b/src/main/resources/static/js/igActivities/fpiMgt/monitoring/designation.js new file mode 100644 index 00000000..8e69c14b --- /dev/null +++ b/src/main/resources/static/js/igActivities/fpiMgt/monitoring/designation.js @@ -0,0 +1,126 @@ + +$(document).on('click', '#planTab', function (){ + location.href = "/monitoring/designationList/all"; +}) +$(document).on('click', '#stayTab', function (){ + location.href = "/monitoring/designationList/stay"; +}) +$(document).on('click', '#commitTab', function (){ + location.href = "/monitoring/designationList/commit"; +}) + +$(document).on('click', '#addBtn', function (){ + getDesignationEditModal(null) +}) + +function getDesignationEditModal(mdKey){ + $.ajax({ + url: '/monitoring/designationEditModal', + data: {mdKey: mdKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#designationEditModalContent").empty().append(html) + $("#mdDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); + $("#mdBirth").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); + setEditor('editor', '470'); + setUploadDiv(); + $("#designationEditModal").modal('show'); + }, + error:function(){ + + } + }); +} + +$(document).on('click', '#saveBtn', function (){ + if(confirm("저장하시겠습니까?")){ + saveDesignation('DST002'); + } +}) + +function saveDesignation(mdState){ + contentFade("in"); + const formData = new FormData($("#designationEditForm")[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('mdPlan', CrossEditor.GetBodyValue()); + formData.append('mdState', mdState); + $.ajax({ + type : 'POST', + data : formData, + url : "/monitoring/saveDesignation", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + location.reload(); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) +} + +$(document).on('click', '.designationTr', function (){ + getDesignationViewModal(Number($(this).find(".mdKey").val())); +}) + +function getDesignationViewModal(mdKey){ + $.ajax({ + url: '/monitoring/designationViewModal', + data: {mdKey: mdKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#designationViewModalBody").empty().append(html) + $("#designationViewModal").modal('show'); + }, + error:function(){ + + } + }); +} + +$(document).on('click', '.apprvBtn', function (){ + $("#viewModalApprvValue").val($(this).attr("data-planstate")); + if(confirm($(this).val()+"하시겠습니까?")){ + const formData = new FormData($("#apprvForm")[0]); + contentFade("in") + $.ajax({ + type : 'POST', + data : formData, + url : "/monitoring/designationStateChange", + processData: false, + contentType: false, + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(result) { + alert($(this).val()+"되었습니다"); + getDesignationViewModal(result); + contentFade("out"); + }, + error : function(xhr, status) { + alert($(this).val()+"처리를 실패하였습니다."); + contentFade("out"); + } + }) + } +}) + diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationEditModal.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationEditModal.html new file mode 100644 index 00000000..643dab8b --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationEditModal.html @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationList.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationList.html new file mode 100644 index 00000000..07b72dbb --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationList.html @@ -0,0 +1,176 @@ + + + + + +
+
+ + +
+

지정 보고

+

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

+
+
+
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
제목시행일자관서부서작성자작성일시첨부파일상태
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationViewModal.html b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationViewModal.html new file mode 100644 index 00000000..6d61acbd --- /dev/null +++ b/src/main/resources/templates/igActivities/fpiMgt/monitoring/designationViewModal.html @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file