불법조업 외국어선 처리현황 작업중.

master
강석 최 2023-07-07 18:00:20 +09:00
parent 1a46d190ac
commit b73de9c067
13 changed files with 289 additions and 190 deletions

View File

@ -172,11 +172,9 @@ public class UnlawfulFishingController {
} }
@GetMapping("/isiSelectModal") @GetMapping("/isiSelectModal")
public ModelAndView illegalShipInfoSelectModal(@AuthenticationPrincipal UserInfo loginUser, IllegalShipInfo params){ public ModelAndView illegalShipInfoSelectModal(@AuthenticationPrincipal UserInfo loginUser, UnlawfulFishingParam params){
ModelAndView mav = new ModelAndView("faStatistics/unlawfulFishing/illegalShipInfo/isiSelectModal"); ModelAndView mav = new ModelAndView("faStatistics/unlawfulFishing/illegalShipInfo/isiSelectModal");
List<CrackdownStatusDTO> csDTOList = new ArrayList<>(); mav.addObject("illegalShipInfoList", unlawfulFishingService.selectIllegalShipInfoList(params));
mav.addObject("crackdownInfoList", csDTOList);
mav.addObject("searchParams", params); mav.addObject("searchParams", params);
return mav; return mav;
} }
@ -188,19 +186,11 @@ public class UnlawfulFishingController {
AccessConfig accessConfig = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/unlawfulFishing/shipProcessInfo").get(0); AccessConfig accessConfig = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/unlawfulFishing/shipProcessInfo").get(0);
mav.addObject("menuKey", accessConfig.getMenuKey()); mav.addObject("menuKey", accessConfig.getMenuKey());
mav.addObject("accessAuth", accessConfig.getAccessAuth()); mav.addObject("accessAuth", accessConfig.getAccessAuth());
params.setQueryInfo();
mav.addObject("shipProcessInfoList", unlawfulFishingService.selectShipProcessInfoList(params));
params.setContentCnt(unlawfulFishingService.selectShipProcessInfoListCnt(params));
params.setPaginationInfo();
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<>();
CSStatistics statistics = new CSStatistics();
mav.addObject("shipProcessInfoList", csDTOList);
mav.addObject("yearList", yearList);
mav.addObject("searchParams", params); mav.addObject("searchParams", params);
return mav; return mav;
} }
@ -208,7 +198,7 @@ public class UnlawfulFishingController {
@GetMapping("/spiEditModal") @GetMapping("/spiEditModal")
public ModelAndView shipProcessInfoEditModal(@AuthenticationPrincipal UserInfo loginUser, ShipProcessInfo shipProcessInfo){ public ModelAndView shipProcessInfoEditModal(@AuthenticationPrincipal UserInfo loginUser, ShipProcessInfo shipProcessInfo){
ModelAndView mav = new ModelAndView("faStatistics/unlawfulFishing/shipProcessInfo/spiEditModal"); ModelAndView mav = new ModelAndView("faStatistics/unlawfulFishing/shipProcessInfo/spiEditModal");
if(shipProcessInfo.getCdsKey()!=null){ if(shipProcessInfo.getPrKey()!=null){
shipProcessInfo = unlawfulFishingService.selectShipProcessInfo(shipProcessInfo.getPrKey()); shipProcessInfo = unlawfulFishingService.selectShipProcessInfo(shipProcessInfo.getPrKey());
}else{ }else{
shipProcessInfo.setWrtOrgan(loginUser.getOgCd()); shipProcessInfo.setWrtOrgan(loginUser.getOgCd());
@ -222,6 +212,28 @@ public class UnlawfulFishingController {
return mav; return mav;
} }
@GetMapping("/spiViewModal")
public ModelAndView shipProcessInfoViewModal(@AuthenticationPrincipal UserInfo loginUser, ShipProcessInfo spi){
ModelAndView mav = new ModelAndView("faStatistics/unlawfulFishing/illegalShipInfo/spiViewModal");
spi = unlawfulFishingService.selectShipProcessInfo(spi.getPrKey());
spi.setHistoryList(unlawfulFishingService.selectShipProcessInfoHistory(spi.getPrKey()));
mav.addObject("processInfo", spi);
IllegalShipInfo shipInfo = unlawfulFishingService.selectIllegalShipInfo(spi.getFbKey());
mav.addObject("shipInfo", shipInfo);
mav.addObject("crackdownInfo", unlawfulFishingService.selectCrackdownInfo(shipInfo.getCdsKey()));
AccessConfig accessConfig = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/unlawfulFishing/shipProcessInfo").get(0);
mav.addObject("accessAuth", accessConfig.getAccessAuth());
mav.addObject("mgtOrganList", loginUser.getDownOrganCdList());
mav.addObject("userSeq", loginUser.getUserSeq());
return mav;
}
@PostMapping("/saveShipProcessInfo")
public Integer saveShipProcessInfo(@AuthenticationPrincipal UserInfo loginUser, ShipProcessInfo processInfo){
processInfo.setWrtDt(LocalDateTime.now());
return unlawfulFishingService.saveShipProcessInfo(processInfo);
}
@GetMapping("/illegalShipSailor") @GetMapping("/illegalShipSailor")
public ModelAndView illegalShipSailorPage(@AuthenticationPrincipal UserInfo loginUser, UnlawfulFishingParam params){ public ModelAndView illegalShipSailorPage(@AuthenticationPrincipal UserInfo loginUser, UnlawfulFishingParam params){

View File

@ -3,6 +3,7 @@ package com.dbnt.faisp.main.faStatistics.unlawfulFishing.mapper;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.UnlawfulFishingParam; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.UnlawfulFishingParam;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.crackdownStatus.CrackdownInfo; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.crackdownStatus.CrackdownInfo;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.IllegalShipInfo; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.IllegalShipInfo;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.processResult.ShipProcessInfo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@ -19,4 +20,8 @@ public interface UnlawfulFishingMapper {
List<IllegalShipInfo> selectIllegalShipInfoList(UnlawfulFishingParam params); List<IllegalShipInfo> selectIllegalShipInfoList(UnlawfulFishingParam params);
Integer selectIllegalShipInfoListCnt(UnlawfulFishingParam params); Integer selectIllegalShipInfoListCnt(UnlawfulFishingParam params);
List<ShipProcessInfo> selectShipProcessInfoList(UnlawfulFishingParam params);
Integer selectShipProcessInfoListCnt(UnlawfulFishingParam params);
} }

View File

@ -28,41 +28,12 @@ public class ShipProcessInfo extends ProcessResultBaseEntity {
@Column(name = "pr_key") @Column(name = "pr_key")
private Integer prKey; private Integer prKey;
@Column(name = "cds_key") @Column(name = "fb_key")
private Integer cdsKey; private Integer fbKey;
@Column(name="status") @Column(name="status")
private String status; private String status;
@Transient @Transient
@DateTimeFormat(pattern = "yyyy-MM-dd") private List<ShipProcessInfoHistory> historyList;
private LocalDateTime updDt;
@Transient
private CrackdownStatus crackdownStatus;
@Transient
private List<Violation> violationList;
@Transient
private FishingBoat fishingBoat;
@Transient
private String boatNameKr;
@Transient
private Integer fbKey;
@Transient
private String processStatusEtc;
@Transient
private String executionDetailEtc;
@Transient
private List<CrackdownStatus> crackdownStatusList;
@Transient
private List<FishingBoat> fishingBoatList;
@Transient
private String caseNum;
@Transient
private String crackdownPolice;
@Transient
private Integer year;
@Transient
private String violation;
} }

View File

@ -7,7 +7,6 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface ShipProcessInfoHistoryRepository extends JpaRepository<ShipProcessInfoHistory, ShipProcessInfoHistory.ShipProcessInfoHistoryId> { public interface ShipProcessInfoHistoryRepository extends JpaRepository<ShipProcessInfoHistory, ShipProcessInfoHistory.ShipProcessInfoHistoryId> {
Optional<ShipProcessInfoHistory> findTopByPrKeyOrderByVersionNoDesc(Integer prKey); Optional<ShipProcessInfoHistory> findTop1ByPrKeyOrderByVersionNoDesc(Integer prKey);
List<ShipProcessInfoHistory> findByPrKey(Integer prKey); List<ShipProcessInfoHistory> findByPrKeyOrderByVersionNoDesc(Integer prKey);
} }

View File

@ -6,6 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional; import java.util.Optional;
public interface ShipProcessInfoRepository extends JpaRepository<ShipProcessInfo, Integer> { public interface ShipProcessInfoRepository extends JpaRepository<ShipProcessInfo, Integer> {
Optional<ShipProcessInfo> findByCdsKey(Integer cdsKey); Optional<ShipProcessInfo> findByFbKey(Integer fbKey);
Optional<ShipProcessInfo> findByPrKey(Integer prKey); Optional<ShipProcessInfo> findByPrKey(Integer prKey);
} }

View File

@ -6,6 +6,7 @@ import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.Fishin
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.IllegalShipInfo; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.IllegalShipInfo;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.IllegalShipInfoHistory; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.fishingBoat.IllegalShipInfoHistory;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.processResult.ShipProcessInfo; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.processResult.ShipProcessInfo;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.processResult.ShipProcessInfoHistory;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.sailor.IllegalShipSailor; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.sailor.IllegalShipSailor;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.sailor.Sailor; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.model.sailor.Sailor;
import com.dbnt.faisp.main.faStatistics.unlawfulFishing.mapper.UnlawfulFishingMapper; import com.dbnt.faisp.main.faStatistics.unlawfulFishing.mapper.UnlawfulFishingMapper;
@ -167,6 +168,10 @@ public class UnlawfulFishingService {
return spiRepository.findByPrKey(prKey).orElse(new ShipProcessInfo()); return spiRepository.findByPrKey(prKey).orElse(new ShipProcessInfo());
} }
public List<ShipProcessInfoHistory> selectShipProcessInfoHistory(Integer prKey) {
return spihRepository.findByPrKeyOrderByVersionNoDesc(prKey);
}
public IllegalShipSailor selectIllegalShipSailor(Integer sailorKey) { public IllegalShipSailor selectIllegalShipSailor(Integer sailorKey) {
return issRepository.findBySailorKey(sailorKey).orElse(new IllegalShipSailor()); return issRepository.findBySailorKey(sailorKey).orElse(new IllegalShipSailor());
} }
@ -207,4 +212,24 @@ public class UnlawfulFishingService {
public Integer selectIllegalShipInfoListCnt(UnlawfulFishingParam params) { public Integer selectIllegalShipInfoListCnt(UnlawfulFishingParam params) {
return unlawfulFishingMapper.selectIllegalShipInfoListCnt(params); return unlawfulFishingMapper.selectIllegalShipInfoListCnt(params);
} }
@Transactional
public Integer saveShipProcessInfo(ShipProcessInfo processInfo) {
Integer prKey = spiRepository.save(processInfo).getPrKey();
if(!processInfo.getStatus().equals("DST001")){
ShipProcessInfoHistory lastHistory = spihRepository.findTop1ByPrKeyOrderByVersionNoDesc(prKey).orElse(null);
ShipProcessInfoHistory spiHistory = new ShipProcessInfoHistory();
BeanUtils.copyProperties(processInfo, spiHistory);
spiHistory.setVersionNo(lastHistory==null?1:lastHistory.getVersionNo()+1);
spihRepository.save(spiHistory);
}
return prKey;
}
public List<ShipProcessInfo> selectShipProcessInfoList(UnlawfulFishingParam params) {
return unlawfulFishingMapper.selectShipProcessInfoList(params);
}
public Integer selectShipProcessInfoListCnt(UnlawfulFishingParam params) {
return unlawfulFishingMapper.selectShipProcessInfoListCnt(params);
}
} }

View File

@ -169,4 +169,11 @@
</if> </if>
</if> </if>
</sql> </sql>
<select id="selectShipProcessInfoList" resultType="ShipProcessInfo" parameterType="UnlawfulFishingParam">
</select>
<select id="selectShipProcessInfoListCnt" resultType="int" parameterType="UnlawfulFishingParam">
</select>
</mapper> </mapper>

View File

@ -3,6 +3,23 @@ $(document).on('click', '#selectIllegalShipInfoBtn', function (){
getIsiSelectModal(null); getIsiSelectModal(null);
}) })
$(document).on('click', '.isiTr', function (){
$(".isiCheckbox").prop('checked', false)
$(this).find('.isiCheckbox').prop('checked', true)
})
$(document).on('click', '#isiSelectBtn', function (){
const selectedCheckbox = $(".isiCheckbox:checked")
if(selectedCheckbox.length>0){
const editForm = $("#spiEditForm")
editForm.find("#fbKey").val(selectedCheckbox.attr('data-fbkey'))
editForm.find("#boatNameKr").val(selectedCheckbox.attr('data-boatnamekr'))
$("#isiSelectModal").modal('hide');
}else{
alert("대상을 선택해주세요.")
}
})
function getIsiSelectModal(){ function getIsiSelectModal(){
$.ajax({ $.ajax({
url: '/unlawfulFishing/isiSelectModal', url: '/unlawfulFishing/isiSelectModal',

View File

@ -1,8 +1,34 @@
$(function(){
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('click', '#addShipProcessInfoBtn', function (){ $(document).on('click', '#addShipProcessInfoBtn', function (){
getSpiEditModal(null); getSpiEditModal(null);
}) })
$(document).on('change', '.oxSelector', function (){
childInputStateChange(Number(this.value), $(this).parent().find("input,select").slice(1));
})
$(document).on('change', '#directHandoverSelector', function (){
childInputStateChange(Number(this.value), $("#directHandoverDiv").find("input"))
})
$(document).on('change', '#offenseSelector', function (){
childInputStateChange(Number(this.value), $("#offenseIllegalWasteQuantity"))
childInputStateChange(Number(this.value), $("#offenseQuantity"))
childInputStateChange(Number(this.value), $("#offenseAmount"))
})
$(document).on('click', '.saveEditInfoBtn', function (){
saveShipProcessInfo($(this).attr("data-status"))
})
function getSpiEditModal(prKey){ function getSpiEditModal(prKey){
$.ajax({ $.ajax({
url: '/unlawfulFishing/spiEditModal', url: '/unlawfulFishing/spiEditModal',
@ -24,3 +50,51 @@ function getSpiEditModal(prKey){
} }
}); });
} }
function childInputStateChange(selectorValue, inputs){
switch (selectorValue){
case 1:
inputs.val('').attr('disabled', 'disabled')
break;
case 2:
inputs.removeAttr('disabled')
break;
}
}function saveShipProcessInfo(status){
if (confirm("저장하시겠습니까?")) {
if (valueCheck(status)) {
$("#infoStatus").val(status)
contentFade("in");
const formData = new FormData($("#spiEditForm")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/unlawfulFishing/saveShipProcessInfo",
processData: false,
contentType: false,
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function() {
alert("저장되었습니다.");
contentFade("out");
location.reload();
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.");
contentFade("out");
}
})
}
}
}
function valueCheck(status){
if(status === "DST007"){
const spiEditForm = $("#spiEditForm")
if(!spiEditForm.find("#boatNameKr").val()){
alert("어선명을 불러와주세요.")
return false;
}
}
return true;
}

View File

@ -152,19 +152,19 @@
<nav aria-label="Page navigation"> <nav aria-label="Page navigation">
<ul class="pagination mb-0"> <ul class="pagination mb-0">
<th:block th:if="${searchParams.pageIndex>3}"> <th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}"> <li class="page-item modalPage" th:data-pageindex="${(searchParams.pageIndex)-3}">
<a class="page-link" href="#" aria-label="Previous"> <a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span> <span aria-hidden="true">&laquo;</span>
</a> </a>
</li> </li>
</th:block> </th:block>
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}"> <th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}"> <li class="page-item modalPage" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}">
<a class="page-link" href="#" th:text="${num}"></a> <a class="page-link" href="#" th:text="${num}"></a>
</li> </li>
</th:block> </th:block>
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}"> <th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}"> <li class="page-item modalPage" th:data-pageindex="${(searchParams.pageIndex)+3}">
<a class="page-link" href="#" aria-label="Next"> <a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span> <span aria-hidden="true">&raquo;</span>
</a> </a>

View File

@ -8,7 +8,7 @@
<div class="row mx-0"> <div class="row mx-0">
<div class="col-12 card bg-light text-center"> <div class="col-12 card bg-light text-center">
<div class="card-body"> <div class="card-body">
<form method="get" th:action="@{/faStatistics/crackdownInfo}" id="cdsSearchForm"> <form method="get" th:action="@{/unlawfulFishing/illegalShipInfo}" id="isiSearchForm">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}"> <input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-end py-1"> <div class="row justify-content-end py-1">
<div class="col-8"> <div class="col-8">
@ -16,52 +16,42 @@
<div class="col-11"> <div class="col-11">
<div class="row justify-content-end pb-1"> <div class="row justify-content-end pb-1">
<div class="col-2"> <div class="col-2">
<select class="form-select form-select-sm " id="caseAgency" name="caseAgency"> <input type="text" class="form-control form-control-sm" name="caseNum" placeholder="사건번호" th:value="${searchParams.caseNum}">
<option value="">사건담당경찰서</option>
<th:block th:each="code:${session.commonCode.get('OG')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"
th:selected="${code.itemCd eq searchParams.caseAgency}"></option>
</th:block>
</select>
</div> </div>
<div class="col-2"> <div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="사건담당경찰관"> <input type="text" class="form-control form-control-sm" name="permitNum" placeholder="허가번호" th:value="${searchParams.permitNum}">
</div> </div>
<div class="col-2"> <div class="col-2">
<select class="form-select form-select-sm" name="crackdownPolice" id="searchFormPolice"> <input type="text" class="form-control form-control-sm" name="boatName" placeholder="선명" th:value="${searchParams.boatName}">
<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>
<div class="col-2"> <div class="col-2">
<select class="form-select form-select-sm" name="crackdownBoat" id="searchFormBoat" disabled> <input type="text" class="form-control form-control-sm" name="boatNny" placeholder="선적지" th:value="${searchParams.boatNny}">
<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>
</div> </div>
<div class="row justify-content-end pb-1"> <div class="row justify-content-end pb-1">
<div class="col-2"> <div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="사건번호"> <select class="form-select form-select-sm " name="fisheryType" id="searchFisheryType">
<option value="">선종</option>
<th:block th:each="code:${session.commonCode.get('FT')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"
th:selected="${code.itemCd eq searchParams.fisheryType}"></option>
</th:block>
</select>
</div> </div>
<div class="col-2"> <div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="MMSI.NO"> <select class="form-select form-select-sm" name="boatMaterial" id="searchBoatMaterial">
</div> <option value="">선질</option>
<div class="col-2"> <th:block th:each="code:${session.commonCode.get('BM')}">
<input type="text" class="form-control form-control-sm" placeholder="나포장소"> <option th:value="${code.itemCd}" th:text="${code.itemValue}"
th:selected="${code.itemCd eq searchParams.boatMaterial}"></option>
</th:block>
</select>
</div> </div>
<div class="col-4"> <div class="col-4">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv"> <div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<select class="form-select form-select-sm w-30" name="dateSelector"> <select class="form-select form-select-sm w-30" name="dateSelector">
<option value="">조건선택</option> <option value="">조건선택</option>
<option value="napoDt" th:selected="${searchParams.dateSelector eq 'napoDt'}">나포일시</option> <option value="napoDt" th:selected="${searchParams.dateSelector eq 'paymentDt'}">담보금 납부일시</option>
<option value="wrtDt" th:selected="${searchParams.dateSelector eq 'wrtDt'}">작성일시</option> <option value="wrtDt" th:selected="${searchParams.dateSelector eq 'wrtDt'}">작성일시</option>
</select> </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="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
@ -84,38 +74,74 @@
<table class="table table-sm table-hover table-bordered text-nowrap" id="cdsTable"> <table class="table table-sm table-hover table-bordered text-nowrap" id="cdsTable">
<thead class="align-middle"> <thead class="align-middle">
<tr class="table-secondary"> <tr class="table-secondary">
<th>순번</th> <th></th>
<th>사건번호</th> <th>사건번호</th>
<th>MMSI.NO</th> <th>선명</th>
<th>나포일시</th> <th>허가번호</th>
<th>나포장소</th> <th>국적</th>
<th>사건담당경찰서</th> <th>승선원</th>
<th>사건담당경찰관</th> <th>톤수</th>
<th>단속경찰서</th> <th>선종</th>
<th>단속함정</th> <th>선질</th>
<th>침범유형</th> <th>선적지</th>
<th>NLL침범여부</th>
<th>압송여부</th>
<th>작성자</th>
<th>작성일시</th> <th>작성일시</th>
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider align-middle"> <tbody class="table-group-divider align-middle">
<th:block th:each="dto,cnt:${crackdownInfoList}"> <th:block th:each="shipInfo:${illegalShipInfoList}">
<tr class="crackdownStatusTr" th:data-cdskey="${dto.cdsKey}" data-modaltype="viewOnly"> <tr class="isiTr" th:data-fbkey="${shipInfo.fbKey}">
<td th:text="${cnt.count}"></td> <td><input type="checkbox" class="isiCheckbox" th:data-fbkey="${shipInfo.fbKey}" th:data-boatnamekr="${shipInfo.boatNameKr}"> </td>
<td th:text="${#temporals.format(dto.napoDt, 'yyyy-MM-dd HH:mm')}"></td> <td th:text="${shipInfo.caseNum}"></td>
<td th:text="${shipInfo.boatNameKr}"></td>
<td th:text="${shipInfo.permitNum}"></td>
<td th:text="${shipInfo.nationality}"></td>
<td th:text="${shipInfo.sailorCnt}"></td>
<td th:text="${shipInfo.tonCnt}"></td>
<td> <td>
<div th:if="${!#strings.isEmpty(dto.napoSeaPointLon) and !#strings.isEmpty(dto.napoSeaPointLon)}" th:text="${#strings.concat(dto.napoSeaPointLon, ' ~ ', dto.napoSeaPointLat)}"></div> <th:block th:each="code:${session.commonCode.get('FT')}">
<div th:if="${!#strings.isEmpty(dto.napoSeaPointLon) or !#strings.isEmpty(dto.napoSeaPointLon)}" th:text="${#strings.concat(dto.napoSeaPointLon, dto.napoSeaPointLat)}"></div> <th:block th:if="${code.itemCd eq shipInfo.fisheryType}" th:text="${code.itemValue}"></th:block>
<div th:text="${dto.napoSeaPointDetail}"></div> </th:block>
</td> </td>
<td>
<th:block th:each="code:${session.commonCode.get('BM')}">
<th:block th:if="${code.itemCd eq shipInfo.boatMaterial}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<td th:text="|${shipInfo.boatNnySung} ${shipInfo.boatNnySi}|"></td>
<td th:text="${#temporals.format(shipInfo.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr> </tr>
</th:block> </th:block>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
<div class="row justify-content-center pt-1">
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination mb-0">
<th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item modalPage" th:data-pageindex="${(searchParams.pageIndex)-3}">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
</th:block>
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
<li class="page-item modalPage" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}">
<a class="page-link" href="#" th:text="${num}"></a>
</li>
</th:block>
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
<li class="page-item modalPage" th:data-pageindex="${(searchParams.pageIndex)+3}">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</th:block>
</ul>
</nav>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -123,6 +149,6 @@
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-primary">불러오기</button> <button type="button" class="btn btn-primary" id="isiSelectBtn">불러오기</button>
</div> </div>
</html> </html>

View File

@ -29,24 +29,7 @@
<form method="get" th:action="@{/faStatistics/shipProcessInfo}" id="cdsSearchForm"> <form method="get" th:action="@{/faStatistics/shipProcessInfo}" id="cdsSearchForm">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}"> <input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-between py-1"> <div class="row justify-content-between py-1">
<div class="col-auto"> <div class="col-auto"></div>
<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="col-8">
<div class="row"> <div class="row">
<div class="col-11"> <div class="col-11">
@ -122,30 +105,23 @@
<tr class="table-secondary"> <tr class="table-secondary">
<th>순번</th> <th>순번</th>
<th>사건번호</th> <th>사건번호</th>
<th>MMSI.NO</th> <th>어선명</th>
<th>나포일시</th> <th>나포일시</th>
<th>나포장소</th> <th>처리현황</th>
<th>사건담당경찰서</th> <th>수사중지여부</th>
<th>사건담당경찰관</th> <th>선고법원</th>
<th>단속경찰서</th> <th>선고내용</th>
<th>단속함정</th>
<th>침범유형</th>
<th>NLL침범여부</th>
<th>압송여부</th>
<th>작성자</th> <th>작성자</th>
<th>작성일시</th> <th>작성일시</th>
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider align-middle"> <tbody class="table-group-divider align-middle">
<th:block th:each="dto,cnt:${crackdownInfoList}"> <th:block th:each="spi,cnt:${shipProcessInfoList}">
<tr class="crackdownStatusTr" th:data-cdskey="${dto.cdsKey}" data-modaltype="viewOnly"> <tr class="spiTr" th:data-prkey="${spi.prKey}">
<td th:text="${cnt.count}"></td> <td th:text="${cnt.count}"></td>
<td th:text="${#temporals.format(dto.napoDt, 'yyyy-MM-dd HH:mm')}"></td> <td th:text="${spi.caseNum}"></td>
<td> <td th:text="${spi.boatNameKr}"></td>
<div th:if="${!#strings.isEmpty(dto.napoSeaPointLon) and !#strings.isEmpty(dto.napoSeaPointLon)}" th:text="${#strings.concat(dto.napoSeaPointLon, ' ~ ', dto.napoSeaPointLat)}"></div> <td th:text="${#temporals.format(spi.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
<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>
</tr> </tr>
</th:block> </th:block>
</tbody> </tbody>

View File

@ -13,12 +13,13 @@
<input type="hidden" name="wrtUserSeq" th:value="${shipProcessInfo.wrtUserSeq}"> <input type="hidden" name="wrtUserSeq" th:value="${shipProcessInfo.wrtUserSeq}">
<input type="hidden" name="wrtUserGrd" th:value="${shipProcessInfo.wrtUserGrd}"> <input type="hidden" name="wrtUserGrd" th:value="${shipProcessInfo.wrtUserGrd}">
<input type="hidden" name="wrtUserNm" th:value="${shipProcessInfo.wrtUserNm}"> <input type="hidden" name="wrtUserNm" th:value="${shipProcessInfo.wrtUserNm}">
<input type="hidden" name="wrtDt" th:value="${#temporals.format(shipProcessInfo.wrtDt, 'yyyy-MM-dd HH:mm:ss')}"> <input type="hidden" name="wrtDt" th:value="${#temporals.format(shipProcessInfo.wrtDt, 'yyyy-MM-dd HH:mm')}">
<div class="row mb-1"> <div class="row mb-1">
<label for="caseNum" class="col-sm-1 col-form-label col-form-label-sm text-center">선명</label> <label for="fbKey" class="col-sm-1 col-form-label col-form-label-sm text-center">선명</label>
<div class="col-sm-2"> <div class="col-sm-2">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control form-control-sm " id="caseNum" name="caseNum"> <input type="hidden" id="fbKey" name="fbKey">
<input type="text" class="form-control form-control-sm " id="boatNameKr" name="boatNameKr">
<input type="button" class="btn btn-sm btn-outline-primary w-auto" id="selectIllegalShipInfoBtn" value="불러오기"> <input type="button" class="btn btn-sm btn-outline-primary w-auto" id="selectIllegalShipInfoBtn" value="불러오기">
</div> </div>
</div> </div>
@ -33,7 +34,6 @@
</th:block> </th:block>
</select> </select>
</div> </div>
<th:block th:if="${shipProcessInfo.cdsKey ne null}">
<label for="isIvsgtStop" class="col-sm-1 col-form-label col-form-label-sm text-center">수사중지여부</label> <label for="isIvsgtStop" class="col-sm-1 col-form-label col-form-label-sm text-center">수사중지여부</label>
<div class="col-sm-2"> <div class="col-sm-2">
<select class="form-select form-select-sm " id="isIvsgtStop" name="isIvsgtStop"> <select class="form-select form-select-sm " id="isIvsgtStop" name="isIvsgtStop">
@ -42,7 +42,6 @@
<option value="N" th:selected="${shipProcessInfo.isIvsgtStop eq 'N'}">X</option> <option value="N" th:selected="${shipProcessInfo.isIvsgtStop eq 'N'}">X</option>
</select> </select>
</div> </div>
</th:block>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">선고법원</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">선고법원</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input class="form-control form-control-sm" name="sentencingCourt" id="sentencingCourt" th:value="${shipProcessInfo.sentencingCourt}"> <input class="form-control form-control-sm" name="sentencingCourt" id="sentencingCourt" th:value="${shipProcessInfo.sentencingCourt}">
@ -77,13 +76,7 @@
<input type="hidden" class="" name="warrantReqTakeTime" id="warrantReqTake" th:value="${wrtt}"> <input type="hidden" class="" name="warrantReqTakeTime" id="warrantReqTake" th:value="${wrtt}">
</th:block> </th:block>
</div> </div>
</div> <label for="releaseDt" class="col-sm-1 col-form-label col-form-label-sm text-center">석방일시</label>
<div class="row mb-1">
<label for="napoDt" class="col-sm-1 col-form-label col-form-label-sm text-center">나포일시</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="napoDt" name="napoDt" placeholder="단속정보에서 입력" readonly><!--th:value="${#temporals.format(shipProcessInfo.napoDt, 'yyyy-MM-dd hh:mm')}"-->
</div>
<label for="napoDt" class="col-sm-1 col-form-label col-form-label-sm text-center">석방일시</label>
<div class="col-sm-2"> <div class="col-sm-2">
<div class="input-group"> <div class="input-group">
<input type="hidden" id="releaseDt" name="releaseDt" th:value="${#temporals.format(shipProcessInfo.releaseDt, 'yyyy-MM-dd hh:mm')}"> <input type="hidden" id="releaseDt" name="releaseDt" th:value="${#temporals.format(shipProcessInfo.releaseDt, 'yyyy-MM-dd hh:mm')}">
@ -91,11 +84,12 @@
<input type="text" class="form-control form-control-sm timeInputer" id="releaseTime" th:value="${#temporals.format(shipProcessInfo.releaseDt, 'HH:mm')}" placeholder="hh:mm"> <input type="text" class="form-control form-control-sm timeInputer" id="releaseTime" th:value="${#temporals.format(shipProcessInfo.releaseDt, 'HH:mm')}" placeholder="hh:mm">
</div> </div>
</div> </div>
<label for="napoDt" class="col-sm-1 col-form-label col-form-label-sm text-center">소요시간</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="releaseToNapo" placeholder="석방일시-나포일시" readonly>
</div>
</div> </div>
<th:block th:with="directHandoverFlag=${shipProcessInfo.directHandoverDt ne null ||
shipProcessInfo.handoverSeaPointLon ne null ||
shipProcessInfo.handoverSeaPointLat ne null ||
shipProcessInfo.handoverBoat ne null ||
shipProcessInfo.middleTakeoverBoat ne null}">
<div class="row mb-1"> <div class="row mb-1">
<label for="consignmentStartDt" class="col-sm-1 col-form-label col-form-label-sm text-center">위탁여부</label> <label for="consignmentStartDt" class="col-sm-1 col-form-label col-form-label-sm text-center">위탁여부</label>
<div class="col-sm-2"> <div class="col-sm-2">
@ -120,13 +114,6 @@
<input type="text" class="form-control form-control-sm w-70 dateSelector" id="evictionDt" name="evictionDt" placeholder="퇴거일" th:value="${shipProcessInfo.evictionDt}" th:disabled="${!evictionFlag}" autocomplete="off"> <input type="text" class="form-control form-control-sm w-70 dateSelector" id="evictionDt" name="evictionDt" placeholder="퇴거일" th:value="${shipProcessInfo.evictionDt}" th:disabled="${!evictionFlag}" autocomplete="off">
</div> </div>
</div> </div>
</div>
<th:block th:with="directHandoverFlag=${shipProcessInfo.directHandoverDt ne null ||
shipProcessInfo.handoverSeaPointLon ne null ||
shipProcessInfo.handoverSeaPointLat ne null ||
shipProcessInfo.handoverBoat ne null ||
shipProcessInfo.middleTakeoverBoat ne null}">
<div class="row mb-1">
<label for="directHandoverSelector" class="col-sm-1 col-form-label col-form-label-sm text-center">직접인계여부</label> <label for="directHandoverSelector" class="col-sm-1 col-form-label col-form-label-sm text-center">직접인계여부</label>
<div class="col-sm-2"> <div class="col-sm-2">
<select class="form-select form-select-sm " id="directHandoverSelector"> <select class="form-select form-select-sm " id="directHandoverSelector">