fix:민간통역인 중간저장

TaehunPark 2022-09-08 14:29:50 +09:00
parent f825579952
commit ea61d6ad09
9 changed files with 292 additions and 35 deletions

View File

@ -63,5 +63,19 @@ public class TranslatorController {
translator.setWrtOrgan(loginUser.getOgCd()); translator.setWrtOrgan(loginUser.getOgCd());
translatorSevice.updatetranslatorInfo(translator); translatorSevice.updatetranslatorInfo(translator);
} }
@GetMapping("/revisionHistory")
public ModelAndView revisionHistory(Translator translator){
ModelAndView mav = new ModelAndView("translator/translatorHistory");
mav.addObject("HistoryList", translatorSevice.selectHistoryList(translator));
return mav;
}
@GetMapping("/HistoryView")
@ResponseBody
public Translator HistoryView(Translator translator){
return translatorSevice.HistoryView(translator);
}
} }

View File

@ -81,4 +81,12 @@ public class TranslatorService {
translatorRepository.save(translatorTmp); translatorRepository.save(translatorTmp);
} }
public List<Translator> selectHistoryList(Translator translator) {
return translatorMapper.selectHistoryList(translator);
}
public Translator HistoryView(Translator translator) {
return translatorMapper.HistoryView(translator);
}
} }

View File

@ -13,4 +13,8 @@ public interface TranslatorMapper {
Integer selectTranslatorListCnt(Translator translator); Integer selectTranslatorListCnt(Translator translator);
List<Translator> selectHistoryList(Translator translator);
Translator HistoryView(Translator translator);
} }

View File

@ -12,6 +12,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
@ -19,6 +20,7 @@ import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@ -64,7 +66,8 @@ public class Translator extends BaseModel implements Serializable{
@Column(name = "tr_visa") @Column(name = "tr_visa")
private String trVisa; private String trVisa;
@Column(name = "apt_dt") @Column(name = "apt_dt")
private String aptDt; @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate aptDt;
@Column(name = "dml_yn") @Column(name = "dml_yn")
private String dmlYn; private String dmlYn;
@Column(name = "remark") @Column(name = "remark")

View File

@ -75,5 +75,43 @@
</foreach> </foreach>
) a ) a
</select> </select>
<select id="selectHistoryList" resultType="Translator" parameterType="Translator">
select translator_key,
version_no,
wrt_nm,
wrt_dt
from translator_info
where translator_key = #{translatorKey}
order by wrt_dt desc
</select>
<select id="HistoryView" resultType="Translator" parameterType="Translator">
select a.translator_key,
version_no,
c.item_value as ogdp1,
d.item_value as tr_lang,
tr_career,
tr_name,
e.item_value as tr_sex,
tr_age,
f.item_value as tr_nny,
g.item_value as tr_edu,
tr_cft,
h.item_value as tr_visa,
dml_yn,
apt_dt,
tr_phone,
remark
from translator_info a
left outer join code_mgt c on a.ogdp1 = c.item_cd
left outer join code_mgt d on a.tr_lang = d.item_cd
left outer join code_mgt e on a.tr_sex = e.item_cd
left outer join code_mgt f on a.tr_nny = f.item_cd
left outer join code_mgt g on a.tr_edu = g.item_cd
left outer join code_mgt h on a.tr_visa = h.item_cd
where translator_key = #{translatorKey}
and version_no = #{versionNo}
</select>
</mapper> </mapper>

View File

@ -1,20 +1,14 @@
$(document).on('click', '.userInfoTr', function (){ $(document).on('click', '.userInfoTr', function (){
$.ajax({ document.getElementById('accessTab').classList.add('active');
url: '/translator/translatorEditModal', document.getElementById('approvalTab').classList.remove('active');
data: { const trKey = (Number($(this).find(".trKey").val()));
translatorKey: Number($(this).find(".trKey").val()), const verNo = (Number($(this).find(".verNo").val()));
versionNo : Number($(this).find(".verNo").val()) const url = '/translator/translatorEditModal';
}, revisionHistory(trKey,verNo,url);
type: 'GET', var html="";
dataType:"html", html += '<input type="hidden" class="tapTrKey" value="'+trKey+'">';
success: function(html){ html += '<input type="hidden" class="tapVerNo" value="'+verNo+'">';
$("#configInfo").empty().append(html) $("#KeyValue").empty().html(html)
$("#translatorEditModal").modal('show');
},
error:function(){
}
});
}) })
$(document).on('click', '#updateBtn', function (){ $(document).on('click', '#updateBtn', function (){
@ -118,4 +112,88 @@ function valueCheck(form){
returnFlag = false; returnFlag = false;
} }
return returnFlag; return returnFlag;
} }
$(document).on('click', '.historyInfoTr', function (){
$.ajax({
url: '/translator/HistoryView',
data: {
translatorKey: Number($(this).find(".trKey").val()),
versionNo : Number($(this).find(".verNo").val())
},
type: 'GET',
dataType:"json",
success: function(data){
$("#ogdp1V").val(data.ogdp1);
$("#trLangV").val(data.trLang);
$("#trCareerV").val(data.trCareer);
$("#trNameV").val(data.trName);
$("#trSexV").val(data.trSex);
$("#trPhoneV").val(data.trPhone);
$("#trNnyV").val(data.trNny);
$("#trAgeV").val(data.trAge);
$("#trVisaV").val(data.trVisa);
$("#trEduV").val(data.trEdu);
$("#trCftV").val(data.trCft);
$("#aptDtV").val(data.aptDt);
$("#dmlYnV").val(data.dmlYn);
$("#remarkV").val(data.remark);
// $("#configInfo").empty().append(html)
// $("#translatorEditModal").modal('show');
},
error:function(){
}
});
})
$(document).ready( function() {
$("#aptDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
});
$(document).on('click', '#approvalTab', function (){
const trKey = (Number($('.tapTrKey').val()));
const verNo = (Number($('.tapVerNo').val()));
const url = '/translator/revisionHistory';
revisionHistory(trKey,verNo,url);
document.getElementById('accessTab').classList.remove('active');
document.getElementById('approvalTab').classList.add('active');
})
$(document).on('click', '#accessTab', function (){
const trKey = (Number($('.tapTrKey').val()));
const verNo = (Number($('.tapVerNo').val()));
const url = '/translator/translatorEditModal';
revisionHistory(trKey,verNo,url);
document.getElementById('approvalTab').classList.remove('active');
document.getElementById('accessTab').classList.add('active');
})
function revisionHistory(trKey,verNo,url){
$.ajax({
url: url,
data: {
translatorKey: trKey,
versionNo : verNo
},
type: 'GET',
dataType:"html",
success: function(html){
$("#configInfo").empty().append(html)
$("#translatorEditModal").modal('show');
},
error:function(){
}
});
}
$(document).on('change', '#trNny', function (){
if($(this).val() == "NNY001"){
$("#trVisa").attr("disabled",true);
}else{
$("#trVisa").removeAttr("disabled");
}
});

View File

@ -91,17 +91,12 @@
<td th:text="${trInfo.trSex}"></td> <td th:text="${trInfo.trSex}"></td>
<td th:text="${trInfo.trNny}"></td> <td th:text="${trInfo.trNny}"></td>
<td th:text="${trInfo.trEdu}"></td> <td th:text="${trInfo.trEdu}"></td>
<th:block th:if="${not #strings.isEmpty(trInfo.trCft)}"> <td th:text="${trInfo.trCft}"></td>
<td>O</td>
</th:block>
<th:block th:if="${#strings.isEmpty(trInfo.trCft)}">
<td>X</td>
</th:block>
<td th:text="${trInfo.trVisa}"></td> <td th:text="${trInfo.trVisa}"></td>
<th:block th:if="${trInfo.dmlYn == 'Y'}"> <th:block th:if="${trInfo.dmlYn == 'O'}">
<td></td> <td></td>
</th:block> </th:block>
<th:block th:if="${trInfo.dmlYn == 'N'}"> <th:block th:if="${trInfo.dmlYn == 'X'}">
<td></td> <td></td>
</th:block> </th:block>
<td th:text="${trInfo.aptDt}"></td> <td th:text="${trInfo.aptDt}"></td>
@ -206,7 +201,7 @@
<div class="mb-3 row"> <div class="mb-3 row">
<label for="ogCd" class="col-sm-2 col-form-label text-center">국적</label> <label for="ogCd" class="col-sm-2 col-form-label text-center">국적</label>
<div class="col-sm-2"> <div class="col-sm-2">
<select class="form-select form-select-sm" name="trNny"> <select class="form-select form-select-sm" id="trNny" name="trNny">
<option value="">선택</option> <option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('NNY')}"> <th:block th:each="commonCode:${session.commonCode.get('NNY')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option> <option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
@ -234,7 +229,7 @@
</div> </div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">비자</label> <label for="ofcCd" class="col-sm-1 col-form-label text-center">비자</label>
<div class="col-sm-2"> <div class="col-sm-2">
<select class="form-select form-select-sm" name="trVisa"> <select class="form-select form-select-sm" id="trVisa" name="trVisa">
<option value="">선택</option> <option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('VISA')}"> <th:block th:each="commonCode:${session.commonCode.get('VISA')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option> <option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
@ -243,15 +238,15 @@
</div> </div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">위촉일</label> <label for="ofcCd" class="col-sm-1 col-form-label text-center">위촉일</label>
<div class="col-sm-4"> <div class="col-sm-4">
<!-- <input type="date" class="form-control" id="aptDt" name="aptDt"> --> <input type="text" class="form-control" id="aptDt" name="aptDt">
</div> </div>
</div> </div>
<label for="ogCd" class="col-sm-2 col-form-label text-center">해촉</label> <label for="ogCd" class="col-sm-2 col-form-label text-center">해촉</label>
<div class="col-sm-2"> <div class="col-sm-2">
<select class="form-select form-select-sm" name="dmlYn"> <select class="form-select form-select-sm" name="dmlYn">
<option value="">선택</option> <option value="">선택</option>
<option value="Y"></option> <option value="O">O</option>
<option value="N">아니오</option> <option value="X">X</option>
</select> </select>
</div> </div>
@ -275,12 +270,15 @@
<div class="modal fade" id="translatorEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="authEditModalLabel" aria-hidden="true"> <div class="modal fade" id="translatorEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="authEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-scrollable"> <div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="authEditModalContent"> <div class="modal-content" id="authEditModalContent">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="menuEditModalLabel">통역인 정보</h5> <h5 class="modal-title" id="menuEditModalLabel">통역인 정보</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div id="KeyValue">
</div>
<div class="modal-body"> <div class="modal-body">
<ul class="nav nav-tabs" id="userTab" role="tablist"> <ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">

View File

@ -5,8 +5,8 @@
<form id="trInfoUpdate" method="post"> <form id="trInfoUpdate" method="post">
<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" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="translatorKey" th:value="${trInfo.translatorKey}"/> <input type="hidden" class="translatorKey" th:value="${trInfo.translatorKey}"/>
<input type="hidden" name="versionNo" th:value="${trInfo.versionNo}"/> <input type="hidden" class="versionNo" th:value="${trInfo.versionNo}"/>
<div class="mb-3 row"> <div class="mb-3 row">
<div class="mb-3 row"> <div class="mb-3 row">
<label for="ogCd" class="col-sm-2 col-form-label text-center">관서</label> <label for="ogCd" class="col-sm-2 col-form-label text-center">관서</label>
@ -91,7 +91,7 @@
</div> </div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">위촉일</label> <label for="ofcCd" class="col-sm-1 col-form-label text-center">위촉일</label>
<div class="col-sm-4"> <div class="col-sm-4">
<!-- <input type="date" class="form-control" id="aptDt" name="aptDt"> --> <input type="text" class="form-control" id="aptDt" name="aptDt">
</div> </div>
</div> </div>
<label for="ogCd" class="col-sm-2 col-form-label text-center">해촉</label> <label for="ogCd" class="col-sm-2 col-form-label text-center">해촉</label>

View File

@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<main class="pt-3">
<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-100 card text-center">
<div class="card-body">
<div class="row">
</div>
<div class="row justify-content-start">
<div class="col-4">
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<th></th>
<th>작성자</th>
<th>등록일</th>
</tr>
</thead>
<tbody class="overflow-scroll">
<tr class="historyInfoTr" th:each="trInfo:${HistoryList}">
<td><input type="checkbox">
<input type="hidden" class="trKey" th:value="${trInfo.translatorKey}">
<input type="hidden" class="verNo" th:value="${trInfo.versionNo}">
</td>
<td th:text="${trInfo.wrtNm}"></td>
<td th:text="${trInfo.wrtDt}"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-8" id="valueDiv">
<div class="mb-5 row">
<label for="ogCd" class="col-sm-1 col-form-label text-center">관서</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="ogdp1V" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">언어</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trLangV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">경력</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trCareerV" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" class="col-sm-1 col-form-label text-center">성명</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trNameV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">성별</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="trSexV"readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">연락처</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="trPhoneV" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" class="col-sm-1 col-form-label text-center">국적</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="trNnyV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">나이</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="trAgeV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">학력</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trEduV" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" class="col-sm-1 col-form-label text-center">자격증</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trCftV"readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">비자</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="trVisaV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label text-center">위촉일</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="aptDtV" name="aptDt">
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" class="col-sm-1 col-form-label text-center">해촉</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="dmlYnV" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="tel" class="col-sm-1 col-form-label text-center">비고</label>
<div class="col-sm-11">
<textarea class="form-control" id="remarkV" readonly></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</html>