diff --git a/src/main/java/com/dbnt/faisp/config/BaseService.java b/src/main/java/com/dbnt/faisp/config/BaseService.java index 81f5a068..9648951d 100644 --- a/src/main/java/com/dbnt/faisp/config/BaseService.java +++ b/src/main/java/com/dbnt/faisp/config/BaseService.java @@ -46,6 +46,8 @@ public class BaseService { protected String ciaForeignerPath; @Value("${file.dir.cia.edu}") protected String ciaEduPath; + @Value("${file.dir.activityCase}") + protected String activityCasePath; protected String calculationSize(double fileSize){ String[] units = {"bytes", "KB", "MB", "GB", "TB", "PB"}; 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 344b1420..2f0605ae 100644 --- a/src/main/java/com/dbnt/faisp/main/counterIntelligence/CounterIntelligenceController.java +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/CounterIntelligenceController.java @@ -26,7 +26,7 @@ public class CounterIntelligenceController { @GetMapping("/ciWorkList") public ModelAndView ciWorkListPage(@AuthenticationPrincipal UserInfo loginUser, CounterIntelligenceWork ciWork){ - ModelAndView mav = new ModelAndView("counterIntelligence/ciWorkBoard"); + ModelAndView mav = new ModelAndView("counterIntelligence/ciWork/ciWorkBoard"); mav.addObject("searchUrl", "/counterIntelligence/ciWorkList"); String accessAuth = authMgtService.selectAccessConfigList (loginUser.getUserSeq(), "/counterIntelligence/ciWorkList").get(0).getAccessAuth(); @@ -47,7 +47,7 @@ public class CounterIntelligenceController { @GetMapping("/ciWorkEditModal") public ModelAndView ciWorkEditModal(@AuthenticationPrincipal UserInfo loginUser, CounterIntelligenceWork ciWork){ - ModelAndView mav = new ModelAndView("counterIntelligence/ciWorkEditModal"); + ModelAndView mav = new ModelAndView("counterIntelligence/ciWork/ciWorkEditModal"); mav.addObject("ciwrCodeList", codeMgtService.selectCodeMgtList("CIWR")); if(ciWork.getCiwKey()==null){ @@ -71,7 +71,7 @@ public class CounterIntelligenceController { @GetMapping("/ciWorkViewModal") public ModelAndView ciWorkViewModal(@AuthenticationPrincipal UserInfo loginUser, CounterIntelligenceWork ciWork){ - ModelAndView mav = new ModelAndView("counterIntelligence/ciWorkViewModal"); + ModelAndView mav = new ModelAndView("counterIntelligence/ciWork/ciWorkViewModal"); mav.addObject("lineSeparator", '\n'); mav.addObject("viewUserSeq", loginUser.getUserSeq()); String accessAuth = authMgtService.selectAccessConfigList @@ -103,7 +103,7 @@ public class CounterIntelligenceController { if(ciWorkStatistics.getYear()==null){ ciWorkStatistics.setYear(LocalDateTime.now().getYear()); } - ModelAndView mav = new ModelAndView("/counterIntelligence/ciWorkStatistics"); + ModelAndView mav = new ModelAndView("/counterIntelligence/ciWork/ciWorkStatistics"); mav.addObject("yearList", ciService.selectCiWorkYearList()); mav.addObject("ciWorkStatisticsList", ciService.selectCiWorkStatisticsList(ciWorkStatistics)); mav.addObject("searchParams", ciWorkStatistics); diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/ActivityCaseController.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/ActivityCaseController.java new file mode 100644 index 00000000..a84c8e5d --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/ActivityCaseController.java @@ -0,0 +1,99 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase; + +import com.dbnt.faisp.main.authMgt.service.AuthMgtService; +import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCase; +import com.dbnt.faisp.main.counterIntelligence.activityCase.service.ActivityCaseService; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceWork; +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("/counterIntelligence") +public class ActivityCaseController { + + private final ActivityCaseService activityCaseService; + private final AuthMgtService authMgtService; + private final CodeMgtService codeMgtService; + + @GetMapping("/activityCaseList") + public ModelAndView activityCaseListPage(@AuthenticationPrincipal UserInfo loginUser, ActivityCase activityCase){ + ModelAndView mav = new ModelAndView("counterIntelligence/activityCase/activityCaseBoard"); + mav.addObject("searchUrl", "/counterIntelligence/activityCaseList"); + String accessAuth = authMgtService.selectAccessConfigList + (loginUser.getUserSeq(), "/counterIntelligence/activityCaseList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + if(accessAuth.equals("ACC003")){ + mav.addObject("downOrganCdList", loginUser.getDownOrganCdList()); + }else{ + activityCase.setWrtUserSeq(loginUser.getUserSeq()); + } + + activityCase.setQueryInfo(); + mav.addObject("activityCaseList", activityCaseService.selectActivityCaseList(activityCase)); + activityCase.setContentCnt(activityCaseService.selectActivityCaseCnt(activityCase)); + activityCase.setPaginationInfo(); + mav.addObject("searchParams", activityCase); + return mav; + } + + @GetMapping("/activityCaseEditModal") + public ModelAndView activityCaseEditModal(@AuthenticationPrincipal UserInfo loginUser, ActivityCase activityCase){ + ModelAndView mav = new ModelAndView("counterIntelligence/activityCase/activityCaseEditModal"); + + mav.addObject("ciwrCodeList", codeMgtService.selectCodeMgtList("CIWR")); + if(activityCase.getCaseKey()==null){ + activityCase.setWrtOrgan(loginUser.getOgCd()); + activityCase.setWrtPart(loginUser.getOfcCd()); + activityCase.setWrtUserSeq(loginUser.getUserSeq()); + activityCase.setWrtUserGrd(loginUser.getTitleCd()); + activityCase.setWrtUserNm(loginUser.getUserNm()); + activityCase.setWrtDt(LocalDateTime.now()); + }else{ + activityCase = activityCaseService.selectActivityCase(activityCase.getCaseKey()); + } + String accessAuth = authMgtService.selectAccessConfigList + (loginUser.getUserSeq(), "/counterIntelligence/activityCaseList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + mav.addObject("activityCase", activityCase); + return mav; + } + + @GetMapping("/activityCaseViewModal") + public ModelAndView activityCaseViewModal(@AuthenticationPrincipal UserInfo loginUser, ActivityCase activityCase){ + ModelAndView mav = new ModelAndView("counterIntelligence/activityCase/activityCaseViewModal"); + mav.addObject("lineSeparator", '\n'); + mav.addObject("viewUserSeq", loginUser.getUserSeq()); + String accessAuth = authMgtService.selectAccessConfigList + (loginUser.getUserSeq(), "/counterIntelligence/activityCaseList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + mav.addObject("activityCase", activityCaseService.selectActivityCase(activityCase.getCaseKey())); + return mav; + } + @PostMapping("/saveActivityCase") + public Integer saveActivityCase(ActivityCase activityCase, + MultipartHttpServletRequest request, + @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ + activityCase.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + return activityCaseService.saveActivityCase(activityCase, deleteFileSeq); + } + + @PostMapping("/deleteActivityCase") + public Integer deleteActivityCase(@AuthenticationPrincipal UserInfo loginUser, ActivityCase activityCase){ + String accessAuth = authMgtService.selectAccessConfigList + (loginUser.getUserSeq(), "/counterIntelligence/activityCaseList").get(0).getAccessAuth(); + if(accessAuth.equals("ACC003")){ + return activityCaseService.deleteActivityCase(activityCase.getCaseKey()); + }else{ + return 0; + } + } +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/mapper/ActivityCaseMapper.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/mapper/ActivityCaseMapper.java new file mode 100644 index 00000000..6c8fb041 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/mapper/ActivityCaseMapper.java @@ -0,0 +1,19 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.mapper; + +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCase; +import com.dbnt.faisp.main.counterIntelligence.model.CiWorkStatistics; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceActivity; +import com.dbnt.faisp.main.counterIntelligence.model.CounterIntelligenceWork; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + + +@Mapper +public interface ActivityCaseMapper { + + List selectActivityCaseList(ActivityCase activityCase); + + Integer selectActivityCaseCnt(ActivityCase activityCase); + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCase.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCase.java new file mode 100644 index 00000000..7001579f --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCase.java @@ -0,0 +1,83 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.model; + +import com.dbnt.faisp.config.BaseModel; +import com.dbnt.faisp.main.counterIntelligence.model.CiwFile; +import com.dbnt.faisp.main.counterIntelligence.model.HashTagLinkCiw; +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 = "activity_case") +public class ActivityCase extends BaseModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "case_key") + private Integer caseKey; + @Column(name = "status") + private String status; + @Column(name = "division") + private String division; + @Column(name = "merging") + private String merging; + @Column(name = "receipt_num") + private String receiptNum; + @Column(name = "receipt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime receiptDt; + @Column(name = "case_num") + private String caseNum; + @Column(name = "result_num") + private String resultNum; + @Column(name = "result_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime resultDt; + @Column(name = "receipt_clue") + private String receiptClue; + @Column(name = "crime") + private String crime; + @Column(name = "court") + private String court; + @Column(name = "memo") + private String memo; + @Column(name = "etc") + private String etc; + @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:ss") + private LocalDateTime wrtDt; + + @Transient + private Integer fileCnt; + @Transient + private List fileList; + @Transient + private List officerList; + @Transient + private List peopleList; + @Transient + private List multipartFileList; +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCaseFile.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCaseFile.java new file mode 100644 index 00000000..407b987f --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCaseFile.java @@ -0,0 +1,46 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.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 = "activity_case_file") +@IdClass(ActivityCaseFile.ActivityCaseFileId.class) +public class ActivityCaseFile extends FileInfo { + @Id + @Column(name = "case_key") + private Integer caseKey; + @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 ActivityCaseFileId implements Serializable { + private Integer caseKey; + private Integer fileSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCaseOfficer.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCaseOfficer.java new file mode 100644 index 00000000..8cb12123 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCaseOfficer.java @@ -0,0 +1,46 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.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 = "activity_case_file") +@IdClass(ActivityCaseOfficer.ActivityCaseOfficerId.class) +public class ActivityCaseOfficer { + @Id + @Column(name = "case_key") + private Integer caseKey; + @Id + @Column(name = "officer_seq") + private Integer officerSeq; + @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 ActivityCaseOfficerId implements Serializable { + private Integer caseKey; + private Integer officerSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCasePeople.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCasePeople.java new file mode 100644 index 00000000..05b5cb37 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/model/ActivityCasePeople.java @@ -0,0 +1,45 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.model; + +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 = "activity_case_file") +@IdClass(ActivityCasePeople.ActivityCasePeopleId.class) +public class ActivityCasePeople { + @Id + @Column(name = "case_key") + private Integer caseKey; + @Id + @Column(name = "people_seq") + private Integer peopleSeq; + @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 ActivityCasePeopleId implements Serializable { + private Integer caseKey; + private Integer peopleSeq; + } +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseFileRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseFileRepository.java new file mode 100644 index 00000000..50be12af --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseFileRepository.java @@ -0,0 +1,15 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.repository; + +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCaseFile; +import com.dbnt.faisp.main.counterIntelligence.model.CiwFile; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface ActivityCaseFileRepository extends JpaRepository { + List findByCaseKey(Integer caseKey); + Optional findTopByCaseKeyOrderByFileSeqDesc(Integer caseKey); + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseOfficerRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseOfficerRepository.java new file mode 100644 index 00000000..1dd8fee6 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseOfficerRepository.java @@ -0,0 +1,12 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.repository; + +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCaseOfficer; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface ActivityCaseOfficerRepository extends JpaRepository { + void deleteByCaseKey(Integer caseKey); +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCasePeopleRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCasePeopleRepository.java new file mode 100644 index 00000000..314d6954 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCasePeopleRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.repository; + +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCasePeople; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + + +public interface ActivityCasePeopleRepository extends JpaRepository { + + void deleteByCaseKey(Integer caseKey); +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseRepository.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseRepository.java new file mode 100644 index 00000000..f6c4b579 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/repository/ActivityCaseRepository.java @@ -0,0 +1,9 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.repository; + +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCase; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ActivityCaseRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/service/ActivityCaseService.java b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/service/ActivityCaseService.java new file mode 100644 index 00000000..3f86dd68 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/counterIntelligence/activityCase/service/ActivityCaseService.java @@ -0,0 +1,124 @@ +package com.dbnt.faisp.main.counterIntelligence.activityCase.service; + +import com.dbnt.faisp.config.BaseService; +import com.dbnt.faisp.config.FileInfo; +import com.dbnt.faisp.main.counterIntelligence.activityCase.mapper.ActivityCaseMapper; +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCase; +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCaseFile; +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCaseOfficer; +import com.dbnt.faisp.main.counterIntelligence.activityCase.model.ActivityCasePeople; +import com.dbnt.faisp.main.counterIntelligence.activityCase.repository.ActivityCaseFileRepository; +import com.dbnt.faisp.main.counterIntelligence.activityCase.repository.ActivityCaseOfficerRepository; +import com.dbnt.faisp.main.counterIntelligence.activityCase.repository.ActivityCasePeopleRepository; +import com.dbnt.faisp.main.counterIntelligence.activityCase.repository.ActivityCaseRepository; +import com.dbnt.faisp.main.counterIntelligence.mapper.CounterIntelligenceMapper; +import com.dbnt.faisp.main.counterIntelligence.model.*; +import com.dbnt.faisp.main.counterIntelligence.repository.*; +import com.dbnt.faisp.main.hashTag.service.HashTagService; +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 ActivityCaseService extends BaseService { + private final ActivityCaseRepository activityCaseRepository; + private final ActivityCaseFileRepository acfRepository; + private final ActivityCasePeopleRepository acpRepository; + private final ActivityCaseOfficerRepository acoRepository; + private final ActivityCaseMapper activityCaseMapper; + + public List selectActivityCaseList(ActivityCase activityCase){ + return activityCaseMapper.selectActivityCaseList(activityCase); + } + public Integer selectActivityCaseCnt(ActivityCase activityCase){ + return activityCaseMapper.selectActivityCaseCnt(activityCase); + } + public ActivityCase selectActivityCase(Integer caseKey) { + ActivityCase activityCase = activityCaseRepository.findById(caseKey).orElse(null); + if(activityCase!=null){ + activityCase.setFileList(acfRepository.findByCaseKey(caseKey)); + } + return activityCase; + } + + @Transactional + public Integer saveActivityCase(ActivityCase activityCase, List deleteFileSeq) { + Integer caseKey = activityCaseRepository.save(activityCase).getCaseKey(); + saveActivityCasePeople(caseKey, activityCase.getPeopleList()); + saveActivityCaseOfficer(caseKey, activityCase.getOfficerList()); + if(deleteFileSeq != null && deleteFileSeq.size()>0){ + deleteActivityCaseFile(caseKey, deleteFileSeq); + } + if(activityCase.getMultipartFileList()!=null){ + saveUploadFiles(caseKey, activityCase.getMultipartFileList()); + } + + return caseKey; + } + + private void saveActivityCasePeople(Integer caseKey, List peopleList) { + if(peopleList==null){ + acpRepository.deleteByCaseKey(caseKey); + }else{ + + } + } + + private void saveActivityCaseOfficer(Integer caseKey, List officerList) { + if(officerList==null){ + acoRepository.deleteByCaseKey(caseKey); + }else{ + + } + } + + private void deleteActivityCaseFile(Integer caseKey, List deleteFileSeq) { + List activityCaseFileList = acfRepository.findByCaseKey(caseKey); + for(ActivityCaseFile file: activityCaseFileList){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); + acfRepository.delete(file); + } + } + } + + private void saveUploadFiles(Integer caseKey, List multipartFileList){ + ActivityCaseFile lastFileInfo = acfRepository.findTopByCaseKeyOrderByFileSeqDesc(caseKey).orElse(null); + int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); + for(MultipartFile file : multipartFileList){ + String saveName = UUID.randomUUID().toString(); + String path = locationPath+activityCasePath; + saveFile(file, new File(path+File.separator+saveName)); + + String originalFilename = file.getOriginalFilename(); + int extnIdx = originalFilename.lastIndexOf("."); + ActivityCaseFile fileInfo = new ActivityCaseFile(); + fileInfo.setCaseKey(caseKey); + 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); + acfRepository.save(fileInfo); + } + } + + public FileInfo selectActivityCaseFile(Integer caseKey, Integer fileSeq) { + return acfRepository.findById(new ActivityCaseFile.ActivityCaseFileId(caseKey, fileSeq)).orElse(null); + } + + @Transactional + public Integer deleteActivityCase(Integer caseKey) { + ActivityCase activityCase = activityCaseRepository.findById(caseKey).orElse(null); + activityCase.setStatus("DST008"); + return caseKey; + } + +} diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 78cf95c0..2b0939a4 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -25,6 +25,7 @@ file.dir.cia.safty=/cia/safty file.dir.cia.company=/cia/company file.dir.cia.foreigner=/cia/foreigner file.dir.cia.edu=/cia/edu +file.dir.activityCase=/activityCase editor.img.view=/file/editorFileDisplay?fileNm= diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index a374b82e..31674498 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -25,6 +25,7 @@ file.dir.cia.safty=/cia/safty file.dir.cia.company=/cia/company file.dir.cia.foreigner=/cia/foreigner file.dir.cia.edu=/cia/edu +file.dir.activityCase=/activityCase editor.img.view=/file/editorFileDisplay?fileNm= diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 83c77db7..7c4d6545 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -24,6 +24,7 @@ file.dir.cia.safty=/cia/safty file.dir.cia.company=/cia/company file.dir.cia.foreigner=/cia/foreigner file.dir.cia.edu=/cia/edu +file.dir.activityCase=/activityCase editor.img.view=/file/editorFileDisplay?fileNm= diff --git a/src/main/resources/mybatisMapper/ActivityCaseMapper.xml b/src/main/resources/mybatisMapper/ActivityCaseMapper.xml new file mode 100644 index 00000000..83491d02 --- /dev/null +++ b/src/main/resources/mybatisMapper/ActivityCaseMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + and a.wrt_user_nm like '%'||#{wrtUserNm}||'%' + + + and a.wrt_organ = #{wrtOrgan} + + + + and a.receipt_dt >= #{startDate}::date + + + and a.receipt_dt <= #{endDate}::date+1 + + + + + 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 + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/counterIntelligence/activityCase.js b/src/main/resources/static/js/counterIntelligence/activityCase.js new file mode 100644 index 00000000..7e8e2a76 --- /dev/null +++ b/src/main/resources/static/js/counterIntelligence/activityCase.js @@ -0,0 +1,167 @@ + +$(document).on('click', '#addActivityCaseBtn', function (){ + getActivityCaseEditModal(null); +}) + +$(document).on('click', '#saveTempBtn,#saveActivityCaseBtn', function(){ + saveActivityCase($(this).attr("data-status")); +}) + +$(document).on('click', '.activityCaseTr', function (){ + getActivityCaseViewModal($(this).find(".ciwKey").val()); +}) + +$(document).on('click', '#editActivityCaseBtn', function (){ + $("#activityCaseViewModal").modal('hide'); + getActivityCaseEditModal($(this).attr("data-casekey")); +}) + +$(document).on('click', '#deleteActivityCaseBtn', function (){ + deleteActivityCase($(this).attr("data-casekey")); +}) + +function getActivityCaseEditModal(caseKey){ + $.ajax({ + url: '/counterIntelligence/activityCaseEditModal', + data: {caseKey: caseKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#activityCaseEditModalContent").empty().append(html) + $(".dateSelector").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); + setUploadDiv(); + setEditor('editor', '400'); + $("#activityCaseEditModal").modal('show'); + }, + error:function(){ + + } + }); +} + +function getActivityCaseViewModal(caseKey){ + $.ajax({ + url: '/counterIntelligence/activityCaseViewModal', + data: {caseKey: caseKey}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#activityCaseViewModalBody").empty().append(html) + $("#activityCaseViewModal").modal('show'); + }, + error:function(){ + + } + }); +} + +function saveActivityCase(status){ + if(confirm("저장하시겠습니까?")){ + let flag = true; + if(status === "DST007"){ + flag = contentCheck(); + } + if(flag){ + contentFade("in"); + const activityCaseEditForm = $("#activityCaseEditForm"); + activityCaseEditForm.find("#status").val(status); + const formData = new FormData(activityCaseEditForm[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('content', CrossEditor.GetBodyValue()); + $.ajax({ + type : 'POST', + data : formData, + url : "/counterIntelligence/saveActivityCase", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + $("#activityCaseEditModal").modal('hide'); + getActivityCaseViewModal(result); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + } + } +} + +function deleteActivityCase(caseKey){ + if(confirm("삭제하시겠습니까?")){ + contentFade("in"); + const formData = new FormData(); + formData.append('caseKey', caseKey); + $.ajax({ + type : 'POST', + data : formData, + url : "/counterIntelligence/deleteActivityCase", + processData: false, + contentType: false, + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(result) { + alert("삭제되었습니다."); + contentFade("out"); + location.reload(); + }, + error : function(xhr, status) { + alert("삭제를 실패하였습니다.") + contentFade("out"); + } + }) + } +} + +function contentCheck(){ + if(!$("#workStartDate").val()){ + alert("착수일을 입력해주세요.") + return false; + } + if(!$("#workEndDate").val()){ + alert("종결일을 입력해주세요.") + return false; + } + if(!$("#reRatingDate1").val()){ + alert("1차재평가를 입력해주세요.") + return false; + } + if(!$("#reRatingDate2").val()){ + alert("2차재평가를 입력해주세요.") + return false; + } + if(!$("#workRating").val()){ + alert("등급을 선택해주세요.") + return false; + } + if(!$("#arrestType1").val()){ + alert("검거유형1을 선택해주세요.") + return false; + } + if(!$("#arrestType2").val()){ + alert("검거유형2를 선택해주세요.") + return false; + } + if(!$("#title").val()){ + alert("공작명을 입력해주세요.") + return false; + } + if(!$("#summaryInfo").val()){ + alert("사건개요를 입력해주세요.") + return false; + } + return true; +} diff --git a/src/main/resources/templates/counterIntelligence/activityCase/activityCaseBoard.html b/src/main/resources/templates/counterIntelligence/activityCase/activityCaseBoard.html new file mode 100644 index 00000000..4364ab16 --- /dev/null +++ b/src/main/resources/templates/counterIntelligence/activityCase/activityCaseBoard.html @@ -0,0 +1,232 @@ + + + + + +
+
+
+
+

담당 사건 목록

+
+
+

외사방첩관리 > 외사활동 > 담당 사건 목록

+
+
+ + +
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
순번첨부파일경과구분병합접수번호사건번호접수단서피(혐)의자죄명피해자진행상태지휘서/메모종결번호결정요구/요청이의자체재개메모정수사관부수사관주책임관비고
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/counterIntelligence/activityCase/activityCaseEditModal.html b/src/main/resources/templates/counterIntelligence/activityCase/activityCaseEditModal.html new file mode 100644 index 00000000..efeb8e67 --- /dev/null +++ b/src/main/resources/templates/counterIntelligence/activityCase/activityCaseEditModal.html @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/counterIntelligence/ciWorkViewModal.html b/src/main/resources/templates/counterIntelligence/activityCase/activityCaseViewModal.html similarity index 100% rename from src/main/resources/templates/counterIntelligence/ciWorkViewModal.html rename to src/main/resources/templates/counterIntelligence/activityCase/activityCaseViewModal.html diff --git a/src/main/resources/templates/counterIntelligence/ciWorkBoard.html b/src/main/resources/templates/counterIntelligence/ciWork/ciWorkBoard.html similarity index 100% rename from src/main/resources/templates/counterIntelligence/ciWorkBoard.html rename to src/main/resources/templates/counterIntelligence/ciWork/ciWorkBoard.html diff --git a/src/main/resources/templates/counterIntelligence/ciWorkEditModal.html b/src/main/resources/templates/counterIntelligence/ciWork/ciWorkEditModal.html similarity index 100% rename from src/main/resources/templates/counterIntelligence/ciWorkEditModal.html rename to src/main/resources/templates/counterIntelligence/ciWork/ciWorkEditModal.html diff --git a/src/main/resources/templates/counterIntelligence/ciWorkStatistics.html b/src/main/resources/templates/counterIntelligence/ciWork/ciWorkStatistics.html similarity index 100% rename from src/main/resources/templates/counterIntelligence/ciWorkStatistics.html rename to src/main/resources/templates/counterIntelligence/ciWork/ciWorkStatistics.html diff --git a/src/main/resources/templates/counterIntelligence/ciWork/ciWorkViewModal.html b/src/main/resources/templates/counterIntelligence/ciWork/ciWorkViewModal.html new file mode 100644 index 00000000..a362238c --- /dev/null +++ b/src/main/resources/templates/counterIntelligence/ciWork/ciWorkViewModal.html @@ -0,0 +1,118 @@ + + + + + \ No newline at end of file