From f44d4498869b8f15bd214aeb366c9304b59ff7a6 Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Wed, 4 Jan 2023 09:04:39 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EB=B0=A9=EC=B2=A9=ED=99=9C=EB=8F=99?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CounterIntelligenceController.java | 44 ++++ .../mapper/CounterIntelligenceMapper.java | 5 + .../counterIntelligence/model/CiaFile.java | 46 +++++ .../model/CounterIntelligenceActivity.java | 59 ++++++ .../model/SaftyDemandInfo.java | 33 +++ .../repository/CiaFileRepository.java | 20 ++ ...CounterIntelligenceActivityRepository.java | 9 + .../repository/SaftyDemandInfoRepository.java | 13 ++ .../service/CounterIntelligenceService.java | 79 ++++++- .../CounterIntelligenceMapper.xml | 35 ++++ .../js/counterIntelligence/ciaSaftyDemand.js | 54 +++++ .../ciaSaftyDemandEditModal.html | 62 ++++++ .../ciaSaftyDemandList.html | 192 ++++++++++++++++++ .../ciaSaftyDemandviewModal.html | 62 ++++++ 14 files changed, 712 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CiaFile.java create mode 100644 src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CounterIntelligenceActivity.java create mode 100644 src/main/java/com/dbnt/faisp/main/counterIntelligence/model/SaftyDemandInfo.java create mode 100644 src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CiaFileRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CounterIntelligenceActivityRepository.java create mode 100644 src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/SaftyDemandInfoRepository.java create mode 100644 src/main/resources/static/js/counterIntelligence/ciaSaftyDemand.js create mode 100644 src/main/resources/templates/counterIntelligence/ciaSaftyDemandEditModal.html create mode 100644 src/main/resources/templates/counterIntelligence/ciaSaftyDemandList.html create mode 100644 src/main/resources/templates/counterIntelligence/ciaSaftyDemandviewModal.html diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/CounterIntelligenceController.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/CounterIntelligenceController.java index 95995147..95b1a6ce 100644 --- a/src/main/java/com/dbnt/faisp/main/counterIntelligence/CounterIntelligenceController.java +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/CounterIntelligenceController.java @@ -2,6 +2,7 @@ package com.dbnt.faisp.main.counterIntelligence; import com.dbnt.faisp.main.authMgt.service.AuthMgtService; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceActivity; import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceWork; import com.dbnt.faisp.main.counterIntelligence.service.CounterIntelligenceService; import com.dbnt.faisp.main.userInfo.model.UserInfo; @@ -80,4 +81,47 @@ public class CounterIntelligenceController { ciWork.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); return ciService.saveCiWork(ciWork, deleteFileSeq); } + + @GetMapping("/ciaSaftyDemandList") + public ModelAndView ciaSaftyDemandList(@AuthenticationPrincipal UserInfo loginUser, CounterIntelligenceActivity cia){ + ModelAndView mav = new ModelAndView("counterIntelligence/ciaSaftyDemandList"); + + cia.setQueryInfo(); + mav.addObject("sdiList", ciService.selectCiaSaftyDemandList(cia)); + cia.setContentCnt(ciService.selectCiaSaftyDemandListCnt(cia)); + cia.setPaginationInfo(); + mav.addObject("searchParams", cia); + return mav; + } + + @GetMapping("/ciaSaftyDemandEditModal") + public ModelAndView ciaSaftyDemandEditModal(@AuthenticationPrincipal UserInfo loginUser, CounterIntelligenceActivity cia){ + ModelAndView mav = new ModelAndView("counterIntelligence/ciaSaftyDemandEditModal"); + if(cia.getCiKey() != null) { + cia = ciService.selectSaftyDemandInfo(cia); + } + + + + mav.addObject("cia", cia); + return mav; + } + + @PostMapping("/saveCiActivity") + public Integer saveCiActivity(CounterIntelligenceActivity cia,@AuthenticationPrincipal UserInfo loginUser, + MultipartHttpServletRequest request, + @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ + cia.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + if(cia.getCiKey()==null){ + cia.setWrtOrgan(loginUser.getOgCd()); + cia.setWrtPart(loginUser.getOfcCd()); + cia.setWrtUserSeq(loginUser.getUserSeq()); + cia.setWrtUserGrd(loginUser.getTitleCd()); + cia.setWrtUserNm(loginUser.getUserNm()); + cia.setWrtDt(LocalDateTime.now()); + } + Integer ciKey = ciService.saveCiActivity(cia, deleteFileSeq); + ciService.saveSaftyDemand(cia); + return ciKey; + } } diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/mapper/CounterIntelligenceMapper.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/mapper/CounterIntelligenceMapper.java index 062983a5..9802efa9 100644 --- a/src/main/java/com/dbnt/faisp/main/counterIntelligence/mapper/CounterIntelligenceMapper.java +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/mapper/CounterIntelligenceMapper.java @@ -1,5 +1,6 @@ package com.dbnt.faisp.main.counterIntelligence.mapper; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceActivity; import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceWork; import com.dbnt.faisp.main.faRpt.model.FaRptBoard; import org.apache.ibatis.annotations.Mapper; @@ -15,4 +16,8 @@ public interface CounterIntelligenceMapper { Integer selectCounterIntelligenceWorkCnt(CounterIntelligenceWork ciWork); String selectHashTags(Integer ciwKey); + + List selectCiaSaftyDemandList(CounterIntelligenceActivity cia); + + Integer selectCiaSaftyDemandListCnt(CounterIntelligenceActivity cia); } diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CiaFile.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CiaFile.java new file mode 100644 index 00000000..77ae32d0 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CiaFile.java @@ -0,0 +1,46 @@ +package com.dbnt.faisp.main.counterIntelligence.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 = "cia_file") +@IdClass(CiaFile.CiaFileId.class) +public class CiaFile extends FileInfo { + @Id + @Column(name = "ci_key") + private Integer ciKey; + @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 CiaFileId implements Serializable { + private Integer ciKey; + private Integer fileSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CounterIntelligenceActivity.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CounterIntelligenceActivity.java new file mode 100644 index 00000000..9aa0334e --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/CounterIntelligenceActivity.java @@ -0,0 +1,59 @@ +package com.dbnt.faisp.main.counterIntelligence.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 = "counter_intelligence_activity") +public class CounterIntelligenceActivity extends BaseModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ci_key") + private Integer ciKey; + @Column(name = "ci_type") + private String ciType; + @Column(name = "content_status") + private String contentStatus; + @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 localInfo; + @Transient + private String outlookProblem; + @Transient + private Integer fileCnt; + @Transient + private SaftyDemandInfo saftyDemandInfo; + @Transient + private List fileList; + @Transient + private List multipartFileList; +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/SaftyDemandInfo.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/SaftyDemandInfo.java new file mode 100644 index 00000000..323e4846 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/model/SaftyDemandInfo.java @@ -0,0 +1,33 @@ +package com.dbnt.faisp.main.counterIntelligence.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 = "safty_demand_info") +public class SaftyDemandInfo extends BaseModel { + @Id + @Column(name = "ci_key") + private Integer ciKey; + @Column(name = "local_info") + private String localInfo; + @Column(name = "outlook_problem") + private String outlookProblem; + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CiaFileRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CiaFileRepository.java new file mode 100644 index 00000000..22518984 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CiaFileRepository.java @@ -0,0 +1,20 @@ +package com.dbnt.faisp.main.counterIntelligence.repository; + +import com.dbnt.faisp.main.counterIntelligence.model.CiaFile; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceWork; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface CiaFileRepository extends JpaRepository { + + List findByCiKey(Integer ciKey); + + Optional findTopByCiKeyOrderByFileSeqDesc(Integer ciKey); + + + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CounterIntelligenceActivityRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CounterIntelligenceActivityRepository.java new file mode 100644 index 00000000..da0596f2 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/CounterIntelligenceActivityRepository.java @@ -0,0 +1,9 @@ +package com.dbnt.faisp.main.counterIntelligence.repository; + +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceActivity; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface CounterIntelligenceActivityRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/SaftyDemandInfoRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/SaftyDemandInfoRepository.java new file mode 100644 index 00000000..5fa383a5 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/repository/SaftyDemandInfoRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.main.counterIntelligence.repository; + +import com.dbnt.faisp.main.counterIntelligence.model.SaftyDemandInfo; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface SaftyDemandInfoRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/service/CounterIntelligenceService.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/service/CounterIntelligenceService.java index 53350b52..eac8e539 100644 --- a/src/main/java/com/dbnt/faisp/main/counterIntelligence/service/CounterIntelligenceService.java +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/service/CounterIntelligenceService.java @@ -3,12 +3,18 @@ package com.dbnt.faisp.main.counterIntelligence.service; import com.dbnt.faisp.config.BaseService; import com.dbnt.faisp.config.FileInfo; import com.dbnt.faisp.main.counterIntelligence.mapper.CounterIntelligenceMapper; +import com.dbnt.faisp.main.counterIntelligence.model.CiaFile; import com.dbnt.faisp.main.counterIntelligence.model.CiwFile; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceActivity; import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceWork; import com.dbnt.faisp.main.counterIntelligence.model.HashTagLinkCiw; +import com.dbnt.faisp.main.counterIntelligence.model.SaftyDemandInfo; +import com.dbnt.faisp.main.counterIntelligence.repository.CiaFileRepository; import com.dbnt.faisp.main.counterIntelligence.repository.CiwFileRepository; +import com.dbnt.faisp.main.counterIntelligence.repository.CounterIntelligenceActivityRepository; import com.dbnt.faisp.main.counterIntelligence.repository.CounterIntelligenceWorkRepository; import com.dbnt.faisp.main.counterIntelligence.repository.HashTagLinkCiwRepository; +import com.dbnt.faisp.main.counterIntelligence.repository.SaftyDemandInfoRepository; import com.dbnt.faisp.main.hashTag.service.HashTagService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -26,6 +32,9 @@ public class CounterIntelligenceService extends BaseService { private final CounterIntelligenceWorkRepository ciwRepository; private final CiwFileRepository ciwFileRepository; private final HashTagLinkCiwRepository hashTagLinkCiwRepository; + private final CounterIntelligenceActivityRepository counterIntelligenceActivityRepository; + private final CiaFileRepository ciaFileRepository; + private final SaftyDemandInfoRepository saftyDemandInfoRepository; private final CounterIntelligenceMapper ciMapper; public List selectCounterIntelligenceWorkList(CounterIntelligenceWork ciWork){ @@ -104,4 +113,72 @@ public class CounterIntelligenceService extends BaseService { public FileInfo selectCiWorkFile(Integer ciwKey, Integer fileSeq) { return ciwFileRepository.findById(new CiwFile.CiwFileId(ciwKey, fileSeq)).orElse(null); } -} + + @Transactional + public Integer saveCiActivity(CounterIntelligenceActivity cia, List deleteFileSeq) { + Integer ciKey = counterIntelligenceActivityRepository.save(cia).getCiKey(); + if(deleteFileSeq != null && deleteFileSeq.size()>0){ + deleteCiaFile(ciKey, deleteFileSeq); + } + if(cia.getMultipartFileList()!=null){ + saveCiaUploadFiles(ciKey, cia.getMultipartFileList()); + } + return ciKey; + } + + private void deleteCiaFile(Integer ciKey, List deleteFileSeq) { + List ciaFileList = ciaFileRepository.findByCiKey(ciKey); + for(CiaFile file: ciaFileList){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); + ciaFileRepository.delete(file); + } + } + } + + private void saveCiaUploadFiles(Integer ciKey, List multipartFileList){ + CiaFile lastFileInfo = ciaFileRepository.findTopByCiKeyOrderByFileSeqDesc(ciKey).orElse(null); + int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); + for(MultipartFile file : multipartFileList){ + String saveName = UUID.randomUUID().toString(); + String path = locationPath+ciwPath; + saveFile(file, new File(path+File.separator+saveName)); + + String originalFilename = file.getOriginalFilename(); + int extnIdx = originalFilename.lastIndexOf("."); + CiaFile fileInfo = new CiaFile(); + fileInfo.setCiKey(ciKey); + 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); + ciaFileRepository.save(fileInfo); + } + } + + @Transactional + public void saveSaftyDemand(CounterIntelligenceActivity cia) { + SaftyDemandInfo sdi = new SaftyDemandInfo(); + sdi.setCiKey(cia.getCiKey()); + sdi.setLocalInfo(cia.getLocalInfo()); + sdi.setOutlookProblem(cia.getOutlookProblem()); + saftyDemandInfoRepository.save(sdi); + } + public List selectCiaSaftyDemandList(CounterIntelligenceActivity cia) { + return ciMapper.selectCiaSaftyDemandList(cia); + } + public Integer selectCiaSaftyDemandListCnt(CounterIntelligenceActivity cia) { + return ciMapper.selectCiaSaftyDemandListCnt(cia); + } + public CounterIntelligenceActivity selectSaftyDemandInfo(CounterIntelligenceActivity cia) { + CounterIntelligenceActivity dbCia = counterIntelligenceActivityRepository.findById(cia.getCiKey()).orElse(null); + if(dbCia!=null){ + dbCia.setFileList(ciaFileRepository.findByCiKey(cia.getCiKey())); + dbCia.setSaftyDemandInfo(saftyDemandInfoRepository.findById(cia.getCiKey()).orElse(null)); + } + return dbCia; + } + +} diff --git a/src/main/resources/mybatisMapper/CounterIntelligenceMapper.xml b/src/main/resources/mybatisMapper/CounterIntelligenceMapper.xml index 51f995b8..adfe0547 100644 --- a/src/main/resources/mybatisMapper/CounterIntelligenceMapper.xml +++ b/src/main/resources/mybatisMapper/CounterIntelligenceMapper.xml @@ -115,4 +115,39 @@ inner join hash_tag b on a.tag_key = b.tag_key where a.ciw_key = #{ciwKey} + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/counterIntelligence/ciaSaftyDemand.js b/src/main/resources/static/js/counterIntelligence/ciaSaftyDemand.js new file mode 100644 index 00000000..d3f5cfcf --- /dev/null +++ b/src/main/resources/static/js/counterIntelligence/ciaSaftyDemand.js @@ -0,0 +1,54 @@ +$(document).on('click', '#addBtn', function (){ + getCiaSaftyDemandEditModal(null); +}) + +function getCiaSaftyDemandEditModal(ciKey){ + $.ajax({ + url: '/counterIntelligence/ciaSaftyDemandEditModal', + data: {ciKey: ciKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#ciaSaftyDemandEditModalContent").empty().append(html) + setUploadDiv(); + $("#ciaSaftyDemandEditModal").modal('show'); + }, + error:function(){ + + } + }); +} + +$(document).on('click', '#saveBtn', function (){ + if(confirm("저장하시겠습니까?")){ + const formData = new FormData($("#ciaSaftyDemandEditForm")[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 : "/counterIntelligence/saveCiActivity", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + location.reload(); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + + } +}) + +$(document).on('click', '.sdiTr', function (){ + getCiaSaftyDemandEditModal($(this).find(".ciKey").val()); +}) diff --git a/src/main/resources/templates/counterIntelligence/ciaSaftyDemandEditModal.html b/src/main/resources/templates/counterIntelligence/ciaSaftyDemandEditModal.html new file mode 100644 index 00000000..0e513d42 --- /dev/null +++ b/src/main/resources/templates/counterIntelligence/ciaSaftyDemandEditModal.html @@ -0,0 +1,62 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/counterIntelligence/ciaSaftyDemandList.html b/src/main/resources/templates/counterIntelligence/ciaSaftyDemandList.html new file mode 100644 index 00000000..09ae839e --- /dev/null +++ b/src/main/resources/templates/counterIntelligence/ciaSaftyDemandList.html @@ -0,0 +1,192 @@ + + + + + +
+
+
+
+

방첩공작

+
+
+

외사방첩관리 > 방첩공작

+
+
+ + +
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
문서번호관서지역특성예상문제점작성자작성일
+ + + + + +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/counterIntelligence/ciaSaftyDemandviewModal.html b/src/main/resources/templates/counterIntelligence/ciaSaftyDemandviewModal.html new file mode 100644 index 00000000..0e513d42 --- /dev/null +++ b/src/main/resources/templates/counterIntelligence/ciaSaftyDemandviewModal.html @@ -0,0 +1,62 @@ + + + + + + \ No newline at end of file