다중 인증 휴대폰 번호 관리 로직 추가

This commit is contained in:
hehihoho3@gmail.com 2024-11-18 19:27:19 +09:00
parent 780e8f14a5
commit 3e2e039c80
8 changed files with 2848 additions and 2500 deletions

View File

@ -3,9 +3,11 @@ package itn.let.mjo.msgdata.service;
import java.util.List;
import itn.let.lett.service.LetterVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uat.uia.service.MberCertPhoneVO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uss.umt.service.MberManageVO;
@ -176,6 +178,12 @@ public interface MjonMsgDataService {
//팩스 거래명세서 합산 정보
public List<MjonMsgVO> selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception;
public List<MberCertPhoneVO> selectMberCertPhoneList(String userId);
public StatusResponse insertMberCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO);
public StatusResponse deleteCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO);
}

View File

@ -6,10 +6,12 @@ import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import itn.let.lett.service.LetterVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataVO;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uat.uia.service.MberCertPhoneVO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uss.umt.service.MberManageVO;
@ -365,5 +367,21 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
public List<MjonMsgVO> selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception{
return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserSumFaxList",mjonMsgVO);
}
public List<MberCertPhoneVO> selectMberCertPhoneList(String userId) {
return (List<MberCertPhoneVO>) list("mjonMsgDataDAO.selectMberCertPhoneList", userId);
}
public void insertMberCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) {
insert("mjonMsgDataDAO.insertMberCertPhoneInfo", mberCertPhoneVO);
}
public void deleteCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) {
update("mjonMsgDataDAO.deleteCertPhoneInfo", mberCertPhoneVO);
}
}

View File

@ -0,0 +1,65 @@
package itn.let.uat.uia.service;
import itn.let.uss.umt.service.UserDefaultVO;
/**
*
* @author : 이호영
* @fileName : MberCertPhoneVO.java
* @date : 2024.11.18
* @description : 발신번호 lettngnrlmber_cert_phone 관련 vo
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2024.11.18 이호영 최초 생성
*
*
*
*/
public class MberCertPhoneVO extends UserDefaultVO{
/**
* @description :
*/
private static final long serialVersionUID = 1L;
private String mberId;
private String mbtlnum;
private String certUseYn;
private String certMbtlnum;
public String getMberId() {
return mberId;
}
public void setMberId(String mberId) {
this.mberId = mberId;
}
public String getMbtlnum() {
return mbtlnum;
}
public void setMbtlnum(String mbtlnum) {
this.mbtlnum = mbtlnum;
}
public String getCertUseYn() {
return certUseYn;
}
public void setCertUseYn(String certUseYn) {
this.certUseYn = certUseYn;
}
public String getCertMbtlnum() {
return certMbtlnum;
}
public void setCertMbtlnum(String certMbtlnum) {
this.certMbtlnum = certMbtlnum;
}
}

View File

@ -17,6 +17,7 @@ import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@ -32,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
@ -39,6 +41,8 @@ import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
@ -85,6 +89,7 @@ import itn.let.kakao.kakaoComm.KakaoVO;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile;
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.addr.service.AddrService;
import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.event.service.MjonEventService;
@ -126,6 +131,7 @@ import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.sym.site.service.SiteManagerVO;
import itn.let.uat.uia.service.EgovLoginService;
import itn.let.uat.uia.service.MberCertPhoneVO;
import itn.let.uat.uia.web.EmailVO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uat.uia.web.SendMail;
@ -1093,6 +1099,12 @@ public class EgovUserManageController {
model.addAttribute("countNum", countNum);
model.addAttribute("sendNumberList", sendNumberList);
List<MberCertPhoneVO> mberCertPhoneList = mjonMsgDataService.selectMberCertPhoneList(userId);
model.addAttribute("mberCertPhoneList", mberCertPhoneList);
//문자발송 단가 조회하기
//1.시스템 기본 단가 정보 조회하기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
@ -1645,6 +1657,46 @@ public class EgovUserManageController {
return modelAndView;
}
@RequestMapping(value = {"/uss/umt/user/insertCertPhone.do"})
public ResponseEntity<StatusResponse> insertCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertPhoneVO.setFrstRegisterId(userId);
return ResponseEntity.ok().body(mjonMsgDataService.insertMberCertPhoneInfo(mberCertPhoneVO));
}
@RequestMapping(value = {"/uss/umt/user/deleteCertPhone.do"})
public ResponseEntity<StatusResponse> deleteCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
mberCertPhoneVO.setLastUpdusrId(userId);
return ResponseEntity.ok().body(mjonMsgDataService.deleteCertPhoneInfo(mberCertPhoneVO));
}
/**
* 회원정보 팝업 이벤트 정보 신규 추가 기능
* @param eventVO

View File

@ -20,6 +20,8 @@
<typeAlias alias="mjonSwearWordVO" type="itn.let.mjo.msg.service.MjonSwearWordVO"/>
<typeAlias alias="mjonMsgResvVO" type="itn.let.mjo.reservmsg.service.MjonResvMsgVO"/>
<typeAlias alias="mjonMsgStatVO" type="itn.let.mjo.msg.service.MjonMsgStatVO"/>
<typeAlias alias="mjonMsgStatVO" type="itn.let.mjo.msg.service.MjonMsgStatVO"/>
<typeAlias alias="mberCertPhoneVO" type="itn.let.uat.uia.service.MberCertPhoneVO"/>
<!-- 공통 쿼리 부분 문자 발송 관련 -->
@ -3738,7 +3740,7 @@
where MBER_ID=#sendId#
union all
select mber_id, mbtlnum
from lettngnrlmber
from lettngnrlmber_cert_phone
where MBER_ID=#sendId#
) b
@ -3753,6 +3755,58 @@
LIMIT 1
</select>
<select id="mjonMsgDataDAO.selectMberCertPhoneList" parameterClass="String" resultClass="mberCertPhoneVO">
SELECT
MBTLNUM AS mbtlnum,
'-' AS frstRegistPnttm
FROM
lettngnrlmber
WHERE MBER_ID = #userId#
UNION ALL
SELECT
MBTLNUM AS mbtlnum,
FRST_REGIST_PNTTM AS frstRegistPnttm
FROM
lettngnrlmber_cert_phone
WHERE MBER_ID = #userId#
AND CERT_USE_YN = 'Y'
</select>
<insert id="mjonMsgDataDAO.insertMberCertPhoneInfo" parameterClass="mberCertPhoneVO">
INSERT
INTO LETTNGNRLMBER_CERT_PHONE
(
MBER_ID
, MBTLNUM
, FRST_REGIST_PNTTM
, FRST_REGISTER_ID
)
VALUES
(
#mberId#
, #mbtlnum#
, now()
, #frstRegisterId#
)
</insert>
<update id="mjonMsgDataDAO.deleteCertPhoneInfo" parameterClass="mberCertPhoneVO">
UPDATE LETTNGNRLMBER_CERT_PHONE
SET CERT_USE_YN = 'N'
, LAST_UPDUSR_ID = #lastUpdusrId#
WHERE
MBER_ID = #mberId#
AND MBTLNUM = #mbtlnum#
</update>
<!-- 발신번호 등록 여부 조회 -->
<select id="mjonMsgDAO.selectSendPhonNumCheck" parameterClass="mjonMsgVO" resultClass="int">
SELECT

View File

@ -2072,6 +2072,90 @@ function fnEventEdit(){
}
//이벤트 수정하기
function fn_certPhoneReg(){
var mberId = $('#cashUserId').val();
var mbtlnum = $('#pop_mbtlnum').val();
if(mbtlnum == ''){
alert("등록할 인증번호를 입력해주세요.");
return false;
}
var params = {
"mberId" : mberId
, "mbtlnum" : mbtlnum
}
console.log('params : ', params);
if(!confirm("인증번호를 등록 하시겠습니까?")){
return false;
}
$.ajax({
type: "POST",
url: "/uss/umt/user/insertCertPhone.do",
data: params,
dataType:'json',
async: false,
success: function (returnData) {
console.log('returnData : ', returnData);
if(returnData.status == 'OK'){
alert(returnData.message);
location.reload();
}else{
alert("오류가 발생하였습니다.");
}
},
error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
});
}
//이벤트 수정하기
function fn_certPhoneDel(mbtlnum){
var mberId = $('#cashUserId').val();
var mbtlnum = mbtlnum;
var params = {
"mberId" : mberId
, "mbtlnum" : mbtlnum
}
console.log('params : ', params);
if(!confirm(mbtlnum+" 번호를 정말 삭제하시겠습니까?")){
return false;
}
$.ajax({
type: "POST",
url: "/uss/umt/user/deleteCertPhone.do",
data: params,
dataType:'json',
async: false,
success: function (returnData) {
console.log('returnData : ', returnData);
if(returnData.status == 'OK'){
alert(returnData.message);
location.reload();
}else{
alert("오류가 발생하였습니다.");
}
},
error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
});
}
function fnEventAdd(){
@ -5107,6 +5191,59 @@ function fnInputSmsTxt(){
</tbody>
</table>
<!-- //발신번호 리스트 -->
<!-- 인증 번호 리스트 -->
<div class="title_box">
<p>인증 번호 리스트</p>
<span style="float: right;">
<span style="letter-spacing: 0em !important; margin-left: 5px;">
<button type="button" onclick="layerPopOpen('certPhoneReg');" class="fill">등록</button>
</span>
</span>
</div>
<table class="user_table_col">
<colgroup>
<col style="width:calc(70%);">
<col style="width:calc(30%);">
</colgroup>
<thead>
<tr>
<th>인증번호</th>
<th>삭제</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty mberCertPhoneList}">
<c:forEach var="list" items="${mberCertPhoneList}" varStatus="status">
<tr>
<td>
<c:out value="${list.mbtlnum}"/>
</td>
<td>
<c:choose>
<c:when test="${list.frstRegistPnttm eq '-'}">
대표번호
</c:when>
<c:otherwise>
<div class="button_box">
<button type="button" class="thinfill" onclick="fn_certPhoneDel('<c:out value="${list.mbtlnum}"/>'); return false;">삭제</button>
</div>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="2">등록된 인증번호가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
<!-- //발신번호 리스트 -->
<!-- 문자전송금액 -->
<div class="title_box">
@ -6236,7 +6373,7 @@ function fnInputSmsTxt(){
<th>첫결제 충전캐시</th>
<td>
<%-- <input type="text" name="eventRemainCash2" id="eventRemainCash2" value="<c:out value="${eventMberInfo.eventRemainCash}" />" maxlength="9"/> --%>
<input type="text" step="0.01" id="eventRemainCash2" name="eventRemainCash2" value="<c:out value="${eventMberInfo.eventRemainCash}" />" title="캐시" maxlength="20" onblur="foucusOut(this)"/>
<input type="text" step="0.01" id="eventRemainCash2" value="<c:out value="${eventMberInfo.eventRemainCash}" />" title="캐시" maxlength="20" onblur="foucusOut(this)"/>
</td>
</tr>
<tr>
@ -6260,6 +6397,31 @@ function fnInputSmsTxt(){
</div>
</div>
</div>
<!-- 인증번호 등록 -->
<div class="layer_popup layer_certPhoneReg">
<div class="title_box">인증번호 등록<button type="button" class="close_btn" onclick="layerPopClose(this);"></button></div>
<div class="layer_content">
<table>
<colgroup>
<col style="width:150px;">
<col style="width:auto;">
</colgroup>
<tbody>
<tr>
<th>인증번호</th>
<td>
<input type="text" id="pop_mbtlnum" title="인증번호" maxlength="20" oninput="this.value=this.value.replace(/[^0-9]/g,'')"/>
</td>
</tr>
</tbody>
</table>
<div class="button_box">
<!-- <button type="button" onclick="fnEventEdit(); return false;">인증번호 등록</button> -->
<button type="button" onclick="fn_certPhoneReg(); return false;">인증번호 등록</button>
</div>
</div>
</div>
<!-- 이벤트 정보 신규 추가해주기 -->
<div class="layer_popup layer_eventAdd">

View File

@ -587,13 +587,15 @@ function fn_click_banner_add_stat(bannerMenuCode){
<div class="input_left">휴대폰번호</div>
<div class="input_right">
<label for="list_inputType1" class="label">휴대폰번호</label>
<input type="text" id="hp_text2" class="list_inputType1" placeholder="가입휴대폰번호" style="width: 250px;"
onfocus="this.placeholder=''" onblur="this.placeholder='가입휴대폰번호'" maxlength="20" readonly>
<!-- <input type="text" id="hp_text2" class="list_inputType1" placeholder="가입휴대폰번호" style="width: 250px;" -->
<!-- onfocus="this.placeholder=''" onblur="this.placeholder='가입휴대폰번호'" maxlength="20" readonly> -->
<select id="hp_text2" name="callFromList" class="sel_number list_selType1" style="width:70%;">
<option value="">등록된 발신 번호가 없습니다.</option>
</select>
</div>
<div class="login_del">
<button type="button" onclick="sendMsgYn();">인증번호 받기</button>
<button type="button" class="btnType btnType3" onclick="sendMsgYn();">인증번호 받기</button>
</div>