Compare commits

...

2 Commits

11 changed files with 925 additions and 518 deletions

View File

@ -4,6 +4,7 @@ import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.crackdownStatus.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.FishingBoat;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.FishingBoatVersion;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.processResult.ProcessResult;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.FishingBoatService;
import com.dbnt.faisp.main.userInfo.model.UserInfo;
@ -104,4 +105,13 @@ public class FishingBoatController {
public Integer checkCaseNum(String caseNum){
return fishingBoatService.checkCaseNum(caseNum);
}
@GetMapping("/fishingBoatVersionInfo")
public ModelAndView fishingBoatVersionInfo(FishingBoatVersion version){
ModelAndView mav = new ModelAndView("faStatistics/fishingBoat/fishingBoatVersionInfo");
mav.addObject("fishingBoat", fishingBoatService.selectFishingBoatVersion(version.getFbKey(), version.getVersionNo()));
mav.addObject("vtList", codeMgtService.selectCodeMgtList("VT"));
mav.addObject("ftList", codeMgtService.selectCodeMgtList("FT"));
mav.addObject("bmList", codeMgtService.selectCodeMgtList("BM"));
return mav;
}
}

View File

@ -1,6 +1,8 @@
package com.dbnt.faisp.main.faStatistics.crackdownsStatus.mapper;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.crackdownStatus.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.FishingBoat;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.FishingBoatVersion;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -9,6 +11,8 @@ import java.util.List;
public interface CrackdownStatusMapper {
List<CrackdownStatus> selectCrackdownStatusList(CrackdownStatus crackdownStatus);
Integer selectCrackdownStatusListCnt(CrackdownStatus crackdownStatus);
List<CrackdownStatus> selectFishingBoatList(CrackdownStatus crackdownStatus);
Integer selectFishingBoatListCnt(CrackdownStatus crackdownStatus);
List<FishingBoatVersion> selectFishingBoatVersionList(Integer fbKey);
}

View File

@ -1,6 +1,7 @@
package com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.crackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.FishingBoat;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.FishingBoatVersion;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.fishingBoat.Violation;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.processResult.ProcessResult;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.sailor.Sailor;
@ -35,6 +36,8 @@ public class CrackdownStatus extends CrackdownStatusBaseEntity {
@Transient
private FishingBoat fishingBoat;
@Transient
private List<FishingBoatVersion> fishingBoatVersionList;
@Transient
private ProcessResult processResult;
@Transient
private List<Sailor> sailorList;

View File

@ -6,6 +6,7 @@ import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
@ -24,6 +25,9 @@ public class FishingBoatVersion extends FishingBoatBaseEntity {
@Column(name = "version_no")
private Integer versionNo;
@Transient
private List<ViolationVersion> violationList;
@Embeddable
@Data
@NoArgsConstructor

View File

@ -19,6 +19,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@ -47,6 +48,7 @@ public class FishingBoatService extends BaseService {
public CrackdownStatus selectCrackdownStatus(Integer cdsKey) {
CrackdownStatus crackdownStatus = crackdownStatusRepository.findById(cdsKey).orElse(null);
crackdownStatus.setFishingBoat(fishingBoatRepository.findByCdsKey(cdsKey).orElse(new FishingBoat()));
crackdownStatus.setFishingBoatVersionList(crackdownStatusMapper.selectFishingBoatVersionList(crackdownStatus.getFishingBoat().getFbKey()));
crackdownStatus.setProcessResult(processResultRepository.findByCdsKey(cdsKey).orElse(new ProcessResult()));
if(crackdownStatus.getFishingBoat()!=null){
crackdownStatus.setViolationList(violationRepository.findByFbKey(crackdownStatus.getFishingBoat().getFbKey()));
@ -121,6 +123,8 @@ public class FishingBoatService extends BaseService {
cdsKey = crackdownStatus.getCdsKey();
FishingBoat fishingBoat = crackdownStatus.getFishingBoat();
FishingBoatVersion newInfo = new FishingBoatVersion();
fishingBoat.setCdsKey(cdsKey);
fishingBoat.setWrtDt(LocalDateTime.now());
BeanUtils.copyProperties(fishingBoat, newInfo);
FishingBoatVersion lastFishingBoatVersion = fishingBoatVersionRepository.findTop1ByFbKeyOrderByVersionNoDesc(crackdownStatus.getFishingBoat().getFbKey()).orElse(null);
newInfo.setVersionNo(lastFishingBoatVersion.getVersionNo()+1);
@ -132,7 +136,8 @@ public class FishingBoatService extends BaseService {
int i=1;
ViolationVersion lastViolationVersion = violationVersionRepository.findTop1ByFbKeyOrderByVersionNoDesc(fishingBoat.getFbKey()).orElse(null);
for(Violation violation: violationList){
violation.setViolationKey(i);
violation.setFbKey(fishingBoat.getFbKey());
violation.setViolationKey(i++);
ViolationVersion violationVersion = new ViolationVersion();
BeanUtils.copyProperties(violation, violationVersion);
violationVersion.setVersionNo(lastViolationVersion.getVersionNo()+1);
@ -147,4 +152,8 @@ public class FishingBoatService extends BaseService {
public Integer checkCaseNum(String caseNum) {
return crackdownStatusRepository.findTop1ByCaseNum(caseNum).orElse(null)==null?0:1;
}
public FishingBoatVersion selectFishingBoatVersion(Integer fbKey, Integer versionNo) {
return fishingBoatVersionRepository.findById(new FishingBoatVersion.FishingBoatVersionId(fbKey, versionNo)).orElse(null);
}
}

View File

@ -429,4 +429,16 @@
on b.fb_key = d.fb_key and d.position = 'POS001'
<include refid="selectFishingBoatListWhere"></include>
</select>
<select id="selectFishingBoatVersionList" resultType="FishingBoatVersion" parameterType="int">
select fb_key,
version_no,
wrt_organ,
wrt_part,
wrt_user_grd,
wrt_user_nm,
wrt_dt
from fishing_boat_version
where fb_key = #{fb_key}
order by version_no desc
</select>
</mapper>

View File

@ -78,7 +78,7 @@
font-size: 11px;
}
.fs-10{
font-size: 11px;
font-size: 10px;
}
.fsw-13{
font-size: 13px;

View File

@ -59,6 +59,23 @@ $(document).on('change', '#violationSelector', function (){
}
}
})
$(document).on('click', '.versionInfoTr', function (){
$.ajax({
url: '/faStatistics/fishingBoatVersionInfo',
data: {
fbKey: $(this).find(".fbKey").val(),
versionNo: $(this).find(".versionNo").val()
},
type: 'GET',
dataType:"html",
success: function(html){
$("#fishingBoardVersionInfoDiv").empty().append(html);
},
error:function(){
}
});
})
$(document).on('click', '.violationRemoveBtn', function (){
$(this).parents(".violation").remove();
})
@ -145,6 +162,11 @@ function getFishingBoatEditModal(cdsKey){
if(crackdownPolice){
getCrackdownBoatOption(crackdownPolice)
}
if(cdsKey !== null){
$(".crackdownStatusInfo").attr("disabled", "disabled")
$(".sailorInfo").attr("disabled", "disabled")
$(".processResultInfo").attr("disabled", "disabled")
}
$("#fishingBoatEditModal").modal('show');
},
error:function(){
@ -180,7 +202,9 @@ function getCrackdownBoatOption(categoryCd){
success: function(html){
const crackdownBoat = $("#crackdownBoat");
crackdownBoat.empty().append(html);
if(!$("#cdsKey").val()){
crackdownBoat.removeAttr("disabled");
}
},
error:function(){

View File

@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="row border border-secondary">
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">선명</label>
<div class="col-sm-10 border-end border-secondary">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.boatNameKr}">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.boatNameCn}">
</div>
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">위반사항</label>
<div class="col-sm-10">
<div class="row">
<th:block th:each="code:${vtList}">
<th:block th:each="violation:${fishingBoat.violationList}">
<div class="col-6" th:if="${code.itemCd eq violation.violation}">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${code.itemValue}"/>
</div>
</th:block>
</th:block>
</div>
</div>
</div>
<div class="row border border-secondary border-top-0">
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">허가번호</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.permitNum}">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">국적</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.nationality}">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">승선원</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.sailorCnt}인|">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">톤수</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.tonCnt}t|">
</div>
</div>
<div class="row border border-secondary border-top-0">
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">선종</label>
<div class="col-sm-4 border-end border-secondary">
<th:block th:each="code:${ftList}">
<input type="text" class="form-control form-control-sm border-0" readonly th:if="${code.itemCd eq fishingBoat.fisheryType}" th:value="${code.itemValue}">
</th:block>
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">선질</label>
<div class="col-sm-4 border-end border-secondary">
<th:block th:each="code:${bmList}">
<input type="text" class="form-control form-control-sm border-0" readonly th:if="${code.itemCd eq fishingBoat.boatMaterial}" th:value="${code.itemValue}">
</th:block>
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">선적지</label>
<div class="col-sm-4 border-end border-secondary">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.boatNnySung}">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.boatNnySi}">
</div>
</div>
</div>
<div class="row border border-secondary border-top-0">
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">범칙물</label>
<div class="col-sm-6">
<input type="text" class="form-control form-control-sm border-0" readonly
th:value="|${fishingBoat.offenseType} ${fishingBoat.offenseWeight}kg|">
</div>
<div class="col-sm-4 border-end border-secondary"></div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">범칙물 위판량</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.offenseQuantity}kg|">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center fs-11">범칙물 위판금액</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.offenseAmount}원|">
</div>
</div>
<div class="row border border-secondary border-top-0">
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">범칙물 폐기량</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.offenseIllegalWasteQuantity}kg|">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">담보금 미납액</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.damboUnpaidAmount}원|">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">담보금 납부액</label>
<div class="col-sm-4 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="|${fishingBoat.damboPayment}원|">
</div>
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center fs-11">담보금 납부일시</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${fishingBoat.paymentPaymentDt}">
</div>
</div>
<div class="row border border-secondary border-top-0">
<label class="col-sm-2 col-form-label col-form-label-sm py-2 border-end border-secondary text-center">압수어구</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-sm border-0" readonly
th:value="|틀: ${fishingBoat.confiscationFrame} 폭: ${fishingBoat.confiscationWidth} 조: ${fishingBoat.confiscationJo} 개: ${fishingBoat.confiscationGae} 기타: ${fishingBoat.confiscationEtc}|">
</div>
</div>
</html>

View File

@ -8,14 +8,14 @@
<form action="#" method="post" id="fishingBoatEditForm">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="cdsKey" th:value="${crackdownStatus.cdsKey}">
<input type="hidden" name="fbKey" th:value="${crackdownStatus.fishingBoat.fbKey}">
<input type="hidden" name="saveYn" id="saveYn" th:value="${crackdownStatus.fishingBoat.saveYn}">
<input type="hidden" name="wrtOrgan" th:value="${crackdownStatus.fishingBoat.wrtOrgan}">
<input type="hidden" name="wrtPart" th:value="${crackdownStatus.fishingBoat.wrtPart}">
<input type="hidden" name="wrtUserSeq" th:value="${crackdownStatus.fishingBoat.wrtUserSeq}">
<input type="hidden" name="wrtUserNm" th:value="${crackdownStatus.fishingBoat.wrtUserNm}">
<input type="hidden" name="wrtUserGrd" th:value="${crackdownStatus.fishingBoat.wrtUserGrd}">
<input type="hidden" name="cdsKey" id="cdsKey" th:value="${crackdownStatus.cdsKey}">
<input type="hidden" name="fishingBoat.fbKey" th:value="${crackdownStatus.fishingBoat.fbKey}">
<input type="hidden" name="fishingBoat.saveYn" id="saveYn" th:value="${crackdownStatus.fishingBoat.saveYn}">
<input type="hidden" name="fishingBoat.wrtOrgan" th:value="${crackdownStatus.fishingBoat.wrtOrgan}">
<input type="hidden" name="fishingBoat.wrtPart" th:value="${crackdownStatus.fishingBoat.wrtPart}">
<input type="hidden" name="fishingBoat.wrtUserSeq" th:value="${crackdownStatus.fishingBoat.wrtUserSeq}">
<input type="hidden" name="fishingBoat.wrtUserNm" th:value="${crackdownStatus.fishingBoat.wrtUserNm}">
<input type="hidden" name="fishingBoat.wrtUserGrd" th:value="${crackdownStatus.fishingBoat.wrtUserGrd}">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="baseInfoTab" data-bs-toggle="tab" data-bs-target="#baseInfoTabPanel" type="button" role="tab" aria-controls="baseInfoTabPanel" aria-selected="true">기본정보</button>
@ -41,7 +41,7 @@
<div class="col-sm-2">
<div class="input-group">
<input type="text" class="form-control form-control-sm crackdownStatusInfo" id="caseNum" name="caseNum" th:value="${crackdownStatus.caseNum}">
<input type="button" class="btn btn-sm btn-outline-primary w-auto" id="caseNumBtn" value="불러오기">
<input type="button" class="btn btn-sm btn-outline-primary crackdownStatusInfo w-auto" id="caseNumBtn" value="불러오기">
</div>
</div>
</div>
@ -100,6 +100,7 @@
</div>
<div class="tab-pane fade p-2" id="sailorTabPanel" role="tabpanel" aria-labelledby="sailorTab" tabindex="0">
<div class="row">
<th:block th:if="${#lists.isEmpty(crackdownStatus.sailorList)}">
<div class="col-6" id="captainDiv">
<div class="mb-3 row">
<label for="captainDiv" class="col-sm-2 col-form-label col-form-label-sm text-center">&nbsp;</label>
@ -164,7 +165,7 @@
<div class="col-6 border-start" id="shipOwnerDiv">
<div class="mb-3 row">
<div class="col-sm-4 ms-3 input-group w-auto">
<input type="checkbox" id="equalCaptain">
<input type="checkbox" class="sailorInfo" id="equalCaptain">
<label for="equalCaptain" class="col-form-label col-form-label-sm ps-2">좌측동일</label>
</div>
</div>
@ -201,6 +202,116 @@
</div>
</div>
</div>
</th:block>
<th:block th:unless="${#lists.isEmpty(crackdownStatus.sailorList)}">
<th:block th:each="sailor:${crackdownStatus.sailorList}">
<th:block th:if="${sailor.position eq 'POS001'}">
<div class="col-6" id="captainDiv">
<div class="mb-3 row">
<label for="captainDiv" class="col-sm-2 col-form-label col-form-label-sm text-center">&nbsp;</label>
</div>
<div class="mb-3 row">
<label for="sailorNameKr" class="col-sm-2 col-form-label col-form-label-sm text-center">선장명</label>
<div class="col-sm-10">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameKr" placeholder="한글" th:value="${sailor.sailorNameKr}">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameCn" placeholder="중문" th:value="${sailor.sailorNameCn}">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNamePinyin" placeholder="병음" th:value="${sailor.sailorNamePinyin}">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="birthdate" class="col-sm-2 col-form-label col-form-label-sm text-center">생년월일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo dateSelector" id="birthdate" placeholder="0000-00-00" th:value="${sailor.birthdate}">
</div>
<label for="sailorContact" class="col-sm-2 col-form-label col-form-label-sm text-center">연락처</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorContact" th:value="${sailor.sailorContact}">
</div>
</div>
<div class="mb-3 row">
<label for="residence" class="col-sm-2 col-form-label col-form-label-sm text-center">주소</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo" id="residence" placeholder="성 기준" th:value="${sailor.residence}">
</div>
<label for="arrestHistory" class="col-sm-2 col-form-label col-form-label-sm text-center">재범횟수</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo" id="arrestHistory" th:value="${sailor.arrestHistory}">
</div>
</div>
<div class="mb-3 row">
<label for="note" class="col-sm-2 col-form-label col-form-label-sm text-center">비고</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-sm sailorInfo" id="note" th:value="${sailor.note}">
</div>
</div>
<div class="row mb-3">
<label for="fileInputer" class="col-sm-2 col-form-label col-form-label-sm text-center">사진</label>
<div class="col-sm-10" style="min-height: 70px;">
<div class="w-100 h-100 border border-info rounded text-center" id="uploadDiv">
<br>사진을 업로드 해주세요.
<!--
<th:block th:if="${#arrays.isEmpty(affair.fileList)}">
<br>파일을 업로드 해주세요.
</th:block>
<th:block th:unless="${#arrays.isEmpty(affair.fileList)}">
<div class='row-col-6' th:each="affairFile:${affair.fileList}">
<span th:data-fileseq="${affairFile.fileSeq}" th:text="|${affairFile.origNm}.${affairFile.fileExtn} ${affairFile.fileSize}|"></span>
<a href='#' class='uploadedFileDelete text-danger text-decoration-none'>삭제</a>
</div>
</th:block>
-->
</div>
</div>
<input type="file" class="d-none sailorInfo" id="fileInputer" multiple>
</div>
</div>
</th:block>
<th:block th:if="${sailor.position eq 'POS004'}">
<div class="col-6 border-start" id="shipOwnerDiv">
<div class="mb-3 row">
<div class="col-sm-4 ms-3 input-group w-auto">
<input type="checkbox" class="sailorInfo" id="equalCaptain">
<label for="equalCaptain" class="col-form-label col-form-label-sm ps-2">좌측동일</label>
</div>
</div>
<div class="mb-3 row">
<label for="sailorNameKr2" class="col-sm-2 col-form-label col-form-label-sm text-center">선장명</label>
<div class="col-sm-10">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameKr2" placeholder="한글" th:value="${sailor.sailorNameKr}">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameCn2" placeholder="중문" th:value="${sailor.sailorNameCn}">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNamePinyin2" placeholder="병음" th:value="${sailor.sailorNamePinyin}">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="birthdate2" class="col-sm-2 col-form-label col-form-label-sm text-center">생년월일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo dateSelector" id="birthdate2" placeholder="0000-00-00" th:value="${sailor.birthdate}">
</div>
<label for="sailorContact2" class="col-sm-2 col-form-label col-form-label-sm text-center">연락처</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorContact2" th:value="${sailor.sailorContact}">
</div>
</div>
<div class="mb-3 row">
<label for="residence2" class="col-sm-2 col-form-label col-form-label-sm text-center">주소</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm sailorInfo" id="residence2" placeholder="성 기준" th:value="${sailor.residence}">
</div>
</div>
<div class="mb-3 row">
<label for="note2" class="col-sm-2 col-form-label col-form-label-sm text-center">비고</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-sm sailorInfo" id="note2" th:value="${sailor.note}">
</div>
</div>
</div>
</th:block>
</th:block>
</th:block>
</div>
</div>
<div class="tab-pane fade p-2" id="fishingBoatTabPanel" role="tabpanel" aria-labelledby="fishingBoatTab" tabindex="0">
@ -224,7 +335,19 @@
</div>
<div class="col-sm-4">
<div class="row" id="violationDiv">
<th:block th:each="violation:${crackdownStatus.violationList}">
<div class="col-6 violation">
<input type="hidden" class="form-control form-control-sm fishingBoatInfo violationCd" th:value="${violation.violation}">
<div class="input-group w-auto">
<th:block th:each="code:${vtList}">
<input type="text" class="form-control form-control-sm" th:if="${code.itemCd eq violation.violation}" th:value="${code.itemValue}">
</th:block>
<button type="button" class="btn btn-sm btn-outline-secondary opacity-75 violationRemoveBtn">
<i class="bi bi-dash-square text-danger"></i>
</button>
</div>
</div>
</th:block>
</div>
</div>
</div>
@ -288,7 +411,7 @@
</div>
<label for="offenseAmount" class="col-sm-1 col-form-label col-form-label-sm text-center fs-11">범칙물 위판금액</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseAmount" name="fishingBoat.offenseAmount" placeholder="최대 9,999,999,999원" th:value="${crackdownStatus.fishingBoat.offenseAmount}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseAmount" name="fishingBoat.offenseAmount" placeholder="최대 999,999,999원" th:value="${crackdownStatus.fishingBoat.offenseAmount}">
</div>
</div>
<div class="mb-3 row">
@ -298,15 +421,15 @@
</div>
<label for="damboUnpaidAmount" 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 fishingBoatInfo" id="damboUnpaidAmount" name="fishingBoat.damboUnpaidAmount" placeholder="최대 9,999,999,999원" th:value="${crackdownStatus.fishingBoat.damboUnpaidAmount}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="damboUnpaidAmount" name="fishingBoat.damboUnpaidAmount" placeholder="최대 999,999,999원" th:value="${crackdownStatus.fishingBoat.damboUnpaidAmount}">
</div>
<label for="damboPayment" 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 fishingBoatInfo" id="damboPayment" name="fishingBoat.damboPayment" placeholder="최대 9,999,999,999원" th:value="${crackdownStatus.fishingBoat.damboPayment}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="damboPayment" name="fishingBoat.damboPayment" placeholder="최대 999,999,999원" th:value="${crackdownStatus.fishingBoat.damboPayment}">
</div>
<label for="paymentPaymentDt" class="col-sm-1 col-form-label col-form-label-sm text-center fs-11">담보금 납부일시</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm fishingBoatInfo dateTimeSelector" id="fishingBoat.paymentPaymentDt" name="paymentPaymentDt" placeholder="0000-00-00 00:00" th:value="${crackdownStatus.fishingBoat.paymentPaymentDt}">
<input type="text" class="form-control form-control-sm fishingBoatInfo dateTimeSelector" id="paymentPaymentDt" name="fishingBoat.paymentPaymentDt" placeholder="0000-00-00 00:00" th:value="${crackdownStatus.fishingBoat.paymentPaymentDt}">
</div>
</div>
<div class="mb-3 row">
@ -337,19 +460,22 @@
</div>
<label for="pressurizedTimeTakenDate" class="col-sm-1 col-form-label col-form-label-sm text-center">압송소요시간</label>
<div class="col-sm-2">
<th:block th:with="ptt=${crackdownStatus.processResult.pressurizedTimeTaken}">
<div class="input-group w-auto">
<input type="number" class="form-control form-control-sm pressurizedTimeTaken" id="pressurizedTimeTakenDate" placeholder="일" th:value="${crackdownStatus.processResult.pressurizedTimeTaken}">
<input type="text" class="form-control form-control-sm pressurizedTimeTaken timeSelector" id="pressurizedTimeTakenTime" placeholder="00:00" th:value="${crackdownStatus.processResult.pressurizedTimeTaken}">
<input type="number" class="form-control form-control-sm pressurizedTimeTaken processResultInfo" id="pressurizedTimeTakenDate" placeholder="일" th:value="${#strings.substringBefore(ptt, '일')}">
<input type="text" class="form-control form-control-sm pressurizedTimeTaken processResultInfo timeSelector" id="pressurizedTimeTakenTime" placeholder="00:00" th:value="${#strings.substringAfter(ptt, '일')}">
</div>
<input type="hidden" class="processResultInfo" name="processResult.pressurizedTimeTaken" id="pressurizedTimeTaken">
<input type="hidden" class="processResultInfo" name="processResult.pressurizedTimeTaken" id="pressurizedTimeTaken" th:value="${ptt}">
</th:block>
</div>
<label for="warrantReqTakeDate" class="col-sm-1 col-form-label col-form-label-sm text-center fs-11">영장청구 소요시간</label>
<div class="col-sm-2">
<th:block th:with="wrtt=${crackdownStatus.processResult.warrantReqTakeTime}">
<div class="input-group w-auto">
<input type="number" class="form-control form-control-sm warrantReqTake" id="warrantReqTakeDate" placeholder="일" th:value="${crackdownStatus.processResult.warrantReqTakeTime}">
<input type="text" class="form-control form-control-sm warrantReqTake timeSelector" id="warrantReqTakeTime" placeholder="00:00" th:value="${crackdownStatus.processResult.warrantReqTakeTime}">
<input type="number" class="form-control form-control-sm warrantReqTake processResultInfo" id="warrantReqTakeDate" placeholder="일" th:value="${#strings.substringBefore(wrtt, '일')}">
<input type="text" class="form-control form-control-sm warrantReqTake processResultInfo timeSelector" id="warrantReqTakeTime" placeholder="00:00" th:value="${#strings.substringAfter(wrtt, '일')}">
</div>
<input type="hidden" class="processResultInfo" name="processResult.warrantReqTakeTime" id="warrantReqTake">
<input type="hidden" class="processResultInfo" name="processResult.warrantReqTakeTime" id="warrantReqTake" th:value="${wrtt}">
</div>
</div>
<div class="mb-3 row">
@ -357,8 +483,8 @@
<div class="col-sm-2">
<select class="form-select form-select-sm processResultInfo" id="isIvsgtStop" name="processResult.isIvsgtStop">
<option value="">선택</option>
<option value="Y">O</option>
<option value="N">X</option>
<option value="Y" th:selected="${crackdownStatus.processResult.isIvsgtStop eq 'Y'}">O</option>
<option value="N" th:selected="${crackdownStatus.processResult.isIvsgtStop eq 'N'}">X</option>
</select>
</div>
<label for="evictionDt" class="col-sm-1 col-form-label col-form-label-sm text-center">퇴거일</label>
@ -459,7 +585,7 @@
<select class="form-select form-select-sm processResultInfo" id="boatDisposalType" name="processResult.boatDisposalType">
<option value="">선택</option>
<th:block th:each="code:${bdtList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.processResult.boatDisposalType}"></option>
</th:block>
</select>
</div>
@ -469,6 +595,7 @@
</div>
</div>
<div class="mb-3 row">
<th:block th:if="${#lists.isEmpty(crackdownStatus.sailorList)}">
<label for="captainRestriction" class="col-sm-1 col-form-label col-form-label-sm text-center">선장구속</label>
<div class="col-sm-2">
<select class="form-select form-select-sm sailorInfo" id="captainRestriction">
@ -493,14 +620,76 @@
<option value="N">X</option>
</select>
</div>
</th:block>
<th:block th:unless="${#lists.isEmpty(crackdownStatus.sailorList)}">
<label for="captainRestriction" class="col-sm-1 col-form-label col-form-label-sm text-center">선장구속</label>
<div class="col-sm-2">
<th:block th:each="sailor:${crackdownStatus.sailorList}">
<th:block th:if="${sailor.position eq 'POS001'}">
<select class="form-select form-select-sm sailorInfo" id="captainRestriction">
<option value="">선택</option>
<option value="Y" th:selected="${sailor.isRestriction eq 'Y'}">O</option>
<option value="N" th:selected="${sailor.isRestriction eq 'N'}">X</option>
</select>
</th:block>
</th:block>
</div>
<label for="navigatingOfficerRestriction" class="col-sm-1 col-form-label col-form-label-sm text-center">항해장구속</label>
<div class="col-sm-2">
<th:block th:each="sailor:${crackdownStatus.sailorList}">
<th:block th:if="${sailor.position eq 'POS002'}">
<select class="form-select form-select-sm sailorInfo" id="navigatingOfficerRestriction">
<option value="">선택</option>
<option value="Y" th:selected="${sailor.isRestriction eq 'Y'}">O</option>
<option value="N" th:selected="${sailor.isRestriction eq 'N'}">X</option>
</select>
</th:block>
</th:block>
</div>
<label for="chiefEngineerRestriction" class="col-sm-1 col-form-label col-form-label-sm text-center">기관장구속</label>
<div class="col-sm-2">
<th:block th:each="sailor:${crackdownStatus.sailorList}">
<th:block th:if="${sailor.position eq 'POS003'}">
<select class="form-select form-select-sm sailorInfo" id="chiefEngineerRestriction">
<option value="">선택</option>
<option value="Y" th:selected="${sailor.isRestriction eq 'Y'}">O</option>
<option value="N" th:selected="${sailor.isRestriction eq 'N'}">X</option>
</select>
</th:block>
</th:block>
</div>
</th:block>
</div>
<div class="mb-3 row">
<label for="sailorAddBtn" class="col-sm-1 col-form-label col-form-label-sm text-center">
선원구속
<i class="bi bi-plus-square text-primary" id="sailorAddBtn"></i>
<button class="border-0 sailorInfo" id="sailorAddBtn">
<i class="bi bi-plus-square text-primary"></i>
</button>
</label>
<div class="col-sm-10 row" id="sailorRestrictionHome">
<th:block th:each="sailor:${crackdownStatus.sailorList}">
<th:block th:if="${sailor.position eq 'POS005' or sailor.position eq 'POS006'}">
<div class="col-4 sailorRestriction">
<div class="input-group">
<select class="form-select form-select-sm sailorInfo isRestriction normalSailorPosition" style="width: 75px">
<option value="">직책</option>
<option value="POS005" th:selected="${sailor.position eq 'POS005'}">기타 간부선원</option>
<option value="POS006" th:selected="${sailor.position eq 'POS006'}">일반선원 또는 확인불가</option>
</select>
<select class="form-select form-select-sm sailorInfo isRestriction w-auto normalSailorRestriction">
<option value="">선택</option>
<option value="Y" th:selected="${sailor.isRestriction eq 'Y'}">O</option>
<option value="N" th:selected="${sailor.isRestriction eq 'N'}">X</option>
</select>
<input type="text" class="form-control form-control-sm sailorInfo normalSailorNm w-auto" placeholder="이름" th:value="${sailor.sailorNameKr}">
<button type="button" class="btn btn-sm btn-outline-secondary sailorInfo w-auto opacity-75 sailorRemoveBtn">
<i class="bi bi-dash-square text-danger"></i>
</button>
</div>
</div>
</th:block>
</th:block>
</div>
</div>
<div class="mb-3 row">
@ -532,7 +721,7 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<button type="button" class="btn btn-warning" id="saveTempBtn">임시저장</button>
<!--<button type="button" class="btn btn-warning" id="saveTempBtn">임시저장</button>-->
<button type="button" class="btn btn-primary" id="saveResultBtn">저장</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>

View File

@ -5,6 +5,16 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<ul class="nav nav-tabs" id="fishingBoatTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="fishingBoatViewTab" data-bs-toggle="tab" data-bs-target="#fishingBoatViewTabPanel" type="button" role="tab" aria-controls="fishingBoatViewTabPanel" aria-selected="true">최신버전</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="fishingBoatVersionTab" data-bs-toggle="tab" data-bs-target="#fishingBoatVersionTabPanel" type="button" role="tab" aria-controls="fishingBoatHistoryTabPanel" aria-selected="false">수정이력</button>
</li>
</ul>
<div class="tab-content border border-top-0">
<div class="tab-pane fade p-2 mx-2 show active" id="fishingBoatViewTabPanel" role="tabpanel" aria-labelledby="fishingBoatViewTab" tabindex="0">
<input type="hidden" class="cdsKey" th:value="${crackdownStatus.cdsKey}">
<div class="row justify-content-between">
<div class="col-auto" th:text="|선명: ${crackdownStatus.fishingBoat.boatNameKr}|"></div>
@ -30,7 +40,7 @@
<input type="text" class="form-control form-control-sm border-0" readonly th:if="${code.itemCd eq crackdownStatus.caseAgency}" th:value="${code.itemValue}">
</th:block>
</div>
<label class="col-sm-1 col-form-label col-form-label-sm py-2 border-end border-secondary text-center fs-13">사건담당경찰관</label>
<label class="col-sm-1 col-form-label col-form-label-sm py-2 border-end border-secondary text-center fs-11">사건담당경찰관</label>
<div class="col-sm-2 border-end border-secondary">
<input type="text" class="form-control form-control-sm border-0" readonly th:value="${crackdownStatus.casePoliceOfficer}">
</div>
@ -388,6 +398,44 @@
th:value="|사무소명: ${crackdownStatus.processResult.immigrationOfficeName} 담당자: ${crackdownStatus.processResult.immigrationOfficeOfficerName} 연락처: ${crackdownStatus.processResult.immigrationOfficeOfficerContact}|">
</div>
</div>
</div>
<div class="tab-pane fade p-2 mx-2" id="fishingBoatVersionTabPanel" role="tabpanel" aria-labelledby="fishingBoatVersionTab" tabindex="0">
<div class="row">
<div class="col-3">
<table class="table table-hover">
<thead>
<tr>
<td></td>
<td>수정자</td>
<td>수정일</td>
</tr>
</thead>
<tbody>
<tr class="versionInfoTr" th:each="fishingBoat:${crackdownStatus.fishingBoatVersionList}">
<input type="hidden" class="fbKey" th:value="${fishingBoat.fbKey}">
<input type="hidden" class="versionNo" th:value="${fishingBoat.versionNo}">
<td><input type="checkbox"></td>
<td>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<th:block th:if="${fishingBoat.wrtOrgan eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block>
<br>
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
<th:block th:if="${fishingBoat.wrtUserGrd eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block>
<th:block th:text="${fishingBoat.wrtUserNm}"></th:block>
</td>
<td th:text="${#temporals.format(fishingBoat.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</tbody>
</table>
</div>
<div class="col-9 border-start" id="fishingBoardVersionInfoDiv">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<th:block th:if="${userSeq eq crackdownStatus.fishingBoat.wrtUserSeq or accessAuth eq 'ACC003'}"><!--작성자일 경우 수정 허용--><!--관리자일 경우 수정 허용-->