From 455410eb651158a7099c9a5b6aa13c6a6c72ecff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Tue, 11 Oct 2022 18:17:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B2=AD=EC=82=B0=EB=B3=B4=EA=B3=A0=EC=84=9C?= =?UTF-8?q?=20=EB=93=B1=EB=A1=9D=20=EC=9E=91=EC=97=85=EC=A4=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../affairPlan/service/PlanService.java | 1 + .../fpiMgt/affairResult/ResultController.java | 21 +++- .../affairResult/model/ResultBoard.java | 2 + .../repository/ClearInfoRepository.java | 9 ++ .../repository/ResultInfoRepository.java | 10 ++ .../repository/ResultToAffairRepository.java | 10 ++ .../repository/ResultToPlanRepository.java | 9 ++ .../affairResult/service/ResultService.java | 68 ++++++++--- src/main/resources/static/js/common.js | 23 ++-- .../igActivities/fpiMgt/result/resultMgt.js | 109 ++++++++++++++++-- .../templates/fragments/leftMenu.html | 7 +- .../igActivities/fpiMgt/affair/affairMgt.html | 2 +- .../fpiMgt/affairPlan/planMgt.html | 2 +- .../fpiMgt/affairResult/affairListModal.html | 62 ++++++++++ .../fpiMgt/affairResult/clearInfoRow.html | 8 +- .../fpiMgt/affairResult/resultEditModal.html | 19 +-- .../fpiMgt/affairResult/resultInfoRow.html | 10 +- .../fpiMgt/affairResult/resultMgt.html | 9 +- 18 files changed, 320 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ClearInfoRepository.java create mode 100644 src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultInfoRepository.java create mode 100644 src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToAffairRepository.java create mode 100644 src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToPlanRepository.java create mode 100644 src/main/resources/templates/igActivities/fpiMgt/affairResult/affairListModal.html diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairPlan/service/PlanService.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairPlan/service/PlanService.java index 2a07ccab..93853b0d 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affairPlan/service/PlanService.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairPlan/service/PlanService.java @@ -12,6 +12,7 @@ import com.dbnt.faisp.fpiMgt.affairPlan.repository.PlanApprvRepository; import com.dbnt.faisp.fpiMgt.affairPlan.repository.PlanBoardRepository; import com.dbnt.faisp.fpiMgt.affairPlan.repository.PlanFileRepository; import com.dbnt.faisp.fpiMgt.affairPlan.repository.PlanMainInfoRepository; +import com.dbnt.faisp.fpiMgt.affairResult.repository.ClearInfoRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java index 37fc1d3d..51740571 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/ResultController.java @@ -1,6 +1,9 @@ package com.dbnt.faisp.fpiMgt.affairResult; import com.dbnt.faisp.authMgt.service.AuthMgtService; +import com.dbnt.faisp.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.fpiMgt.affair.model.AffairBoard; +import com.dbnt.faisp.fpiMgt.affair.service.AffairService; import com.dbnt.faisp.fpiMgt.affairResult.model.ResultApprv; import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard; import com.dbnt.faisp.fpiMgt.affairResult.model.ClearInfo; @@ -21,7 +24,9 @@ import java.util.List; @RequestMapping("/affairResult") public class ResultController { // 첩보수집활동 > 외사경찰 견문관리 > 계획수립 private final ResultService resultService; + private final AffairService affairService; private final AuthMgtService authMgtService; + private final CodeMgtService codeMgtService; @GetMapping("/resultMgt") public ModelAndView resultMgtPage(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ @@ -166,6 +171,17 @@ public class ResultController { // 첩보수집활동 > 외사경찰 견문관 return mav; } + @GetMapping("/affairListModal") + public ModelAndView affairListModal(@AuthenticationPrincipal UserInfo loginUser, AffairBoard affair){ + ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/affairListModal"); + affair.setWrtUserSeq(loginUser.getUserSeq()); + affair.setRatingOrgan(loginUser.getOgCd()); + affair.setFirstIndex(0); + affair.setRowCnt(9999); + mav.addObject("affairList", affairService.selectAffairBoardList(affair)); + return mav; + } + @GetMapping("/resultViewModal") public ModelAndView resultViewModal(@AuthenticationPrincipal UserInfo loginUser, ResultBoard resultBoard){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultViewModal"); @@ -183,8 +199,7 @@ public class ResultController { // 첩보수집활동 > 외사경찰 견문관 MultipartHttpServletRequest request, @RequestParam(value = "fileSeq", required = false) List deleteFileSeq){ resultBoard.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); - return 0; - // return resultService.saveResultBoard(resultBoard, deleteFileSeq); + return resultService.saveResultBoard(resultBoard, deleteFileSeq); } @@ -200,6 +215,8 @@ public class ResultController { // 첩보수집활동 > 외사경찰 견문관 public ModelAndView getClearInfoRow(ClearInfo info){ ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/clearInfoRow"); mav.addObject("info", info); + mav.addObject("categoryList", codeMgtService.selectCodeMgtList("RIC")); + mav.addObject("codeList", codeMgtService.selectCodeMgtList("RID")); return mav; } @GetMapping("/getResultInfoRow") diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java index a97be41a..bc7ed174 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/model/ResultBoard.java @@ -81,4 +81,6 @@ public class ResultBoard extends BaseModel { private List clearInfoList; @Transient private List resultInfoList; + @Transient + private List affairList; } diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ClearInfoRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ClearInfoRepository.java new file mode 100644 index 00000000..642e93c1 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ClearInfoRepository.java @@ -0,0 +1,9 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ClearInfo; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ClearInfoRepository extends JpaRepository { + void deleteByResultKey(Integer resultKey); +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultInfoRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultInfoRepository.java new file mode 100644 index 00000000..0f2e3a82 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultInfoRepository.java @@ -0,0 +1,10 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultInfo; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ResultInfoRepository extends JpaRepository { + + void deleteByResultKey(Integer resultKey); +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToAffairRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToAffairRepository.java new file mode 100644 index 00000000..483faf1b --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToAffairRepository.java @@ -0,0 +1,10 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultToAffair; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ResultToAffairRepository extends JpaRepository { + + void deleteByResultKey(Integer resultKey); +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToPlanRepository.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToPlanRepository.java new file mode 100644 index 00000000..e35c5e17 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/repository/ResultToPlanRepository.java @@ -0,0 +1,9 @@ +package com.dbnt.faisp.fpiMgt.affairResult.repository; + +import com.dbnt.faisp.fpiMgt.affairResult.model.ResultToPlan; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ResultToPlanRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java index 6bb81562..5e3de96a 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affairResult/service/ResultService.java @@ -4,12 +4,8 @@ package com.dbnt.faisp.fpiMgt.affairResult.service; import com.dbnt.faisp.config.BaseService; import com.dbnt.faisp.config.FileInfo; import com.dbnt.faisp.fpiMgt.affairResult.mapper.ResultMapper; -import com.dbnt.faisp.fpiMgt.affairResult.model.ResultApprv; -import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard; -import com.dbnt.faisp.fpiMgt.affairResult.model.ResultFile; -import com.dbnt.faisp.fpiMgt.affairResult.repository.ResultApprvRepository; -import com.dbnt.faisp.fpiMgt.affairResult.repository.ResultBoardRepository; -import com.dbnt.faisp.fpiMgt.affairResult.repository.ResultFileRepository; +import com.dbnt.faisp.fpiMgt.affairResult.model.*; +import com.dbnt.faisp.fpiMgt.affairResult.repository.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,9 +18,13 @@ import java.util.UUID; @Service @RequiredArgsConstructor public class ResultService extends BaseService { // 월간계획 + private final ClearInfoRepository clearInfoRepository; + private final ResultApprvRepository resultApprvRepository; private final ResultBoardRepository resultBoardRepository; private final ResultFileRepository resultFileRepository; - private final ResultApprvRepository resultApprvRepository; + private final ResultInfoRepository resultInfoRepository; + private final ResultToAffairRepository resultToAffairRepository; + private final ResultToPlanRepository resultToPlanRepository; private final ResultMapper resultMapper; public List selectResultBoardList(ResultBoard resultBoard) { @@ -53,9 +53,32 @@ public class ResultService extends BaseService { // 월간계획 if(resultBoard.getMultipartFileList()!=null){ saveUploadFiles(resultKey, resultBoard.getMultipartFileList()); } + if (resultBoard.getClearInfoList() != null){ + saveClearInfoList(resultKey, resultBoard.getClearInfoList()); + } + if (resultBoard.getResultInfoList() != null){ + saveResultInfoList(resultKey, resultBoard.getResultInfoList()); + } + if (resultBoard.getAffairList() != null){ + saveResultToAffair(resultKey, resultBoard.getAffairList()); + } return resultKey; } + public FileInfo selectResultFile(Integer resultKey, Integer fileSeq) { + return resultFileRepository.findById(new ResultFile.ResultFileId(resultKey, fileSeq)).orElse(null); + } + + @Transactional + public Integer resultStateChange(ResultApprv apprv) { + ResultBoard savedResult = resultBoardRepository.findById(apprv.getResultKey()).orElse(null); + savedResult.setResultState(apprv.getState()); + ResultApprv lastApprv = resultApprvRepository.findTopByResultKeyOrderByApprvSeqDesc(apprv.getResultKey()).orElse(null); + apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); + resultApprvRepository.save(apprv); + return apprv.getApprvSeq(); + } + private void saveUploadFiles(Integer resultKey, List multipartFileList){ ResultFile lastFileInfo = resultFileRepository.findTopByResultKeyOrderByFileSeqDesc(resultKey).orElse(null); int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); @@ -88,17 +111,28 @@ public class ResultService extends BaseService { // 월간계획 } } - public FileInfo selectResultFile(Integer resultKey, Integer fileSeq) { - return resultFileRepository.findById(new ResultFile.ResultFileId(resultKey, fileSeq)).orElse(null); + + private void saveClearInfoList(Integer resultKey, List clearInfoList) { + clearInfoRepository.deleteByResultKey(resultKey); + for(ClearInfo info: clearInfoList){ + info.setResultKey(resultKey); + } + clearInfoRepository.saveAll(clearInfoList); } - @Transactional - public Integer resultStateChange(ResultApprv apprv) { - ResultBoard savedResult = resultBoardRepository.findById(apprv.getResultKey()).orElse(null); - savedResult.setResultState(apprv.getState()); - ResultApprv lastApprv = resultApprvRepository.findTopByResultKeyOrderByApprvSeqDesc(apprv.getResultKey()).orElse(null); - apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); - resultApprvRepository.save(apprv); - return apprv.getApprvSeq(); + private void saveResultInfoList(Integer resultKey, List resultInfoList){ + resultInfoRepository.deleteByResultKey(resultKey); + for(ResultInfo info: resultInfoList){ + info.setResultKey(resultKey); + } + resultInfoRepository.saveAll(resultInfoList); + } + + private void saveResultToAffair(Integer resultKey, List resultToAffairList){ + resultToAffairRepository.deleteByResultKey(resultKey); + for(ResultToAffair relation: resultToAffairList){ + relation.setResultKey(resultKey); + } + resultToAffairRepository.saveAll(resultToAffairList); } } diff --git a/src/main/resources/static/js/common.js b/src/main/resources/static/js/common.js index f935a804..e8c25736 100644 --- a/src/main/resources/static/js/common.js +++ b/src/main/resources/static/js/common.js @@ -6,15 +6,6 @@ function contentFade(action){ } } -function sessionReload(){ - $.ajax({ - url: '/refreshSession', - type: 'GET', - success: function(){location.reload();}, - error:function(){} - }); -} - $(document).on('click', '.allChk', function (){ $(this).parents('table').find('[type="checkbox"]').prop("checked", this.checked); }) @@ -91,6 +82,20 @@ $(document).on('click', '.fileDownLink', function (){ window.open(encodeURI(url)); }) +//Bootstrap multiple modal +let count = 0; // 모달이 열릴 때 마다 count 해서 z-index값을 높여줌 +$(document).on('show.bs.modal', '.modal', function () { + let zIndex = 1040 + (10 * count); + $(this).css('z-index', zIndex); + setTimeout(function() { + $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack'); + }, 0); + count = count + 1 +}); +// multiple modal Scrollbar fix +$(document).on('hidden.bs.modal', '.modal', function(){ + $('.modal:visible').length && $(document.body).addClass('modal-open'); +}); function setUploadDiv(){ files = []; diff --git a/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js b/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js index 4ee77bdb..ce36be5c 100644 --- a/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js +++ b/src/main/resources/static/js/igActivities/fpiMgt/result/resultMgt.js @@ -29,6 +29,61 @@ $(document).on('click', '#resultAddBtn', function (){ $("#resultDiv").append("") }) +$(document).on('change', '#clearTitle', function (){ + $("#resultTitle").val(this.value) +}) +$(document).on('change', '#workStartDt', function (){ + $(".workStartDtCopy").val(this.value) +}) +$(document).on('change', '#workEndDt', function (){ + $(".workEndDtCopy").val(this.value) +}) +$(document).on('change', '#usePrice', function (){ + $("#usePriceCopy").val(this.value) +}) + +$(document).on('click', '#affairModalBtn', function (){ + const workStartDt = $("#workStartDt").val() + const workEndDt = $("#workEndDt").val() + if(!workStartDt||!workEndDt){ + alert("청산보고서의 사업기간을 입력해주세요."); + }else{ + $.ajax({ + url: '/affairResult/affairListModal', + data: { + startDate: workStartDt, + endDate: workEndDt + }, + type: 'GET', + dataType:"html", + success: function(html){ + $("#affairListModalContent").empty().append(html) + $("#affairListModal").modal('show'); + }, + error:function(){ + + } + }); + } +}) +$(document).on('click', '.affairTr', function (){ + const chkBox = $(this).find(".rowChkBox"); + chkBox[0].checked = !chkBox[0].checked; +}) +$(document).on('click', '#getAffairBtn', function (){ + let affairListTbody = ""; + $.each($(".rowChkBox:checked"), function (idx, chkBox){ + const affairTr = $(chkBox).parents(".affairTr") + affairListTbody += ""; + affairListTbody += ""; + affairListTbody += ""+affairTr.find(".wrtDt")[0].innerText+""; + affairListTbody += ""+affairTr.find(".title")[0].innerText+""; + affairListTbody += ""+(affairTr.find(".affairRate")[0].innerText+(affairTr.find(".organUp")[0].innerText==="O"?"(상보)":""))+""; + affairListTbody += ""; + }) + $("#affairListTbody").empty().append(affairListTbody); +}) + $(document).on('click', '.rowDeleteBtn', function (){ const isClearInfo = $(this).parents("#clearInfoRow").length !== 0; const infoSeq = $(this).parents(".infoRow").find(".infoSeq").val(); @@ -151,7 +206,11 @@ function getResultEditModal(resultKey){ success: function(html){ $("#resultEditModalContent").empty().append(html) $("#resultEditModal").modal('show'); - $("#resultDt").datepicker({ + $("#useDateSelectorDiv").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#workDateSelectorDiv").datepicker({ format: "yyyy-mm-dd", language: "ko" }); @@ -202,20 +261,56 @@ function setInfoSeq(target, infoSeq){ if(childInfoSeq-->Number(infoSeq)){ const infoRow = $(child).parent(".infoRow") child.innerText = childInfoSeq; - infoRow[0].id = "row"+childInfoSeq; - debugger + infoRow[0].id = "row"+idx; + $.each(infoRow.find("input"), function (idx2, input){ + input.name = input.name.replace("["+childInfoSeq+"]", "["+idx+"]"); + if(input.name.indexOf("infoSeq")>0){ + input.value -= input.value; + } + }) + $.each(infoRow.find("select"), function (idx2, select){ + select.name = select.name.replace("["+childInfoSeq+"]", "["+idx+"]"); + }) + $.each(infoRow.find("textarea"), function (idx2, textarea){ + if(textarea.id !== ''){ + textarea.id = "contactInfo"+idx; + } + if(textarea.name !== ''){ + textarea.name = textarea.name.replace("["+childInfoSeq+"]", "["+idx+"]"); + } + }) } }) } function contentCheck(){ let flag = true; - if(!$("#contentTitle").val()){ - alert("제목을 입력해주세요.") + if(!$("#clearTitle").val()){ + alert("청산보고서 제목을 입력해주세요.") flag = false; } - if(!$("#resultDt").val()){ - alert("시행일자를 입력해주세요.") + if(!$("#workStartDt").val()){ + alert("사업기간 시작일을 입력해주세요.") + flag = false; + } + if(!$("#workEndDt").val()){ + alert("사업기간 종료일을 입력해주세요.") + flag = false; + } + if(!$("#planPrice").val()){ + alert("계획금액을 입력해주세요.") + flag = false; + } + if(!$("#usePrice").val()){ + alert("집행액을 입력해주세요.") + flag = false; + } + if($(".clearInfoSeq").length<=0){ + alert("세부 집행내역을 입력해주세요.") + flag = false; + } + if($(".resultInfoSeq").length<=0){ + alert("활동내용을 입력해주세요.") flag = false; } flag = fileCheck(flag, files); diff --git a/src/main/resources/templates/fragments/leftMenu.html b/src/main/resources/templates/fragments/leftMenu.html index 2493bfea..b33b3847 100644 --- a/src/main/resources/templates/fragments/leftMenu.html +++ b/src/main/resources/templates/fragments/leftMenu.html @@ -1,13 +1,10 @@ - +
- -
-
+
@@ -143,19 +143,20 @@
- +
- +
no
-
접촉 대상자
+
접촉 대상자
접촉 내용
+

@@ -204,7 +205,7 @@
- +
@@ -217,7 +218,7 @@ 활용 - + diff --git a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultInfoRow.html b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultInfoRow.html index ce83dc76..953c6831 100644 --- a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultInfoRow.html +++ b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultInfoRow.html @@ -2,14 +2,14 @@
-
- - -
-
+
+
+
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html index 03b8f0bd..257b5cf3 100644 --- a/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html +++ b/src/main/resources/templates/igActivities/fpiMgt/affairResult/resultMgt.html @@ -16,7 +16,7 @@
+