이지우 - 사용자 기소유예 접수 시 대상자 조회에 휴대폰 인증 기능 추가

This commit is contained in:
jiwoo 2024-02-14 17:43:25 +09:00
parent 6188e98daa
commit af61e366ac
4 changed files with 185 additions and 39 deletions

View File

@ -1,16 +1,26 @@
package kcc.ve.aplct.sspnIdtmt.service.impl; package kcc.ve.aplct.sspnIdtmt.service.impl;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import kcc.com.cmm.LoginVO;
import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.let.utl.fcc.service.EgovCryptoUtil;
import kcc.ve.aplct.sspnIdtmt.service.SspnIdtmtService; import kcc.ve.aplct.sspnIdtmt.service.SspnIdtmtService;
import kcc.ve.cmm.VeSendSMS;
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctSndHstryService;
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO; import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEEduAplctVO;
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.impl.VEEduAplctDAO; import kcc.ve.instr.tngrVisitEdu.eduInfo.service.impl.VEEduAplctDAO;
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailVO;
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrMixService;
import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.CndtnTrgtMngVO; import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.CndtnTrgtMngVO;
import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.impl.CndtnTrgtMngDAO; import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.impl.CndtnTrgtMngDAO;
@ -26,6 +36,25 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
@Resource(name="cndtnTrgtInfoMngDAO") @Resource(name="cndtnTrgtInfoMngDAO")
private CndtnTrgtMngDAO cndtnTrgtInfoMngDAO; private CndtnTrgtMngDAO cndtnTrgtInfoMngDAO;
//snd_hstry id gen
@Resource(name = "sndGnrService")
private EgovIdGnrService sndGnrService;
//로그인 체크 util
@Resource(name = "checkLoginUtil")
private CheckLoginUtil checkLoginUtil;
//암복호화 유틸
@Resource(name = "egovCryptoUtil")
EgovCryptoUtil egovCryptoUtil;
//강사 정보 MIX
@Resource(name="vEInstrMixService")
private VEInstrMixService vEInstrMixService;
// 교육신청발송이력
@Resource(name = "vEEduAplctSndHstryService")
private VEEduAplctSndHstryService vEEduAplctSndHstryService;
@Override @Override
public void insertVeEduAplct(VEEduAplctVO paramVO) { public void insertVeEduAplct(VEEduAplctVO paramVO) {
@ -107,6 +136,7 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
String msg=""; String msg="";
String id=""; String id="";
String next=""; //? String next=""; //?
String smsYn = ""; //휴대폰 인증 번호 발송 여부
try { try {
result=""; result="";
// //
@ -176,6 +206,7 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
msg = ""; msg = "";
id = cndtnTrgtMngVOList.get(0).getSspnIdtmtTrgtOrd(); id = cndtnTrgtMngVOList.get(0).getSspnIdtmtTrgtOrd();
next = "Y"; next = "Y";
smsYn = "Y";
//next = Integer.toString(cndtnTrgtMngVOList.size()); //대상자 //next = Integer.toString(cndtnTrgtMngVOList.size()); //대상자
}else if (cndtnTrgtMngVOList.size()>1) { //대상 리스트 던질것 }else if (cndtnTrgtMngVOList.size()>1) { //대상 리스트 던질것
@ -184,6 +215,7 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
msg = ""; msg = "";
id = ""; //여기에 대상 선택을 위한 데이터를 넣어준다. id = ""; //여기에 대상 선택을 위한 데이터를 넣어준다.
next = "N"; next = "N";
smsYn = "Y";
modelAndView.addObject("cndtnTrgtMngVOList", cndtnTrgtMngVOList); modelAndView.addObject("cndtnTrgtMngVOList", cndtnTrgtMngVOList);
//cndtnTrgtMngVOList.get(0).getreg //cndtnTrgtMngVOList.get(0).getreg
@ -191,6 +223,43 @@ public class SspnIdtmtServiceImpl implements SspnIdtmtService {
} }
//핸드폰으로 인증번호 발송
if ("Y".equals(smsYn)) {
//인증번호 생성
String code = RandomStringUtils.randomNumeric(6);
VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
VeSendSMS sendSMS = new VeSendSMS();
cndtnTrgtInfoMngVO = egovCryptoUtil.decryptCndtnTrgtMngVOInfo(cndtnTrgtInfoMngVO); //핸드폰번호 복호화
vEEduAplctVO.setEduAplctOrd("기소유예 대상자 인증");
vEEduAplctVO.setSndCn("안녕하세요. 저작권배움터 기소유예 담당자입니다.\n인증번호는 " + code + " 입니다.");
vEEduAplctVO.setClphone(cndtnTrgtInfoMngVO.getClphone());
vEEduAplctVO.setSndFlag("B");
Map<String, Object> resultMap = sendSMS.VeSendSMS(vEEduAplctVO.getClphone(), vEEduAplctVO.getSndCn(), vEEduAplctVO.getSndFlag());
//문자 발송 성공
if("1".equals(resultMap.get("result_code"))){
//발송 로그
LoginVO loginVO = checkLoginUtil.getAuthLoginVO();
String snd_ord = sndGnrService.getNextStringId();
vEEduAplctVO.setSndHstryOrd(snd_ord);
vEEduAplctVO.setSndId(loginVO.getUniqId());
vEEduAplctVO.setTrgt(vEEduAplctVO.getClphone());
vEEduAplctVO.setSndCd("10");
vEEduAplctVO.setTrgtId(loginVO.getUniqId());
vEEduAplctSndHstryService.insert(vEEduAplctVO);
//인증번호 row 생성 (기존 강사인증 테이블 사용)
VEInstrDetailVO vEInstrDetailVO = new VEInstrDetailVO();
vEInstrDetailVO.setEmail(vEEduAplctVO.getClphone());
vEInstrDetailVO.setCrtfdNumber(code);
vEInstrDetailVO.setUserId(loginVO.getUniqId());
vEInstrMixService.deleteInstrEmailCrtfd(vEInstrDetailVO);
vEInstrMixService.insertInstrEmailCrtfd(vEInstrDetailVO);
}
}
/* /*
if(StringUtils.isNotEmpty(id)) { if(StringUtils.isNotEmpty(id)) {
msg = "이미 신청한 대상자 입니다."; msg = "이미 신청한 대상자 입니다.";

View File

@ -496,6 +496,9 @@
) )
AND a.prcs_aplct_prd_ord_cmplt IS NULL /* 병합되지 않았다. */ AND a.prcs_aplct_prd_ord_cmplt IS NULL /* 병합되지 않았다. */
<isNotEmpty property="clphone">
AND a.clphone = #clphone#
</isNotEmpty>
</select> </select>
<!-- 기소유예 대상자 확인 STEP01 --> <!-- 기소유예 대상자 확인 STEP01 -->
@ -533,6 +536,9 @@
) )
AND a.prcs_aplct_prd_ord_cmplt IS NULL /* 병합되지 않았다. */ AND a.prcs_aplct_prd_ord_cmplt IS NULL /* 병합되지 않았다. */
<isNotEmpty property="clphone">
AND a.clphone = #clphone#
</isNotEmpty>
</select> </select>
<!-- 기소유예 대상자 확인 STEP00 --> <!-- 기소유예 대상자 확인 STEP00 -->

View File

@ -169,6 +169,7 @@
<pattern>*/cop/bbs/EgovBBSIdListSearch.do</pattern> <!-- 관리자 저작권체험교실 교육과정안내 미리보기 팝업 --> <pattern>*/cop/bbs/EgovBBSIdListSearch.do</pattern> <!-- 관리자 저작권체험교실 교육과정안내 미리보기 팝업 -->
<pattern>/web/ve/aplct/fndtnEnhanceTrn/eduAplctPop.do</pattern> <!-- 실무역량강화 전체과정 신청 팝업 --> <pattern>/web/ve/aplct/fndtnEnhanceTrn/eduAplctPop.do</pattern> <!-- 실무역량강화 전체과정 신청 팝업 -->
<pattern>/web/ve/aplct/sspnIdtmt/eduAplctPop.do</pattern> <!-- 기소유예 신청인 정보 입력 팝업 -->
<!-- <pattern>*/tngrVisitEdu/popup/*Popup.do</pattern> <!-- <pattern>*/tngrVisitEdu/popup/*Popup.do</pattern>
<pattern>*/adultVisitEdu/popup/*Popup.do</pattern> --> <pattern>*/adultVisitEdu/popup/*Popup.do</pattern> -->

View File

@ -25,7 +25,8 @@
<script type="text/javascript" src="${pageContext.request.contextPath}/kccadrPb/usr/script/popup.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/kccadrPb/usr/script/popup.js"></script>
<script type="text/javaScript" language="javascript"> <script type="text/javaScript" language="javascript">
//본인인증 확인 여부 체크
var chkYn = "";
/* /*
function fncGoScholList(){ function fncGoScholList(){
linkPage(1); linkPage(1);
@ -75,6 +76,7 @@
var dBirth = $('#dBirth').val().replace(/\./g, ''); var dBirth = $('#dBirth').val().replace(/\./g, '');
var trgtNm = $('#trgtNm').val(); var trgtNm = $('#trgtNm').val();
var sex = $('input[name="sex"]:checked').val(); var sex = $('input[name="sex"]:checked').val();
var clphone = $('#clphone').val();
$('#regForm input[name="prcsAplctPrdOrd"]').val(p_prcsAplctPrdOrd); $('#regForm input[name="prcsAplctPrdOrd"]').val(p_prcsAplctPrdOrd);
@ -92,9 +94,14 @@
alert("성별을 입력해주세요."); alert("성별을 입력해주세요.");
return; return;
} }
if (clphone==""){
alert("휴대폰 번호를 입력해주세요.");
return;
}
form.trgtNm.value = trgtNm; form.trgtNm.value = trgtNm;
form.dBirth.value = dBirth; form.dBirth.value = dBirth;
form.sex.value = sex; form.sex.value = sex;
form.clphone.value = clphone;
var data = new FormData(document.getElementById("confirmForm")); var data = new FormData(document.getElementById("confirmForm"));
@ -112,48 +119,65 @@
success:function(returnData){ success:function(returnData){
console.log('returnData : ', returnData); console.log('returnData : ', returnData);
if(returnData.result == "success"){ if(returnData.result == "success"){
// 대상자 테이블 pk 값
var sspnIdtmtTrgtOrd = returnData.id; if(chkYn != 'Y'){ //본인인증 전
//alert(returnData.msg); alert("인증번호를 확인해주세요.");
$("#chkNo").show();
$("#chkBtn").hide();
//기존정보 변경 막기
$("#trgtNm").prop('readonly', true);
$("#date").prop('readonly', true);
$("#clphone").prop('readonly', true);
$(".duet-date__toggle").remove();
$("#sexM").attr("onclick", "return(false);");
$("#sexF").attr("onclick", "return(false);");
// 교육 신청 ajax
// 대상자 이름, 생년월일, 대상자TB ID }else{ //본인인증 후
if(returnData.next == "Y")
{ // 대상자 테이블 pk 값
//sspnIdtmtTrgtOrd = returnData.id; var sspnIdtmtTrgtOrd = returnData.id;
// fncEduReg(trgtNm, dBirth, returnData.id);
$('#target_confirm_popup-close').click(); // 교육 신청 ajax
fn_eduRegPopup(trgtNm, dBirth, returnData.id); // 대상자 이름, 생년월일, 대상자TB ID
}else if(returnData.next == "N"){ if(returnData.next == "Y")
//동일 대상자 중에서 선택할수 있도록 처리해야 한다. {
//forMulti //sspnIdtmtTrgtOrd = returnData.id;
//fncEduReg(trgtNm, dBirth, returnData.id);
$('#confirmBtns').hide(); $('#target_confirm_popup-close').click();
$('#VOList').show(); fn_eduRegPopup(trgtNm, dBirth, returnData.id);
}else if(returnData.next == "N"){
returnData.cndtnTrgtMngVOList.forEach( //동일 대상자 중에서 선택할수 있도록 처리해야 한다.
function (el, index){ //forMulti
var v_forMulti = ''; $('#confirmBtns').hide();
v_forMulti = v_forMulti +"<tr>"; $('#VOList').show();
v_forMulti = v_forMulti +"<td>";
v_forMulti = v_forMulti +el.reqNmbr; returnData.cndtnTrgtMngVOList.forEach(
v_forMulti = v_forMulti +"</td>"; function (el, index){
v_forMulti = v_forMulti +"<td>"; var v_forMulti = '';
v_forMulti = v_forMulti +el.prsctrNm; v_forMulti = v_forMulti +"<tr>";
v_forMulti = v_forMulti +"</td>"; v_forMulti = v_forMulti +"<td>";
v_forMulti = v_forMulti +"<td>"; v_forMulti = v_forMulti +el.reqNmbr;
//v_forMulti = v_forMulti +el.sspnIdtmtTrgtOrd; v_forMulti = v_forMulti +"</td>";
v_forMulti = v_forMulti +"<td>";
v_forMulti = v_forMulti +el.prsctrNm;
v_forMulti = v_forMulti +"</td>";
v_forMulti = v_forMulti +"<td>";
//v_forMulti = v_forMulti +el.sspnIdtmtTrgtOrd;
v_forMulti = v_forMulti +"<button type=\"button\" class=\"btnType05\" onclick=\"fn_new_select('"+el.sspnIdtmtTrgtOrd+"')\">선택</button>"; v_forMulti = v_forMulti +"<button type=\"button\" class=\"btnType05\" onclick=\"fn_new_select('"+el.sspnIdtmtTrgtOrd+"')\">선택</button>";
v_forMulti = v_forMulti +"</td>"; v_forMulti = v_forMulti +"</td>";
v_forMulti = v_forMulti +"</tr>"; v_forMulti = v_forMulti +"</tr>";
$('#forMulti').after(v_forMulti); $('#forMulti').after(v_forMulti);
} }
); );
}
} }
}else{ }else{
alert(returnData.msg); alert(returnData.msg);
@ -187,6 +211,39 @@
fn_eduRegPopup(trgtNm, dBirth, p_sspnIdtmtTrgtOrd); fn_eduRegPopup(trgtNm, dBirth, p_sspnIdtmtTrgtOrd);
} }
function fncChkNo(){
if($("#crtfdNumber").val().length != 6){
alert("인증번호 6자리를 입력해주세요.");
return false;
}
var data = new FormData(document.getElementById("newSrvyPopupForm"));
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/web/ve/instr/instrInfo/emailCrtfdChkAjax.do",
data: data,
dataType:"json",
async: false,
processData: false,
contentType: false,
cache: false,
success: function (returnData, status) {
if(returnData.result == 'success'){
alert("확인되었습니다.");
chkYn = "Y";
$("#chkNo").hide();
fn_new_confirm('${vEEduChasiVO.prcsAplctPrdOrd}');
} else {
alert("인증번호가 일치하지 않습니다.");
return false;
}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
$(document).ready(function(){ $(document).ready(function(){
/* /*
boardCaptionDetailToggle4(); boardCaptionDetailToggle4();
@ -363,6 +420,19 @@ $(document).ready(function(){
<%-- <script src="${pageContext.request.contextPath}/visitEdu/usr/publish/script/duetdatepicker2.js"></script> --%> <%-- <script src="${pageContext.request.contextPath}/visitEdu/usr/publish/script/duetdatepicker2.js"></script> --%>
</td> </td>
</tr> </tr>
<tr>
<th scope=“row”>휴대폰 번호</th>
<td>
<input type="text" id="clphone" onkeyup="onlyNumber(this);" maxlength="11">
</td>
</tr>
<tr id="chkNo" style="display:none;">
<th scope=“row”>인증번호</th>
<td>
<input type="text" name="crtfdNumber" id="crtfdNumber" onkeyup="onlyNumber(this);" maxlength="6">
<button type="button" class="btnType06" onclick="fncChkNo();">인증하기</button>
</td>
</tr>
<tr> <tr>
<th scope=“row”>성별</th> <th scope=“row”>성별</th>
<td> <td>
@ -378,7 +448,7 @@ $(document).ready(function(){
<div class="btn_left"> <div class="btn_left">
</div> </div>
<div class="btn_center"> <div class="btn_center">
<button type="button" class="btnType05" onclick="fn_new_confirm('${vEEduChasiVO.prcsAplctPrdOrd}')">제출</button> <button type="button" class="btnType05" id="chkBtn" onclick="fn_new_confirm('${vEEduChasiVO.prcsAplctPrdOrd}')">확인</button>
<button type="button" class="btnType02 tooltip-close" id="target_confirm_popup-close" data-focus="sub36_pop02_close" data-focus-next="sub36_pop02">취소</button> <button type="button" class="btnType02 tooltip-close" id="target_confirm_popup-close" data-focus="sub36_pop02_close" data-focus-next="sub36_pop02">취소</button>
</div> </div>
<div class="btn_right"> <div class="btn_right">