From 80156cacba6391f2729faeeeade822562edeac3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=84=9D=20=EC=B5=9C?= Date: Mon, 7 Nov 2022 18:38:14 +0900 Subject: [PATCH] =?UTF-8?q?=EC=99=B8=EA=B5=AD=EC=96=B4=EC=84=A0=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=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 --- .../dbnt/faisp/config/ModalController.java | 32 ++ .../FishingBoatController.java | 8 +- .../model/CrackdownStatus.java | 3 +- .../repository/CrackdownStatusRepository.java | 3 +- .../service/FishingBoatService.java | 4 + src/main/resources/static/css/common.css | 3 + .../static/js/faStatistics/fishingBoatMgt.js | 171 +++++++- .../common/modal/crackdownStatusModal.html | 364 ++++++++++++++++++ .../fishingBoat/fishingBoatEditModal.html | 219 ++++++----- .../fishingBoat/fishingBoatMgt.html | 26 ++ 10 files changed, 707 insertions(+), 126 deletions(-) create mode 100644 src/main/resources/templates/common/modal/crackdownStatusModal.html diff --git a/src/main/java/com/dbnt/faisp/config/ModalController.java b/src/main/java/com/dbnt/faisp/config/ModalController.java index 2c0dc8b8..47be48f7 100644 --- a/src/main/java/com/dbnt/faisp/config/ModalController.java +++ b/src/main/java/com/dbnt/faisp/config/ModalController.java @@ -1,6 +1,12 @@ package com.dbnt.faisp.config; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; +import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus; +import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.FishingBoatRepository; +import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ProcessResultRepository; +import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.SailorRepository; +import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ViolationRepository; +import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.CrackdownStatusService; import com.dbnt.faisp.main.menuMgt.model.MenuMgt; import com.dbnt.faisp.main.menuMgt.service.MenuMgtService; import com.dbnt.faisp.main.userInfo.model.UserInfo; @@ -12,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; +import java.util.List; + @RestController @RequiredArgsConstructor @@ -21,6 +29,11 @@ public class ModalController { private final MenuMgtService menuMgtService; private final UserInfoService userInfoService; private final CodeMgtService codeMgtService; + private final CrackdownStatusService crackdownStatusService; + private final ViolationRepository violationRepository; + private final ProcessResultRepository processResultRepository; + private final FishingBoatRepository fishingBoatRepository; + private final SailorRepository sailorRepository; @GetMapping("/menuModal") public ModelAndView menuModalPage(@AuthenticationPrincipal UserInfo loginUser, MenuMgt menuMgt){ @@ -49,4 +62,23 @@ public class ModalController { mav.addObject("searchParams", userInfo); return mav; } + + @GetMapping("/crackdownStatusModal") + public ModelAndView crackdownStatusModal(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){ + ModelAndView mav = new ModelAndView("common/modal/crackdownStatusModal"); + crackdownStatus.setQueryInfo(); + + List crackdownList = crackdownStatusService.selectCrackdownStatusList(crackdownStatus); + for (CrackdownStatus cds: crackdownList) { + cds.setViolationList(violationRepository.findByFbKey(cds.getFbKey())); + cds.setProcessResult(processResultRepository.findByCdsKey(cds.getCdsKey()).orElse(null)); + cds.setFishingBoat(fishingBoatRepository.findByCdsKey(cds.getCdsKey()).orElse(null)); + cds.setSailorList(sailorRepository.findByFbKey(cds.getFbKey())); + } + mav.addObject("crackdownList", crackdownList); + crackdownStatus.setContentCnt(crackdownStatusService.selectCrackdownStatusListCnt(crackdownStatus)); + crackdownStatus.setPaginationInfo(); + mav.addObject("searchParams", crackdownStatus); + return mav; + } } diff --git a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/FishingBoatController.java b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/FishingBoatController.java index c698263d..9edbc6a4 100644 --- a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/FishingBoatController.java +++ b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/FishingBoatController.java @@ -100,9 +100,13 @@ public class FishingBoatController { } @PostMapping("/saveFishingBoat") - public Integer saveFishingBoat(@AuthenticationPrincipal UserInfo loginUser, - FishingBoat fishingBoat){ + public Integer saveFishingBoat(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){ return 0; // return processResultService.saveProcessResult(processResult); } + + @GetMapping("/checkCaseNum") + public Integer checkCaseNum(String caseNum){ + return fishingBoatService.checkCaseNum(caseNum); + } } diff --git a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/CrackdownStatus.java b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/CrackdownStatus.java index ae698dc0..600f2007 100644 --- a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/CrackdownStatus.java +++ b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/model/CrackdownStatus.java @@ -66,8 +66,7 @@ public class CrackdownStatus extends BaseModel { private String mmsi; @Column(name = "field_ivsgt") - @DateTimeFormat(pattern = "yyyy-MM-dd") - private LocalDate fieldIvsgt; + private String fieldIvsgt; @Column(name = "obstr_exspd_cnt") private Integer obstrExspdCnt; diff --git a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/repository/CrackdownStatusRepository.java b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/repository/CrackdownStatusRepository.java index 1a7efd80..1ba9356c 100644 --- a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/repository/CrackdownStatusRepository.java +++ b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/repository/CrackdownStatusRepository.java @@ -6,5 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface CrackdownStatusRepository extends JpaRepository { - Optional findByCdsKey(Integer cdsKey); + Optional findByCdsKey(Integer cdsKey); + Optional findTop1ByCaseNum(String caseNum); } diff --git a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/service/FishingBoatService.java b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/service/FishingBoatService.java index 9d359f9b..6004e65f 100644 --- a/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/service/FishingBoatService.java +++ b/src/main/java/com/dbnt/faisp/main/faStatistics/crackdownsStatus/service/FishingBoatService.java @@ -99,4 +99,8 @@ public class FishingBoatService extends BaseService { return cdsKey; } + + public Integer checkCaseNum(String caseNum) { + return crackdownStatusRepository.findTop1ByCaseNum(caseNum).orElse(null)==null?0:1; + } } diff --git a/src/main/resources/static/css/common.css b/src/main/resources/static/css/common.css index 4f83a0bc..ed05aba9 100644 --- a/src/main/resources/static/css/common.css +++ b/src/main/resources/static/css/common.css @@ -89,4 +89,7 @@ } .display-none{ display:none +} +#subModalBody{ + white-space: nowrap; } \ No newline at end of file diff --git a/src/main/resources/static/js/faStatistics/fishingBoatMgt.js b/src/main/resources/static/js/faStatistics/fishingBoatMgt.js index b60f32be..fd5b2070 100644 --- a/src/main/resources/static/js/faStatistics/fishingBoatMgt.js +++ b/src/main/resources/static/js/faStatistics/fishingBoatMgt.js @@ -1,16 +1,67 @@ +let selectedList = []; $(document).on('click', '#getFishingBoatEditModalBtn', function (){ - getFishingBoatEditModal(null, null); + getFishingBoatEditModal(null); +}) +$(document).on('change', '#caseNum', function (){ + $.ajax({ + url: '/faStatistics/checkCaseNum', + type: 'GET', + data: {caseNum: $("#caseNum").val()}, + dataType:"json", + success: function(data){ + if(data===1){ + alert("일치하는 사건번호가 등록되어 있습니다."); + $("#caseNum").val(""); + } + }, + error:function(){ + + } + }); +}) +$(document).on('click', '#caseNumBtn', function (){ + searchModalSubmit(1); + $("#crackdownSubModal").modal('show'); +}) +$(document).on('click', '.crackdownTr', function (){ + $(".crackdownTr").prop("checked", false); + const chkbox = $(this).find('.crackdownChkbox')[0] + chkbox.checked = !chkbox.checked; +}) +$(document).on('click', '#getCrackdownBtn', function (){ + getFishingBoatEditModal($(".crackdownChkbox:checked").parents(".crackdownTr").attr("data-key")); + $("#crackdownSubModal").modal('hide'); }) $(document).on('change', '#crackdownPolice', function (){ getCrackdownBoatOption(this.value); }) +$(document).on('change', '#violationSelector', function (){ + if(this.selectedOptions[0].value !== ""){ + if($(".violationCd[value='"+this.selectedOptions[0].value+"']").length===0){ + $("#violationDiv").append( + '
\n' + + '
\n' + + ' \n' + + ' \n' + + ' \n' + + '
\n' + + '
' + ) + } + } +}) +$(document).on('click', '.violationRemoveBtn', function (){ + $(this).parents(".violation").remove(); +}) $(document).on('change', '.boatNameKr', function (){ $(".boatNameKr").val(this.value); }) $(document).on('change', '#equalCaptain', function (){ if(this.checked){ $.each($("#captainDiv :input"), function (idx, input){ - $("#shipOwnerDiv").find("[name='"+input.name+"']").val(input.value) + $("#shipOwnerDiv").find("#"+input.id+"2").val(input.value) }) }else{ $("#shipOwnerDiv :input").val(""); @@ -18,20 +69,25 @@ $(document).on('change', '#equalCaptain', function (){ }) $(document).on('change', '#captainDiv :input', function (){ if($("#equalCaptain").prop("checked")){ - $("#shipOwnerDiv").find("[name='"+this.name+"']").val(this.value) + $("#shipOwnerDiv").find("#"+this.id+"2").val(this.value) } }) $(document).on('click', '#sailorAddBtn', function (){ $("#sailorRestrictionHome").append( '
\n' + - '
\n' + - ' \n' + + ' \n' + + ' \n' + + ' \n' + ' \n' + - ' \n' + - ' \n' + '
\n' + @@ -41,6 +97,18 @@ $(document).on('click', '#sailorAddBtn', function (){ $(document).on('click', '.sailorRemoveBtn', function (){ $(this).parents(".sailorRestriction").remove(); }) +$(document).on('click', '#saveTempBtn', function (){ + saveFishingBoatInfo("N") +}) +$(document).on('click', '#saveResultBtn', function (){ + saveFishingBoatInfo("Y") +}) +$(document).on('change', '.pressurizedTimeTaken', function (){ + $("#pressurizedTimeTaken").val($("#pressurizedTimeTakenDate").val()+"일 "+$("#pressurizedTimeTakenTime").val()) +}) +$(document).on('change', '.warrantReqTake', function (){ + $("#warrantReqTake").val($("#warrantReqTakeDate").val()+"일 "+$("#warrantReqTakeTime").val()) +}) function getFishingBoatEditModal(cdsKey){ $.ajax({ @@ -55,6 +123,10 @@ function getFishingBoatEditModal(cdsKey){ language: "ko", autoclose: true }); + $(".dateTimeSelector").datetimepicker({ + format:'Y-m-d H:i', + lang:'kr' + }); $(".timeSelector").datetimepicker({ datepicker:false, format:'H:i', @@ -88,4 +160,83 @@ function getCrackdownBoatOption(categoryCd){ } }); +} + +function saveFishingBoatInfo(saveYn){ + if(confirm("저장하시겠습니까?")){ + $("#saveYn").val(saveYn) + contentFade("in"); + const formData = new FormData($("#fishingBoatEditForm")[0]); + $.each($(".violationCd"), function (idx, input){ + formData.append('violationList['+idx+'].violation', $(input).val()); + }); + let sailorCnt=0; + // 선장 정보 입력 + const sailorNameKr = $("#sailorNameKr").val(); + if(sailorNameKr){ + formData.append('sailorList['+sailorCnt+'].sailorNameKr', sailorNameKr); + formData.append('sailorList['+sailorCnt+'].sailorNameCn', $("#sailorNameCn").val()); + formData.append('sailorList['+sailorCnt+'].sailorNamePinyin', $("#sailorNamePinyin").val()); + formData.append('sailorList['+sailorCnt+'].birthdate', $("#birthdate").val()); + formData.append('sailorList['+sailorCnt+'].sailorContact', $("#sailorContact").val()); + formData.append('sailorList['+sailorCnt+'].residence', $("#residence").val()); + formData.append('sailorList['+sailorCnt+'].arrestHistory', $("#arrestHistory").val()); + formData.append('sailorList['+sailorCnt+'].note', $("#note").val()); + formData.append('sailorList['+sailorCnt+'].isRestriction', $("#captainRestriction").val()); + formData.append('sailorList['+sailorCnt+'].position', "POS001"); + //선장 사진 파일 붙임 필요. + sailorCnt++; + } + // 선주 정보 입력 + const sailorNameKr2 = $("#sailorNameKr2").val(); + if(sailorNameKr) { + formData.append('sailorList[' + sailorCnt + '].sailorNameKr', sailorNameKr2); + formData.append('sailorList[' + sailorCnt + '].sailorNameCn', $("#sailorNameCn2").val()); + formData.append('sailorList[' + sailorCnt + '].sailorNamePinyin', $("#sailorNamePinyin2").val()); + formData.append('sailorList[' + sailorCnt + '].birthdate', $("#birthdate2").val()); + formData.append('sailorList[' + sailorCnt + '].sailorContact', $("#sailorContact2").val()); + formData.append('sailorList[' + sailorCnt + '].residence', $("#residence2").val()); + formData.append('sailorList[' + sailorCnt + '].note', $("#note2").val()); + formData.append('sailorList[' + sailorCnt + '].position', "POS004"); + sailorCnt++; + } + const navigatingOfficerRestriction = $("#navigatingOfficerRestriction").val() + if(navigatingOfficerRestriction){ + formData.append('sailorList['+sailorCnt+'].isRestriction', navigatingOfficerRestriction); + formData.append('sailorList['+sailorCnt+'].position', "POS002"); + sailorCnt++; + } + const chiefEngineerRestriction = $("#chiefEngineerRestriction").val(); + if(chiefEngineerRestriction){ + formData.append('sailorList['+sailorCnt+'].isRestriction', chiefEngineerRestriction); + formData.append('sailorList['+sailorCnt+'].position', "POS003"); + sailorCnt++; + } + $.each($(".sailorRestriction"), function (idx, div){ + const position = $(div).find(".normalSailorPosition").val(); + if(position===""){ + alert("선원의 직책이 선택되지 않았습니다.") + return false + } + formData.append('sailorList['+(idx+sailorCnt)+'].isRestriction', $(div).find(".normalSailorRestriction").val()); + formData.append('sailorList['+(idx+sailorCnt)+'].sailorNameKr', $(div).find(".normalSailorNm").val()); + formData.append('sailorList['+(idx+sailorCnt)+'].position', position); + }); + $.ajax({ + type : 'POST', + data : formData, + url : "/faStatistics/saveFishingBoat", + processData: false, + contentType: false, + success : function() { + alert("저장되었습니다."); + contentFade("out"); + // location.reload(); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다."); + contentFade("out"); + } + }) + } } \ No newline at end of file diff --git a/src/main/resources/templates/common/modal/crackdownStatusModal.html b/src/main/resources/templates/common/modal/crackdownStatusModal.html new file mode 100644 index 00000000..39e3ef91 --- /dev/null +++ b/src/main/resources/templates/common/modal/crackdownStatusModal.html @@ -0,0 +1,364 @@ + + +
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
연번사건번호나포일시위반장소위반내용침범유형NLL특수공무집행방해사건담당경찰서검거기관MMSI.NO(AIS)선박제원선장(출생년도)선종어획물 축소기재범칙물처리현황담보금납부(만원)담보금미납(만원)선박처리직접인계구속불구속현장조사압송영장청구 소요시간압수어구
무허가 조업 + 특정금지
+ (무허가, 정선명령위반) +
+ EEZ
+ 제한조건 +
영해침범발생건수인적피해물적피해구분선명톤수(톤)선원(명)선질선적어종어획량(kg)폐기량(kg)위판량(kg)위판금액(원)조사중완료척수납부액납부일시미납미납금액위탁관리위탁시작일위탁종료일퇴거직접인계공매폐선침몰환부일시해점인계함정중측인수함정선장향해장기관장선원구속척수(몰수판결)선장향해장기관장선원불구속척수틀(타망)폭(유망)조(형망)개(통발)기타
피해인원피해액(만원)상세내용발생건수피해액(만원)상세내용단순폐선폐선조건부공매
단속경찰서단속함정이름출생년도어종수량나포일시석방일시소요시간소요시간거리(해리)
+ + + +
+
+
+
+
+ ~ + +
+
+ ~ + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatEditModal.html b/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatEditModal.html index 47a8c562..6f3f1ad9 100644 --- a/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatEditModal.html +++ b/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatEditModal.html @@ -9,12 +9,13 @@ + - - - - - + + + + +
- +
@@ -168,32 +172,32 @@
- - - + + +
- +
- +
- +
- +
@@ -204,13 +208,13 @@
- - + +
-
+
+
+
+ +
+
- +
- +
- +
- +
- - +
- - +
- - + +
@@ -268,50 +277,50 @@
- - + +
- +
- +
- +
- +
- +
- +
- - - - + + + +
- +
@@ -319,10 +328,10 @@
- - +
@@ -332,7 +341,7 @@
- +
@@ -340,42 +349,42 @@
- +
- - - + +
- +
- +
-
+
- - + +
- +
- +

@@ -429,25 +438,25 @@
- +
- +
- +
- +
- @@ -456,77 +465,65 @@
- +
- - - + +
- - - + +
- - - + +
-
- +
- +
- +
- - - + + +
diff --git a/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatMgt.html b/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatMgt.html index 5d5d7941..d0b4f2a5 100644 --- a/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatMgt.html +++ b/src/main/resources/templates/faStatistics/fishingBoat/fishingBoatMgt.html @@ -214,5 +214,31 @@
+ + \ No newline at end of file