불법조업외국어선 수정중.

master
강석 최 2023-05-22 18:16:04 +09:00
parent d1a8c4f289
commit 7d6caecbed
6 changed files with 790 additions and 0 deletions

View File

@ -0,0 +1,52 @@
package com.dbnt.faisp.main.faStatistics.unlawfulFishing;
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.UnlawfulFishingParam;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.crackdownStatus.CSStatistics;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.crackdownStatus.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.crackdownStatus.CrackdownStatusDTO;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.service.UnlawfulFishingService;
import com.dbnt.faisp.main.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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/unlawfulFishing")
public class UnlawfulFishingController {
private final UnlawfulFishingService unlawfulFishingService;
private final AuthMgtService authMgtService;
@GetMapping("/crackdownStatus")
public ModelAndView crackdownStatusPage(@AuthenticationPrincipal UserInfo loginUser, UnlawfulFishingParam params){
ModelAndView mav = new ModelAndView("faStatistics/unlawfulFishing/crackdownStatus/crackdownStatusPage");
//메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faStatistics/crackdownStatus").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
if(params.getYear()==null){
params.setYear(LocalDateTime.now().getYear());
}
List<Integer> yearList = unlawfulFishingService.selectFishingBoatYearParam();
if(!yearList.contains(params.getYear())){
yearList.add(params.getYear());
}
List<CrackdownStatusDTO> csDTOList = new ArrayList<CrackdownStatusDTO>();
CSStatistics statistics = new CSStatistics();
mav.addObject("statistics", statistics);
mav.addObject("crackdownStatusList", csDTOList);
mav.addObject("yearList", yearList);
mav.addObject("searchParams", params);
return mav;
}
}

View File

@ -0,0 +1,13 @@
package com.dbnt.faisp.main.faStatistics.unlawfulFishing.mapper;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.UnlawfulFishingParam;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.asfCov.AsfCov;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UnlawfulFishingMapper {
List<Integer> selectFishingBoatYearParam();
}

View File

@ -0,0 +1,19 @@
package com.dbnt.faisp.main.faStatistics.unlawfulFishing.service;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.UnlawfulFishingParam;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.mapper.UnlawfulFishingMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class UnlawfulFishingService {
private final UnlawfulFishingMapper unlawfulFishingMapper;
public List<Integer> selectFishingBoatYearParam() {
return unlawfulFishingMapper.selectFishingBoatYearParam();
}
}

View File

@ -617,11 +617,13 @@
) e on b.fb_key = e.fb_key
<include refid="selectFishingBoatListWhere"></include>
</select>
<select id="selectFishingBoatYearParam" resultType="int" parameterType="UnlawfulFishingParam">
select distinct extract(year from napo_dt) as year
from crackdown_status
where napo_dt is not null
</select>
<select id="selectCrackdownStatusVersionList" resultType="CrackdownStatusVersion" parameterType="int">
select cds_key,
version_no,

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dbnt.faisp.main.faStatistics.unlawfulFishing.mapper.UnlawfulFishingMapper">
<select id="selectFishingBoatYearParam" resultType="int">
select distinct extract(year from napo_dt) as year
from crackdown_status
where napo_dt is not null
</select>
</mapper>

View File

@ -0,0 +1,690 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
<script th:inline="javascript">
const crackdownStatus = [[${crackdownStatus}]];
const commonCode = [[${session.commonCode}]];
</script>
<!--<script type="text/javascript" th:src="@{/js/faStatistics/crackdownStatus.js}"></script>-->
<script type="text/javascript" th:src="@{/js/faStatistics/fishingBoatMgt.js}"></script>
</th:block>
<th:block layout:fragment="css">
<style>
#violationSelectDiv{
position: absolute;
top: 45px;
left: 555px;
display: none;
z-index: 10;
}
</style>
</th:block>
<div layout:fragment="content">
<main>
<input type="hidden" id="menuKey" value="42">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row justify-content-between">
<div class="col-auto">
<div class="d-inline align-middle"><i class="bi bi-square-fill"></i></div>
<h5 class="d-inline align-middle"> 불법조업 외국어선 단속현황</h5>
</div>
<div class="col-auto"><p class="mb-0 mt-2">외사통계 > 불법조업외국어선 > 불법조업 외국어선 단속현황</p></div>
</div>
<div class="row mx-0">
<div class="col-12 card bg-light text-center">
<div class="card-body">
<form method="get" th:action="@{/faStatistics/crackdownStatus}" id="cdsSearchForm">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-between py-1">
<div class="col-auto">
<div>
<select class="form-select form-select-sm" name="year">
<option value="">연도</option>
<th:block th:each="year : ${yearList}">
<option th:value="${year}" th:text="${year}" th:selected="${searchParams.year eq year}"></option>
</th:block>
</select>
</div>
<div>
<select class="form-select form-select-sm" name="month">
<option value=""></option>
<th:block th:each="month : ${#numbers.sequence(1, 12)}">
<option th:value="${month}" th:text="${month}" th:selected="${searchParams.month eq month}"></option>
</th:block>
</select>
</div>
</div>
<div class="col-8">
<div class="row">
<div class="col-11">
<div class="row justify-content-end pb-1">
<div class="col-4">
<input type="text" class="form-control form-control-sm" id="violationInput" placeholder="위반형태" readonly>
<div class="bg-white border p-2 text-start" id="violationSelectDiv">
<th:block th:each="code:${session.commonCode.get('VT')}">
<div>
<input type="checkbox" name="violationList" class="violationParams" th:id="|violation${code.itemCd}|" th:value="${code.itemCd}" th:checked="${searchParams.violationList ne null?#lists.contains(searchParams.violationList, code.itemCd):false}">
<label th:for="|violation${code.itemCd}|" class="form-label col-form-label-sm mb-0" th:text="${code.itemValue}"></label>
</div>
</th:block>
</div>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="napoSeaPointDetail" id="napoSeaPointDetail" placeholder="위반장소" th:value="${searchParams.napoSeaPointDetail}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="nll">
<option value="">NLL</option>
<option value="Y" th:selected="${searchParams.nll == 'Y'}">O</option>
<option value="N" th:selected="${searchParams.nll == 'N'}">X</option>
</select>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="mmsi" id="mmsi" placeholder="MMSI.NO" th:value="${searchParams.mmsi}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="caseAgency">
<option value="">사건담당경찰서</option>
<th:block th:each="code:${session.commonCode.get('OG')}">
<option th:if="${code.useChk eq 'T'}" th:value="${code.itemCd}" th:text="${code.itemValue}"
th:selected="${code.itemCd eq searchParams.caseAgency}"></option>
</th:block>
</select>
</div>
</div>
<div class="row justify-content-end pb-1">
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownPolice" id="searchFormPolice">
<option value="">단속경찰서</option>
<th:block th:each="code:${session.commonCode.get('CPO')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"
th:selected="${code.itemCd eq searchParams.crackdownPolice}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownBoat" id="searchFormBoat" disabled>
<option value="">단속함정</option>
<th:block th:each="cpoNum:${#numbers.sequence(1, #lists.size(session.commonCode.get('CPO')))}">
<th:block th:each="code:${session.commonCode.get('CPO'+cpoNum)}">
<option th:class="${code.categoryCd}" th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.crackdownBoat}" style="display: none;"></option>
</th:block>
</th:block>
</select>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="distance" id="distance" placeholder="거리" th:value="${searchParams.distance}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="processStatus" id="processStatus">
<option value="">처리현황</option>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.processStatus}"></option>
</th:block>
</select>
</div>
<div class="col-4">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<select class="form-select form-select-sm w-30" name="dateSelector">
<option value="">조건선택</option>
<option value="napoDt" th:selected="${searchParams.dateSelector eq 'napoDt'}">나포일시</option>
<option value="evictionDt" th:selected="${searchParams.dateSelector eq 'evictionDt'}">퇴거일</option>
<option value="directHandoverDt" th:selected="${searchParams.dateSelector eq 'directHandoverDt'}">직접인계일</option>
<option value="consignmentDt" th:selected="${searchParams.dateSelector eq 'consignmentDt'}">위탁일</option>
<option value="confiscationDt" th:selected="${searchParams.dateSelector eq 'confiscationDt'}">몰수확정일</option>
<option value="boatDisposalDt" th:selected="${searchParams.dateSelector eq 'boatDisposalDt'}">폐선일</option>
<option value="returnDt" th:selected="${searchParams.dateSelector eq 'returnDt'}">환부일</option>
<option value="wrtDt" th:selected="${searchParams.dateSelector eq 'wrtDt'}">최종수정일</option>
</select>
<input type="text" class="form-control form-control-sm w-35" id="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
<input type="text" class="form-control form-control-sm w-35" id="endDate" name="endDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.endDate}">
</div>
</div>
</div>
<div class="row justify-content-start pb-1 subSearchParam" style="display: none">
<hr class="mb-1">
<label class="col-2 col-form-label col-form-label-sm">처리현황</label>
<div class="col-2">
<select class="form-select form-select-sm" name="isDamboUnpaidAmount" th:value="${searchParams.isDamboUnpaidAmount}">
<option value="">담보금 미납 여부</option>
<option value="Y" th:selected="${searchParams.isDamboUnpaidAmount eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.isDamboUnpaidAmount eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="isEvictionDt" th:value="${searchParams.isEvictionDt}">
<option value="">퇴거여부</option>
<option value="Y" th:selected="${searchParams.isEvictionDt eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.isEvictionDt eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="isReturnDt" th:value="${searchParams.isReturnDt}">
<option value="">환부여부</option>
<option value="Y" th:selected="${searchParams.isReturnDt eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.isReturnDt eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="isConsignmentStartDt" th:value="${searchParams.isConsignmentStartDt}">
<option value="">위탁관리 여부</option>
<option value="Y" th:selected="${searchParams.isConsignmentStartDt eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.isConsignmentStartDt eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="isConfiscationDt" th:value="${searchParams.isConfiscationDt}">
<option value="">침몰여부</option>
<option value="Y" th:selected="${searchParams.isConfiscationDt eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.isConfiscationDt eq 'N'}">X</option>
</select>
</div>
<div class="col-2"></div>
<div class="col-2">
<select class="form-select form-select-sm" name="boatDisposalType" th:value="${searchParams.boatDisposalType}">
<option value="">폐선종류</option>
<th:block th:each="commonCode:${session.commonCode.get('BDT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.boatDisposalType}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="isDirectHandoverDt" th:value="${searchParams.isDirectHandoverDt}">
<option value="">직접인계 여부</option>
<option value="Y" th:selected="${searchParams.isDirectHandoverDt eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.isDirectHandoverDt eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="handoverSeaPointDetail" id="handoverSeaPointDetail" placeholder="직접인계 해점" th:value="${searchParams.handoverSeaPointDetail}">
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="handoverBoat" id="handoverBoat" placeholder="인계함정" th:value="${searchParams.handoverBoat}">
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="middleTakeoverBoat" id="middleTakeoverBoat" placeholder="중측 인수함정" th:value="${searchParams.middleTakeoverBoat}">
</div>
</div>
<div class="row justify-content-start pb-1 subSearchParam" style="display: none">
<hr class="mb-1">
<label class="col-2 col-form-label col-form-label-sm">어선정보</label>
<div class="col-2">
<input class="form-control form-control-sm" name="boatNameKr" id="boatNameKr" placeholder="선명" th:value="${searchParams.boatNameKr}">
</div>
<div class="col-2">
<div class="input-group">
<input type="number" min="0" class="form-control form-control-sm" name="tonMin" id="tonStartCnt" placeholder="톤수" th:value="${searchParams.tonMin}">
~<input type="number" min="0" class="form-control form-control-sm" name="tonMax" id="tonEndCnt" placeholder="톤수" th:value="${searchParams.tonMax}">
</div>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="boatMaterial" id="boatMaterial">
<option value="">선질</option>
<th:block th:each="commonCode:${session.commonCode.get('BM')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.boatMaterial}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="boatNnySung" id="boatNnySung" placeholder="선적 성" th:value="${searchParams.boatNnySung}">
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="boatNnySi" id="boatNnySi" placeholder="선적 시" th:value="${searchParams.boatNnySi}">
</div>
<div class="col-2"></div>
<div class="col-2">
<input class="form-control form-control-sm" name="sailorNameKr" id="sailorNameKr" placeholder="선장명" th:value="${searchParams.sailorNameKr}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="fisheryType" id="fisheryType">
<option value="">선종</option>
<th:block th:each="commonCode:${session.commonCode.get('FT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.fisheryType}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="catchFishSpecies" id="catchFishSpecies" placeholder="어획물 축소기재 어종" th:value="${searchParams.catchFishSpecies}">
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="offenseFishSpecies" id="offenseFishSpecies" placeholder="범칙물 어종" th:value="${searchParams.offenseFishSpecies}">
</div>
<div class="col-2"></div>
<label class="col-2 col-form-label col-form-label-sm">압수어구</label>
<div class="col-2">
<select class="form-select form-select-sm" name="confiscationFrame">
<option value=""></option>
<option value="Y" th:selected="${searchParams.confiscationFrame eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.confiscationFrame eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="confiscationWidth">
<option value=""></option>
<option value="Y" th:selected="${searchParams.confiscationWidth eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.confiscationWidth eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="confiscationJo">
<option value=""></option>
<option value="Y" th:selected="${searchParams.confiscationJo eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.confiscationJo eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="confiscationGae">
<option value=""></option>
<option value="Y" th:selected="${searchParams.confiscationGae eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.confiscationGae eq 'N'}">X</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="confiscationEtc">
<option value="">기타</option>
<option value="Y" th:selected="${searchParams.confiscationEtc eq 'Y'}">O</option>
<option value="N" th:selected="${searchParams.confiscationEtc eq 'N'}">X</option>
</select>
</div>
</div>
<div class="row justify-content-start pb-1 subSearchParam" style="display: none">
<hr class="mb-1">
<label class="col-2 col-form-label col-form-label-sm">특수공무</label>
<label class="col-1 col-form-label col-form-label-sm">인적피해</label>
<div class="col-2">
<div class="input-group">
<input type="number" min="0" class="form-control form-control-sm" name="obstrExspdCntMin" placeholder="발생건수" th:value="${searchParams.obstrExspdCntMin}">
~<input type="number" min="0" class="form-control form-control-sm" name="obstrExspdCntMax" placeholder="발생건수" th:value="${searchParams.obstrExspdCntMax}">
</div>
</div>
<div class="col-2">
<div class="input-group">
<input type="number" min="0" class="form-control form-control-sm" name="personDamageCntMin" placeholder="피해인원" th:value="${searchParams.personDamageCntMin}">
~<input type="number" min="0" class="form-control form-control-sm" name="personDamageCntMax" placeholder="피해인원" th:value="${searchParams.personDamageCntMax}">
</div>
</div>
<div class="col-2">
<div class="input-group">
<input type="number" min="0" class="form-control form-control-sm" name="personDamageAmountMin" placeholder="피해액" th:value="${searchParams.personDamageAmountMin}">
~<input type="number" min="0" class="form-control form-control-sm" name="personDamageAmountMax" placeholder="피해액" th:value="${searchParams.personDamageAmountMax}">
</div>
</div>
<div class="col-3">
<input class="form-control form-control-sm" name="personDamageDetail" id="personDamageDetail" placeholder="인적피해 상세내용" th:value="${searchParams.personDamageDetail}">
</div>
<label class="col-2 col-form-label col-form-label-sm">집행방해</label>
<label class="col-1 col-form-label col-form-label-sm">물적피해</label>
<div class="col-2">
<div class="input-group">
<input type="number" min="0" class="form-control form-control-sm" name="materialDamageCntMin" placeholder="발생건수" th:value="${searchParams.materialDamageCntMin}">
~<input type="number" min="0" class="form-control form-control-sm" name="materialDamageCntMax" placeholder="발생건수" th:value="${searchParams.materialDamageCntMax}">
</div>
</div>
<div class="col-2"></div>
<div class="col-2">
<div class="input-group">
<input type="number" min="0" class="form-control form-control-sm" name="materialDamageAmountMin" placeholder="피해액" th:value="${searchParams.materialDamageAmountMin}">
~<input type="number" min="0" class="form-control form-control-sm" name="materialDamageAmountMax" placeholder="피해액" th:value="${searchParams.materialDamageAmountMax}">
</div>
</div>
<div class="col-3">
<input class="form-control form-control-sm" name="materialDamageDetail" id="materialDamageDetail" placeholder="물적피해 상세내용" th:value="${searchParams.materialDamageDetail}">
</div>
</div>
<div class="row justify-content-start subSearchParam" style="display: none">
<hr class="mb-1">
<label class="col-2 col-form-label col-form-label-sm">구속여부</label>
<div class="col-2">
<select class="form-select form-select-sm" name="captainRestriction">
<option value="">선장</option>
<option value="Y" th:selected="${searchParams.captainRestriction eq 'Y'}">구속</option>
<option value="N" th:selected="${searchParams.captainRestriction eq 'N'}">불구속</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="navigaterRestriction">
<option value="">향해장</option>
<option value="Y" th:selected="${searchParams.navigaterRestriction eq 'Y'}">구속</option>
<option value="N" th:selected="${searchParams.navigaterRestriction eq 'N'}">불구속</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="engineerRestriction">
<option value="">기관장</option>
<option value="Y" th:selected="${searchParams.engineerRestriction eq 'Y'}">구속</option>
<option value="N" th:selected="${searchParams.engineerRestriction eq 'N'}">불구속</option>
</select>
</div>
</div>
</div>
<div class="col-1 d-grid gap-2">
<input type="submit" class="btn btn-primary" id="searchBtn" value="검색">
<button type="button" class="btn btn-info" id="searchFormBtn" data-state="hide">조건<br>펼치기</button>
</div>
</div>
</div>
</div>
</form>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12 overflow-auto">
<table class="table table-sm table-hover table-bordered text-nowrap" id="cdsTable">
<thead class="align-middle">
<tr class="table-secondary">
<th rowspan="4">순번</th>
<th rowspan="4">나포일시</th>
<th rowspan="4">위반내용</th>
<th rowspan="4">위반장소</th>
<th colspan="4">침범유형</th>
<th rowspan="3">NLL</th>
<th colspan="7">특수공무집행방해</th>
<th rowspan="4">사건담당경찰서</th>
<th colspan="2">검거기관</th>
<th rowspan="4">MMSI.NO(AIS)</th>
<th colspan="6">선박제원</th>
<th rowspan="3" colspan="2">선장(출생년도)</th>
<th rowspan="4">선종</th>
<th rowspan="3" colspan="2">어획물 축소기재</th>
<th colspan="5">범칙물</th>
<th colspan="2">처리현황</th>
<th colspan="3">담보금납부(만원)</th>
<th colspan="2">담보금미납(만원)</th>
<th colspan="10">선박처리</th>
<th colspan="4">직접인계</th>
<th colspan="6">구속</th>
<th colspan="6">불구속</th>
<th rowspan="3" colspan="4">현장조사</th>
<th rowspan="3" colspan="2">압송</th>
<th rowspan="4">영장청구 소요시간</th>
<th colspan="5">압수어구</th>
</tr>
<tr class="table-secondary">
<th rowspan="2">무허가 조업</th>
<th rowspan="2">
<div>특정금지</div>
<div>(무허가, 정선명령위반)</div>
</th>
<th rowspan="2">
<div>EEZ</div>
<div>제한조건</div>
</th>
<th rowspan="2">영해침범</th>
<th rowspan="2">발생건수</th>
<th colspan="3">인적피해</th>
<th colspan="3">물적피해</th>
<th rowspan="2" colspan="2">구분</th>
<th rowspan="3">선명</th>
<th rowspan="3">톤수(톤)</th>
<th rowspan="3">선원(명)</th>
<th rowspan="3">선질</th>
<th rowspan="2" colspan="2">선적</th>
<th rowspan="3">어종</th>
<th rowspan="2">어획량(kg)</th>
<th rowspan="2">폐기량(kg)</th>
<th rowspan="2">위판량(kg)</th>
<th rowspan="2">위판금액(원)</th>
<th rowspan="2">조사중</th>
<th rowspan="2">완료</th>
<th rowspan="2">척수</th>
<th rowspan="2">납부액</th>
<th rowspan="3">납부일시</th>
<th rowspan="2">미납</th>
<th rowspan="2">미납금액</th>
<th rowspan="2">위탁관리</th>
<th rowspan="3">위탁시작일</th>
<th rowspan="3">위탁종료일</th>
<th rowspan="2">퇴거</th>
<th rowspan="2">직접인계</th>
<th rowspan="2">공매</th>
<th colspan="2">폐선</th>
<th rowspan="2">침몰</th>
<th rowspan="2">환부</th>
<th rowspan="3">일시</th>
<th rowspan="3">해점</th>
<th rowspan="3">인계함정</th>
<th rowspan="3">중측인수함정</th>
<th rowspan="2"></th>
<th rowspan="2">선장</th>
<th rowspan="2">항해장</th>
<th rowspan="2">기관장</th>
<th rowspan="2">선원</th>
<th rowspan="2">구속척수(몰수판결)</th>
<th rowspan="2"></th>
<th rowspan="2">선장</th>
<th rowspan="2">항해장</th>
<th rowspan="2">기관장</th>
<th rowspan="2">선원</th>
<th rowspan="2">불구속척수</th>
<th rowspan="2">틀(타망)</th>
<th rowspan="2">폭(유망)</th>
<th rowspan="2">조(형망)</th>
<th rowspan="2">개(통발)</th>
<th rowspan="2">기타</th>
</tr>
<tr class="table-secondary">
<th>피해인원</th>
<th>피해액(만원)</th>
<th rowspan="2">상세내용</th>
<th>발생건수</th>
<th>피해액(만원)</th>
<th rowspan="2">상세내용</th>
<th>단순폐선</th>
<th>폐선조건부공매</th>
</tr>
<tr class="table-secondary">
<th th:text="${statistics.vt002Cnt}"></th>
<th th:text="${statistics.vt003vt004Cnt}"></th>
<th th:text="${statistics.vt029Cnt}"></th>
<th th:text="${statistics.vt030Cnt}"></th>
<th th:text="${statistics.nllCnt}"></th>
<th th:text="${statistics.obstrExspdCnt}"></th>
<th th:text="${statistics.personDamageCnt}"></th>
<th th:text="|${statistics.personDamageAmount/10000}만원|"></th>
<th th:text="${statistics.materialDamageCnt}"></th>
<th th:text="|${statistics.materialDamageAmount/10000}만원|"></th>
<th>단속경찰서</th>
<th>단속함정</th>
<th></th>
<th></th>
<th>이름</th>
<th>출생년도</th>
<th>어종</th>
<th>수량</th>
<th th:text="|${statistics.offenseWeight}kg|"></th>
<th th:text="|${statistics.offenseIllegalWasteQuantity}kg|"></th>
<th th:text="|${statistics.offenseQuantity}kg|"></th>
<th th:text="|${statistics.offenseAmount}원|"></th>
<th th:text="${statistics.pr001Cnt}"></th>
<th th:text="${statistics.otherPrCnt}"></th>
<th th:text="${statistics.damboPaymentCnt}"></th>
<th th:text="|${statistics.damboPayment/10000}만원|"></th>
<th th:text="${statistics.damboUnpaidAmountCnt}"></th>
<th th:text="|${statistics.damboUnpaidAmount/10000}만원|"></th>
<th th:text="${statistics.consignmentCnt}"></th>
<th th:text="${statistics.evictionCnt}"></th>
<th th:text="${statistics.directHandoverCnt}"></th>
<th th:text="${statistics.bdt001Cnt}"></th>
<th th:text="${statistics.bdt002Cnt}"></th>
<th th:text="${statistics.bdt003Cnt}"></th>
<th th:text="${statistics.exileCnt}"></th>
<th th:text="${statistics.returnCnt}"></th>
<th th:text="${statistics.sailorRestrictionCnt}"></th>
<th th:text="${statistics.captainRestrictionCnt}"></th>
<th th:text="${statistics.navigaterRestrictionCnt}"></th>
<th th:text="${statistics.engineerRestrictionCnt}"></th>
<th th:text="${statistics.normalRestrictionCnt}"></th>
<th th:text="${statistics.confiscationCnt}"></th>
<th th:text="${statistics.sailorRestrictionNotCnt}"></th>
<th th:text="${statistics.captainRestrictionNotCnt}"></th>
<th th:text="${statistics.navigaterRestrictionNotCnt}"></th>
<th th:text="${statistics.engineerRestrictionNotCnt}"></th>
<th th:text="${statistics.normalRestrictionNotCnt}"></th>
<th th:text="${statistics.confiscationNotCnt}"></th>
<th th:text="${statistics.fieldIvsgtCnt}"></th>
<th>나포일시</th>
<th>석방일시</th>
<th>소요시간</th>
<th>소요시간</th>
<th>거리(해리)</th>
<th th:text="${statistics.confiscationFrameCnt}"></th>
<th th:text="${statistics.confiscationWidthCnt}"></th>
<th th:text="${statistics.confiscationJoCnt}"></th>
<th th:text="${statistics.confiscationGaeCnt}"></th>
<th th:text="${statistics.confiscationEtcCnt}"></th>
</tr>
</thead>
<tbody class="table-group-divider align-middle">
<th:block th:each="dto,cnt:${crackdownStatusList}">
<tr class="crackdownStatusTr" th:data-cdskey="${dto.cdsKey}" data-modaltype="viewOnly">
<td th:text="${cnt.count}"></td>
<td th:text="${#temporals.format(dto.napoDt, 'yyyy-MM-dd HH:mm')}"></td>
<td class="text-wrap min-width-300" th:text="${dto.violationStr}"></td>
<td>
<div th:if="${!#strings.isEmpty(dto.napoSeaPointLon) and !#strings.isEmpty(dto.napoSeaPointLon)}" th:text="${#strings.concat(dto.napoSeaPointLon, ' ~ ', dto.napoSeaPointLat)}"></div>
<div th:if="${!#strings.isEmpty(dto.napoSeaPointLon) or !#strings.isEmpty(dto.napoSeaPointLon)}" th:text="${#strings.concat(dto.napoSeaPointLon, dto.napoSeaPointLat)}"></div>
<div th:text="${dto.napoSeaPointDetail}"></div>
</td>
<td th:text="${dto.violationCode ne null and #strings.contains(dto.violationCode, 'VT002')?1:0}"></td>
<td th:text="${dto.violationCode ne null and (#strings.contains(dto.violationCode, 'VT003') or #strings.contains(dto.violationCode, 'VT004'))?1:0}"></td>
<td th:text="${dto.violationCode ne null and #strings.contains(dto.violationCode, 'VT029')?1:0}"></td>
<td th:text="${dto.violationCode ne null and #strings.contains(dto.violationCode, 'VT030')?1:0}"></td>
<td th:text="${dto.nll eq 'Y'?1:0}"></td>
<td th:text="${dto.obstrExspdCnt}"></td>
<td th:text="${dto.personDamageCnt}"></td>
<td th:text="${dto.personDamageAmount>10000?#strings.concat(dto.personDamageAmount/10000, '만원'):'-'}"></td>
<td th:text="${dto.personDamageDetail}"></td>
<td th:text="${dto.materialDamageCnt}"></td>
<td th:text="${dto.materialDamageAmount>10000?#strings.concat(dto.materialDamageAmount/10000, '만원'):'-'}"></td>
<td th:text="${dto.materialDamageDetail}"></td>
<td>
<th:block th:each="code:${session.commonCode.get('OG')}">
<th:block th:if="${code.itemCd eq dto.caseAgency}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<td>
<th:block th:each="code:${session.commonCode.get('CPO')}">
<th:block th:if="${code.itemCd eq dto.crackdownPolice}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<td>
<th:block th:each="code:${session.commonCode.get(dto.crackdownPolice)}">
<th:block th:if="${code.itemCd eq dto.crackdownBoat}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<td th:text="${dto.mmsi}"></td>
<td th:text="${dto.boatNameKr}"></td>
<td>
<th:block th:if="${dto.tonCnt>0}" th:text="|${dto.tonCnt}t|"></th:block>
</td>
<td th:text="${dto.sailorCnt}"></td>
<td>
<th:block th:each="code:${session.commonCode.get('BM')}">
<th:block th:if="${code.itemCd eq dto.boatMaterial}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<td th:text="${dto.boatNnySung}"></td>
<td th:text="${dto.boatNnySi}"></td>
<td th:text="${dto.captainName}"></td>
<td th:text="${dto.captainBirthDate}"></td>
<td>
<th:block th:each="code:${session.commonCode.get('FT')}">
<th:block th:if="${code.itemCd eq dto.fisheryType}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<td th:text="${dto.catchFishSpecies}"></td>
<td><th:block th:if="${dto.catchCnt>0}" th:text="|${dto.catchCnt}kg|"></th:block></td>
<td th:text="${dto.offenseType}"></td>
<td><th:block th:if="${dto.offenseWeight>0}" th:text="|${dto.offenseWeight}kg|"></th:block></td>
<td><th:block th:if="${dto.offenseIllegalWasteQuantity>0}" th:text="|${dto.offenseIllegalWasteQuantity}kg|"></th:block></td>
<td><th:block th:if="${dto.offenseQuantity>0}" th:text="|${dto.offenseQuantity}kg|"></th:block></td>
<td><th:block th:if="${dto.offenseAmount>0}" th:text="|${dto.offenseAmount}원|"></th:block></td>
<td th:text="${dto.processStatus eq 'PR001'?1:0}"></td>
<td th:text="${dto.processStatus ne 'PR001'?1:0}"></td>
<td th:text="${dto.damboPayment > 0?1:0}"></td>
<td>
<th:block th:if="${dto.damboPayment ne null and dto.damboPayment>10000}" th:text="|${dto.damboPayment/10000}만원|"></th:block>
</td>
<td th:text="${dto.paymentPaymentDt}"></td>
<td th:text="${dto.damboUnpaidAmount > 0?1:0}"></td>
<td>
<th:block th:if="${dto.damboUnpaidAmount ne null and dto.damboUnpaidAmount>10000}" th:text="|${dto.damboUnpaidAmount/10000}만원|"></th:block>
</td>
<td th:text="${dto.consignmentStartDt ne null?1:0}"></td>
<td th:text="${dto.consignmentStartDt}"></td>
<td th:text="${dto.consignmentEndDt}"></td>
<td th:text="${dto.evictionDt ne null?1:0}"></td>
<td th:text="${dto.directHandoverDt ne null?1:0}"></td>
<td th:text="${dto.boatDisposalType eq 'BDT001'?1:0}"></td>
<td th:text="${dto.boatDisposalType eq 'BDT002'?1:0}"></td>
<td th:text="${dto.boatDisposalType eq 'BDT003'?1:0}"></td>
<td th:text="${dto.exileDt ne null?1:0}"></td>
<td th:text="${dto.returnDt ne null?1:0}"></td>
<td th:text="${dto.directHandoverDt}"></td>
<td>
<div th:if="${!#strings.isEmpty(dto.handoverSeaPointLon) and !#strings.isEmpty(dto.handoverSeaPointLat)}" th:text="${#strings.concat(dto.handoverSeaPointLon, ' ~ ', dto.handoverSeaPointLat)}"></div>
<div th:if="${!#strings.isEmpty(dto.handoverSeaPointLon) or !#strings.isEmpty(dto.handoverSeaPointLat)}" th:text="${#strings.concat(dto.handoverSeaPointLon, dto.handoverSeaPointLat)}"></div>
<div th:text="${dto.handoverSeaPointDetail}"></div>
</td>
<td th:text="${dto.handoverBoat}"></td>
<td th:text="${dto.middleTakeoverBoat}"></td>
<td th:text="${dto.captainRestriction+dto.navigaterRestriction+dto.engineerRestriction+dto.seniorRestriction+dto.normalRestriction}"></td>
<td th:text="${dto.captainRestriction}"></td>
<td th:text="${dto.navigaterRestriction}"></td>
<td th:text="${dto.engineerRestriction}"></td>
<td th:text="${dto.seniorRestriction+dto.normalRestriction}"></td>
<td th:text="${dto.confiscationDt ne null?1:0}"></td>
<td th:text="${dto.captainRestrictionNot+dto.navigaterRestrictionNot+dto.engineerRestrictionNot+dto.seniorRestrictionNot+dto.normalRestrictionNot}"></td>
<td th:text="${dto.captainRestrictionNot}"></td>
<td th:text="${dto.navigaterRestrictionNot}"></td>
<td th:text="${dto.engineerRestrictionNot}"></td>
<td th:text="${dto.seniorRestrictionNot+dto.normalRestrictionNot}"></td>
<td th:text="${dto.confiscationDt eq null?1:0}"></td>
<td th:text="${dto.fieldIvsgt eq 'F'? 1 : 0}"></td>
<td><th:block th:if="${dto.fieldIvsgt eq 'F'}" th:text="${#temporals.format(dto.napoDt, 'yyyy-MM-dd HH:mm')}"></th:block></td>
<td><th:block th:if="${dto.fieldIvsgt eq 'F'}" th:text="${#temporals.format(dto.releaseDt, 'yyyy-MM-dd HH:mm')}"></th:block></td>
<td><th:block th:if="${dto.fieldIvsgt eq 'F'}" th:text="${dto.fieldIvsgtDayHour}"></th:block></td>
<td><th:block th:if="${dto.fieldIvsgt eq 'C'}" th:text="${dto.pressurizedTimeTaken}"></th:block></td>
<td><th:block th:if="${dto.fieldIvsgt eq 'C'}" th:text="${dto.distance}"></th:block></td>
<td th:text="${dto.warrantReqTakeTime}"></td>
<td th:text="${dto.confiscationFrame}"></td>
<td th:text="${dto.confiscationWidth}"></td>
<td th:text="${dto.confiscationJo}"></td>
<td th:text="${dto.confiscationGae}"></td>
<td th:text="${dto.confiscationEtc}"></td>
</tr>
</th:block>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-between pt-1">
<div class="col-auto">
<button class="btn btn-success" id="cdsDownExcel">엑셀 다운로드</button>
</div>
<div class="col-auto">
<!--<button class="btn btn-primary" id="crackdownStatusAddBtn">등록</button>-->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="fishingBoatViewModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="fishingBoatViewModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xxl modal-dialog-scrollable">
<div class="modal-content" id="fishingBoatViewModalContent">
</div>
</div>
</div>
</main>
</div>
</html>