단속현황 수정 및 불법조업 외국어선 처리현황 중간 커밋

jiHyung 2022-11-01 14:36:56 +09:00
parent de0d83439a
commit 7843f9344b
18 changed files with 1095 additions and 32 deletions

View File

@ -9,7 +9,6 @@ import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ProcessResul
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.SailorRepository; import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.SailorRepository;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ViolationRepository; import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ViolationRepository;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.CrackdownStatusService; import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.CrackdownStatusService;
import com.dbnt.faisp.main.faStatistics.internationalCrimeArrest.model.InternationalCrimeArrest;
import com.dbnt.faisp.main.userInfo.model.UserInfo; import com.dbnt.faisp.main.userInfo.model.UserInfo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
@ -61,7 +60,7 @@ public class CrackdownStatusController {
} }
@GetMapping("/crackdownStatus/crackdownStatusViewModal") @GetMapping("/crackdownStatus/crackdownStatusViewModal")
public ModelAndView internationalCrimeArrestViewModal(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){ public ModelAndView crackdownStatusViewModal(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){
ModelAndView mav = new ModelAndView("faStatistics/crackdownStatus/crackdownStatusViewModal"); ModelAndView mav = new ModelAndView("faStatistics/crackdownStatus/crackdownStatusViewModal");
crackdownStatus = crackdownStatusService.selectCrackdownStatus(crackdownStatus.getCdsKey()); crackdownStatus = crackdownStatusService.selectCrackdownStatus(crackdownStatus.getCdsKey());
crackdownStatus.setFishingBoat(fishingBoatRepository.findByCdsKey(crackdownStatus.getCdsKey())); crackdownStatus.setFishingBoat(fishingBoatRepository.findByCdsKey(crackdownStatus.getCdsKey()));
@ -89,6 +88,14 @@ public class CrackdownStatusController {
crackdownStatus.setWrtOrgan(loginUser.getOgCd()); crackdownStatus.setWrtOrgan(loginUser.getOgCd());
crackdownStatus.setWrtNm(loginUser.getUserNm()); crackdownStatus.setWrtNm(loginUser.getUserNm());
crackdownStatus.setWrtDt(LocalDateTime.now()); crackdownStatus.setWrtDt(LocalDateTime.now());
crackdownStatus.setFishingBoat(new FishingBoat());
crackdownStatus.getFishingBoat().setWrtOrgan(loginUser.getOgCd());
crackdownStatus.getFishingBoat().setWrtNm(loginUser.getUserNm());
crackdownStatus.getFishingBoat().setWrtDt(LocalDateTime.now());
crackdownStatus.setProcessResult(new ProcessResult());
crackdownStatus.getProcessResult().setWrtOrgan(loginUser.getOgCd());
crackdownStatus.getProcessResult().setWrtNm(loginUser.getUserNm());
crackdownStatus.getProcessResult().setWrtDt(LocalDateTime.now());
} }
mav.addObject("crackdownStatus", crackdownStatus); mav.addObject("crackdownStatus", crackdownStatus);
return mav; return mav;

View File

@ -1,6 +1,7 @@
package com.dbnt.faisp.main.faStatistics.crackdownsStatus.mapper; package com.dbnt.faisp.main.faStatistics.crackdownsStatus.mapper;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus; import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.ProcessResult;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;

View File

@ -0,0 +1,12 @@
package com.dbnt.faisp.main.faStatistics.crackdownsStatus.mapper;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.ProcessResult;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ProcessResultMapper {
List<ProcessResult> selectProcessResultList(ProcessResult processResult);
Integer selectProcessResultListCnt(ProcessResult processResult);
}

View File

@ -98,8 +98,7 @@ public class CrackdownStatus extends BaseModel {
private LocalDateTime fieldIvsgtReleaseDt; private LocalDateTime fieldIvsgtReleaseDt;
@Column(name = "field_ivsgt_time_taken") @Column(name = "field_ivsgt_time_taken")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private String fieldIvsgtTimeTaken;
private LocalDateTime fieldIvsgtTimeTaken;
@Column(name = "pressurized_start_dt") @Column(name = "pressurized_start_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")

View File

@ -11,6 +11,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*; import javax.persistence.*;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Getter @Getter
@Setter @Setter
@ -33,12 +34,10 @@ public class ProcessResult extends BaseModel {
private String processStatus; private String processStatus;
@Column(name = "pressurized_time_taken") @Column(name = "pressurized_time_taken")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private String pressurizedTimeTaken;
private LocalDateTime pressurizedTimeTaken;
@Column(name = "warrant_req_take_time") @Column(name = "warrant_req_take_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private String warrantReqTakeTime;
private LocalDateTime warrantReqTakeTime;
@Column(name = "is_ivsgt_stop") @Column(name = "is_ivsgt_stop")
private String isIvsgtStop; private String isIvsgtStop;
@ -130,6 +129,23 @@ public class ProcessResult extends BaseModel {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime wrtDt; private LocalDateTime wrtDt;
@Column(name = "upd_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
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 @Transient
private String processStatusEtc; private String processStatusEtc;
@Transient
private String executionDetailEtc;
} }

View File

@ -9,6 +9,7 @@ import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*; import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Getter @Getter
@ -41,7 +42,8 @@ public class Sailor extends BaseModel {
private String sailorContact; private String sailorContact;
@Column(name = "birthdate") @Column(name = "birthdate")
private String birthdate; @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthdate;
@Column(name = "residence") @Column(name = "residence")
private String residence; private String residence;

View File

@ -0,0 +1,102 @@
package com.dbnt.faisp.main.faStatistics.crackdownsStatus;
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.FishingBoat;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.ProcessResult;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.*;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.CrackdownStatusService;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.ProcessResultService;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.time.LocalDateTime;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/faStatistics")
public class processResultController {
private final AuthMgtService authMgtService;
private final ProcessResultService processResultService;
private final ViolationRepository violationRepository;
private final CrackdownStatusRepository crackdownStatusRepository;
private final FishingBoatRepository fishingBoatRepository;
@RequestMapping("/processResult")
public ModelAndView processResult(@AuthenticationPrincipal UserInfo loginUser, ProcessResult processResult) {
ModelAndView mav = new ModelAndView("faStatistics/processResult/processResult");
//메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faStatistics/processResult").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
processResult.setQueryInfo();
List<ProcessResult> processResultList = processResultService.selectProcessResultList(processResult);
for (ProcessResult pr:processResultList) {
pr.setCrackdownStatus(crackdownStatusRepository.findByCdsKey(pr.getCdsKey()));
pr.setFishingBoat(fishingBoatRepository.findByCdsKey(pr.getCdsKey()));
pr.setViolationList(violationRepository.findByFbKey(pr.getFishingBoat().getFbKey()));
}
mav.addObject("processResultList", processResultList);
processResult.setContentCnt(processResultService.selectProcessResultListCnt(processResult));
processResult.setPaginationInfo();
mav.addObject("searchParams", processResult);
return mav;
}
@GetMapping("/processResult/processResultViewModal")
public ModelAndView processResultViewModal(@AuthenticationPrincipal UserInfo loginUser, ProcessResult processResult){
ModelAndView mav = new ModelAndView("faStatistics/processResult/processResultViewModal");
processResult = processResultService.selectProcessResult(processResult.getPrKey());
processResult.setCrackdownStatus(crackdownStatusRepository.findByCdsKey(processResult.getCdsKey()));
processResult.setFbKey(fishingBoatRepository.findByCdsKey(processResult.getCdsKey()).getFbKey());
processResult.setBoatNameKr(fishingBoatRepository.findByCdsKey(processResult.getCdsKey()).getBoatNameKr());
processResult.setViolationList(violationRepository.findByFbKey(processResult.getFbKey()));
mav.addObject("processResult", processResult);
mav.addObject("userSeq",loginUser.getUserSeq());
//메뉴권한 확인
mav.addObject("accessAuth", authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faStatistics/processResult").get(0).getAccessAuth());
return mav;
}
@GetMapping("/processResult/processResultEditModal")
public ModelAndView crackdownStatusEditModal(@AuthenticationPrincipal UserInfo loginUser, ProcessResult processResult){
ModelAndView mav = new ModelAndView("faStatistics/processResult/processResultEditModal");
if(processResult.getPrKey()!=null){
processResult = processResultService.selectProcessResult(processResult.getPrKey());
processResult.setCrackdownStatus(crackdownStatusRepository.findByCdsKey(processResult.getCdsKey()));
processResult.setFbKey(fishingBoatRepository.findByCdsKey(processResult.getCdsKey()).getFbKey());
processResult.setBoatNameKr(fishingBoatRepository.findByCdsKey(processResult.getCdsKey()).getBoatNameKr());
processResult.setViolationList(violationRepository.findByFbKey(processResult.getFbKey()));
}else{
processResult.setWrtOrgan(loginUser.getOgCd());
processResult.setWrtNm(loginUser.getUserNm());
processResult.setWrtDt(LocalDateTime.now());
}
mav.addObject("processResult", processResult);
return mav;
}
@PostMapping("/processResult/saveProcessResult")
public Integer saveProcessResult(@AuthenticationPrincipal UserInfo loginUser,
CrackdownStatus crackdownStatus,
FishingBoat fishingBoat,
ProcessResult processResult){
processResult.setWrtUserSeq(loginUser.getUserSeq());
processResult.setFishingBoat(fishingBoat);
processResult.setCrackdownStatus(crackdownStatus);
return processResultService.saveProcessResult(processResult);
}
}

View File

@ -4,5 +4,5 @@ import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface CrackdownStatusRepository extends JpaRepository<CrackdownStatus, Integer> { public interface CrackdownStatusRepository extends JpaRepository<CrackdownStatus, Integer> {
CrackdownStatus findByCdsKey(Integer cdsKey);
} }

View File

@ -0,0 +1,129 @@
package com.dbnt.faisp.main.faStatistics.crackdownsStatus.service;
import com.dbnt.faisp.config.BaseService;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.mapper.CrackdownStatusMapper;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.mapper.ProcessResultMapper;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.ProcessResult;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.Sailor;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.Violation;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ProcessResultService extends BaseService {
private final ProcessResultMapper processResultMapper;
private final CrackdownStatusRepository crackdownStatusRepository;
private final FishingBoatRepository fishingBoatRepository;
private final ViolationRepository violationRepository;
private final ProcessResultRepository processResultRepository;
private final SailorRepository sailorRepository;
public List<ProcessResult> selectProcessResultList(ProcessResult processResult) {
return processResultMapper.selectProcessResultList(processResult);
}
public Integer selectProcessResultListCnt(ProcessResult processResult) {
return processResultMapper.selectProcessResultListCnt(processResult);
}
public ProcessResult selectProcessResult(Integer prKey) {
return processResultRepository.findById(prKey).orElse(null);
}
@Transactional
public Integer saveCrackdownStatus(CrackdownStatus crackdownStatus) {
if (crackdownStatus.getCrackdownBoatEtc() != null) {
crackdownStatus.setCrackdownBoat(crackdownStatus.getCrackdownBoatEtc());
}
if (crackdownStatus.getCrackdownPoliceEtc() != null) {
crackdownStatus.setCrackdownPolice(crackdownStatus.getCrackdownPoliceEtc());
}
Integer cdsKey = crackdownStatusRepository.save(crackdownStatus).getCdsKey();
if (crackdownStatus.getFishingBoat() != null) {
if (crackdownStatus.getFishingBoat().getBoatMaterialEtc() != null) {
crackdownStatus.getFishingBoat().setBoatMaterial(crackdownStatus.getFishingBoat().getBoatMaterialEtc());
}
if (crackdownStatus.getFishingBoat().getFisheryTypeEtc() != null) {
crackdownStatus.getFishingBoat().setFisheryType(crackdownStatus.getFishingBoat().getFisheryTypeEtc());
}
crackdownStatus.getFishingBoat().setCdsKey(cdsKey);
Integer fbKey = fishingBoatRepository.save(crackdownStatus.getFishingBoat()).getFbKey();
crackdownStatus.getFishingBoat().setFbKey(fbKey);
}
if (crackdownStatus.getProcessResult() != null) {
if (crackdownStatus.getProcessResult().getProcessStatusEtc() != null) {
crackdownStatus.getProcessResult().setProcessStatus(crackdownStatus.getProcessResult().getProcessStatusEtc());
}
crackdownStatus.getProcessResult().setCdsKey(cdsKey);
Integer prKey = processResultRepository.save(crackdownStatus.getProcessResult()).getPrKey();
crackdownStatus.getProcessResult().setPrKey(prKey);
}
/*if (internationalCrimeArrest.getDeleteSpiKeyList() != null) {
suspectPersonInfoRepository.deleteAllByIdInQuery(internationalCrimeArrest.getDeleteSpiKeyList());
}*/
if (crackdownStatus.getViolationList() != null) {
for(Violation violation: crackdownStatus.getViolationList()){
if (violation.getViolationEtc() != null) {
violation.setViolation(violation.getViolationEtc());
}
violation.setFbKey(crackdownStatus.getFishingBoat().getFbKey());
}
violationRepository.saveAll(crackdownStatus.getViolationList());
}
if (crackdownStatus.getSailorList() != null) {
for(Sailor sailor: crackdownStatus.getSailorList()){
sailor.setFbKey(crackdownStatus.getFishingBoat().getFbKey());
}
sailorRepository.saveAll(crackdownStatus.getSailorList());
}
return cdsKey;
}
@Transactional
public Integer saveProcessResult(ProcessResult processResult) {
if (processResult.getExecutionDetailEtc() != null) {
processResult.setExecutionDetail(processResult.getExecutionDetailEtc());
}
Integer prKey = processResultRepository.save(processResult).getPrKey();
if (processResult.getCrackdownStatus() != null) {
if (processResult.getCrackdownStatus().getCrackdownPoliceEtc() != null) {
processResult.getCrackdownStatus().setCrackdownPolice(processResult.getCrackdownStatus().getCrackdownPoliceEtc());
}
processResult.setCrackdownStatus(crackdownStatusRepository.save(processResult.getCrackdownStatus()));
}
if (processResult.getFishingBoat() != null) {
fishingBoatRepository.save(processResult.getFishingBoat());
}
if (processResult.getViolationList() != null) {
for(Violation violation: processResult.getViolationList()){
if (violation.getViolationEtc() != null) {
violation.setViolation(violation.getViolationEtc());
}
violation.setFbKey(processResult.getFishingBoat().getFbKey());
}
violationRepository.saveAll(processResult.getViolationList());
}
return prKey;
}
}

View File

@ -0,0 +1,49 @@
<?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.crackdownsStatus.mapper.ProcessResultMapper">
<sql id="selectProcessResultListWhere">
<where>
</where>
</sql>
<select id="selectProcessResultList" resultType="ProcessResult" parameterType="ProcessResult">
SELECT
pr.pr_key
, cs.cds_key
, cs.case_num
, cs.napo_sea_point_lon
, cs.napo_sea_point_lat
, cs.napo_sea_point_detail
, fb.boat_name_kr
, pr.sentencing_court
, pr.sentencing_detail
, pr.execution_detail
, pr.return_dt
, pr.consignment_start_dt
, pr.consignment_end_dt
, pr.confiscation_dt
, pr.boat_disposal_dt
FROM process_result pr
INNER JOIN crackdown_status cs
ON pr.cds_key = cs.cds_key
INNER JOIN fishing_boat fb
ON pr.cds_key = fb.cds_key
<include refid="selectProcessResultListWhere"></include>
ORDER BY pr.cds_key DESC
LIMIT #{rowCnt} OFFSET #{firstIndex}
</select>
<select id="selectProcessResultListCnt" resultType="int" parameterType="ProcessResult">
SELECT count(*)
FROM crackdown_status cs
INNER JOIN fishing_boat fb
ON cs.cds_key = fb.cds_key
INNER JOIN process_result pr
ON cs.cds_key = pr.cds_key
<include refid="selectProcessResultListWhere"></include>
</select>
</mapper>

View File

@ -2,11 +2,6 @@ $(document).on('click', '#crackdownStatusAddBtn', function () {
getCrackdownStatusEditModal(null); getCrackdownStatusEditModal(null);
}); });
$(document).on('click', '#crackdownStatusEditBtn', function () {
$("#crackdownStatusViewModal").modal('hide');
getCrackdownStatusEditModal(Number($("#icaViewBody").find("[name='cdsKey']").val()));
});
$(document).on('click', '#cdsEditBtn', function () { $(document).on('click', '#cdsEditBtn', function () {
$("#crackdownStatusViewModal").modal('hide'); $("#crackdownStatusViewModal").modal('hide');
getCrackdownStatusEditModal(Number($("#crackdownStatusViewBody").find("[name='cdsKey']").val())); getCrackdownStatusEditModal(Number($("#crackdownStatusViewBody").find("[name='cdsKey']").val()));
@ -241,6 +236,10 @@ function getCrackdownStatusEditModal(cdsKey){
} }
function saveCrackdownStatus(saveYn){ function saveCrackdownStatus(saveYn){
$('input[name="fieldIvsgtTimeTaken"]').val(dateTimeCalc($("#fieldIvsgtNapoDt").val(), $("#fieldIvsgtReleaseDt").val()));
$('input[name="warrantReqTakeTime"]').val(dateTimeCalc($("#pressurizedStartDt").val(), $("#pressurizedEndDt").val()));
$('input[name="pressurizedTimeTaken"]').val(dateTimeCalc($("#pressurizedStartDt").val(), $("#pressurizedEndDt").val()));
if(contentCheck()){ if(contentCheck()){
if(confirm("저장하시겠습니까?")){ if(confirm("저장하시겠습니까?")){
$("#saveYn").val(saveYn); $("#saveYn").val(saveYn);
@ -252,17 +251,20 @@ function saveCrackdownStatus(saveYn){
sailorList.push( sailorList.push(
{ {
sailorKey: $("#cdsEditForm").find('input[name="captinSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="captinSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="captinSailorKey"]').val()) : null,
position: 'POS001', position: 'POS001',
sailorNameKr: $("#cdsEditForm").find('input[name="sailorNameKr"]').val() != '' ? $("#cdsEditForm").find('input[name="sailorNameKr"]').val() : null, sailorNameKr: $("#cdsEditForm").find('input[name="sailorNameKr"]').val() != '' ? $("#cdsEditForm").find('input[name="sailorNameKr"]').val() : null,
isRestriction: $("#cdsEditForm").find('select[name="captin"]').val() != '' ? $("#cdsEditForm").find('select[name="captin"]').val() : null, isRestriction: $("#cdsEditForm").find('select[name="captin"]').val() != '' ? $("#cdsEditForm").find('select[name="captin"]').val() : null,
birthdate: $("#cdsEditForm").find('input[name="birthdate"]').val() != '' ? $("#cdsEditForm").find('input[name="birthdate"]').val() : null birthdate: $("#cdsEditForm").find('input[name="birthdate"]').val() != '' ? $("#cdsEditForm").find('input[name="birthdate"]').val() : null
}, },
{ {
sailorKey: $("#cdsEditForm").find('input[name="mateSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="mateSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="mateSailorKey"]').val()) : null,
position: 'POS002', position: 'POS002',
sailorNameKr: null, sailorNameKr: null,
isRestriction: $("#cdsEditForm").find('select[name="mate"]').val() != '' ? $("#cdsEditForm").find('select[name="mate"]').val() : null isRestriction: $("#cdsEditForm").find('select[name="mate"]').val() != '' ? $("#cdsEditForm").find('select[name="mate"]').val() : null
}, },
{ {
sailorKey: $("#cdsEditForm").find('input[name="wardenSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="wardenSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="wardenSailorKey"]').val()) : null,
position: 'POS003', position: 'POS003',
sailorNameKr: null, sailorNameKr: null,
isRestriction: $("#cdsEditForm").find('select[name="warden"]').val() != '' ? $("#cdsEditForm").find('select[name="warden"]').val() : null isRestriction: $("#cdsEditForm").find('select[name="warden"]').val() != '' ? $("#cdsEditForm").find('select[name="warden"]').val() : null
@ -279,7 +281,7 @@ function saveCrackdownStatus(saveYn){
}); });
for (let i=0; i < sailorList.length; i++) { for (let i=0; i < sailorList.length; i++) {
if (sailorList[i].spiKey != null) { if (sailorList[i].sailorKey != null) {
formData.append(`sailorList[${i}].sailorKey`, sailorList[i].sailorKey); formData.append(`sailorList[${i}].sailorKey`, sailorList[i].sailorKey);
} }
if (sailorList[i].sailorNameKr != null) { if (sailorList[i].sailorNameKr != null) {
@ -398,3 +400,20 @@ function getToday() {
var date = new Date(); var date = new Date();
var year = date.getFullYear(); var year = date.getFullYear();
} }
function dateTimeCalc(startDateTime, endDateTime) {
if (startDateTime != '' &&endDateTime != '' && startDateTime != undefined && endDateTime != undefined) {
const startDate = new Date(startDateTime);
const endDate = new Date(endDateTime);
let diffTime = endDate.getTime() - startDate.getTime();
const day = Math.floor(diffTime / (1000* 60 * 60 * 24));
const hour = Math.floor((diffTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minute = Math.floor((diffTime % (1000 * 60 * 60)) / (1000 * 60));
return day + '일' + hour + '시간' + minute + '분';
}
return null;
}

View File

@ -0,0 +1,259 @@
$(document).on('click', '#processResultAddBtn', function () {
getProcessResultEditModal(null);
});
$(document).on('click', '#processResultEditBtn', function () {
$("#processResultViewModal").modal('hide');
getProcessResultEditModal(Number($("#processResultViewBody").find("[name='prKey']").val()));
});
$(document).on('click', '#saveProcessResultBtn', function (){
saveProcessResult('N')
});
$(document).on('click', '#saveTempBtn', function (){
saveProcessResult('Y')
});
$(document).on('click', '.tr', function (){
getProcessResultViewModal($(this).data('key'));
});
$(document).on('click', '#violationAddBtn', function (){
let violation = '';
commonCode.VT.forEach(function (item){
violation += '<option value="'+ item.itemCd +'">' + item.itemValue +'</option>';
})
$('#violationDiv').append(
'<div class="row">'
+ '<select class="form-select form-select-sm violation" name="violation">'
+ '<option value="">선택</option>'
+ violation
+ '<option value="etc">직접입력</option>'
+ '</select>'
+ '<button type="button" class="btn btn-primary col-auto" id="violationRemoveBtn">-</button>'
+ '</div>'
)
});
$(document).on('click', '#violationRemoveBtn', function (){
$(this).parent().remove();
});
$(document).on('change', '.violation', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="row col-auto etcDiv">'
+ '<input type="text" class="form-control" name="violationEtc">'
+ '</div>'
);
} else {
$(this).next('.etcDiv').remove();
}
});
$(document).on('change', '#crackdownPolice', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="crackdownPoliceEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('change', '#executionDetail', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="executionDetailEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('click', '#processResultDownExcel', function (){
exportExcel('불법조업 불법어선 처리현황');
});
function getProcessResultViewModal(prKey){
$.ajax({
url: '/faStatistics/processResult/processResultViewModal',
data: {prKey: prKey},
type: 'GET',
dataType:"html",
success: function(html){
$("#processResultViewBody").empty().append(html)
$("#processResultViewModal").modal('show');
},
error:function(){
}
});
}
function getProcessResultEditModal(prKey){
$.ajax({
url: '/faStatistics/processResult/processResultEditModal',
data: {
prKey: prKey
},
type: 'GET',
dataType:"html",
success: function(html){
$("#processResultViewBody").empty();
$("#processResultEditModalContent").empty().append(html);
$("#processResultEditModal").modal('show');
$("#consignmentStartDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#consignmentEndDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#returnDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#confiscationDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#boatDisposalDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
},
error:function(){
}
});
}
function saveProcessResult(saveYn){
$('input[name="warrantReqTakeTime"]').val(dateTimeCalc($("#consignmentStartDt").val(), $("#consignmentEndDt").val()));
if(contentCheck()){
if(confirm("저장하시겠습니까?")){
$("#saveYn").val(saveYn);
contentFade("in");
const formData = new FormData($("#processResultEditForm")[0]);
let violationList = [];
$(".violation").each(function (){
violationList.push({
violationKey: $(this).parent().find('input[name="violationKey"]').val() != undefined ? Number($(this).parent().find('input[name="violationKey"]').val()) : null,
fbKey: $("#cdsEditForm").find('input[name="fbKey"]').val() != undefined ? Number($("#cdsEditForm").find('input[name="fbKey"]').val()) : null,
violation: $(this).val() != '' ? $(this).val() : null,
violationEtc: $(this).parent().find('input[name="violationEtc"]').val() != undefined ? $(this).parent().find('input[name="violationEtc"]').val() : null
});
});
for (let i=0; i < violationList.length; i++) {
if (violationList[i].violationKey != null) {
formData.append(`violationList[${i}].violationKey`, violationList[i].violationKey);
}
if (violationList[i].fbKey != null) {
formData.append(`violationList[${i}].fbKey`, violationList[i].fbKey);
}
if (violationList[i].violation != null) {
formData.append(`violationList[${i}].violation`, violationList[i].violation);
}
if (violationList[i].violationEtc != null) {
formData.append(`violationList[${i}].violationEtc`, violationList[i].violationEtc);
}
}
$.ajax({
type : 'POST',
data : formData,
url : "/faStatistics/processResult/saveProcessResult",
processData: false,
contentType: false,
success : function(result) {
alert("저장되었습니다.");
contentFade("out");
$("#processResultEditModal").modal('hide');
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.")
contentFade("out");
}
})
}
}
}
function contentCheck(){
let flag = true;
return flag;
}
function exportExcel(name){
var excelHandler = {
getExcelFileName : function(){
return name+getToday()+'.xlsx'; //파일명
},
getSheetName : function(){
return name;
},
getExcelData : function(){
return document.getElementById('cdsTable'); //TABLE id
},
getWorksheet : function(){
return XLSX.utils.table_to_sheet(this.getExcelData());
}
}
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function getToday() {
var date = new Date();
var year = date.getFullYear();
}
function dateTimeCalc(startDateTime, endDateTime) {
if (startDateTime != '' &&endDateTime != '' && startDateTime != undefined && endDateTime != undefined) {
const startDate = new Date(startDateTime);
const endDate = new Date(endDateTime);
let diffTime = endDate.getTime() - startDate.getTime();
const day = Math.floor(diffTime / (1000* 60 * 60 * 24));
const hour = Math.floor((diffTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minute = Math.floor((diffTime % (1000 * 60 * 60)) / (1000 * 60));
return day + '일' + hour + '시간' + minute + '분';
}
return null;
}

View File

@ -6,7 +6,6 @@
<th:block layout:fragment="script"> <th:block layout:fragment="script">
<script th:inline="javascript"> <script th:inline="javascript">
const commonCode = [[${session.commonCode}]]; const commonCode = [[${session.commonCode}]];
let totalPersonDamageAmount = 0;
</script> </script>
<script type="text/javascript" th:src="@{/js/faStatistics/crackdownStatus.js}"></script> <script type="text/javascript" th:src="@{/js/faStatistics/crackdownStatus.js}"></script>
</th:block> </th:block>

View File

@ -66,9 +66,14 @@
<th:block th:each="commonCode:${session.commonCode.get('VT')}"> <th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" <option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${crackdownStatus.violationList != null and commonCode.itemCd eq violation.violation}"></option> th:selected="${crackdownStatus.violationList != null and commonCode.itemCd eq violation.violation}"></option>
<option value="etc">직접입력</option>
</th:block> </th:block>
<option th:selected="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" value="etc">직접입력</option>
</select> </select>
<th:block th:if="${violation.violation ne null and !#strings.contains(violation.violation, 'VT')}">
<div class="col-auto">
<input type="text" class="form-control" name="violationEtc" th:value="${violation.violation}">
</div>
</th:block>
</div> </div>
</th:block> </th:block>
</th:block> </th:block>
@ -194,7 +199,7 @@
<th:block th:each="sailor:${crackdownStatus.sailorList}" th:if="${#strings.contains(sailor.position, 'POS001')}"> <th:block th:each="sailor:${crackdownStatus.sailorList}" th:if="${#strings.contains(sailor.position, 'POS001')}">
<input th:if="${sailor.position eq 'POS001'}" class="form-control" name="sailorNameKr" th:value="${sailor.sailorNameKr}"> <input th:if="${sailor.position eq 'POS001'}" class="form-control" name="sailorNameKr" th:value="${sailor.sailorNameKr}">
</th:block> </th:block>
<th:block th:if="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001'].![1]) == null}"> <th:block th:if="${crackdownStatus.sailorList eq null || #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001'].![1]) == null}">
<input class="form-control" name="sailorNameKr"> <input class="form-control" name="sailorNameKr">
</th:block> </th:block>
</div> </div>
@ -203,7 +208,7 @@
<th:block th:each="sailor:${crackdownStatus.sailorList}" th:if="${#strings.contains(sailor.position, 'POS001')}"> <th:block th:each="sailor:${crackdownStatus.sailorList}" th:if="${#strings.contains(sailor.position, 'POS001')}">
<input th:if="${sailor.position eq 'POS001'}" class="form-control" name="birthdate" id="birthdate" th:value="${#temporals.format(sailor.birthdate, 'yyyy-MM-dd')}"> <input th:if="${sailor.position eq 'POS001'}" class="form-control" name="birthdate" id="birthdate" th:value="${#temporals.format(sailor.birthdate, 'yyyy-MM-dd')}">
</th:block> </th:block>
<th:block th:if="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001'].![1]) == null}"> <th:block th:if="${crackdownStatus.sailorList eq null || #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001'].![1]) == null}">
<input class="form-control" name="birthdate" id="birthdate"> <input class="form-control" name="birthdate" id="birthdate">
</th:block> </th:block>
</div> </div>
@ -373,26 +378,29 @@
<div class="mb-3 row"> <div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">선장</label> <label class="col-sm-1 col-form-label text-center">선장</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input type="hidden" name="captinSailorKey" th:value="${crackdownStatus.sailorList ne null ? #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001'].![sailorKey]) : null}">
<select class="form-select form-select-sm" name="captin"> <select class="form-select form-select-sm" name="captin">
<option value="">선택</option> <option value="">선택</option>
<option value="Y" th:selected="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001' && isRestriction == 'Y'].![1]) != null}">구속</option> <option value="Y" th:selected="${crackdownStatus.sailorList ne null && #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001' && isRestriction == 'Y'].![1]) != null}">구속</option>
<option value="N" th:selected="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001' && isRestriction == 'N'].![1]) != null}">불구속</option> <option value="N" th:selected="${crackdownStatus.sailorList ne null && #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS001' && isRestriction == 'N'].![1]) != null}">불구속</option>
</select> </select>
</div> </div>
<label class="col-sm-1 col-form-label text-center">향해장</label> <label class="col-sm-1 col-form-label text-center">향해장</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input type="hidden" name="mateSailorKey" th:value="${crackdownStatus.sailorList ne null ? #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS002'].![sailorKey]) : null}">
<select class="form-select form-select-sm" name="mate"> <select class="form-select form-select-sm" name="mate">
<option value="">선택</option> <option value="">선택</option>
<option value="Y" th:selected="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS002' && isRestriction == 'Y'].![1]) != null}">구속</option> <option value="Y" th:selected="${crackdownStatus.sailorList ne null && #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS002' && isRestriction == 'Y'].![1]) != null}">구속</option>
<option value="N" th:selected="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS002' && isRestriction == 'N'].![1]) != null}">불구속</option> <option value="N" th:selected="${crackdownStatus.sailorList ne null && #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS002' && isRestriction == 'N'].![1]) != null}">불구속</option>
</select> </select>
</div> </div>
<label class="col-sm-1 col-form-label text-center">기관장</label> <label class="col-sm-1 col-form-label text-center">기관장</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input type="hidden" name="wardenSailorKey" th:value="${crackdownStatus.sailorList ne null ? #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS003'].![sailorKey]) : null}">
<select class="form-select form-select-sm" name="warden"> <select class="form-select form-select-sm" name="warden">
<option value="">선택</option> <option value="">선택</option>
<option value="Y" th:selected="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS003' && isRestriction == 'Y'].![1]) != null}">구속</option> <option value="Y" th:selected="${crackdownStatus.sailorList ne null && #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS003' && isRestriction == 'Y'].![1]) != null}">구속</option>
<option value="N" th:selected="${#aggregates.sum(crackdownStatus.sailorList.?[position == 'POS003' && isRestriction == 'N'].![1]) != null}">불구속</option> <option value="N" th:selected="${crackdownStatus.sailorList ne null && #aggregates.sum(crackdownStatus.sailorList.?[position == 'POS003' && isRestriction == 'N'].![1]) != null}">불구속</option>
</select> </select>
</div> </div>
<button type="button" class="btn btn-primary col-auto" id="sailorAddBtn">선원 추가</button> <button type="button" class="btn btn-primary col-auto" id="sailorAddBtn">선원 추가</button>
@ -430,7 +438,7 @@
</div> </div>
<label class="col-sm-1 col-form-label text-center">소요시간</label> <label class="col-sm-1 col-form-label text-center">소요시간</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input class="form-control" name="fieldIvsgtTimeTaken" th:value="${#temporals.format(crackdownStatus.fieldIvsgtTimeTaken, 'yyyy-MM-dd HH:mm')}"> <input class="form-control" name="fieldIvsgtTimeTaken" readonly>
</div> </div>
</div> </div>
<div class="mb-3 row"> <div class="mb-3 row">
@ -447,7 +455,7 @@
</div> </div>
<label class="col-sm-1 col-form-label text-center">영장청구<br>소요시간</label> <label class="col-sm-1 col-form-label text-center">영장청구<br>소요시간</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input class="form-control" name="warrantReqTakeTime" th:value="${#temporals.format(crackdownStatus.processResult.warrantReqTakeTime, 'yyyy-MM-dd HH:mm')}"> <input class="form-control" name="warrantReqTakeTime" readonly>
</div> </div>
<label class="col-sm-1 col-form-label text-center">거리</label> <label class="col-sm-1 col-form-label text-center">거리</label>
<div class="col-sm-2"> <div class="col-sm-2">

View File

@ -66,9 +66,14 @@
<th:block th:each="commonCode:${session.commonCode.get('VT')}"> <th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" <option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${crackdownStatus.violationList != null and commonCode.itemCd eq violation.violation}"></option> th:selected="${crackdownStatus.violationList != null and commonCode.itemCd eq violation.violation}"></option>
<option value="etc">직접입력</option>
</th:block> </th:block>
<option th:selected="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" value="etc">직접입력</option>
</select> </select>
<th:block th:if="${violation.violation ne null and !#strings.contains(violation.violation, 'VT')}">
<div class="col-auto">
<input type="text" class="form-control" name="violationEtc" th:value="${violation.violation}">
</div>
</th:block>
</div> </div>
</th:block> </th:block>
</th:block> </th:block>
@ -430,7 +435,7 @@
</div> </div>
<label class="col-sm-1 col-form-label text-center">소요시간</label> <label class="col-sm-1 col-form-label text-center">소요시간</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input class="form-control" name="fieldIvsgtTimeTaken" th:value="${#temporals.format(crackdownStatus.fieldIvsgtTimeTaken, 'yyyy-MM-dd HH:mm')}"> <input class="form-control" name="fieldIvsgtTimeTaken" th:value="${crackdownStatus.fieldIvsgtTimeTaken}" readonly>
</div> </div>
</div> </div>
<div class="mb-3 row"> <div class="mb-3 row">
@ -447,7 +452,7 @@
</div> </div>
<label class="col-sm-1 col-form-label text-center">영장청구<br>소요시간</label> <label class="col-sm-1 col-form-label text-center">영장청구<br>소요시간</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input class="form-control" name="warrantReqTakeTime" th:value="${#temporals.format(crackdownStatus.processResult.warrantReqTakeTime, 'yyyy-MM-dd HH:mm')}"> <input class="form-control" name="warrantReqTakeTime" th:value="${crackdownStatus.processResult.warrantReqTakeTime}" readonly>
</div> </div>
<label class="col-sm-1 col-form-label text-center">거리</label> <label class="col-sm-1 col-form-label text-center">거리</label>
<div class="col-sm-2"> <div class="col-sm-2">

View File

@ -0,0 +1,162 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
<script th:inline="javascript">
const commonCode = [[${session.commonCode}]];
</script>
<script type="text/javascript" th:src="@{/js/faStatistics/processResult.js}"></script>
</th:block>
<div layout:fragment="content">
<main class="pt-3">
<h4>불법조업 외국어선 처리현황</h4>
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row mx-0">
<div class="col-12 card">
<div class="card-body">
<form method="get" th:action="@{/faStatistics/processResult}" id="processResultSearchForm">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-between pe-3 py-1">
<div class="col-auto">
<select class="form-select" name="rowCnt" id="rowCnt">
<th:block th:each="num : ${#numbers.sequence(1,5)}">
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt eq num*10}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<div class="row justify-content-end">
<!--<div class="col-auto">
<input type="text" class="form-control form-control-sm" placeholder="사건번호" name="caseNum" th:value="${searchParams.caseNum}">
</div>-->
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</div>
</form>
<div class="row justify-content-start" style="overflow: hidden; overflow-x: scroll">
<table class="table table-striped" style="max-width: none; width: auto;" id="prTable">
<thead>
<tr>
<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>
</tr>
</thead>
<tbody>
<th:block th:each="processResult:${processResultList}">
<tr class="tr" th:data-key="${processResult.prKey}">
<td th:text="${processResult.prKey}"></td>
<td th:text="${processResult.crackdownStatus.caseNum}"></td>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<td th:if="${processResult.crackdownStatus.crackdownPolice eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(processResult.crackdownStatus.crackdownPolice, 'CPO')}">
<td th:text="${processResult.crackdownStatus.crackdownPolice}"></td>
</th:block>
<td th:text="${processResult.boatNameKr}"></td>
<td>
<span th:text="${processResult.crackdownStatus.napoSeaPointLon}"> ~ </span>
<span th:text="${processResult.crackdownStatus.napoSeaPointLat}"></span>
<div th:text="${processResult.crackdownStatus.napoSeaPointDetail}"></div>
<th:block th:if="${#lists.size(processResult.violationList) >= 1}">
<div>
<th:block th:each="violation:${processResult.violationList}">
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<span th:if="${violation.violation eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></span>
</th:block>
<span th:if="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" th:text="${violation.violation}"></span>
</th:block>
</div>
</th:block>
</td>
<td th:text="${processResult.sentencingCourt}"></td>
<td th:text="${processResult.sentencingDetail}"></td>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<th:block th:if="${processResult.executionDetail ne null && #strings.contains(processResult.executionDetail, 'PR')}">
<td th:if="${processResult.executionDetail eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<td th:if="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}" th:text="${processResult.executionDetail}"></td>
<th:block th:if="${processResult.executionDetail eq null}">
<td></td>
</th:block>
<td th:text="${processResult.returnDt}"></td>
<td th:text="${processResult.consignmentStartDt}"></td>
<td th:text="${processResult.consignmentEndDt}"></td>
<td th:text="${processResult.confiscationDt}"></td>
<td th:text="${processResult.boatDisposalDt}"></td>
<td th:text="${processResult.updDt}"></td>
</tr>
</th:block>
</tbody>
</table>
</div>
<div class="row justify-content">
<button class="btn btn-sm btn-primary col-auto" id="">관리자마감</button>
<button class="btn btn-sm btn-primary col-auto" id="processResultDownExcel">엑셀 다운로드</button>
</div>
<!-- 페이징 -->
<div class="row justify-content-center">
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination">
<th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item" 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" 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" 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 class="modal fade" id="processResultEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="processResultEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="processResultEditModalContent">
</div>
</div>
</div>
<div class="modal fade" id="processResultViewModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="processResultViewModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="processResultViewBody">
</div>
</div>
</div>
</main>
</div>
</html>

View File

@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header">
<h5 class="modal-title" id="processResultEditModalLabel" th:text="${processResult.prKey eq null ? '불법조업 외국어선 처리현황 등록' : '불법조업 외국어선 처리현황 수정'}">></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="processResultEditBody">
<form action="#" method="post" id="processResultEditForm">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<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="${processResult.crackdownStatus.cdsKey}">
<input type="hidden" name="fbKey" th:value="${processResult.fbKey}">
<input type="hidden" name="prKey" th:value="${processResult.prKey}">
<input type="hidden" name="wrtOrgan" th:value="${processResult.wrtOrgan}">
<input type="hidden" name="wrtNm" th:value="${processResult.wrtNm}">
<input type="hidden" name="wrtDt" th:value="${#temporals.format(processResult.wrtDt, 'yyyy-MM-dd HH:mm')}">
<input type="hidden" id="saveYn" name="saveYn">
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">사건번호</label>
<div class="col-sm-2">
<input class="form-control" name="caseNum" id="caseNum" th:value="${processResult.crackdownStatus.caseNum}">
</div>
<label class="col-sm-1 col-form-label text-center">사건담당경찰서</label>
<div class="col-sm-2">
<select class="form-select form-select-sm" name="crackdownPolice" id="crackdownPolice">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${processResult.crackdownStatus.crackdownPolice eq commonCode.itemCd}"></option>
</th:block>
<option value="etc" th:selected="${processResult.crackdownStatus.crackdownPolice ne null && !#strings.contains(processResult.crackdownStatus.crackdownPolice, 'CPO')}">직접입력</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">피의자(선박병)</label>
<div class="col-sm-2">
<input class="form-control" name="boatNameKr" id="boatNameKr" th:value="${processResult.boatNameKr}">
</div>
<label class="col-sm-1 col-form-label text-center">위반장소</label>
<div class="col-sm-2">
<input class="form-control" name="napoSeaPointLon" id="napoSeaPointLon" th:value="${processResult.crackdownStatus.napoSeaPointLon}">
<input class="form-control" name="napoSeaPointLat" id="napoSeaPointLat" th:value="${processResult.crackdownStatus.napoSeaPointLat}">
<input class="form-control" name="napoSeaPointDetail" id="napoSeaPointDetail" th:value="${processResult.crackdownStatus.napoSeaPointDetail}">
</div>
<div class="col-sm-1">
<label class="col-form-label text-center">위반내용</label>
<button type="button" class="btn btn-primary col-auto" id="violationAddBtn">+</button>
</div>
<div class="col-sm-2" id="violationDiv">
<th:block th:if="${#lists.isEmpty(processResult.violationList)}">
<div class="row">
<select class="form-select form-select-sm violation" name="violation">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
<option value="etc">직접입력</option>
</select>
</div>
</th:block>
<th:block th:if="${!#lists.isEmpty(processResult.violationList)}">
<th:block th:each="violation : ${processResult.violationList}">
<div class="row">
<input type="hidden" name="violationKey" th:value="${violation.violationKey}">
<select class="form-select form-select-sm violation" name="violation">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${processResult.violationList != null and commonCode.itemCd eq violation.violation}"></option>
</th:block>
<option th:selected="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" value="etc">직접입력</option>
</select>
<th:block th:if="${violation.violation ne null and !#strings.contains(violation.violation, 'VT')}">
<div class="col-auto">
<input type="text" class="form-control" name="violationEtc" th:value="${violation.violation}">
</div>
</th:block>
</div>
</th:block>
</th:block>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">선고법원</label>
<div class="col-sm-2">
<input class="form-control" name="sentencingCourt" id="sentencingCourt" th:value="${processResult.sentencingCourt}">
</div>
<label class="col-sm-1 col-form-label text-center">선고내용</label>
<div class="col-sm-2">
<input class="form-control" name="sentencingDetail" id="sentencingDetail" th:value="${processResult.sentencingDetail}">
</div>
<label class="col-sm-1 col-form-label text-center">집행내용</label>
<div class="col-sm-2">
<select class="form-select form-select-sm" name="executionDetail" id="executionDetail">
<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 processResult.executionDetail}"></option>
</th:block>
<option th:selected="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}" value="etc">직접입력</option>
</select>
<th:block th:if="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}">
<div class="col-auto">
<input type="text" class="form-control" name="processStatusEtc" th:value="${processResult.executionDetail}">
</div>
</th:block>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">환부일</label>
<div class="col-sm-2">
<input class="form-control" name="returnDt" id="returnDt" th:value="${#temporals.format(processResult.returnDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">위탁시작일</label>
<div class="col-sm-2">
<input class="form-control" name="consignmentStartDt" id="consignmentStartDt" th:value="${#temporals.format(processResult.consignmentStartDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">위탁종료일</label>
<div class="col-sm-2">
<input class="form-control" name="consignmentEndDt" id="consignmentEndDt" th:value="${#temporals.format(processResult.consignmentEndDt, 'yyyy-MM-dd')}">
<input type="hidden" class="form-control" name="warrantReqTakeTime">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">몰수확정일</label>
<div class="col-sm-2">
<input class="form-control" name="confiscationDt" id="confiscationDt" th:value="${#temporals.format(processResult.confiscationDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">폐선일</label>
<div class="col-sm-2">
<input class="form-control" name="boatDisposalDt" id="boatDisposalDt" th:value="${#temporals.format(processResult.boatDisposalDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">최종수정일</label>
<div class="col-sm-2">
<input class="form-control" name="boatDisposalDt" id="boatDisposalDt" th:value="${#temporals.format(processResult.boatDisposalDt, 'yyyy-MM-dd')}">
</div>
</div>
</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-primary" id="saveProcessResultBtn">저장</button>
</div>
</html>

View File

@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header">
<h5 class="modal-title" id="processResultEditModalLabel" th:text="${processResult.cdsKey eq null ? '불법조업 외국어선 처리현황' : '불법조업 외국어선 처리현황'}">></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="processResultEditBody">
<form action="#" method="post" id="processResultEditForm">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<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="${processResult.crackdownStatus.cdsKey}">
<input type="hidden" name="fbKey" th:value="${processResult.fbKey}">
<input type="hidden" name="prKey" th:value="${processResult.prKey}">
<input type="hidden" name="wrtOrgan" th:value="${processResult.wrtOrgan}">
<input type="hidden" name="wrtNm" th:value="${processResult.wrtNm}">
<input type="hidden" name="wrtDt" th:value="${#temporals.format(processResult.wrtDt, 'yyyy-MM-dd HH:mm')}">
<input type="hidden" id="saveYn" name="saveYn">
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">사건번호</label>
<div class="col-sm-2">
<input class="form-control" name="caseNum" id="caseNum" th:value="${processResult.crackdownStatus.caseNum}">
</div>
<label class="col-sm-1 col-form-label text-center">사건담당경찰서</label>
<div class="col-sm-2">
<select class="form-select form-select-sm" name="crackdownPolice" id="crackdownPolice">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${processResult.crackdownStatus.crackdownPolice eq commonCode.itemCd}"></option>
</th:block>
<option value="etc" th:selected="${processResult.crackdownStatus.crackdownPolice ne null && processResult.crackdownStatus.crackdownPolice ne '' && !#strings.contains(processResult.crackdownStatus.crackdownPolice, 'CPO')}">직접입력</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">피의자(선박병)</label>
<div class="col-sm-2">
<input class="form-control" name="boatNameKr" id="boatNameKr" th:value="${processResult.boatNameKr}">
</div>
<label class="col-sm-1 col-form-label text-center">위반장소</label>
<div class="col-sm-2">
<input class="form-control" name="napoSeaPointLon" id="napoSeaPointLon" th:value="${processResult.crackdownStatus.napoSeaPointLon}">
<input class="form-control" name="napoSeaPointLat" id="napoSeaPointLat" th:value="${processResult.crackdownStatus.napoSeaPointLat}">
<input class="form-control" name="napoSeaPointDetail" id="napoSeaPointDetail" th:value="${processResult.crackdownStatus.napoSeaPointDetail}">
</div>
<div class="col-sm-1">
<label class="col-form-label text-center">위반내용</label>
<button type="button" class="btn btn-primary col-auto" id="violationAddBtn">+</button>
</div>
<div class="col-sm-2" id="violationDiv">
<th:block th:if="${#lists.isEmpty(processResult.violationList)}">
<div class="row">
<select class="form-select form-select-sm violation" name="violation">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
<option value="etc">직접입력</option>
</select>
</div>
</th:block>
<th:block th:if="${!#lists.isEmpty(processResult.violationList)}">
<th:block th:each="violation : ${processResult.violationList}">
<div class="row">
<input type="hidden" name="violationKey" th:value="${violation.violationKey}">
<select class="form-select form-select-sm violation" name="violation">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${processResult.violationList != null and commonCode.itemCd eq violation.violation}"></option>
</th:block>
<option th:selected="${violation.violation ne null and !#strings.contains(violation.violation, 'VT')}" value="etc">직접입력</option>
</select>
<th:block th:if="${violation.violation ne null and !#strings.contains(violation.violation, 'VT')}">
<div class="col-auto">
<input type="text" class="form-control" name="violationEtc" th:value="${violation.violation}">
</div>
</th:block>
</div>
</th:block>
</th:block>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">선고법원</label>
<div class="col-sm-2">
<input class="form-control" name="sentencingCourt" id="sentencingCourt" th:value="${processResult.sentencingCourt}">
</div>
<label class="col-sm-1 col-form-label text-center">선고내용</label>
<div class="col-sm-2">
<input class="form-control" name="sentencingDetail" id="sentencingDetail" th:value="${processResult.sentencingDetail}">
</div>
<label class="col-sm-1 col-form-label text-center">집행내용</label>
<div class="col-sm-2">
<select class="form-select form-select-sm" name="executionDetail" id="executionDetail">
<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 processResult.executionDetail}"></option>
</th:block>
<option th:selected="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}" value="etc">직접입력</option>
</select>
<th:block th:if="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}">
<div class="col-auto">
<input type="text" class="form-control" name="processStatusEtc" th:value="${processResult.executionDetail}">
</div>
</th:block>
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">환부일</label>
<div class="col-sm-2">
<input class="form-control" name="returnDt" id="returnDt" th:value="${#temporals.format(processResult.returnDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">위탁시작일</label>
<div class="col-sm-2">
<input class="form-control" name="consignmentStartDt" id="consignmentStartDt" th:value="${#temporals.format(processResult.consignmentStartDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">위탁종료일</label>
<div class="col-sm-2">
<input class="form-control" name="consignmentEndDt" id="consignmentEndDt" th:value="${#temporals.format(processResult.consignmentEndDt, 'yyyy-MM-dd')}">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-1 col-form-label text-center">몰수확정일</label>
<div class="col-sm-2">
<input class="form-control" name="confiscationDt" id="confiscationDt" th:value="${#temporals.format(processResult.confiscationDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">폐선일</label>
<div class="col-sm-2">
<input class="form-control" name="boatDisposalDt" id="boatDisposalDt" th:value="${#temporals.format(processResult.boatDisposalDt, 'yyyy-MM-dd')}">
</div>
<label class="col-sm-1 col-form-label text-center">최종수정일</label>
<div class="col-sm-2">
<input class="form-control" name="boatDisposalDt" id="boatDisposalDt" th:value="${#temporals.format(processResult.boatDisposalDt, 'yyyy-MM-dd')}">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<th:block th:if="${userSeq eq processResult.wrtUserSeq or accessAuth eq 'ACC003'}"><!--작성자일 경우 수정 허용--><!--관리자일 경우 수정 허용-->
<button type="button" class="btn btn-warning" id="processResultEditBtn">수정</button>
</th:block>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>
</html>