From c1066f21a8f4a2dbf17b3053f0b4b2069d581131 Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Wed, 26 Oct 2022 13:21:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=EA=B2=AC=EB=AC=B8=ED=86=B5=EA=B3=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C(=EC=B6=94=ED=9B=84=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=ED=95=84=EC=9A=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../faisp/fpiMgt/affair/AffairController.java | 24 +- .../resources/mybatisMapper/AffairMapper.xml | 264 +++++++++--------- .../igActivities/fpiMgt/affair/statistics.js | 47 ++-- .../fpiMgt/affair/affairStatistics.html | 4 +- .../fpiMgt/affair/fieldStatistics.html | 2 +- .../fpiMgt/affair/ratingStatistics.html | 2 +- 6 files changed, 184 insertions(+), 159 deletions(-) diff --git a/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java b/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java index f61fe493..8274147b 100644 --- a/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java +++ b/src/main/java/com/dbnt/faisp/fpiMgt/affair/AffairController.java @@ -259,10 +259,18 @@ public class AffairController { // 첩보수집활동 > 외사경찰 견문관 totalList.add(total); } mav.addObject("totalList", totalList); - type1List = addTotalRow(typeStatistics.getCategory1(), type1List); - type2List = addTotalRow(typeStatistics.getCategory2(), type2List); - type3List = addTotalRow(typeStatistics.getCategory3(), type3List); - type4List = addTotalRow(typeStatistics.getCategory4(), type4List); + if(typeStatistics.getCategory1() != null) { + type1List = addTotalRow(typeStatistics.getCategory1(), type1List); + } + if(typeStatistics.getCategory2() != null) { + type2List = addTotalRow(typeStatistics.getCategory2(), type2List); + } + if(typeStatistics.getCategory3() != null) { + type3List = addTotalRow(typeStatistics.getCategory3(), type3List); + } + if(typeStatistics.getCategory4() != null) { + type4List = addTotalRow(typeStatistics.getCategory4(), type4List); + } mav.addObject("type1List", type1List); mav.addObject("type2List", type2List); mav.addObject("type3List", type3List); @@ -287,8 +295,12 @@ public class AffairController { // 첩보수집활동 > 외사경찰 견문관 } totalList.add(total); } - sangboCntList = addTotalRow(typeStatistics.getSangbo(), sangboCntList); - arrCntList = addTotalRow(typeStatistics.getRating(), arrCntList); + if(typeStatistics.getSangbo() != null) { + sangboCntList = addTotalRow(typeStatistics.getSangbo(), sangboCntList); + } + if(typeStatistics.getRating() != null) { + arrCntList = addTotalRow(typeStatistics.getRating(), arrCntList); + } mav.addObject("totalList", totalList); mav.addObject("sangboList", sangboCntList); mav.addObject("arrCntList", arrCntList); diff --git a/src/main/resources/mybatisMapper/AffairMapper.xml b/src/main/resources/mybatisMapper/AffairMapper.xml index 1873f043..f26fc49b 100644 --- a/src/main/resources/mybatisMapper/AffairMapper.xml +++ b/src/main/resources/mybatisMapper/AffairMapper.xml @@ -126,21 +126,21 @@ and wrt_dt <= #{endDate}::date+1 - and affair_key in ( + and ab.affair_key in ( select affair_key - from affair_rating aa - inner join organ_config ab - on aa.rating_organ = ab.organ_cd + from affair_rating ar2 + inner join organ_config oc2 + on ar2.rating_organ = oc2.organ_cd - and aa.affair_rate in + and ar2.affair_rate in #{item} - and aa.organ_up = 'T' - and ab.organ_type in + and ar2.organ_up = 'T' + and oc2.organ_type in #{item} @@ -230,40 +230,42 @@ order by item_cd asc) a left outer join (select wrt_organ, count(*) as cnt - from affair_board - - - and wrt_user_nm like '%'||#{userNm}||'%' - - - and wrt_dt >= #{startDate}::date - - - and wrt_dt <= #{endDate}::date+1 - - - and affair_key in ( - select affair_key - from affair_rating aa - inner join organ_config ab - on aa.rating_organ = ab.organ_cd - - - and aa.affair_rate in - - #{item} - - - - and aa.organ_up = 'T' - and ab.organ_type in - - #{item} - - - - ) - + from affair_board ab, + affair_rating ar + where ab.affair_key = ar.affair_key + and (ar.organ_up != 'T' or ar.organ_up is null) + + and wrt_user_nm like '%'||#{userNm}||'%' + + + and wrt_dt >= #{startDate}::date + + + and wrt_dt <= #{endDate}::date+1 + + + and ab.affair_key in ( + select affair_key + from affair_rating ar2 + inner join organ_config oc2 + on ar2.rating_organ = oc2.organ_cd + + + and ar2.affair_rate in + + #{item} + + + + and ar2.organ_up = 'T' + and oc2.organ_type in + + #{item} + + + + ) + and affair_type1 in @@ -288,7 +290,6 @@ #{item} - group by wrt_organ)b on a.item_cd = b.wrt_organ order by wrt_organ asc @@ -322,10 +323,11 @@ (select wrt_organ, affair_type1 as affair_type, count(*) as cnt - from affair_board - + from affair_board ab, + affair_rating ar + where ab.affair_key = ar.affair_key + and (ar.organ_up != 'T' or ar.organ_up is null) - group by wrt_organ,affair_type1) c on a.item_cd = c.affair_type and b.item_cd = c.wrt_organ order by wrt_organ,affair_type asc @@ -359,10 +361,11 @@ (select wrt_organ, affair_type2 as affair_type, count(*) as cnt - from affair_board - + from affair_board ab, + affair_rating ar + where ab.affair_key = ar.affair_key + and (ar.organ_up != 'T' or ar.organ_up is null) - group by wrt_organ,affair_type2) c on a.item_cd = c.affair_type and b.item_cd = c.wrt_organ order by wrt_organ,affair_type asc @@ -396,10 +399,11 @@ (select wrt_organ, affair_type3 as affair_type, count(*) as cnt - from affair_board - + from affair_board ab, + affair_rating ar + where ab.affair_key = ar.affair_key + and (ar.organ_up != 'T' or ar.organ_up is null) - group by wrt_organ,affair_type3) c on a.item_cd = c.affair_type and b.item_cd = c.wrt_organ order by wrt_organ,affair_type asc @@ -433,84 +437,74 @@ (select wrt_organ, affair_type4 as affair_type, count(*) as cnt - from affair_board - + from affair_board ab, + affair_rating ar + where ab.affair_key = ar.affair_key + and (ar.organ_up != 'T' or ar.organ_up is null) - group by wrt_organ,affair_type4) c on a.item_cd = c.affair_type and b.item_cd = c.wrt_organ order by wrt_organ,affair_type asc - - - and ar.organ_up = 'T' - and oc.organ_type in - - #{item} - - - - and oc.organ_type not in ('OGC002','OGC003') - - - - - and affair_type1 in - - #{item} - - - - and affair_type1 not in (select item_cd from code_mgt where category_cd = 'DC01') - - - - - and affair_type2 in - - #{item} - - - - and affair_type2 not in (select item_cd from code_mgt where category_cd = 'DC02') - - - - - and affair_type3 in - - #{item} - - - - and affair_type3 not in (select item_cd from code_mgt where category_cd = 'DC03') - - - - - and affair_type4 in - - #{item} - - - - and affair_type4 not in (select item_cd from code_mgt where category_cd = 'DC04') - - - - - and affair_rate in - + + and wrt_user_nm like '%'||#{userNm}||'%' + + + and wrt_dt >= #{startDate}::date + + + and wrt_dt <= #{endDate}::date+1 + + + and ab.affair_key in ( + select affair_key + from affair_rating ar2 + inner join organ_config oc2 + on ar2.rating_organ = oc2.organ_cd + + + and ar2.affair_rate in + + #{item} + + + + and ar2.organ_up = 'T' + and oc2.organ_type in + + #{item} + + + + ) + + + and affair_type1 in + #{item} - - - and affair_rate not in (select item_cd from code_mgt where category_cd = 'AAR') - - - + + + and affair_type2 in + + #{item} + + + + and affair_type3 in + + #{item} + + + + and affair_type4 in + + #{item} + + + @@ -573,6 +577,7 @@ organ_config oc where ab.affair_key = ar.affair_key and ar.rating_organ = oc.organ_cd + and (ar.organ_up != 'T' or ar.organ_up is null) group by ab.wrt_organ,oc.organ_type) c on a.item_cd = c.wrt_organ and b.organ_type = c.organ_type @@ -609,12 +614,9 @@ ar.affair_rate, count(*) as cnt from affair_board ab, - affair_rating ar, - organ_config oc + affair_rating ar where ab.affair_key = ar.affair_key - and ar.rating_organ = oc.organ_cd - and ar.affair_rate is not null - and ar.affair_rate != '' + and (ar.organ_up != 'T' or ar.organ_up is null) group by ab.wrt_organ,ar.affair_rate) c on c.wrt_organ = a.item_cd and c.affair_rate = b.item_cd diff --git a/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js b/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js index ac9da5b0..3ed24b53 100644 --- a/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js +++ b/src/main/resources/static/js/igActivities/fpiMgt/affair/statistics.js @@ -5,11 +5,29 @@ $(function(){ }); }) -$(document).on('click', '#downExcel', function (){ - exportExcel(); +$(document).on('click', '#fieldDownExcel', function (){ + exportExcel('분야별'); }) -function exportExcel(){ +$(document).on('click', '#ratingDownExcel', function (){ + exportExcel('평가별'); +}) + +function exportExcel(name){ + var excelHandler = { + getExcelFileName : function(){ + return '견문통계'+'_'+name+'_'+getToday()+'.xlsx'; //파일명 + }, + getSheetName : function(){ + return '견문통계'+'_'+name; + }, + getExcelData : function(){ + return document.getElementById('tableData'); //TABLE id + }, + getWorksheet : function(){ + return XLSX.utils.table_to_sheet(this.getExcelData()); + } + } // step 1. workbook 생성 var wb = XLSX.utils.book_new(); @@ -26,21 +44,6 @@ function exportExcel(){ saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName()); } -var excelHandler = { - getExcelFileName : function(){ - return '견문통계'+'_'+getToday()+'.xlsx'; //파일명 - }, - getSheetName : function(){ - return 'Table Test Sheet'; //시트명 - }, - getExcelData : function(){ - return document.getElementById('tableData'); //TABLE id - }, - getWorksheet : function(){ - return XLSX.utils.table_to_sheet(this.getExcelData()); - } -} - function s2ab(s) { var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer var view = new Uint8Array(buf); //create uint8array as viewer @@ -89,9 +92,17 @@ function goFieldStatistics(){ } $(document).on('click', '#ratingSearch', function (){ + if($('input:checkbox[name=rating]:checked').length < 1){ + alert("평가항목을 선택해주세요"); + return false; + } goRatingStatistics(); }) $(document).on('click', '#ratingTab', function (){ + if($('input:checkbox[name=rating]:checked').length < 1){ + alert("평가항목을 선택해주세요"); + return false; + } goRatingStatistics(); }) diff --git a/src/main/resources/templates/igActivities/fpiMgt/affair/affairStatistics.html b/src/main/resources/templates/igActivities/fpiMgt/affair/affairStatistics.html index 283f2efb..c784a185 100644 --- a/src/main/resources/templates/igActivities/fpiMgt/affair/affairStatistics.html +++ b/src/main/resources/templates/igActivities/fpiMgt/affair/affairStatistics.html @@ -92,8 +92,8 @@
- 경찰서상보
- 지방청상보 + 경찰서상보
+ 지방청상보
diff --git a/src/main/resources/templates/igActivities/fpiMgt/affair/fieldStatistics.html b/src/main/resources/templates/igActivities/fpiMgt/affair/fieldStatistics.html index 07bc76d8..b8b0c82f 100644 --- a/src/main/resources/templates/igActivities/fpiMgt/affair/fieldStatistics.html +++ b/src/main/resources/templates/igActivities/fpiMgt/affair/fieldStatistics.html @@ -10,7 +10,7 @@
- +
diff --git a/src/main/resources/templates/igActivities/fpiMgt/affair/ratingStatistics.html b/src/main/resources/templates/igActivities/fpiMgt/affair/ratingStatistics.html index 1a99645a..1c22ad6d 100644 --- a/src/main/resources/templates/igActivities/fpiMgt/affair/ratingStatistics.html +++ b/src/main/resources/templates/igActivities/fpiMgt/affair/ratingStatistics.html @@ -10,7 +10,7 @@
- +
From 10f915845bf24d264b73a465df52eb8c2cfb5a31 Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Wed, 26 Oct 2022 17:54:22 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=EA=B5=AD=EC=A0=9C=EC=97=AC=EA=B0=9D?= =?UTF-8?q?=EC=84=A0=ED=98=84=ED=99=A9=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../faisp/fipTarget/FipTargetController.java | 28 +++- .../dbnt/faisp/fipTarget/model/ShipInfo.java | 130 ++++++++++++++++++ .../resources/static/js/fipTarget/shipInfo.js | 25 ++++ .../templates/fipTarget/ipShipEditModal.html | 83 +++++++++++ .../templates/fipTarget/ipShipList.html | 117 ++++++++++++++++ 5 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/dbnt/faisp/fipTarget/model/ShipInfo.java create mode 100644 src/main/resources/static/js/fipTarget/shipInfo.js create mode 100644 src/main/resources/templates/fipTarget/ipShipEditModal.html create mode 100644 src/main/resources/templates/fipTarget/ipShipList.html diff --git a/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java b/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java index 570caf8b..d8344bbe 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java @@ -6,6 +6,7 @@ import com.dbnt.faisp.fipTarget.model.PartInfo; import com.dbnt.faisp.fipTarget.model.PartInfoFile; import com.dbnt.faisp.fipTarget.model.PartWork; import com.dbnt.faisp.fipTarget.model.PartWorkFile; +import com.dbnt.faisp.fipTarget.model.ShipInfo; import com.dbnt.faisp.fipTarget.model.VulnFile; import com.dbnt.faisp.fipTarget.model.Vulnerable; import com.dbnt.faisp.fipTarget.service.FipTargetService; @@ -466,8 +467,33 @@ public class FipTargetController { public void deleteVulnerable(@RequestBody Vulnerable vulnerable) { fipTargetService.deleteVulnerable(vulnerable); } -//외사취약지 끝 + //외사취약지 끝 + //국제여객선 시작 + @GetMapping("/ipShipList") + public ModelAndView ipShipList(@AuthenticationPrincipal UserInfo loginUser,ShipInfo shipInfo, HttpServletResponse response) { + ModelAndView mav = new ModelAndView("fipTarget/ipShipList"); + shipInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/ipShipList?siType="+shipInfo.getSiType()).get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + shipInfo.setQueryInfo(); + + shipInfo.setPaginationInfo(); + mav.addObject("uesrId", loginUser.getUserId()); + mav.addObject("searchParams", shipInfo); + return mav; + } + @GetMapping("/ipShipEditModal") + public ModelAndView ipShipEditModal(@AuthenticationPrincipal UserInfo loginUser,ShipInfo shipInfo) { + ModelAndView mav = new ModelAndView("fipTarget/ipShipEditModal"); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partWorkList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + + + return mav; + } diff --git a/src/main/java/com/dbnt/faisp/fipTarget/model/ShipInfo.java b/src/main/java/com/dbnt/faisp/fipTarget/model/ShipInfo.java new file mode 100644 index 00000000..79470223 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fipTarget/model/ShipInfo.java @@ -0,0 +1,130 @@ +package com.dbnt.faisp.fipTarget.model; + +import com.dbnt.faisp.config.BaseModel; + +import lombok.AllArgsConstructor; +import lombok.Data; +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.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@IdClass(ShipInfo.ShipInfoId.class) +@Table(name = "ship_info") +public class ShipInfo extends BaseModel implements Serializable{ + @Id + @Column(name = "si_seq") + private Integer siSeq; + @Id + @Column(name = "si_type") + private String siType; + @Id + @Column(name = "version_no") + private Integer versionNo; + @Column(name = "start_point") + private String startPoint; + @Column(name = "end_point") + private Integer endPoint; + @Column(name = "distance_nm") + private String distanceNm; + @Column(name = "distance_km") + private String distanceKm; + @Column(name = "owner_nm") + private String ownerNm; + @Column(name = "ship_nm") + private String shipNm; + @Column(name = "operation_cnt") + private String operationCnt; + @Column(name = "ship_weight") + private Integer shipWeight; + @Column(name = "passenger_cnt") + private Integer passengerCnt; + @Column(name = "freight_cnt") + private Integer freightCnt; + @Column(name = "close_yn") + private String closeYn; + @Column(name = "description") + private String description; + @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_title") + private String wrtTitle; + @Column(name = "wrt_nm") + private String wrtNm; + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Transient + private String excel; + + +@Override +public String toString() { + return "ShipInfo [siSeq=" + siSeq + ", siType=" + siType + ", versionNo=" + versionNo + ", startPoint=" + startPoint + + ", endPoint=" + endPoint + ", distanceNm=" + distanceNm + ", distanceKm=" + distanceKm + ", ownerNm=" + + ownerNm + ", shipNm=" + shipNm + ", operationCnt=" + operationCnt + ", shipWeight=" + shipWeight + + ", passengerCnt=" + passengerCnt + ", freightCnt=" + freightCnt + ", description=" + description + + ", wrtOrgan=" + wrtOrgan + ", wrtPart=" + wrtPart + ", wrtUserSeq=" + wrtUserSeq + ", wrtTitle=" + + wrtTitle + ", wrtNm=" + wrtNm + ", wrtDt=" + wrtDt + ", excel=" + excel + "]"; +} + + + + +@Embeddable +@Data +@NoArgsConstructor +@AllArgsConstructor +public static class ShipInfoId implements Serializable { + private Integer siSeq; + private String siType; + private Integer versionNo; +} + + + + + + + + + + + + + + + + + + + + + + + + +} diff --git a/src/main/resources/static/js/fipTarget/shipInfo.js b/src/main/resources/static/js/fipTarget/shipInfo.js new file mode 100644 index 00000000..aebfe764 --- /dev/null +++ b/src/main/resources/static/js/fipTarget/shipInfo.js @@ -0,0 +1,25 @@ +$(document).on('click', '#krcnTab', function (){ + location.href="/target/ipShipList?siType=KRCN"; +}) + +$(document).on('click', '#krjpruTab', function (){ + location.href="/target/ipShipList?siType=KRJPRU"; +}) + +$(document).on('click', '#addKRCN', function (){ + const siType = 'KRCN'; + $.ajax({ + url: '/target/ipShipEditModal', + data: {siType: siType}, + type: 'GET', + dataType:"html", + success: function(html){ + $("#ipShipModalContent").empty().append(html); + $("#ipShipModal").modal('show'); + + }, + error:function(){ + + } + }); +}) \ No newline at end of file diff --git a/src/main/resources/templates/fipTarget/ipShipEditModal.html b/src/main/resources/templates/fipTarget/ipShipEditModal.html new file mode 100644 index 00000000..34f4e272 --- /dev/null +++ b/src/main/resources/templates/fipTarget/ipShipEditModal.html @@ -0,0 +1,83 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fipTarget/ipShipList.html b/src/main/resources/templates/fipTarget/ipShipList.html new file mode 100644 index 00000000..073586e4 --- /dev/null +++ b/src/main/resources/templates/fipTarget/ipShipList.html @@ -0,0 +1,117 @@ + + + + + +
+
+

국제여객선 목록

+ + +
+
+
+ +
+ +
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
항로사업자
(한국대리점)
선명국제
총톤수
수송능력운항횟수휴항최종수정일
+
+
+
+ +
+
+
+ + +
+
+
+ + + + + + + + + + + \ No newline at end of file From 954d6d50045cbf8b164916889f1c99d11d482544 Mon Sep 17 00:00:00 2001 From: jiHyung Date: Thu, 27 Oct 2022 08:57:32 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EB=B6=88=EB=B2=95=EC=A1=B0=EC=97=85=20?= =?UTF-8?q?=EB=B6=88=EB=B2=95=EC=96=B4=EC=84=A0=20=EB=8B=A8=EC=86=8D?= =?UTF-8?q?=ED=98=84=ED=99=A9=20=EC=A4=91=EA=B0=84=EC=BB=A4=EB=B0=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CrackdownStatusController.java | 72 +++ .../mapper/CrackdownStatusMapper.java | 14 + .../model/CaptinPhotoFile.java | 53 ++ .../model/CrackdownStatus.java | 140 ++++++ .../crackdownStatus/model/FishingBoat.java | 134 +++++ .../crackdownStatus/model/ProcessResult.java | 143 ++++++ .../crackdownStatus/model/Sailor.java | 100 ++++ .../crackdownStatus/model/Violation.java | 31 ++ .../CaptionPhotoFileRepository.java | 8 + .../repository/CrackdownStatusRepository.java | 8 + .../repository/FishingBoatRepository.java | 8 + .../repository/ProcessResultRepository.java | 8 + .../repository/SailorRepository.java | 8 + .../repository/ViolationRepository.java | 8 + .../service/CrackdownStatusService.java | 97 ++++ .../InternationalCrimeArrestMapper.java | 2 - .../service/BoardInvestigationService.java | 2 +- .../mybatisMapper/CrackdownStatustMapper.xml | 57 +++ .../static/js/faStatistics/crackdownStatus.js | 305 ++++++++++++ .../faStatistics/internationalCrimeArrest.js | 1 - .../crackdownStatus/crackdownStatus.html | 265 ++++++++++ .../crackdownStatusEditModal.html | 457 ++++++++++++++++++ 22 files changed, 1917 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/CrackdownStatusController.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/mapper/CrackdownStatusMapper.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CaptinPhotoFile.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CrackdownStatus.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/FishingBoat.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/ProcessResult.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Sailor.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Violation.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CaptionPhotoFileRepository.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CrackdownStatusRepository.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/FishingBoatRepository.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ProcessResultRepository.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/SailorRepository.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ViolationRepository.java create mode 100644 src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/service/CrackdownStatusService.java create mode 100644 src/main/resources/mybatisMapper/CrackdownStatustMapper.xml create mode 100644 src/main/resources/static/js/faStatistics/crackdownStatus.js create mode 100644 src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatus.html create mode 100644 src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatusEditModal.html diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/CrackdownStatusController.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/CrackdownStatusController.java new file mode 100644 index 00000000..d8753954 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/CrackdownStatusController.java @@ -0,0 +1,72 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus; + +import com.dbnt.faisp.authMgt.service.AuthMgtService; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.CrackdownStatus; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.FishingBoat; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.ProcessResult; +import com.dbnt.faisp.faStatistics.crackdownStatus.service.CrackdownStatusService; +import com.dbnt.faisp.faStatistics.internationalCrimeArrest.model.InternationalCrimeArrest; +import com.dbnt.faisp.userInfo.model.UserInfo; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import java.time.LocalDateTime; +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/faStatistics") +public class CrackdownStatusController { + + private final AuthMgtService authMgtService; + private final CrackdownStatusService crackdownStatusService; + + @RequestMapping("/crackdownStatus") + public ModelAndView crackdownStatus(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus) { + ModelAndView mav = new ModelAndView("faStatistics/crackdownStatus/crackdownStatus"); + + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faStatistics/crackdownStatus").get(0).getAccessAuth(); + + mav.addObject("accessAuth", accessAuth); + + crackdownStatus.setQueryInfo(); + List crackdownStatusList = crackdownStatusService.selectCrackdownStatusList(crackdownStatus); + + mav.addObject("crackdownStatusList", crackdownStatusList); + crackdownStatus.setContentCnt(crackdownStatusService.selectCrackdownStatusListCnt(crackdownStatus)); + crackdownStatus.setPaginationInfo(); + mav.addObject("searchParams", crackdownStatus); + return mav; + } + + @GetMapping("/crackdownStatus/crackdownStatusEditModal") + public ModelAndView crackdownStatusEditModal(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){ + ModelAndView mav = new ModelAndView("faStatistics/crackdownStatus/crackdownStatusEditModal"); + if(crackdownStatus.getCdsKey()!=null){ + crackdownStatus = crackdownStatusService.selectCrackdownStatus(crackdownStatus.getCdsKey()); + }else{ + crackdownStatus.setWrtOrgan(loginUser.getOgCd()); + crackdownStatus.setWrtNm(loginUser.getUserNm()); + crackdownStatus.setWrtDt(LocalDateTime.now()); + } + mav.addObject("crackdownStatus", crackdownStatus); + return mav; + } + + @PostMapping("/crackdownStatus/saveCrackdownStatus") + public Integer saveCrackdownStatus(@AuthenticationPrincipal UserInfo loginUser, + CrackdownStatus crackdownStatus, + FishingBoat fishingBoat, + ProcessResult processResult){ + crackdownStatus.setWrtUserSeq(loginUser.getUserSeq()); + crackdownStatus.setFishingBoat(fishingBoat); + crackdownStatus.setProcessResult(processResult); + return crackdownStatusService.saveCrackdownStatus(crackdownStatus); + } +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/mapper/CrackdownStatusMapper.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/mapper/CrackdownStatusMapper.java new file mode 100644 index 00000000..bb25e07a --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/mapper/CrackdownStatusMapper.java @@ -0,0 +1,14 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.mapper; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.CrackdownStatus; +import com.dbnt.faisp.faStatistics.internationalCrimeArrest.model.InternationalCrimeArrest; +import com.dbnt.faisp.util.ParamMap; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface CrackdownStatusMapper { + List selectCrackdownStatusList(CrackdownStatus crackdownStatus); + Integer selectCrackdownStatusListCnt(CrackdownStatus crackdownStatus); +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CaptinPhotoFile.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CaptinPhotoFile.java new file mode 100644 index 00000000..93412e0b --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CaptinPhotoFile.java @@ -0,0 +1,53 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.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 +@IdClass(CaptinPhotoFile.CaptinPhotoFileId.class) +@Table(name = "captin_photo_file") +public class CaptinPhotoFile extends FileInfo { + @Id + @Column(name = "sailor_key") + private Integer sailorKey; + + @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 CaptinPhotoFileId implements Serializable { + private Integer sailorKey; + private Integer fileSeq; + } + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CrackdownStatus.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CrackdownStatus.java new file mode 100644 index 00000000..418b1166 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/CrackdownStatus.java @@ -0,0 +1,140 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.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 javax.persistence.*; +import java.time.LocalDateTime; +import java.util.List; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "crackdown_status") +public class CrackdownStatus extends BaseModel { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cds_key") + private Integer cdsKey; + + @Column(name = "case_num") + private String caseNum; + + @Column(name = "napo_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime napoDt; + + @Column(name = "napo_sea_point_lon") + private String napoSeaPointLon; + + @Column(name = "napo_sea_point_lat") + private String napoSeaPointLat; + + @Column(name = "napo_sea_point_detail") + private String napoSeaPointDetail; + + @Column(name = "invasion_type") + private String invasionType; + + @Column(name = "nll") + private String nll; + + @Column(name = "case_agency") + private String caseAgency; + + @Column(name = "case_police_officer") + private String casePoliceOfficer; + + @Column(name = "crackdown_boat") + private String crackdownBoat; + + @Column(name = "crackdown_police") + private String crackdownPolice; + + @Column(name = "mmsi") + private String mmsi; + + @Column(name = "field_ivsgt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime fieldIvsgt; + + @Column(name = "obstr_exspd_cnt") + private Integer obstrExspdCnt; + + @Column(name = "person_damage_cnt") + private Integer personDamageCnt; + + @Column(name = "person_damage_amount") + private Integer personDamageAmount; + + @Column(name = "person_damage_detail") + private String personDamageDetail; + + @Column(name = "material_damage_cnt") + private Integer materialDamageCnt; + + @Column(name = "material_damage_amount") + private Integer materialDamageAmount; + + @Column(name = "material_damage_detail") + private String materialDamageDetail; + + @Column(name = "field_ivsgt_napo_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime fieldIvsgtNapoDt; + + @Column(name = "field_ivsgt_release_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime fieldIvsgtReleaseDt; + + @Column(name = "field_ivsgt_time_taken") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime fieldIvsgtTimeTaken; + + @Column(name = "pressurized_start_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime pressurizedStartDt; + + @Column(name = "pressurized_end_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime pressurizedEndDt; + + @Column(name = "distance") + private String distance; + + @Column(name = "wrt_organ") + private String wrtOrgan; + + @Column(name = "wrt_user_seq") + private Integer wrtUserSeq; + + @Column(name = "wrt_nm") + private String wrtNm; + + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Transient + private List violationList; + @Transient + private FishingBoat fishingBoat; + @Transient + private ProcessResult processResult; + @Transient + private List sailorList; + + @Transient + private String crackdownPoliceEtc; + @Transient + private String crackdownBoatEtc; +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/FishingBoat.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/FishingBoat.java new file mode 100644 index 00000000..9d65557b --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/FishingBoat.java @@ -0,0 +1,134 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.model; + +import com.dbnt.faisp.config.BaseModel; +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "fishing_boat") +@IdClass(FishingBoat.FishingBoatId.class) +public class FishingBoat extends BaseModel { + + @Id + @Column(name = "fb_key") + private Integer fbKey; + + @Id + @Column(name = "cds_key") + private Integer cdsKey; + + @Column(name = "boat_name_kr") + private String boatNameKr; + + @Column(name = "boat_name_cn") + private String boatNameCn; + + @Column(name = "permit_num") + private String permitNum; + + @Column(name = "nationality") + private String nationality; + + @Column(name = "ton_cnt") + private Integer tonCnt; + + @Column(name = "fishery_type") + private String fisheryType; + + @Column(name = "boat_material") + private String boatMaterial; + + @Column(name = "boat_nny_sung") + private String boatNnySung; + + @Column(name = "boat_nny_si") + private String boatNnySi; + + @Column(name = "offense_type") + private String offenseType; + + @Column(name = "offense_quantity") + private Integer offenseQuantity; + + @Column(name = "offense_amount") + private Integer offenseAmount; + + @Column(name = "offense_illegal_waste_quantity") + private Integer offenseIllegalWasteQuantity; + + @Column(name = "dambo_unpaid_amount") + private Integer damboUnpaidAmount; + + @Column(name = "dambo_payment") + private Integer damboPayment; + + @Column(name = "payment_payment_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime paymentPaymentDt; + + @Column(name = "confiscation_frame") + private String confiscationFrame; + + @Column(name = "confiscation_width") + private String confiscationWidth; + + @Column(name = "confiscation_jo") + private String confiscationJo; + + @Column(name = "confiscation_gae") + private String confiscationGae; + + @Column(name = "confiscation_etc") + private String confiscationEtc; + + @Column(name = "catch_fish_species") + private String catchFishSpecies; + + @Column(name = "catch_cnt") + private Integer catchCnt; + + @Column(name = "offense_fish_species") + private String offenseFishSpecies; + + @Column(name = "offense_catch_cnt") + private Integer offenseCatchCnt; + + @Column(name = "save_yn") + private String saveYn; + + @Column(name = "wrt_organ") + private String wrtOrgan; + + @Column(name = "wrt_user_seq") + private Integer wrtUserSeq; + + @Column(name = "wrt_nm") + private String wrtNm; + + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Transient + private String boatMaterialEtc; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class FishingBoatId implements Serializable { + private Integer fbKey; + private Integer cdsKey; + } +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/ProcessResult.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/ProcessResult.java new file mode 100644 index 00000000..7112f9ab --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/ProcessResult.java @@ -0,0 +1,143 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.model; + +import com.dbnt.faisp.config.BaseModel; +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "process_result") +@IdClass(ProcessResult.ProcessResultId.class) +public class ProcessResult extends BaseModel { + + @Id + @Column(name = "pr_key") + private Integer prKey; + + @Id + @Column(name = "cds_key") + private Integer cdsKey; + + @Column(name = "process_status") + private String processStatus; + + @Column(name = "pressurized_time_taken") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime pressurizedTimeTaken; + + @Column(name = "warrant_req_take_time") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime warrantReqTakeTime; + + @Column(name = "is_ivsgt_stop") + private String isIvsgtStop; + + @Column(name = "eviction_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private String evictionDt; + + @Column(name = "direct_handover_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime directHandoverDt; + + @Column(name = "handover_sea_point_lon") + private String handoverSeaPointLon; + + @Column(name = "handover_sea_point_lat") + private String handoverSeaPointLat; + + @Column(name = "handover_sea_point_detail") + private String handoverSeaPointDetail; + + @Column(name = "handover_boat") + private String handoverBoat; + + @Column(name = "middle_takeover_boat") + private String middleTakeoverBoat; + + @Column(name = "consignment_start_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime consignmentStartDt; + + @Column(name = "consignment_end_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime consignmentEndDt; + + @Column(name = "confiscation_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime confiscationDt; + + @Column(name = "boat_disposal_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime boatDisposalDt; + + @Column(name = "boat_disposal_type") + private String boatDisposalType; + + @Column(name = "return_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime returnDt; + + @Column(name = "exile_cnt") + private Integer exileCnt; + + @Column(name = "exile_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime exileDt; + + @Column(name = "flight") + private String flight; + + @Column(name = "immigration_office_name") + private String immigrationOfficeName; + + @Column(name = "immigration_office_officer_name") + private String immigrationOfficeOfficerName; + + @Column(name = "immigration_office_officer_contact") + private String immigrationOfficeOfficerContact; + + @Column(name = "sentencing_court") + private String sentencingCourt; + + @Column(name = "sentencing_detail") + private String sentencingDetail; + + @Column(name = "execution_detail") + private String executionDetail; + + @Column(name = "wrt_organ") + private String wrtOrgan; + + @Column(name = "wrt_user_seq") + private Integer wrtUserSeq; + + @Column(name = "wrt_nm") + private String wrtNm; + + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Transient + private String processStatusEtc; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class ProcessResultId implements Serializable { + private Integer prKey; + private Integer cdsKey; + } +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Sailor.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Sailor.java new file mode 100644 index 00000000..8816f377 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Sailor.java @@ -0,0 +1,100 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.model; + +import com.dbnt.faisp.config.BaseModel; +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "sailor") +@IdClass(Sailor.SailorId.class) +public class Sailor extends BaseModel { + + @Id + @Column(name = "sailor_key") + private Integer sailorKey; + + @Id + @Column(name = "fb_key") + private Integer fbKey; + + @Column(name = "sailor_name_kr") + private String sailorNameKr; + + @Column(name = "sailor_name_cn") + private String sailorNameCn; + + @Column(name = "sailor_name_pinyin") + private String sailorNamePinyin; + + @Column(name = "sailor_contact") + private String sailorContact; + + @Column(name = "birthdate") + private String birthdate; + + @Column(name = "residence") + private String residence; + + @Column(name = "education") + private String education; + + @Column(name = "position") + private String position; + + @Column(name = "career") + private String career; + + @Column(name = "similar_criminal_history") + private Integer similarCriminalHistory; + + @Column(name = "heterogeneous_criminal_history") + private Integer heterogeneousCriminalHistory; + + @Column(name = "arrest_history") + private Integer arrestHistory; + + @Column(name = "criminal_history_detail") + private String criminalHistoryDetail; + + @Column(name = "monthly_wages") + private String monthlyWages; + + @Column(name = "is_restriction") + private String isRestriction; + + @Column(name = "note") + private String note; + + @Column(name = "wrt_organ") + private String wrtOrgan; + + @Column(name = "wrt_user_seq") + private Integer wrtUserSeq; + + @Column(name = "wrt_nm") + private String wrtNm; + + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class SailorId implements Serializable { + private Integer sailorKey; + private Integer fbKey; + } +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Violation.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Violation.java new file mode 100644 index 00000000..86be3085 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/model/Violation.java @@ -0,0 +1,31 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.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 javax.persistence.*; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "violation") +public class Violation extends BaseModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "violation_key") + private Integer violationKey; + @Column(name = "fb_key") + private Integer fbKey; + @Column(name = "violation") + private String violation; + + @Transient + private String violationEtc; +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CaptionPhotoFileRepository.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CaptionPhotoFileRepository.java new file mode 100644 index 00000000..fdabd9a9 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CaptionPhotoFileRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.repository; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.CaptinPhotoFile; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CaptionPhotoFileRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CrackdownStatusRepository.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CrackdownStatusRepository.java new file mode 100644 index 00000000..2333669d --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/CrackdownStatusRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.repository; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.CrackdownStatus; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CrackdownStatusRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/FishingBoatRepository.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/FishingBoatRepository.java new file mode 100644 index 00000000..2d547182 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/FishingBoatRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.repository; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.FishingBoat; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface FishingBoatRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ProcessResultRepository.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ProcessResultRepository.java new file mode 100644 index 00000000..abd1c8d5 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ProcessResultRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.repository; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.ProcessResult; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProcessResultRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/SailorRepository.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/SailorRepository.java new file mode 100644 index 00000000..d63c9ad1 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/SailorRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.repository; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.Sailor; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface SailorRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ViolationRepository.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ViolationRepository.java new file mode 100644 index 00000000..4b4c57b1 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/repository/ViolationRepository.java @@ -0,0 +1,8 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.repository; + +import com.dbnt.faisp.faStatistics.crackdownStatus.model.Violation; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ViolationRepository extends JpaRepository { + +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/service/CrackdownStatusService.java b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/service/CrackdownStatusService.java new file mode 100644 index 00000000..a5c93d00 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/faStatistics/crackdownStatus/service/CrackdownStatusService.java @@ -0,0 +1,97 @@ +package com.dbnt.faisp.faStatistics.crackdownStatus.service; + + +import com.dbnt.faisp.config.BaseService; +import com.dbnt.faisp.faStatistics.crackdownStatus.mapper.CrackdownStatusMapper; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.CrackdownStatus; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.ProcessResult; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.Sailor; +import com.dbnt.faisp.faStatistics.crackdownStatus.model.Violation; +import com.dbnt.faisp.faStatistics.crackdownStatus.repository.*; +import com.dbnt.faisp.faStatistics.internationalCrimeArrest.model.InternationalCrimeArrest; +import com.dbnt.faisp.faStatistics.internationalCrimeArrest.model.SuspectPersonInfo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class CrackdownStatusService extends BaseService { + + private final CrackdownStatusMapper crackdownStatusMapper; + private final CrackdownStatusRepository crackdownStatusRepository; + private final FishingBoatRepository fishingBoatRepository; + private final ViolationRepository violationRepository; + private final ProcessResultRepository processResultRepository; + private final SailorRepository sailorRepository; + + public List selectCrackdownStatusList(CrackdownStatus crackdownStatus) { + return crackdownStatusMapper.selectCrackdownStatusList(crackdownStatus); + }; + + public Integer selectCrackdownStatusListCnt(CrackdownStatus crackdownStatus) { + return crackdownStatusMapper.selectCrackdownStatusListCnt(crackdownStatus); + } + + public CrackdownStatus selectCrackdownStatus(Integer cdsKey) { + CrackdownStatus savedCrackdownStatus = crackdownStatusRepository.findById(cdsKey).orElse(null); + if (savedCrackdownStatus != null) { + + } + return savedCrackdownStatus; + } + + @Transactional + public Integer saveCrackdownStatus(CrackdownStatus crackdownStatus) { + if (crackdownStatus.getCrackdownBoatEtc() != null) { + crackdownStatus.setCrackdownBoat(crackdownStatus.getCrackdownBoatEtc()); + } + if (crackdownStatus.getCrackdownPoliceEtc() != null) { + crackdownStatus.setCrackdownPolice(crackdownStatus.getCrackdownPoliceEtc()); + } + + Integer cdsKey = crackdownStatusRepository.save(crackdownStatus).getCdsKey(); + if (crackdownStatus.getFishingBoat() != null) { + if (crackdownStatus.getFishingBoat().getBoatMaterialEtc() != null) { + crackdownStatus.getFishingBoat().setBoatMaterial(crackdownStatus.getFishingBoat().getBoatMaterialEtc()); + } + crackdownStatus.getFishingBoat().setCdsKey(cdsKey); + Integer fbKey = fishingBoatRepository.save(crackdownStatus.getFishingBoat()).getFbKey(); + crackdownStatus.getFishingBoat().setFbKey(fbKey); + } + + if (crackdownStatus.getProcessResult() != null) { + if (crackdownStatus.getProcessResult().getProcessStatusEtc() != null) { + crackdownStatus.getProcessResult().setProcessStatus(crackdownStatus.getProcessResult().getProcessStatusEtc()); + } + crackdownStatus.getProcessResult().setCdsKey(cdsKey); + Integer prKey = processResultRepository.save(crackdownStatus.getProcessResult()).getPrKey(); + crackdownStatus.getProcessResult().setPrKey(prKey); + } + + /*if (internationalCrimeArrest.getDeleteSpiKeyList() != null) { + suspectPersonInfoRepository.deleteAllByIdInQuery(internationalCrimeArrest.getDeleteSpiKeyList()); + }*/ + + if (crackdownStatus.getViolationList() != null) { + for(Violation violation: crackdownStatus.getViolationList()){ + if (violation.getViolationEtc() != null) { + violation.setViolation(violation.getViolationEtc()); + } + violation.setFbKey(crackdownStatus.getFishingBoat().getFbKey()); + } + violationRepository.saveAll(crackdownStatus.getViolationList()); + } + + if (crackdownStatus.getSailorList() != null) { + for(Sailor sailor: crackdownStatus.getSailorList()){ + sailor.setFbKey(crackdownStatus.getFishingBoat().getFbKey()); + } + sailorRepository.saveAll(crackdownStatus.getSailorList()); + } + + return cdsKey; + } +} diff --git a/src/main/java/com/dbnt/faisp/faStatistics/internationalCrimeArrest/mapper/InternationalCrimeArrestMapper.java b/src/main/java/com/dbnt/faisp/faStatistics/internationalCrimeArrest/mapper/InternationalCrimeArrestMapper.java index d27a3548..3763b62d 100644 --- a/src/main/java/com/dbnt/faisp/faStatistics/internationalCrimeArrest/mapper/InternationalCrimeArrestMapper.java +++ b/src/main/java/com/dbnt/faisp/faStatistics/internationalCrimeArrest/mapper/InternationalCrimeArrestMapper.java @@ -1,6 +1,5 @@ package com.dbnt.faisp.faStatistics.internationalCrimeArrest.mapper; -import com.dbnt.faisp.equip.model.Equip; import com.dbnt.faisp.faStatistics.internationalCrimeArrest.model.InternationalCrimeArrest; import com.dbnt.faisp.util.ParamMap; import org.apache.ibatis.annotations.Mapper; @@ -12,6 +11,5 @@ public interface InternationalCrimeArrestMapper{ List selectInternationalCrimeArrestList(InternationalCrimeArrest internationalCrimeArrest); Integer selectInternationalCrimeArrestListCnt(InternationalCrimeArrest internationalCrimeArrest); List selectInternationalCrimeArrestParamList(InternationalCrimeArrest internationalCrimeArrest); - List selectSuspectPersonInfoParamList(int icaKey); Integer icaDuplicateCount(InternationalCrimeArrest internationalCrimeArrest); } diff --git a/src/main/java/com/dbnt/faisp/ivsgtMgt/boardInvestigation/service/BoardInvestigationService.java b/src/main/java/com/dbnt/faisp/ivsgtMgt/boardInvestigation/service/BoardInvestigationService.java index 49baeec3..0fc4d977 100644 --- a/src/main/java/com/dbnt/faisp/ivsgtMgt/boardInvestigation/service/BoardInvestigationService.java +++ b/src/main/java/com/dbnt/faisp/ivsgtMgt/boardInvestigation/service/BoardInvestigationService.java @@ -90,7 +90,7 @@ public class BoardInvestigationService extends BaseService { int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); for(MultipartFile file : multipartFileList){ String saveName = UUID.randomUUID().toString(); - String path = locationPath+ File.separator+"monthPlan"+File.separator; + String path = locationPath+ File.separator+"ivsgt"+File.separator; saveFile(file, new File(path+File.separator+saveName)); String originalFilename = file.getOriginalFilename(); diff --git a/src/main/resources/mybatisMapper/CrackdownStatustMapper.xml b/src/main/resources/mybatisMapper/CrackdownStatustMapper.xml new file mode 100644 index 00000000..29e4bf2d --- /dev/null +++ b/src/main/resources/mybatisMapper/CrackdownStatustMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/faStatistics/crackdownStatus.js b/src/main/resources/static/js/faStatistics/crackdownStatus.js new file mode 100644 index 00000000..332c22c6 --- /dev/null +++ b/src/main/resources/static/js/faStatistics/crackdownStatus.js @@ -0,0 +1,305 @@ +$(document).on('click', '#crackdownStatusAddBtn', function () { + getCrackdownStatusEditModal(null); +}); + +$(document).on('click', '#crackdownStatusEditBtn', function () { + $("#crackdownStatusViewModal").modal('hide'); + getCrackdownStatusEditModal(Number($("#icaViewBody").find("[name='cdsKey']").val())); +}); + + +$(document).on('click', '#saveCrackdownStatusBtn', function (){ + saveCrackdownStatus('N') +}); + +$(document).on('click', '#saveTempBtn', function (){ + saveCrackdownStatus('Y') +}); + +$(document).on('click', '.tr', function (){ + getCrackdownStatusViewModal($(this).data('key')); +}); + +$(document).on('click', '#sailorAddBtn', function (){ + $('#sailorDiv').append( + '
' + + '' + + '
' + + '' + + '
' + + '
' + + '' + + '
' + + '' + + '
' + ) +}); + + +$(document).on('click', '#violationAddBtn', function (){ + let violation = ''; + commonCode.VT.forEach(function (item){ + violation += ''; + }) + + $('#violationDiv').append( + '
' + + '' + + '' + + '
' + ) +}); + + +$(document).on('click', '#sailorRemoveBtn', function (){ + $(this).parent().remove(); +}); + +$(document).on('click', '#violationRemoveBtn', function (){ + $(this).parent().remove(); +}); + +$(document).on('change', '.violation', function (){ + if ($(this).val() == 'etc') { + $(this).after( + '
' + + '' + + '
' + ); + } else { + $(this).next().remove(); + } +}); + +$(document).on('change', '#crackdownPolice', function (){ + if ($(this).val() == 'etc') { + $(this).after( + '
' + + '' + + '
' + ); + } else { + $(this).next().remove(); + } +}); + +$(document).on('change', '#crackdownBoat', function (){ + if ($(this).val() == 'etc') { + $(this).after( + '
' + + '' + + '
' + ); + } else { + $(this).next().remove(); + } +}); + +$(document).on('change', '#boatMaterial', function (){ + if ($(this).val() == 'etc') { + $(this).after( + '
' + + '' + + '
' + ); + } else { + $(this).next().remove(); + } +}); + +$(document).on('change', '#processStatus', function (){ + if ($(this).val() == 'etc') { + $(this).after( + '
' + + '' + + '
' + ); + } else { + $(this).next().remove(); + } +}); + +function getCrackdownStatusEditModal(cdsKey){ + $.ajax({ + url: '/faStatistics/crackdownStatus/crackdownStatusEditModal', + data: { + cdsKey: cdsKey + }, + type: 'GET', + dataType:"html", + success: function(html){ + $("#crackdownStatusViewBody").empty(); + $("#crackdownStatusEditModalContent").empty().append(html); + $("#crackdownStatusEditModal").modal('show'); + + $("#napoDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#birthdate").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#paymentPaymentDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#consignmentStartDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#consignmentEndDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#evictionDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#returnDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#confiscationDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#boatDisposalDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#directHandoverDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#fieldIvsgtNapoDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#fieldIvsgtReleaseDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#pressurizedStartDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + $("#pressurizedEndDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko" + }); + + }, + error:function(){ + + } + }); +} + +function saveCrackdownStatus(saveYn){ + if(contentCheck()){ + if(confirm("저장하시겠습니까?")){ + $("#saveYn").val(saveYn); + contentFade("in"); + const formData = new FormData($("#cdsEditForm")[0]); + + let violationList = []; + let sailorList = []; + + sailorList.push( + { position: 'POS001', sailorNameKr: null, isRestriction: $("#cdsEditForm").find('select[name="captin"]').val() != '' ? $("#cdsEditForm").find('select[name="captin"]').val() : null }, + { position: 'POS002', sailorNameKr: null, isRestriction: $("#cdsEditForm").find('select[name="mate"]').val() != '' ? $("#cdsEditForm").find('select[name="mate"]').val() : null }, + { position: 'POS003', sailorNameKr: null, isRestriction: $("#cdsEditForm").find('select[name="warden"]').val() != '' ? $("#cdsEditForm").find('select[name="warden"]').val() : null } + ); + + $(".sailor-list").each(function (){ + sailorList.push({ + sailorKey: $(this).parent().parent().find('input[name="sailorKey"]').val() != undefined ? Number($(this).find('input[name="sailorKey"]').val()) : null, + sailorNameKr: $(this).parent().parent().find('input[name="sailorNameKr"]').val(), + position: 'POS006', + isRestriction: $(this).val() != undefined ? $(this).val() : null + }); + }); + + for (let i=0; i < sailorList.length; i++) { + if (sailorList[i].spiKey != null) { + formData.append(`sailorList[${i}].sailorKey`, sailorList[i].sailorKey); + } + if (sailorList[i].sailorNameKr != null) { + formData.append(`sailorList[${i}].sailorNameKr`, sailorList[i].sailorNameKr); + } + formData.append(`sailorList[${i}].position`, sailorList[i].position); + if (sailorList[i].isRestriction != null) { + formData.append(`sailorList[${i}].isRestriction`, sailorList[i].isRestriction); + } + } + + $(".violation").each(function (){ + violationList.push({ + violationKey: $(this).parent().find('input[name="violationKey"]').val() != undefined ? Number($(this).find('input[name="violationKey"]').val()) : null, + fbKey: $("#cdsEditForm").find('input[name="fbKey"]').val() != undefined ? Number($(this).find('input[name="fbKey"]').val()) : null, + violation: $(this).val() != '' ? $(this).val() : null, + violationEtc: $(this).parent().find('input[name="violationEtc"]').val() != undefined ? $(this).find('input[name="violationEtc"]').val() : null + }); + }); + + for (let i=0; i < violationList.length; i++) { + if (violationList[i].violationKey != null) { + formData.append(`violationList[${i}].violationKey`, violationList[i].violationKey); + } + if (violationList[i].fbKey != null) { + formData.append(`violationList[${i}].fbKey`, violationList[i].fbKey); + } + if (violationList[i].violation != null) { + formData.append(`violationList[${i}].violation`, violationList[i].violation); + } + if (violationList[i].violationEtc != null) { + formData.append(`violationList[${i}].violationEtc`, violationList[i].violationEtc); + } + } + + $.ajax({ + type : 'POST', + data : formData, + url : "/faStatistics/crackdownStatus/saveCrackdownStatus", + processData: false, + contentType: false, + success : function(result) { + alert("저장되었습니다."); + contentFade("out"); + $("#crackdownStatusEditModal").modal('hide'); + }, + error : function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + } + } +} + +function contentCheck(){ + let flag = true; + + if(!$('input[name="boatNameKr"]').val()) { + alert('선명을 입력해주세요.'); + $('input[name="boatNameKr"]').focus(); + return false; + } + + if(!$('select[name="processStatus"]').val()) { + alert('처리현황을 선택해주세요.'); + $('select[name="processStatus"]').focus(); + return false; + } + + return flag; +} \ No newline at end of file diff --git a/src/main/resources/static/js/faStatistics/internationalCrimeArrest.js b/src/main/resources/static/js/faStatistics/internationalCrimeArrest.js index c9717e41..19a67175 100644 --- a/src/main/resources/static/js/faStatistics/internationalCrimeArrest.js +++ b/src/main/resources/static/js/faStatistics/internationalCrimeArrest.js @@ -489,7 +489,6 @@ function saveInternationalCrimeArrest(contentState){ alert("저장되었습니다."); contentFade("out"); $("#icaEditModal").modal('hide'); - // getIcaViewModal(result); }, error : function(xhr, status) { alert("저장에 실패하였습니다.") diff --git a/src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatus.html b/src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatus.html new file mode 100644 index 00000000..fc44229d --- /dev/null +++ b/src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatus.html @@ -0,0 +1,265 @@ + + + + + + +
+
+

불법조업 외국어선 단속현황

+ + +
+
+
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
연번나포일시위반장소위반내용침범유형NLL특수공무집행방해사건담당경찰서검거기관MMSI.NO(AIS)선박제원선장(출생년도)선종어획물 축소기재범칙물처리현황담보금납부(만원)담보금미납(만원)선박처리직접인계구속불구속현장조사압송영장청구 소요시간압수어구
무허가 조업 +
특정금지
+
(무허가, 정선명령위반)
+
+
EEZ
+
제한조건
+
영해침범발생건수인적피해물적피해구분선명톤수(톤)선원(명)선질선적어종어획량(kg)폐기량(kg)위판량(kg)위판금액(원)조사중완료척수납부액납부일시미납미납금액위탁관리위탁시작일위탁종료일퇴거직접인계공매폐선침몰환부일시해점인계함정중측인수함정선장향해장기관장선원구속척수(몰수판결)선장향해장기관장선원불구속척수틀(타망)폭(유망)조(형망)개(통발)기타
피해인원피해액(만원)상세내용발생건수피해액(만원)상세내용단순폐선폐선조건부공매
34214349000,00049099,099단속경찰서단속함정이름출생년도어종수량1001001008888700108400400010800001110111282762010101010102010102111010나포일시석방일시소요시간소요시간거리(해리)78101112
+
+
+ + + +
+ + +
+
+ +
+
+
+
+
+ + + +
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatusEditModal.html b/src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatusEditModal.html new file mode 100644 index 00000000..c07ce953 --- /dev/null +++ b/src/main/resources/templates/faStatistics/crackdownStatus/crackdownStatusEditModal.html @@ -0,0 +1,457 @@ + + + + + + \ No newline at end of file