package itn.let.uat.uia.web;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.icert.comm.secu.IcertSecuManager;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.ComDefaultCodeVO;
import itn.com.cmm.LoginVO;
import itn.com.cmm.service.EgovCmmUseService;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.service.FileVO;
import itn.com.cmm.util.MJUtil;
import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.fax.user.service.FaxGroupDataVO;
import itn.let.fax.user.service.FaxService;
import itn.let.kakao.user.sent.service.KakaoSentService;
import itn.let.kakao.user.sent.service.KakaoSentVO;
import itn.let.mjo.cert.service.CertService;
import itn.let.mjo.cert.service.CertVO;
import itn.let.mjo.event.service.MjonEventService;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.kisa.service.KisaService;
import itn.let.mjo.kisa.service.KisaVO;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjPhoneMemberVO;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgsent.service.MjonMsgSentService;
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import itn.let.mjo.pay.service.KmcVO;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.sym.grd.service.MberGrdService;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uat.uia.service.AuthCertVO;
import itn.let.uat.uia.service.EgovLoginService;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.user.service.MjonNoticeSendUtil;
/**
* 일반 로그인, 인증서 로그인을 처리하는 컨트롤러 클래스
*
* @author 공통서비스 개발팀 박지욱
* @since 2009.03.06
* @version 1.0
* @see
*
*
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.06 박지욱 최초 생성
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
*
*
*/
@Controller
public class EgovMypageController {
static String RSA_WEB_KEY = "_RSA_WEB_Key_"; // 개인키 session key
static String RSA_INSTANCE = "RSA"; // rsa transformation
@Resource(name = "KakaoSentService")
private KakaoSentService kakaoSentService;
@Resource(name = "faxService")
private FaxService faxService;
/** EgovLoginService */
@Resource(name = "loginService")
private EgovLoginService loginService;
/** userManageService */
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/** mberManageService */
@Resource(name = "mberManageService")
private EgovMberManageService mberManageService;
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name="egovCertEtcIdGnrService")
private EgovIdGnrService egovCertEtcIdGnrService;
@Resource(name = "certService")
private CertService certService;
@Resource(name="EgovFileMngUtil")
private EgovFileMngUtil fileUtil;
@Resource(name="EgovFileMngService")
private EgovFileMngService fileMngService;
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
@Resource(name = "EgovFileMngService")
private EgovFileMngService fileService;
@Resource(name = "KisaService")
private KisaService kisaService;
/** 알림전송 Util */
@Resource(name = "mjonNoticeSendUtil")
private MjonNoticeSendUtil mjonNoticeSendUtil;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "MjonMsgSentService")
private MjonMsgSentService mjonMsgSentService;
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
@Resource(name = "MjonEventService")
private MjonEventService mjonEventService;
@Resource(name="MjonCommon")
private MjonCommon mjonCommon;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService;
/** 등급제 관리 서비스 */
@Resource(name = "mberGrdService")
MberGrdService mberGrdService;
/**
* 마이페이지 비밀번호 변경 탭
*/
@RequestMapping(value="/web/user/mberInfoIndex.do")
public String mberInfoIndex(
ModelMap model
, RedirectAttributes redirectAttributes) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
if(userId == "") {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
{//문자 전송 개인 단가 불러오기
//0.이벤트 진행중이 회원 정보 불러오기.
//이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다.
MjonEventVO mjonEventVO = new MjonEventVO();
mjonEventVO.setMberId(userId);
//mjonEventVO.setEventStatus("Y");
MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
long eventDiffDate = 0;
float eventRemainCash = 0;
boolean compareEndDate = false;
if(eventMberInfo != null) {
String eventEndDate = eventMberInfo.getEventEndDate();
/**
* MJUtil.getCompareDate()
* 현재 날짜와 파라미터 전달 날짜를 비교
* 전달날짜를 지난경우 False를 리턴함.
* 현재날짜 이전 혹은 같은 날짜면 True를 리턴함.
*
* */
if(eventEndDate != null) {
compareEndDate = MJUtil.getCompareDate(eventEndDate);
eventRemainCash = (float) eventMberInfo.getEventRemainCash();
//이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴
//이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴
if(!compareEndDate || eventRemainCash < 7.5) {
if(!eventMberInfo.getEventStatus().equals("E")) {
//이벤트 상태값을 종료로 변경한다.
mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
mjonEventVO.setEventStatus("E");
mjonEventVO.setEventRemainCash(eventRemainCash);
mjonEventService.updateEventEndStatus(mjonEventVO);
eventMberInfo.setEventStatus("E");
}
}else {//이벤트 진행중이면 남은 날짜 계산해서 전달.
eventDiffDate = MJUtil.getDiffDateDay(eventEndDate);
}
}
}
//남은 날짜값을 절대값으로 변경(음수로 나오기 때문)
model.addAttribute("eventDiffDate", Math.abs(eventDiffDate));
model.addAttribute("compareEndDate", compareEndDate);
model.addAttribute("eventMberInfo", eventMberInfo);
//1.시스템 기본 단가 정보 불러오기
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
// 등급제 단가 추출 => 시스템 단가에 적용
sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId);
//2.사용자 개인 단가 정보 불러오기
MberManageVO mberManageVO = new MberManageVO();
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
}
Float shortPrice = (float) mberManageVO.getShortPrice();
Float longPrice = (float) mberManageVO.getLongPrice();
Float picturePrice = (float) mberManageVO.getPicturePrice();
Float picture2Price = (float) mberManageVO.getPicture2Price();
Float picture3Price = (float) mberManageVO.getPicture3Price();
Float kakaoAtPrice = (float) mberManageVO.getKakaoAtPrice();
Float faxPrice = (float) mberManageVO.getFaxPrice();
int userMoney = (int) mberManageVO.getUserMoney();
String userPoint = mberManageVO.getUserPoint();
if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {
shortPrice = (float) sysJoinSetVO.getShortPrice();
longPrice = (float) sysJoinSetVO.getLongPrice();
picturePrice = (float) sysJoinSetVO.getPicturePrice();
picture2Price = (float) sysJoinSetVO.getPicture2Price();
picture3Price = (float) sysJoinSetVO.getPicture3Price();
}
if(kakaoAtPrice < 1) {
kakaoAtPrice = (float) sysJoinSetVO.getKakaoAtPrice();
}
if(faxPrice < 1) {
faxPrice = (float) sysJoinSetVO.getFaxPrice();
}
model.addAttribute("shortPrice", shortPrice);
model.addAttribute("longPrice", longPrice);
model.addAttribute("picturePrice", picturePrice);
model.addAttribute("picture2Price", picture2Price);
model.addAttribute("picture3Price", picture3Price);
model.addAttribute("kakaoAtPrice", kakaoAtPrice);
model.addAttribute("faxPrice", faxPrice);
model.addAttribute("userMoney", userMoney);
model.addAttribute("userPoint", userPoint);
model.addAttribute("mberManageVO", mberManageVO);
}
/*
* #1.로딩 문제 해결을 위해 ajax로 이전 2024-03-21
* /web/user/subcontent/mberInfo_cash_pointAjax.do
{//캐시 정보
List cashInfoList = mjonPayService.selectCashInfoList(userId);
model.addAttribute("cashInfoList", cashInfoList);
}
{//포인트 정보
List pointInfoList = mjonPayService.selectPointInfoList(userId);
model.addAttribute("pointInfoList", pointInfoList);
}
*/
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setUserId(userId);
/*
* #2.로딩 문제 해결을 위해 ajax로 이전 2024-03-21
* /web/user/subcontent/mberInfo_send_reservAjax.do
*
{ // 발송건수
mjonMsgVO.setReserveYn("N");
List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("sendTotList", sendTotList);
}
{ // 예약건수
mjonMsgVO.setReserveYn("Y");
List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("reservToList", reservToList);
}
*/
{// 충전캐시
String sumPayMoney = mjonPayService.selectSumPayMoney(userId);
model.addAttribute("sumPayMoney", sumPayMoney);
}
{// 충전포인트
String sumPoint = mjonPayService.selectSumPoint(userId);
model.addAttribute("sumPoint", sumPoint);
}
/*
{// 총 사용금액
MjonPayVO mjonPayVO = new MjonPayVO();
mjonPayVO.setUserId(userId);
List usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO);
model.addAttribute("usedCashTotList", usedCashTotList);
}
*/
{// 사용가능한 금액
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
model.addAttribute("mberManageVO", mberManageVO);
}
{//발신번호 리스트 조회하기
MjPhoneMemberVO phoneMemberVO = new MjPhoneMemberVO();
phoneMemberVO.setUserId(userId);
phoneMemberVO.setSearchSortCnd("phmId");
phoneMemberVO.setSearchSortOrd("desc");
phoneMemberVO.setPhmType("01");//발신번호 타입의 번호만 조회
phoneMemberVO.setFirstIndex(0);//페이징 처리에서 값이 없으면 1이 넘어가서 데이터를 못불러 오는 오류가 있어서 0으로 셋팅.
List sendNumberList = mjonMsgService.selectSendNumberList(phoneMemberVO);
MJUtil mjUtil = new MJUtil();
for(int i=0; i < sendNumberList.size(); i++) {
String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber());
sendNumberList.get(i).setPhoneNumber(phoneNumber);
}
int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0;
model.addAttribute("countNum", countNum);
model.addAttribute("sendNumberList", sendNumberList);
}
{//최근 발송 문자 내용 불러오기 - 최근 3개 내역만
List mjonMsgSentList = mberManageService.selectMberMsgSentLatestListNew20240320(userId);
model.addAttribute("mjonMsgSentList", mjonMsgSentList);
}
/*
* 2024-03-22 페이지 로딩 속도 개선을 위해 ajax로 처리
{//최근 발송 알림톡 내용 불러오기 - 최근 3개 내역만
KakaoSentVO kakaoSentVO = new KakaoSentVO();
kakaoSentVO.setUserId(userId);
kakaoSentVO.setTabType("at");
kakaoSentVO.setRecordCountPerPage(3);
kakaoSentVO.setFirstIndex(0);
kakaoSentVO.setListType("groupList");
kakaoSentVO.setStateType("all");
kakaoSentVO.setSearchSortOrd("desc");
kakaoSentVO.setSearchSortCnd("regdate");
List kakaoATSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
model.addAttribute("kakaoATSentList", kakaoATSentList);
}
*/
{//최근 발송 팩스 내용 불러오기 - 최근 3개 내역만
FaxGroupDataVO faxGroupDataVO = new FaxGroupDataVO();
faxGroupDataVO.setUserId(userId);
faxGroupDataVO.setRecordCountPerPage(3);
faxGroupDataVO.setFirstIndex(0);
List faxSendList = faxService.selectMyFaxSendList(faxGroupDataVO);
model.addAttribute("faxSendList", faxSendList);
}
model.addAttribute("pageTab", "myPageIndex");
model.addAttribute("loginVO", loginVO);
{
/**
* 후불제 회원 관련 사용 요금 내역 정보 조회하기
* 20240102 우영두 추가
* 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회
*
* */
//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산)
String totSumCashAfterPay = mjonPayService.selectTotalSumCashForAfterPay(userId);
model.addAttribute("totSumCashAfterPay", totSumCashAfterPay);
//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
String totSumPointAfterPay = mjonPayService.selectTotalSumPointForAfterPay(userId);
model.addAttribute("totSumPointAfterPay", totSumPointAfterPay);
//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
String totSumPaymentAfterPay = mjonPayService.selectTotSumPaymentAfterPay(userId);
model.addAttribute("totSumPaymentAfterPay", totSumPaymentAfterPay);
//누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산)
float p_i_re_point = 0;
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
if (sysJoinSetVO != null) {
p_i_re_point = sysJoinSetVO.getPointPer();
}
int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100));
model.addAttribute("sumPaymentPointAfterPay", paymentPointAfterPay);
//당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산)
float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay);
model.addAttribute("unPaymentAfterPay", unPaymentAfterPay);
//당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산)
int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100));
model.addAttribute("unPaymentPointAfterPay", unPaymentPointAfterPay);
}
return "web/user/mberInfoIndex";
}
/**
* 마이페이지 - 이용내역 - ajax
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
* @throws Exception
*/
@RequestMapping(value="/web/user/subcontent/mberInfo_cash_pointAjax.do")
public String mberInfo_cash_pointAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
HttpServletRequest request,
ModelMap model) throws Exception{
System.out.println("mberInfo_cash_pointAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
{//캐시 정보
List cashInfoList = mjonPayService.selectCashInfoList(userId);
model.addAttribute("cashInfoList", cashInfoList);
}
{//포인트 정보
List pointInfoList = mjonPayService.selectPointInfoList(userId);
model.addAttribute("pointInfoList", pointInfoList);
}
System.out.println("mberInfo_cash_pointAjax_end");
return "/web/user/subcontent/mberInfo_cash_pointAjax";
}
/**
* 마이페이지 - 이용내역 - 발송건수/예약건수 ajax
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
* @throws Exception
*/
@RequestMapping(value="/web/user/subcontent/mberInfo_send_reservAjax.do")
public String mberInfo_send_reservAjax(
HttpServletRequest request,
ModelMap model) throws Exception{
System.out.println("mberInfo_cash_pointAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setUserId(userId);
{ // 발송건수
mjonMsgVO.setReserveYn("N");
List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("sendTotList", sendTotList);
}
{ // 예약건수
mjonMsgVO.setReserveYn("Y");
List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("reservToList", reservToList);
}
System.out.println("mberInfo_cash_pointAjax_end");
return "/web/user/subcontent/mberInfo_send_reservAjax";
}
/**
* 마이페이지 - 최근발송내역-알림톡
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
* @throws Exception
*/
@RequestMapping(value="/web/user/subcontent/mberInfo_kakaoATSentListAjax.do")
public String mberInfo_kakaoATSentListAjax(
HttpServletRequest request,
ModelMap model) throws Exception{
System.out.println("mberInfo_kakaoATSentListAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
{//최근 발송 알림톡 내용 불러오기 - 최근 3개 내역만
KakaoSentVO kakaoSentVO = new KakaoSentVO();
kakaoSentVO.setUserId(userId);
kakaoSentVO.setTabType("at");
kakaoSentVO.setRecordCountPerPage(3);
kakaoSentVO.setFirstIndex(0);
kakaoSentVO.setListType("groupList");
kakaoSentVO.setStateType("all");
kakaoSentVO.setSearchSortOrd("desc");
kakaoSentVO.setSearchSortCnd("regdate");
List kakaoATSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
model.addAttribute("kakaoATSentList", kakaoATSentList);
}
System.out.println("mberInfo_kakaoATSentListAjax_end");
return "/web/user/subcontent/mberInfo_kakaoATSentListAjax";
}
//발송문자 건수 계산하는 함수
public String[] getTotalSendCnt(List mjonMsgSentVO) {
int totCnt = 0; //전체건수
int succCnt = 0; //성공건수
int FCnt = 0; //실패, 대기 건수
int WCnt = 0; //실패, 대기 건수
int totalSPrice = 0; //성공, 대기 금액 합산
int totalWPrice = 0; //성공, 대기 금액 합산
int totalFPrice = 0; //실패 금액 합산
for(int i=0; i< mjonMsgSentVO.size(); i++) {
String msgResultSts = mjonMsgSentVO.get(i).getMsgResultSts();
int msgResultCnt = Integer.parseInt(mjonMsgSentVO.get(i).getMsgResultCnt());
float msgEachPrice = Float.parseFloat(mjonMsgSentVO.get(i).getEachPrice());
if(msgResultSts.equals("S")) {
succCnt = succCnt + msgResultCnt;
totalSPrice = totalSPrice + (int)(msgResultCnt * msgEachPrice);
}else if(msgResultSts.equals("W")){
WCnt = WCnt + msgResultCnt;
totalWPrice = totalWPrice + (int)(msgResultCnt * msgEachPrice);
}else {
FCnt = FCnt + msgResultCnt;
totalFPrice = totalFPrice + (int)(msgResultCnt * msgEachPrice);
}
totCnt = totCnt + msgResultCnt;
}
String[] returnArr = {Integer.toString(totCnt), Integer.toString(succCnt), Integer.toString(WCnt), Integer.toString(FCnt), Integer.toString(totalSPrice), Integer.toString(totalWPrice), Integer.toString(totalFPrice)};
return returnArr;
}
/**
* 마이페이지 비밀번호 변경 탭
*/
@RequestMapping(value="/web/user/mberInfoChange.do")
public String mberInfoChange(
@ModelAttribute MberManageVO mberManageVO
, ModelMap model
, RedirectAttributes redirectAttributes) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
/*if(!userInfo.getAtchFileId().equals("")) {*/
//사업자등록증
if(!("").equals(userInfo.getAtchFileId())) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(userInfo.getAtchFileId());
List result = fileService.selectFileInfs(fileVO);
model.addAttribute("result", result);
}
//재직증명서
if(!("").equals(userInfo.getWorkAtchFileId())) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(userInfo.getWorkAtchFileId());
List result2 = fileService.selectFileInfs(fileVO);
model.addAttribute("result2", result2);
}
// 이메일 코드조회
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
voComCode.setCodeId("ITN031");
model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode));
model.addAttribute("pageTab", "mberInfoChange");
if("c".equals(userInfo.getDept())) { //기업회원
//기업회원 정보변경 신청 상태 확인 - 회원ID로 가장 최근 기업회원 정보 내역 조회
mberManageVO.setSearchHstType("04"); //담당자 변경 조회
MberManageVO cmpPhoneChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO);
model.addAttribute("cmpPhoneChangeManageVO", cmpPhoneChangeManageVO);
mberManageVO.setSearchHstType("03"); //사업장 변경 조회
MberManageVO cmpInfoChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO);
model.addAttribute("cmpInfoChangeManageVO", cmpInfoChangeManageVO);
return "web/user/mberCompanyInfoChange";
}
return "web/user/mberInfoChange";//개인회원
}
// 회원가입 - 모바일인증 중복 체크 Ajax, 만 18세 체크
@RequestMapping(value = "/web/user/mblDnCheckByIdAjax.do")
public ModelAndView selectMblDnCheckByIdAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO,
@RequestParam Map commandMap) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//중복체크
// String mblDn = (String) commandMap.get("mblDn");
String Id = (String) commandMap.get("id");
mberManageVO.setMberId(Id);
List checkMblDn = new ArrayList();
checkMblDn = mberManageService.selectMblDnCheckById(mberManageVO);
modelAndView.addObject("checkMblDnCnt", checkMblDn.size());
//만 나이
String birthDay = (String) commandMap.get("birthDay");
LocalDate now = LocalDate.now();
LocalDate parsedBirthDate = LocalDate.parse(birthDay, DateTimeFormatter.ofPattern("yyyyMMdd"));
int age = now.minusYears(parsedBirthDate.getYear()).getYear(); // (1)
if (parsedBirthDate.plusYears(age).isAfter(now)) {
age = age -1;
}
modelAndView.addObject("age", age);
return modelAndView;
}
/**
* 회원정보 조회 휴대폰 인증
*/
@RequestMapping("/web/user/selectKmcMberInfoAjax.do")
public String selectKmcMberInfoAjax(
HttpServletRequest request, ModelMap model
, @RequestParam Map commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
//개인회원일 시 mblDn 비교 후 본인 명의 휴대폰만 변경 가능하게끔
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
model.addAttribute("loginVO", loginVO);
String errMessage = ""; //에러메세지
String rec_cert = ""; // 결과값(암호화)
String certNum = ""; // certNum
rec_cert = request.getParameter("rec_cert").trim();
certNum = request.getParameter("certNum").trim();
kmcVO.setRecCert(rec_cert);
kmcVO.setCertNum(certNum);
// 파라미터 유효성 검증
if( rec_cert.length() == 0 || certNum.length() == 0 ){
errMessage = "비정상";
return returnPage(model , errMessage , kmcVO) ;
}
// 변수선언 --------------------------------------------------------------------------------------------------------
String k_certNum = ""; // 파라미터로 수신한 요청번호
k_certNum = certNum;
String date = ""; // 요청일시
String CI = ""; // 연계정보(CI)
String DI = ""; // 중복가입확인정보(DI)
String phoneNo = ""; // 휴대폰번호
String phoneCorp = ""; // 이동통신사
String birthDay = ""; // 생년월일
String gender = ""; // 성별
String nation = ""; // 내국인
String name = ""; // 성명
String M_name = ""; // 미성년자 성명
String M_birthDay = ""; // 미성년자 생년월일
String M_Gender = ""; // 미성년자 성별
String M_nation = ""; // 미성년자 내외국인
String result = ""; // 결과값
String certMet = ""; // 인증방법
String ip = ""; // ip주소
String plusInfo = "";
String encPara = "";
String encMsg1 = "";
String encMsg2 = "";
String msgChk = "";
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
//02. 1차 복호화
//수신된 certNum를 이용하여 복호화
rec_cert = seed.getDec(rec_cert, k_certNum);
//03. 1차 파싱
int inf1 = rec_cert.indexOf("/",0);
int inf2 = rec_cert.indexOf("/",inf1+1);
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
//04. 위변조 검증
encMsg2 = seed.getMsg(encPara);
kmcVO.setEncMsg2(encMsg2);
if(encMsg2.equals(encMsg1)){
msgChk="Y";
}
if(!"Y".equals(msgChk)) {
errMessage = "비정상접근입니다.";
return returnPage(model , errMessage , kmcVO) ;
}
//05. 2차 복호화
rec_cert = seed.getDec(encPara, k_certNum);
kmcVO.setRecCert(rec_cert);
//06. 2차 파싱
int info1 = rec_cert.indexOf("/",0);
int info2 = rec_cert.indexOf("/",info1+1);
int info3 = rec_cert.indexOf("/",info2+1);
int info4 = rec_cert.indexOf("/",info3+1);
int info5 = rec_cert.indexOf("/",info4+1);
int info6 = rec_cert.indexOf("/",info5+1);
int info7 = rec_cert.indexOf("/",info6+1);
int info8 = rec_cert.indexOf("/",info7+1);
int info9 = rec_cert.indexOf("/",info8+1);
int info10 = rec_cert.indexOf("/",info9+1);
int info11 = rec_cert.indexOf("/",info10+1);
int info12 = rec_cert.indexOf("/",info11+1);
int info13 = rec_cert.indexOf("/",info12+1);
int info14 = rec_cert.indexOf("/",info13+1);
int info15 = rec_cert.indexOf("/",info14+1);
int info16 = rec_cert.indexOf("/",info15+1);
int info17 = rec_cert.indexOf("/",info16+1);
int info18 = rec_cert.indexOf("/",info17+1);
certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date);
CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
name = rec_cert.substring(info8+1,info9); kmcVO.setName(name);
result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
//07. CI, DI 복호화
CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
if("Y".equals(result)) {
}
//--------------------------------------------------------------
String regex = "";
if( certNum.length() == 0 || certNum.length() > 40){
errMessage = "요청번호 비정상.";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( date.length() != 14 || !paramChk(regex, date) ){
errMessage = "요청일시";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( certMet.length() != 1 || !paramChk(regex, certMet) ){
errMessage = "본인인증방법 비정상" + certMet;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
errMessage = "휴대폰번호 비정상" ;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
errMessage = "이동통신사 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
errMessage = "생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( gender.length() != 1 || !paramChk(regex, gender) ){
errMessage = "성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( nation.length() != 1 || !paramChk(regex, nation) ){
errMessage = "내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-�R.,-]*";
if( name.length() > 60 || !paramChk(regex, name) ){
errMessage = "성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( result.length() != 1 || !paramChk(regex, result) ){
errMessage = "결과값 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-?.,-]*";
if( M_name.length() != 0 ){
if( M_name.length() > 60 || !paramChk(regex, M_name) ){
errMessage = "미성년자 성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_birthDay.length() != 0 ){
if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
errMessage = "미성년자 생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_Gender.length() != 0 ){
if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
errMessage = "미성년자 성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_nation.length() != 0 ){
if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
errMessage = "미성년자 내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
//KMC 본인인증 로그
AuthCertVO certVO = new AuthCertVO();
certVO.setMberId(kmcVO.getPlusInfo());
certVO.setCertNum(kmcVO.getCertNum());
certVO.setCertDate(kmcVO.getDate());
certVO.setCertDi(kmcVO.getDI());
certVO.setCertPhone(kmcVO.getPhoneNo());
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("KMC_회원정보 변경");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
//디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
//개인회원일 시 기존 DN가 본인인증 DN비고하여 본인 명의만 번호 변경 가능하게
if("p".equals(loginVO.getDept())) {
if(!mblDn.equals(DI)) {
kmcVO.setDnChk("N");
}
}
//LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
// model.addAttribute("loginVO", loginVO);
model.addAttribute("kmcVO", kmcVO);
return "web/user/mberInfoKmcReqPage";
}
/**
* 마이페이지 개인정보 변경
*/
@RequestMapping(value="/web/user/updateUserInfoAjax.do")
public ModelAndView updateUserInfoAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
userManageService.updateUserInfo(mberManageVO); //이메일, 이벤트 수신 여부와 개인회원의 휴대폰 변경 시 회원 테이블 update
if("c".equals(mberManageVO.getDept()) && "Y".equals(mberManageVO.getMoblphonNoChangeYn())) { //기업회원의 휴대폰 변경 시 기업 회원 히스토리 테이블에 insert 후 관리자의 승인 반려 처리
String cAtchFileId = mberManageVO.getWorkAtchFileId();
final Map files = multiRequest.getFileMap();
Map fileW = new LinkedHashMap<>(); //재직증명서
if (!files.isEmpty()){
Iterator> it = files.entrySet().iterator();
int cIndex = 0;
int wIndex = 0;
while(it.hasNext()) {
Map.Entry entry = it.next();
MultipartFile mFile = entry.getValue();
if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name
fileW.put("fileW" + wIndex, mFile);
wIndex++;
}
}
if(fileW != null) { // 재직증명서 첨부파일
List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", "");
cAtchFileId = fileMngService.insertFileInfs(resultW);
mberManageVO.setWorkAtchFileId(cAtchFileId);
}
}
mberManageVO.setHstType("04"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 4.기업회원 담당자 변경(공통코드)
mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드)
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setUniqId( user.getUniqId());
mberManageVO.setAtchFileId(""); //담당자변경은 사업자등록증 첨부X
//회원정보 조회해서 histy에 insert에 추가
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
mberManageVO.setBizType(userInfo.getBizType());
mberManageVO.setMberNm(userInfo.getMberNm());
mberManageVO.setBizNo(userInfo.getBizNo());
mberManageVO.setCeoNm(userInfo.getCeoNm());
mberManageService.insertCmpUsrHst(mberManageVO);
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
String emailTitle = "회원관리 > 기업회원 담당자변경 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
String smsTitle = "기업회원 담당자변경 요청";
// CS관리자 SMS 알림전송
mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 기업회원 담당자변경 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 마이페이지 기업정보 변경
*/
@RequestMapping(value="/web/user/updateCmpUserInfoAjax.do")
public ModelAndView updateCmpUserInfoAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String wAtchFileId = mberManageVO.getAtchFileId();
String cAtchFileId = mberManageVO.getWorkAtchFileId();
final Map files = multiRequest.getFileMap();
Map fileC = new LinkedHashMap<>(); //사업자등록증
Map fileW = new LinkedHashMap<>(); //재직증명서
if (!files.isEmpty()){
Iterator> it = files.entrySet().iterator();
int cIndex = 0;
int wIndex = 0;
while(it.hasNext()) {
Map.Entry entry = it.next();
MultipartFile mFile = entry.getValue();
if(entry.getKey().equals("file")) { //사업자등록증 - jsp에서 넘겨준 input type="file"의 name
fileC.put("fileC" + cIndex, mFile);
cIndex++;
}
if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name
fileW.put("fileW" + wIndex, mFile);
wIndex++;
}
}
if(fileC != null) { // 사업자등록증
List resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", "");
wAtchFileId = fileMngService.insertFileInfs(resultC);
mberManageVO.setAtchFileId(wAtchFileId);
}
if(fileW != null) { // 재직증명서 첨부파일
List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", "");
cAtchFileId = fileMngService.insertFileInfs(resultW);
mberManageVO.setWorkAtchFileId(cAtchFileId);
}
}
mberManageVO.setHstType("03"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드)
mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드)
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setUniqId( user.getUniqId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
//회원정보 조회해서 histy에 insert에 추가
mberManageVO.setManagerNm(userInfo.getManagerNm());
mberManageVO.setMoblphonNo(userInfo.getMoblphonNo());
mberManageService.insertCmpUsrHst(mberManageVO);
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
String emailTitle = "회원관리 > 기업회원 정보변경 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
String smsTitle = "기업회원 정보변경 요청";
// CS관리자 SMS 알림전송
mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 기업회원 정보변경 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 마이페이지 기업정보 변경 취소 처리
*/
@RequestMapping(value="/web/user/updateCmpUserInfoCancelAjax.do")
public ModelAndView updateCmpUserInfoCancelAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
modelAndView.addObject("result", "loginFail");
return modelAndView;
}
try {
//취소 회원 아이디 셋팅
mberManageVO.setLastUpdusrId(loginVO.getId());
//기업회원 변경 취소 Update 처리 hstType = 05, hstSttus = 04로 변경
mberManageService.updateCmpUserInfoCancel(mberManageVO);
modelAndView.addObject("result", "success");
} catch (Exception e) {
System.out.println("updateCmpUserInfoCancelAjax Controller Error!!!! " + e);
modelAndView.addObject("message", "기업회원 정보변경 취소요청 처리 중 오류가 발생하였습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
return modelAndView;
}
/* *//**
* 마이페이지 기업정보 변경
*//*
@RequestMapping(value="/web/user/updateCmpUserInfoAjax.do")
public ModelAndView updateCmpUserInfoAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
String atchFileId = mberManageVO.getAtchFileId();
String isThumbFile = "";
final Map files = multiRequest.getFileMap();
if (!files.isEmpty()){
if ("".equals(atchFileId)) {
List result = fileUtil.parseFileInf(files, "MY_", 0, atchFileId , "", isThumbFile);
atchFileId = fileMngService.insertFileInfs(result);
mberManageVO.setAtchFileId(atchFileId);
}else {
FileVO fvo = new FileVO();
fvo.setAtchFileId(atchFileId);
int cnt = fileMngService.getMaxFileSN(fvo);
List result = fileUtil.parseFileInf(files, "MY_", cnt, atchFileId, "", isThumbFile);
fileMngService.updateFileInfs(result);
}
}
userManageService.updateUserInfo(mberManageVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
*/
/**
* 기업회원 전환
*/
@RequestMapping(value="/web/user/membershipChange.do")
public String membershipChange(ModelMap model) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
// 이메일 코드조회
ComDefaultCodeVO voComCode = new ComDefaultCodeVO();
voComCode.setCodeId("ITN031");
model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode));
model.addAttribute("pageTab", "membershipChange");
//기업회원전환 신청 상태 확인 - 회원ID로 가장 최근 기업회원 정보 내역 조회
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
MberManageVO cmpChangeManageVO = mberManageService.selectCmpUsrHst(mberManageVO);
if(null != cmpChangeManageVO) {
if("02".equals(cmpChangeManageVO.getHstType())) { //가장 마지막 내역이 기업회원전환일 시
if("01".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 신청 상태일 시
model.addAttribute("cmpChangeManageVO", cmpChangeManageVO);
return "web/user/membershipChanging";
}else if("03".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 반려 상태일 시
model.addAttribute("cmpChangeManageVO", cmpChangeManageVO);
return "web/user/membershipChangeReturn";
}else if("02".equals(cmpChangeManageVO.getHstSttus())) { //가장 마지막 기업회원전환이 승인 상태일 시
model.addAttribute("cmpChangeManageVO", cmpChangeManageVO);
return "web/user/membershipChangeOk";
}
}
}
return "web/user/membershipChange";
}
/**
* 기업회원 전환 변경
*/
@RequestMapping(value="/web/user/updateMembershipChangeAjax.do")
public ModelAndView updateMembershipChangeAjax(@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
if("Y".equals(mberManageVO.getAtchFileSttus())) { //사업자등록증 문제 없을 시 - 재직증명서만 새로 제출하며 사업자등록증은 기존에 첨부파일 ID를 사용
mberManageVO.setAtchFileId(mberManageVO.getBeforeAtchFileId());
}
if("Y".equals(mberManageVO.getWorkAtchFileSttus())) { //재직증명서 문제 없을 시 - 사업자등록증 새로 제출하며 재직증명서는 기존에 첨부파일 ID를 사용
mberManageVO.setWorkAtchFileId(mberManageVO.getBeforeWorkAtchFileId());
}
try {
String wAtchFileId = mberManageVO.getAtchFileId();
String cAtchFileId = mberManageVO.getWorkAtchFileId();
final Map files = multiRequest.getFileMap();
Map fileC = new LinkedHashMap<>(); //사업자등록증
Map fileW = new LinkedHashMap<>(); //재직증명서
if (!files.isEmpty()){
Iterator> it = files.entrySet().iterator();
int cIndex = 0;
int wIndex = 0;
while(it.hasNext()) {
Map.Entry entry = it.next();
MultipartFile mFile = entry.getValue();
if(entry.getKey().equals("file")) { //사업자등록증 - jsp에서 넘겨준 input type="file"의 name
fileC.put("fileC" + cIndex, mFile);
cIndex++;
}
if(entry.getKey().equals("fileWork")) { //재직증명서 - jsp에서 넘겨준 input type="file"의 name
fileW.put("fileW" + wIndex, mFile);
wIndex++;
}
}
if(fileC.size() > 0) { // 사업자등록증
List resultC = fileUtil.parseFileInf(fileC, "BIZ_", 0, "", "", "");
wAtchFileId = fileMngService.insertFileInfs(resultC);
mberManageVO.setAtchFileId(wAtchFileId);
}
if(fileW.size() > 0) { // 재직증명서 첨부파일
List resultW = fileUtil.parseFileInf(fileW, "WORK_", 0, "", "", "");
cAtchFileId = fileMngService.insertFileInfs(resultW);
mberManageVO.setWorkAtchFileId(cAtchFileId);
}
}
//디비 테이블에 저장하기
//22.05.11 - 회원테이블 update에서 기업회원 히스토리 테이블 insert로 수정
//관리자가 승인 시 기업회원 히스토리 테이블의 데이터로 회원테이블 update
//mberManageService.updateMembershipChange(mberManageVO);
mberManageVO.setHstType("02"); //유형 1.회원가입 2.기업회원전환 3.기업정보변경 (공통코드)
mberManageVO.setHstSttus("01"); //상태 1.신청 2.승인 3.반려 (공통코드)
LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setUniqId( user.getUniqId());
//기업회원 전환 시 휴대폰을 따로 입력 받지 않아, 회원 테이블의 전화번호 조회 후 설정
MberManageVO mberManageVO2 = mberManageService.selectMber(user.getId());
mberManageVO.setMoblphonNo(mberManageVO2.getMoblphonNo());
mberManageService.insertCmpUsrHst(mberManageVO);
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
String emailTitle = "회원관리 > 기업회원 전환승인 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(mberManageVO.getMberNm(), mberManageVO.getMberId(), emailTitle);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
String smsTitle = "기업회원 전환승인 요청";
// CS관리자 SMS 알림전송
mjonNoticeSendUtil.csAdminSmsNoticeSend(mberManageVO.getMberId(), smsTitle);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 기업회원 전환승인 요청 - " + mberManageVO.getMberNm() +"("+ mberManageVO.getMberId() + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 비밀번호 변경 페이지
*/
@RequestMapping(value="/web/user/passwordChange.do")
public String passwordChange(ModelMap model)
throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "passwordChange");
return "web/user/passwordChange";
}
/**
* 기존 비밀번호 조회
*/
@RequestMapping(value="/web/user/selectPasswordCheckAjax.do")
public ModelAndView selectPasswordCheckAjax(@ModelAttribute UserManageVO userManageVO
, HttpServletRequest request
,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
userManageVO.setUniqId(loginVO.getId());
int pwCheck = mberManageService.selectPasswordCheck(userManageVO);
modelAndView.addObject("pwCheck", pwCheck);
modelAndView.addObject("result", "success");
// 요청페이지가 개인정보 변경 펴이지 일경우
if(userManageVO.getUserTy().equals("userInfoCh")){
//System.out.println("휴대폰 인증 ***********************************************");
KmcCertChecker kmcCertCheck = new KmcCertChecker();
//kmc 본인인증 실/개발 서버 구분
String serverNm = "";
if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) {
serverNm = request.getScheme() + "://219.240.88.15:8095";
}else{
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
AuthCertVO certVO = kmcCertCheck.authCertCheckFive(serverNm + "/web/user/selectKmcMberInfoAjax.do", loginVO.getId());
modelAndView.addObject("certVO", certVO);
}
}catch (Exception e){
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 비밀번호 변경
*/
@RequestMapping(value="/web/user/updatePasswordCheckAjax.do")
public ModelAndView updatePasswordCheckAjax(@ModelAttribute UserManageVO userManageVO
, HttpServletRequest request
,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
UserManageVO userCheckVO = new UserManageVO();
userCheckVO.setUniqId(loginVO.getId());
userCheckVO.setPassword(userManageVO.getOldPassword());
int pwCheck = mberManageService.selectPasswordCheck(userCheckVO);
if(pwCheck == 0) {
modelAndView.addObject("errType", "01");
modelAndView.addObject("message", "현재 비밀번호를 확인해 주세요");
modelAndView.addObject("result", "fail");
return modelAndView;
}
if(!userManageVO.getPassword().equals(userManageVO.getRsaPasswd())) {
modelAndView.addObject("errType", "02");
modelAndView.addObject("message", "새 비밀번호와 확인 비밀번호가 같지 않습니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
// 해당 정보의 등록 페스워드 조회
userManageVO.setEmplyrId(loginVO.getId());
int beforePwCheck = mberManageService.selectMberPWOverlapCheck(userManageVO);
if (beforePwCheck != 0) {
modelAndView.addObject("errType", "03");
modelAndView.addObject("message", "사용한 적 있는 비밀번호 입니다. 다른 비밀번호를 입력해주세요.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
//비밀번호 규칙섬 검증 추가 - 취약점 조치
userManageVO.setPassword(userManageVO.getPassword().trim());
String passWord = userManageVO.getPassword();
Pattern digitPattern = Pattern.compile("[0-9]");
Matcher digitMatcher = digitPattern.matcher(passWord);
boolean hasDigit = digitMatcher.find();
Pattern letterPattern = Pattern.compile("[a-zA-Z]");
Matcher letterMatcher = letterPattern.matcher(passWord);
boolean hasLetter = letterMatcher.find();
Pattern specialPattern = Pattern.compile("[`~!@@#$%^&*|\\\\'\";:/?]");
Matcher specialMatcher = specialPattern.matcher(passWord);
boolean hasSpecialCharacter = specialMatcher.find();
if(hasDigit == false || hasLetter == false || hasSpecialCharacter == false || passWord.length() < 8 || passWord.length() > 20) {
modelAndView.addObject("errType", "04");
modelAndView.addObject("message", "비밀번호 규칙을 확인해주세요.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
userManageVO.setEmplyrId(loginVO.getId());
userManageService.updateUserPWAjax(userManageVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "Error : " + e.getLocalizedMessage());
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 신규 발신번호 관리 등록
*/
@RequestMapping(value="/web/user/sendNumberManageRegister.do")
public String sendNumberManageRegister(
@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, RedirectAttributes redirectAttributes
, ModelMap model) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}else {
/**
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함
* 현재 로그인 세션도 만료 처리함
* */
boolean mberSttus = userManageService.selectUserStatusInfo(userId);
if(!mberSttus) {
request.getSession().invalidate();
redirectAttributes.addFlashAttribute("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 발신번호 등록을 할 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/main/mainPage.do");
return redirectUrlMaker.getRedirectUrl();
}
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "sendNumberManage");
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
return "web/user/sendNumberManageRegister";
}
/**
* 발신번호 관리
*/
@RequestMapping(value="/web/user/sendNumberManage.do")
public String sendNumberManage(
@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, ModelMap model, RedirectAttributes redirectAttributes) throws Exception {
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
/*model.addAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");*/
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "sendNumberManage");
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
return "web/user/sendNumberManage";
}
/**
* 발신번호 리스트 Ajax
*/
@RequestMapping(value="/web/user/sendNumberListAjax.do")
public String sendNumberListAjax(
@ModelAttribute("searchVO") MjPhoneMemberVO searchVO
, HttpServletRequest request
, ModelMap model) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
searchVO.setPhmType("01"); //발신조회
searchVO.setUserId(userId);
searchVO.setFirstIndex(0);
searchVO.setRecordCountPerPage(1000);
if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
searchVO.setSearchSortCnd("phmId");
searchVO.setSearchSortOrd("desc");
}
if(!"".equals(searchVO.getSearchKeyword())) {
searchVO.setSearchKeyword(searchVO.getSearchKeyword().replaceAll("-", ""));
}
//발신번호 리스트 조회
searchVO.setPhmType("01"); //발신조회
List sendNumberList = mjonMsgService.selectSendNumberList(searchVO);
MJUtil mjUtil = new MJUtil();
int rejectCnt = 0; //발신번호 반려 건수
int compCnt = 0; //인증완료 건수
for(int i=0; i < sendNumberList.size(); i++) {
String phoneNumber = mjUtil.addDash(sendNumberList.get(i).getPhoneNumber());
sendNumberList.get(i).setPhoneNumber(phoneNumber);
//발신번호 반려 건수 체크
if(sendNumberList.get(i).getAuthYn().equals("C")) {
rejectCnt++;
}
if(sendNumberList.get(i).getAuthYn().equals("Y")) {
compCnt++;
}
}
int countNum = sendNumberList.size() > 0 ? sendNumberList.get(0).getTotCnt() : 0;
model.addAttribute("countNum", countNum);
model.addAttribute("sendNumberList", sendNumberList);
model.addAttribute("rejectCnt", rejectCnt);
model.addAttribute("compCnt", compCnt);
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
model.addAttribute("mberManageVO", mberManageVO);
return "web/user/sendNumberListAjax";
}
/**
* 발신번호 등록 여부 확인
*/
@RequestMapping(value = "/web/user/updateSendNumberAjax.do")
public ModelAndView updateSendNumberAjax(
@ModelAttribute("searchVO") MjPhoneMemberVO mjPhoneMemberVO
, HttpServletRequest request
,HttpServletResponse response
,final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
int resultCnt = 0;
MjPhoneMemberVO resultPhoneInfo = new MjPhoneMemberVO();
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
mjPhoneMemberVO.setUserId(userId);
String atchFileId = "";
String isThumbFile = "";
String phmId = mjPhoneMemberVO.getPhmId();
String certId = "";
//회원 발신번호 정보 불러오기
resultPhoneInfo = mjonMsgService.selectSendPhoneNumberByPhmId(phmId);
final Map files = multiRequest.getFileMap();
if (!files.isEmpty()){
atchFileId = mjPhoneMemberVO.getAtchFileId();
if ("".equals(atchFileId)) {//신규 첨부파일 처리
List result = fileUtil.parseFileInf(files, "CERT_", 0, atchFileId, "", "");
atchFileId = fileMngService.insertFileInfs(result);
//resultPhoneInfo = mjonMsgService.selectSendPhoneNumberByPhmId(phmId);
//인증서류 데이터 입력하기
CertVO certVO = new CertVO();
certId = egovCertEtcIdGnrService.getNextStringId();
mjPhoneMemberVO.setCertId(certId);
certVO.setCertId(certId); //인증 파일 아이디
certVO.setSentPhoneNumber(resultPhoneInfo.getPhoneNumber()); //발신번호
certVO.setCertType("01"); //인증종류 : 발신 타입(01)
certVO.setAtchFileId(atchFileId); //첨부파일 아이디
certVO.setUserId(loginVO.getId()); //사용자 아이디
certVO.setFrstRegisterId(loginVO.getId()); //최초등록자
certService.insertCertFile(certVO);
} else {//기존 첨부파일 업데이트
FileVO fvo = new FileVO();
fvo.setAtchFileId(atchFileId);
int cnt = fileMngService.getMaxFileSN(fvo);
List result = fileUtil.parseFileInf(files, "CERT_", cnt, atchFileId, "", "");
fileMngService.updateFileInfs(result);
}
}
//발신번호 수정에 따른 상태값을 심사로 변경.
resultCnt = mjonMsgService.updateSendPhoneNumberAuthType(mjPhoneMemberVO);
if(resultCnt > 0) {
/*String title = "번호관리 > 발신번호 재승인 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), title);*/
modelAndView.addObject("result", "success");
modelAndView.addObject("message", "발신번호 수정 요청이 접수 되었습니다.");
}else {
modelAndView.addObject("result", "fail");
modelAndView.addObject("message", "발신번호 수정 요청 접수에 오류가 발생하였습니다.");
}
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
/**
* 발신번호 등록시 반려후 재승인 심사가 필요한 경우
* 관리자에게 재승인 신청 접수 내역을 알리는
* 메일 발송 및 문자 발송을 진행한다.
* 2022.09.26 우영두 수정
*
* 에러가 발생시 오류 메세지만 로그 기록하고 완료 처리함
* */
try {
// 즉시승인이 아닌경우 문자온 법인폰으로 알림 문자 발송하기.
if (resultCnt > 0) {
String title = "번호관리 > 발신번호 재승인 요청";
String userNm = resultPhoneInfo.getUserName();
String userId = resultPhoneInfo.getUserId();
String phoneNum = resultPhoneInfo.getPhoneNumber();
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(userNm, userId, title);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
MjonCommon mjCommon = new MjonCommon();
MjonMsgVO mjonMsgVO = new MjonMsgVO();
//발신번호 등록(관리자에게 알림이기에 발신번호도 법인폰 번호로 한다. 15518011 )
mjonMsgVO.setCallFrom("15518011");
//발송 문자 내용 등록
String smsTxt = "[발신번호 재승인 요청] "+ userNm +"(" + userId + ")/발신번호 " + phoneNum + "/재승인 요청";
mjonMsgVO.setSmsTxt(smsTxt);
//발송 문자 타입(단/장문) 등록
//문자열 길이 체크 해주기
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
smsTxt = smsTxt.replace("\r\n", "\n");
int FrBytes = smsTxt.getBytes(charset).length;
String msgType = "4";
//90바이트를 초과하는 경우 장문으로 발송
if(FrBytes > 90){
msgType = "6";
}
mjonMsgVO.setMsgType(msgType);
//그림이미지 첨부파일 갯수 0으로 셋팅
mjonMsgVO.setFileCnt("0");
// 문자타입 구분
if (mjonMsgVO.getMsgType().equals("4")) {
mjonMsgVO.setMsgDiv("S"); // 단문
}
else if (mjonMsgVO.getMsgType().equals("6")) {
if (mjonMsgVO.getFileCnt().equals("0")) {
mjonMsgVO.setMsgDiv("L"); // 장문
}
else {
mjonMsgVO.setMsgDiv("P"); // 그림
}
}
// 문자타입별 대표전송사 정보
MjonMsgVO mjonMsgVO2 = new MjonMsgVO();
mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO);
// 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술
mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택
// 전송금액
mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액
mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액
//문자발송을 위한 데이터 셋팅 함수 호출해주기
MjonMsgVO resultCom = mjCommon.getAdminPhoneSendMsgDataComm(mjonMsgVO);
//문자온 법인폰으로 문자 발송 처리
mjonMsgDataService.insertAdmToMberMsgDataInfo(resultCom);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 발신번호 재승인 요청 - " + userNm +"("+ userId + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
}
} catch (Exception e) {
System.out.println("+++++++++++++++++++++++++++++ 발신번호 등록 재승인 요청문자온 법인폰으로 문자 발송 및 이메일 알림 발송 Function Error !!!" + e);
}
return modelAndView;
}
/**
* 발신번호 등록 여부 확인
*/
@RequestMapping(value = "/web/user/selectSendNumberAjax.do")
public ModelAndView selectSendNumberAjax(
@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO
, HttpServletRequest request
,HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
//발신번호 차단 리스트 체크(아이디 상관없이 모든 번호에 대한 차단번호 체크 20220616)
int sendBlockNumberCheck = 0;
sendBlockNumberCheck = mjonMsgService.selectSendBlockPhonNumCheck(mjonMsgVO);
if(sendBlockNumberCheck != 0){
String message = "입력하신 발신번호는 차단된 발신번호 입니다.";
modelAndView.addObject("message", message);
modelAndView.addObject("result", "fail");
return modelAndView;
}
int sendNumberCheck = 0;
//발신번호 등록 중복 체크
sendNumberCheck = mjonMsgService.selectSendPhonNumCheck(mjonMsgVO);
if(sendNumberCheck != 0) {
String message = "이미 등록되어 있는 발신번호 입니다.";
modelAndView.addObject("message", message);
modelAndView.addObject("result", "fail");
}else {
//System.out.println(mjonMsgVO.getPhmAuthType() + " : ***********************************************");
//if(mjonMsgVO.getPhmAuthType().equals("01") || mjonMsgVO.getPhmAuthType() == "01") { // phone
//System.out.println("휴대폰 인증 ***********************************************");
LoginVO loginVO = new LoginVO();
loginVO.setId(mjonMsgVO.getUserId());
loginVO = loginService.selectKMCInfo(loginVO);
modelAndView.addObject("loginVO", loginVO);
mjonMsgVO.getCallFrom(); // 신규 등록할 발신번호
String name = loginVO.getMberNm(); // 이름
if(loginVO.getDept().equals("c")) {
name = loginVO.getManagerNm();
}
KmcCertChecker kmcCertCheck = new KmcCertChecker();
//kmc 본인인증 실/개발 서버 구분
String serverNm = "";
if(request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) {
serverNm = request.getScheme() + "://119.193.215.98:8882";
}else{
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
//AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/insertPhoneSendNumber.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), name);
AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/selectPhoneNumberCertChkAjax.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), "", mjonMsgVO.getMyNameFlag());
modelAndView.addObject("certVO", certVO);
/*}else if(mjonMsgVO.getPhmAuthType().equals("02") || mjonMsgVO.getPhmAuthType() == "02") { // ARS
System.out.println("ARS 인증 ***********************************************");
} else if(mjonMsgVO.getPhmAuthType().equals("03") || mjonMsgVO.getPhmAuthType() == "03") { // ARS
System.out.println("서류인증 ***********************************************");
} */
modelAndView.addObject("result", "success");
}
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 휴대폰 인증 본인, 타인 정보 확인
*/
@RequestMapping("/web/user/selectPhoneNumberCertChkAjax.do")
public String selectPhoneNumberCertChk(
HttpServletRequest request, ModelMap model
, @RequestParam Map commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
String errMessage = ""; //에러메세지
String rec_cert = ""; // 결과값(암호화)
String certNum = ""; // certNum
rec_cert = request.getParameter("rec_cert").trim();
certNum = request.getParameter("certNum").trim();
kmcVO.setRecCert(rec_cert);
kmcVO.setCertNum(certNum);
// 파라미터 유효성 검증
if( rec_cert.length() == 0 || certNum.length() == 0 ){
errMessage = "비정상";
return returnPage(model , errMessage , kmcVO) ;
}
// 변수선언 --------------------------------------------------------------------------------------------------------
String k_certNum = ""; // 파라미터로 수신한 요청번호
k_certNum = certNum;
String date = ""; // 요청일시
String CI = ""; // 연계정보(CI)
String DI = ""; // 중복가입확인정보(DI)
String phoneNo = ""; // 휴대폰번호
String phoneCorp = ""; // 이동통신사
String birthDay = ""; // 생년월일
String gender = ""; // 성별
String nation = ""; // 내국인
String name = ""; // 성명
String M_name = ""; // 미성년자 성명
String M_birthDay = ""; // 미성년자 생년월일
String M_Gender = ""; // 미성년자 성별
String M_nation = ""; // 미성년자 내외국인
String result = ""; // 결과값
String certMet = ""; // 인증방법
String ip = ""; // ip주소
String plusInfo = "";
String encPara = "";
String encMsg1 = "";
String encMsg2 = "";
String msgChk = "";
IcertSecuManager seed = new IcertSecuManager();
//02. 1차 복호화
//수신된 certNum를 이용하여 복호화
rec_cert = seed.getDec(rec_cert, k_certNum);
//03. 1차 파싱
int inf1 = rec_cert.indexOf("/",0);
int inf2 = rec_cert.indexOf("/",inf1+1);
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
//04. 위변조 검증
encMsg2 = seed.getMsg(encPara);
kmcVO.setEncMsg2(encMsg2);
if(encMsg2.equals(encMsg1)){
msgChk="Y";
}
if(!"Y".equals(msgChk)) {
errMessage = "비정상접근입니다.";
return returnPage(model , errMessage , kmcVO) ;
}
//05. 2차 복호화
rec_cert = seed.getDec(encPara, k_certNum);
kmcVO.setRecCert(rec_cert);
//06. 2차 파싱
int info1 = rec_cert.indexOf("/",0);
int info2 = rec_cert.indexOf("/",info1+1);
int info3 = rec_cert.indexOf("/",info2+1);
int info4 = rec_cert.indexOf("/",info3+1);
int info5 = rec_cert.indexOf("/",info4+1);
int info6 = rec_cert.indexOf("/",info5+1);
int info7 = rec_cert.indexOf("/",info6+1);
int info8 = rec_cert.indexOf("/",info7+1);
int info9 = rec_cert.indexOf("/",info8+1);
int info10 = rec_cert.indexOf("/",info9+1);
int info11 = rec_cert.indexOf("/",info10+1);
int info12 = rec_cert.indexOf("/",info11+1);
int info13 = rec_cert.indexOf("/",info12+1);
int info14 = rec_cert.indexOf("/",info13+1);
int info15 = rec_cert.indexOf("/",info14+1);
int info16 = rec_cert.indexOf("/",info15+1);
int info17 = rec_cert.indexOf("/",info16+1);
int info18 = rec_cert.indexOf("/",info17+1);
certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date);
CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
name = rec_cert.substring(info8+1,info9); kmcVO.setName(name);
result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
//07. CI, DI 복호화
CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
if("Y".equals(result)) {
}
//--------------------------------------------------------------
String regex = "";
if( certNum.length() == 0 || certNum.length() > 40){
errMessage = "요청번호 비정상.";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( date.length() != 14 || !paramChk(regex, date) ){
errMessage = "요청일시";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( certMet.length() != 1 || !paramChk(regex, certMet) ){
errMessage = "본인인증방법 비정상" + certMet;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
errMessage = "휴대폰번호 비정상" ;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
errMessage = "이동통신사 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
errMessage = "생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( gender.length() != 1 || !paramChk(regex, gender) ){
errMessage = "성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( nation.length() != 1 || !paramChk(regex, nation) ){
errMessage = "내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-�R.,-]*";
if( name.length() > 60 || !paramChk(regex, name) ){
errMessage = "성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( result.length() != 1 || !paramChk(regex, result) ){
errMessage = "결과값 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-?.,-]*";
if( M_name.length() != 0 ){
if( M_name.length() > 60 || !paramChk(regex, M_name) ){
errMessage = "미성년자 성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_birthDay.length() != 0 ){
if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
errMessage = "미성년자 생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_Gender.length() != 0 ){
if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
errMessage = "미성년자 성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_nation.length() != 0 ){
if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
errMessage = "미성년자 내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
/*
* plusInfo(본인인증 추가파라미터)
* 구분지 "§"
* [0] = mberId
* [1] = 개인 혹은 법인 회원 본인인증일 경우 flag
*
* */
String tmp = kmcVO.getPlusInfo();
String[] tmpResult = tmp.split("§");
//KMC 본인인증 로그
AuthCertVO certVO = new AuthCertVO();
certVO.setMberId(tmpResult[0]);
certVO.setCertNum(kmcVO.getCertNum());
certVO.setCertDate(kmcVO.getDate());
certVO.setCertDi(kmcVO.getDI());
certVO.setCertPhone(kmcVO.getPhoneNo());
certVO.setCertNation(kmcVO.getNation());
certVO.setCertName(kmcVO.getName());
certVO.setCertResult(kmcVO.getResult());
certVO.setCertType("KMC_발신번호 등록 인증");
certVO.setCertIpaddr(kmcVO.getIp());
certVO.setBirthDay(kmcVO.getBirthDay());
certVO.setSexdstnCode(kmcVO.getGender());
//디비 테이블에 저장하기
mberManageService.insertCertInfoLog(certVO);
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
String resultDnFlag = "N";
if(DI.equals(mblDn)) {
resultDnFlag = "Y";
}
model.addAttribute("resultDnFlag", resultDnFlag);
System.out.println("START 휴대폰인증");
System.out.println("휴대폰인증 => myNameFlag : " + tmpResult[1]);
/*
* 개인회원 - 본인명의 본인인증의 경우
* 휴대폰 본인인증 시 회원가입자 이름과 동일해야만 승인
* 법인회원 - 본인명의 본인인증의 경우
* 휴대폰 본인인증 시 회원가입자 이름과 동일해야만 승인
* 이준호_230314
* http://pms.iten.co.kr:9999/issues/3088
*/
//=======================시작=========================
//개인 본인명의 - Y
//법인 대표 - Y
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
mberManageVO = userManageService.selectUserInfo(mberManageVO);
String ceoNm = mberManageVO.getCeoNm() == null ? "" : mberManageVO.getCeoNm();
String managerNm = mberManageVO.getManagerNm() == null ? "" : mberManageVO.getManagerNm();
String resultNameChk = "";
//본인인증 호출부에서 myNameFlag값 == tmpResult[1]
if("Y".equals(tmpResult[1])) {
if("p".equals(mberManageVO.getDept())) {
//개인회원일경우
//이름에 본인인증결과(이름)이 같을 경우
if(kmcVO.getName().trim().equals(loginVO.getName().trim())) {
resultNameChk = "Y";
}
else {
resultNameChk = "N";
}
System.out.println("휴대폰인증 => 개인회원 회원이름 : " + loginVO.getName().trim());
System.out.println("휴대폰인증 => 개인회원 인증이름 : " + kmcVO.getName().trim());
System.out.println("휴대폰인증 => 개인회원 resultNameChk : " + resultNameChk);
}
if("c".equals(mberManageVO.getDept())) {
//법인회원 일 경우
if(ceoNm.contains(kmcVO.getName().trim())) {
resultNameChk = "Y";
}
//대표자명에 본인인증결과(이름)이 포함 되지 않을 경우
else {
resultNameChk = "N";
}
System.out.println("휴대폰인증 => 기업회원(대표) 대표이름 : " + ceoNm);
System.out.println("휴대폰인증 => 기업회원(대표) 인증이름 : " + kmcVO.getName().trim());
System.out.println("휴대폰인증 => 기업회원(대표) resultNameChk : " + resultNameChk);
}
}
else {
/*
// 기업회원>직원 인경우
if("c".equals(mberManageVO.getDept())) {
//법인회원 일 경우
if(managerNm.equals(kmcVO.getName().trim())) {
resultNameChk = "Y";
}
//대표자명에 본인인증결과(이름)이 포함 되지 않을 경우
else {
resultNameChk = "N";
}
System.out.println("휴대폰인증 => 기업회원(직원) 직원이름 : " + managerNm);
System.out.println("휴대폰인증 => 기업회원(직원) 인증이름 : " + kmcVO.getName().trim());
System.out.println("휴대폰인증 => 기업회원(직원) resultNameChk : " + resultNameChk);
}
*/
}
System.out.println("END 휴대폰인증");
model.addAttribute("resultNameChk", resultNameChk);
//=======================끝=========================
String birthDay_tmp = "";
try {
birthDay_tmp = kmcVO.getMBirthDay().length() != 0 ? kmcVO.getMBirthDay() : kmcVO.getBirthDay();
} catch (Exception e) {
birthDay_tmp = birthDay;
}
model.addAttribute("CI", kmcVO.getCI());
model.addAttribute("birthDay", birthDay_tmp);
return "web/user/selectPhoneNumberCertChkReq";
}
/**
* 휴대폰 인증 발신번호 등록
*/
@RequestMapping("/web/user/testtest.do")
public String test222(
HttpServletRequest request, ModelMap model
, @RequestParam Map commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
model.addAttribute("resultDnFlag", "Y");
return "web/user/selectPhoneNumberCertChkReq";
}
/**
* 휴대폰 인증 발신번호 등록
*/
@RequestMapping("/web/user/insertPhoneSendNumber.do")
public String insertPhoneSendNumber(
HttpServletRequest request, ModelMap model
, @RequestParam Map commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
String errMessage = ""; //에러메세지
String rec_cert = ""; // 결과값(암호화)
String certNum = ""; // certNum
rec_cert = request.getParameter("rec_cert").trim();
certNum = request.getParameter("certNum").trim();
kmcVO.setRecCert(rec_cert);
kmcVO.setCertNum(certNum);
// 파라미터 유효성 검증
if( rec_cert.length() == 0 || certNum.length() == 0 ){
errMessage = "비정상";
return returnPage(model , errMessage , kmcVO) ;
}
// 변수선언 --------------------------------------------------------------------------------------------------------
String k_certNum = ""; // 파라미터로 수신한 요청번호
k_certNum = certNum;
String date = ""; // 요청일시
String CI = ""; // 연계정보(CI)
String DI = ""; // 중복가입확인정보(DI)
String phoneNo = ""; // 휴대폰번호
String phoneCorp = ""; // 이동통신사
String birthDay = ""; // 생년월일
String gender = ""; // 성별
String nation = ""; // 내국인
String name = ""; // 성명
String M_name = ""; // 미성년자 성명
String M_birthDay = ""; // 미성년자 생년월일
String M_Gender = ""; // 미성년자 성별
String M_nation = ""; // 미성년자 내외국인
String result = ""; // 결과값
String certMet = ""; // 인증방법
String ip = ""; // ip주소
String plusInfo = "";
String encPara = "";
String encMsg1 = "";
String encMsg2 = "";
String msgChk = "";
IcertSecuManager seed = new IcertSecuManager();
//02. 1차 복호화
//수신된 certNum를 이용하여 복호화
rec_cert = seed.getDec(rec_cert, k_certNum);
//03. 1차 파싱
int inf1 = rec_cert.indexOf("/",0);
int inf2 = rec_cert.indexOf("/",inf1+1);
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
//04. 위변조 검증
encMsg2 = seed.getMsg(encPara);
kmcVO.setEncMsg2(encMsg2);
if(encMsg2.equals(encMsg1)){
msgChk="Y";
}
if(!"Y".equals(msgChk)) {
errMessage = "비정상접근입니다.";
return returnPage(model , errMessage , kmcVO) ;
}
//05. 2차 복호화
rec_cert = seed.getDec(encPara, k_certNum);
kmcVO.setRecCert(rec_cert);
//06. 2차 파싱
int info1 = rec_cert.indexOf("/",0);
int info2 = rec_cert.indexOf("/",info1+1);
int info3 = rec_cert.indexOf("/",info2+1);
int info4 = rec_cert.indexOf("/",info3+1);
int info5 = rec_cert.indexOf("/",info4+1);
int info6 = rec_cert.indexOf("/",info5+1);
int info7 = rec_cert.indexOf("/",info6+1);
int info8 = rec_cert.indexOf("/",info7+1);
int info9 = rec_cert.indexOf("/",info8+1);
int info10 = rec_cert.indexOf("/",info9+1);
int info11 = rec_cert.indexOf("/",info10+1);
int info12 = rec_cert.indexOf("/",info11+1);
int info13 = rec_cert.indexOf("/",info12+1);
int info14 = rec_cert.indexOf("/",info13+1);
int info15 = rec_cert.indexOf("/",info14+1);
int info16 = rec_cert.indexOf("/",info15+1);
int info17 = rec_cert.indexOf("/",info16+1);
int info18 = rec_cert.indexOf("/",info17+1);
certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date);
CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
name = rec_cert.substring(info8+1,info9); kmcVO.setName(name);
result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
//07. CI, DI 복호화
CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
if("Y".equals(result)) {
}
//--------------------------------------------------------------
String regex = "";
if( certNum.length() == 0 || certNum.length() > 40){
errMessage = "요청번호 비정상.";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( date.length() != 14 || !paramChk(regex, date) ){
errMessage = "요청일시";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( certMet.length() != 1 || !paramChk(regex, certMet) ){
errMessage = "본인인증방법 비정상" + certMet;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
errMessage = "휴대폰번호 비정상" ;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
errMessage = "이동통신사 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
errMessage = "생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( gender.length() != 1 || !paramChk(regex, gender) ){
errMessage = "성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( nation.length() != 1 || !paramChk(regex, nation) ){
errMessage = "내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-�R.,-]*";
if( name.length() > 60 || !paramChk(regex, name) ){
errMessage = "성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( result.length() != 1 || !paramChk(regex, result) ){
errMessage = "결과값 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-?.,-]*";
if( M_name.length() != 0 ){
if( M_name.length() > 60 || !paramChk(regex, M_name) ){
errMessage = "미성년자 성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_birthDay.length() != 0 ){
if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
errMessage = "미성년자 생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_Gender.length() != 0 ){
if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
errMessage = "미성년자 성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_nation.length() != 0 ){
if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
errMessage = "미성년자 내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setUserId(plusInfo);
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setPhmAuthType("01");
mjPhoneMemberVO.setFrstRegisterId(plusInfo);
mjPhoneMemberVO.setLastUpdusrId(plusInfo);
mjPhoneMemberVO.setPhoneNumber(phoneNo);
mjPhoneMemberVO.setUserName(name);
mjPhoneMemberVO.setAuthYn("Y");
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
model.addAttribute("kmcVO", kmcVO);
return "web/user/sendNumberKmcReqPage";
}
/**
* ARS 인증 발신번호 등록
*/
@RequestMapping("/web/user/insertArsSendNumberAjax.do")
public ModelAndView insertArsSendNumberAjax(CertVO certVO
, HttpServletResponse response
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setUserId(loginVO.getId());
mjPhoneMemberVO.setPhmAuthType("02");
mjPhoneMemberVO.setFrstRegisterId(loginVO.getId());
mjPhoneMemberVO.setLastUpdusrId(loginVO.getId());
mjPhoneMemberVO.setPhoneNumber(certVO.getSentPhoneNumber()); // 발송 전화번호
mjPhoneMemberVO.setUserName(loginVO.getName());
mjPhoneMemberVO.setAuthYn("Y");
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 서류인증(통신사 가입 증명서) 등록
*/
@SuppressWarnings("unused")
@RequestMapping("/web/user/insertDocumentSendNumberAjax.do")
public ModelAndView insertDocumentSendNumberAjax(
CertVO certVO
, HttpServletResponse response
, HttpServletRequest request
, final MultipartHttpServletRequest multiRequest) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setOwnerName(certVO.getOwnerName()); //본인인증 명의 이름 세팅
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
// 발신번호 서류관리 등록 [시작]
try {
String atchFileId = "";
String isThumbFile = "";
final Map files = multiRequest.getFileMap();
if (!files.isEmpty()){
List result = fileUtil.parseFileInf(files, "CERT_", 0, atchFileId , "", isThumbFile);
atchFileId = fileMngService.insertFileInfs(result);
certVO.setAtchFileId(atchFileId);
//인증서류 데이터 입력하기
certVO.setCertId(egovCertEtcIdGnrService.getNextStringId());
certVO.setUserId(loginVO.getId());
certVO.setFrstRegisterId(loginVO.getId());
certService.insertCertFile(certVO);
}
// 발신번호 서류관리 등록 [끝]
// 발신번호 등록 [시작]
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setUserId(loginVO.getId());
mjPhoneMemberVO.setCertId(certVO.getCertId());
mjPhoneMemberVO.setPhmAuthType(certVO.getCertType()); //번호 인증 타입 01:휴대폰인증, 03: 서류인증
mjPhoneMemberVO.setFrstRegisterId(loginVO.getId());
mjPhoneMemberVO.setLastUpdusrId(loginVO.getId());
mjPhoneMemberVO.setPhoneNumber(certVO.getSentPhoneNumber()); // 발송 전화번호
if(!"".equals(certVO.getSendPhoneNumber()) && certVO.getSendPhoneNumber() != null) { //230530 추가 - 고객이 인증 후 입력 한 발신번호를 수정하면, 수정 한 발신번호가 등록되어서 인증했을 경우 인증한 번호로 발신번호 등록하게끔 추가
mjPhoneMemberVO.setPhoneNumber(certVO.getSendPhoneNumber());
}
mjPhoneMemberVO.setUserName(loginVO.getName());
mjPhoneMemberVO.setSendPhoneNumber(certVO.getSendPhoneNumber()); // 확인 전화번호
mjPhoneMemberVO.setPhmValue(certVO.getPhmValue()); //비고
mjPhoneMemberVO.setNameType(certVO.getNameType());
mjPhoneMemberVO.setDept(certVO.getDept());
mjPhoneMemberVO.setCI(certVO.getCI()); // CI값
mjPhoneMemberVO.setBirthDay(certVO.getBirthDay()); // 생년월일
//개인회원 본인 인증인 경우 핸드폰 번호 즉시 승인해주기
String dept = certVO.getDept();
String nameType = certVO.getNameType();
String certType = certVO.getCertType();
if(StringUtil.isNotEmpty(dept) && StringUtil.isNotEmpty(nameType)) {
//회원종류 개인, 인증 종류 휴대폰 본인 인증인경우 즉시 승인
if(dept.equals("p") && nameType.equals("5") && certType.equals("01")) {
mjPhoneMemberVO.setAuthYn("Y");
}else if(dept.equals("c") && nameType.equals("2") && certType.equals("01")){
//기업회원 중 대표 이면서 휴대폰 인증인 경우 즉시 승인
mjPhoneMemberVO.setAuthYn("Y");
}else {
mjPhoneMemberVO.setAuthYn("H");
}
}else {
mjPhoneMemberVO.setAuthYn("H");
}
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
// 발신번호 등록 [끝]
// 즉시승인이 아닌경우 관리자에게 이메일 발송
/*if (!mjPhoneMemberVO.getAuthYn().equals("Y")) {
String title = "번호관리 > 발신번호 승인 요청";
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), title);
}*/
modelAndView.addObject("result", "success");
}catch (Exception e) {
System.out.println("발신번호 등록 오류 아이디 : " + loginVO.getId());
System.out.println("발신번호 등록 오류 내용 : " + e.getMessage());
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
return modelAndView;
}
/**
* 발신번호 등록시 승인 심사가 필요한 경우
* 관리자에게 승인 신청 접수 내역을 알리는
* 메일 발송 및 문자 발송을 진행한다.
* 2022.09.26 우영두 수정
*
* 에러가 발생시 오류 메세지만 로그 기록하고 완료 처리함
* */
try {
// 즉시승인이 아닌경우 문자온 법인폰으로 알림 문자 발송하기.
if (!mjPhoneMemberVO.getAuthYn().equals("Y")) {
String title = "번호관리 > 발신번호 승인 요청";
String userNm = mjPhoneMemberVO.getUserName();
String userId = mjPhoneMemberVO.getUserId();
String phoneNum = mjPhoneMemberVO.getPhoneNumber();
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// 이메일 체크
if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) {
// CS관리자 이메일 알림전송
mjonNoticeSendUtil.csAdminEmailNoticeSend(userNm, userId, title);
}
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
MjonCommon mjCommon = new MjonCommon();
MjonMsgVO mjonMsgVO = new MjonMsgVO();
//발신번호 등록(관리자에게 알림이기에 발신번호도 법인폰 번호로 한다. 15518011 )
mjonMsgVO.setCallFrom("15518011");
//발송 문자 내용 등록
String smsTxt = "[발신번호 승인 요청] "+ userNm +"(" + userId + ")/발신번호 " + phoneNum + "/승인 요청";
mjonMsgVO.setSmsTxt(smsTxt);
//발송 문자 타입(단/장문) 등록
//문자열 길이 체크 해주기
String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
smsTxt = smsTxt.replace("\r\n", "\n");
int FrBytes = smsTxt.getBytes(charset).length;
String msgType = "4";
//90바이트를 초과하는 경우 장문으로 발송
if(FrBytes > 90){
msgType = "6";
}
mjonMsgVO.setMsgType(msgType);
//그림이미지 첨부파일 갯수 0으로 셋팅
mjonMsgVO.setFileCnt("0");
// 문자타입 구분
if (mjonMsgVO.getMsgType().equals("4")) {
mjonMsgVO.setMsgDiv("S"); // 단문
}
else if (mjonMsgVO.getMsgType().equals("6")) {
if (mjonMsgVO.getFileCnt().equals("0")) {
mjonMsgVO.setMsgDiv("L"); // 장문
}
else {
mjonMsgVO.setMsgDiv("P"); // 그림
}
}
// 문자타입별 대표전송사 정보
MjonMsgVO mjonMsgVO2 = new MjonMsgVO();
mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO);
// 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술
mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택
// 전송금액
mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액
mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액
//문자발송을 위한 데이터 셋팅 함수 호출해주기
MjonMsgVO resultCom = mjCommon.getAdminPhoneSendMsgDataComm(mjonMsgVO);
//문자온 법인폰으로 문자 발송 처리
mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 발신번호 승인 요청 - " + userNm +"("+ userId + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
}
} catch (Exception e) {
System.out.println("+++++++++++++++++++++++++++++ 발신번호 등록 승인 요청 문자온 법인폰으로 문자 발송 및 이메일 알림 발송 Function Error !!!" + e);
}
return modelAndView;
}
/**
* 발신번호 삭제
*/
@RequestMapping(value = "/web/user/deleteSendNumberAjax.do")
public ModelAndView deleteSendNumberAjax(@ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
mjPhoneMemberVO.setUserId(loginVO.getId());
//삭제 전 기본번호 조회
String baseYId = mjonMsgService.selectBaseYPhoneNum(mjPhoneMemberVO);
try {
mjonMsgService.deleteSendNumberDelete(mjPhoneMemberVO);
//삭제 번호가 기본번호 일 시 다른번호 기본번호 설정하기
if(baseYId != null && baseYId.equals(mjPhoneMemberVO.getPhmId())) {
mjonMsgService.updateBaseYPhoneNumLately(mjPhoneMemberVO);
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 발신번호 일괄 삭제
*/
@RequestMapping(value = "/web/user/deleteSendNumberAllAjax.do")
public ModelAndView deleteSendNumberAllAjax(@RequestParam("chk") String[] chk, @ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
mjPhoneMemberVO.setUserId(loginVO.getId());
//삭제 전 기본번호 조회
String baseYId = mjonMsgService.selectBaseYPhoneNum(mjPhoneMemberVO);
try {
for(String id: chk) {
mjPhoneMemberVO.setPhmId(id);
mjonMsgService.deleteSendNumberDelete(mjPhoneMemberVO);
//삭제 번호가 기본번호 일 시 다른번호 기본번호 설정하기
if(baseYId != null && baseYId.equals(mjPhoneMemberVO.getPhmId())) {
mjonMsgService.updateBaseYPhoneNumLately(mjPhoneMemberVO);
}
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 발신번호 기본번호 설정
*/
@RequestMapping(value = "/web/user/updateSendNumberBaseYnAjax.do")
public ModelAndView updateSendNumberBaseYnAjax(@RequestParam("baseId") String baseId, @ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
try {
mjPhoneMemberVO.setUserId(loginVO.getId());
mjPhoneMemberVO.setPhmId(baseId);
//업데이트문 개발 시작
mjonMsgService.updateSendNumberBaseYn(mjPhoneMemberVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 알림설정
*/
@RequestMapping(value="/web/user/notifyManage.do")
public String notifyManage(
@ModelAttribute MberManageVO mberManageVO
, HttpServletRequest request
, ModelMap model) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
model.addAttribute("pageTab", "notifyManage");
return "web/user/notifyManage";
}
/**
* 발송결과 알림 수정
*/
@RequestMapping(value = "/web/user/updateSandResultAjax.do")
public ModelAndView updateSandResultAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
if(mberManageVO.getUserTy().equals("tab1")) {
userManageService.updateSandResul(mberManageVO);
}else if(mberManageVO.getUserTy().equals("tab2")) {
userManageService.updateNoticet(mberManageVO);
}
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 회원탈퇴 본인인증 화면
*/
@RequestMapping(value="/web/user/mberSecession.do")
public String mberSecession(@ModelAttribute MberManageVO mberManageVO
, ModelMap model, HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "mberSecession");
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
String name = userInfo.getMberNm(); // 이름
if(loginVO.getDept().equals("c")) {
name = userInfo.getManagerNm();
}
KmcCertChecker kmcCertCheck = new KmcCertChecker();
//kmc 본인인증 실/개발 서버 구분
String serverNm = "";
if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) {
serverNm = request.getScheme() + "://219.240.88.15:8095";
}else{
serverNm = request.getScheme() + "://www.munjaon.co.kr";
}
AuthCertVO certVO = kmcCertCheck.authCertCheckSeven(serverNm + "/web/user/selectMberSecessionAjax.do", name);
model.addAttribute("certVO", certVO);
return "web/user/mberSecession";
}
/**
* 회원탈퇴 상세정보 화면
*/
@RequestMapping(value="/web/user/mberSecessionInfo.do")
public String mberSecessionInfo(@ModelAttribute MberManageVO mberManageVO
, RedirectAttributes redirectAttributes
, ModelMap model) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
model.addAttribute("loginVO", loginVO);
model.addAttribute("pageTab", "mberSecession");
//본인인증 했는지 확인 필요
if(mberManageVO.getKeyCheck() == null || !mberManageVO.getKeyCheck().equals("Y")) {
redirectAttributes.addFlashAttribute("message", "본인인증 진행 하세요.");
RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/user/mberSecession.do");
return redirectUrlMaker.getRedirectUrl();
}
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
return "web/user/mberSecessionInfo";
}
/**
* 회원탈퇴
*/
@RequestMapping(value="/web/user/mberDeleteInfoAjax.do")
public ModelAndView mberDeleteInfoAjax(MberManageVO mberManageVO
, HttpServletRequest request
, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
try {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
mberManageVO.setMberId(loginVO.getId());
userManageService.updateDeleteInfo(mberManageVO);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
/**
* 회원탈퇴 본인인증
*/
@RequestMapping("/web/user/selectMberSecessionAjax.do")
public String selectMberSecessionAjax(
HttpServletRequest request, ModelMap model
, @RequestParam Map commandMap
, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
String errMessage = ""; //에러메세지
String rec_cert = ""; // 결과값(암호화)
String certNum = ""; // certNum
rec_cert = request.getParameter("rec_cert").trim();
certNum = request.getParameter("certNum").trim();
kmcVO.setRecCert(rec_cert);
kmcVO.setCertNum(certNum);
// 파라미터 유효성 검증
if( rec_cert.length() == 0 || certNum.length() == 0 ){
errMessage = "비정상";
return returnPage(model , errMessage , kmcVO) ;
}
// 변수선언 --------------------------------------------------------------------------------------------------------
String k_certNum = ""; // 파라미터로 수신한 요청번호
k_certNum = certNum;
String date = ""; // 요청일시
String CI = ""; // 연계정보(CI)
String DI = ""; // 중복가입확인정보(DI)
String phoneNo = ""; // 휴대폰번호
String phoneCorp = ""; // 이동통신사
String birthDay = ""; // 생년월일
String gender = ""; // 성별
String nation = ""; // 내국인
String name = ""; // 성명
String M_name = ""; // 미성년자 성명
String M_birthDay = ""; // 미성년자 생년월일
String M_Gender = ""; // 미성년자 성별
String M_nation = ""; // 미성년자 내외국인
String result = ""; // 결과값
String certMet = ""; // 인증방법
String ip = ""; // ip주소
String plusInfo = "";
String encPara = "";
String encMsg1 = "";
String encMsg2 = "";
String msgChk = "";
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
//02. 1차 복호화
//수신된 certNum를 이용하여 복호화
rec_cert = seed.getDec(rec_cert, k_certNum);
//03. 1차 파싱
int inf1 = rec_cert.indexOf("/",0);
int inf2 = rec_cert.indexOf("/",inf1+1);
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
//04. 위변조 검증
encMsg2 = seed.getMsg(encPara);
kmcVO.setEncMsg2(encMsg2);
if(encMsg2.equals(encMsg1)){
msgChk="Y";
}
if(!"Y".equals(msgChk)) {
errMessage = "비정상접근입니다.";
return returnPage(model , errMessage , kmcVO) ;
}
//05. 2차 복호화
rec_cert = seed.getDec(encPara, k_certNum);
kmcVO.setRecCert(rec_cert);
//06. 2차 파싱
int info1 = rec_cert.indexOf("/",0);
int info2 = rec_cert.indexOf("/",info1+1);
int info3 = rec_cert.indexOf("/",info2+1);
int info4 = rec_cert.indexOf("/",info3+1);
int info5 = rec_cert.indexOf("/",info4+1);
int info6 = rec_cert.indexOf("/",info5+1);
int info7 = rec_cert.indexOf("/",info6+1);
int info8 = rec_cert.indexOf("/",info7+1);
int info9 = rec_cert.indexOf("/",info8+1);
int info10 = rec_cert.indexOf("/",info9+1);
int info11 = rec_cert.indexOf("/",info10+1);
int info12 = rec_cert.indexOf("/",info11+1);
int info13 = rec_cert.indexOf("/",info12+1);
int info14 = rec_cert.indexOf("/",info13+1);
int info15 = rec_cert.indexOf("/",info14+1);
int info16 = rec_cert.indexOf("/",info15+1);
int info17 = rec_cert.indexOf("/",info16+1);
int info18 = rec_cert.indexOf("/",info17+1);
certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date);
CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
name = rec_cert.substring(info8+1,info9); kmcVO.setName(name);
result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
//07. CI, DI 복호화
CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
if("Y".equals(result)) {
}
//--------------------------------------------------------------
String regex = "";
if( certNum.length() == 0 || certNum.length() > 40){
errMessage = "요청번호 비정상.";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( date.length() != 14 || !paramChk(regex, date) ){
errMessage = "요청일시";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( certMet.length() != 1 || !paramChk(regex, certMet) ){
errMessage = "본인인증방법 비정상" + certMet;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
errMessage = "휴대폰번호 비정상" ;
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
errMessage = "이동통신사 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
errMessage = "생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( gender.length() != 1 || !paramChk(regex, gender) ){
errMessage = "성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[0-9]*";
if( nation.length() != 1 || !paramChk(regex, nation) ){
errMessage = "내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-�R.,-]*";
if( name.length() > 60 || !paramChk(regex, name) ){
errMessage = "성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[A-Z]*";
if( result.length() != 1 || !paramChk(regex, result) ){
errMessage = "결과값 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
regex = "[\\sA-Za-z가-?.,-]*";
if( M_name.length() != 0 ){
if( M_name.length() > 60 || !paramChk(regex, M_name) ){
errMessage = "미성년자 성명 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_birthDay.length() != 0 ){
if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
errMessage = "미성년자 생년월일 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_Gender.length() != 0 ){
if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
errMessage = "미성년자 성별 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
regex = "[0-9]*";
if( M_nation.length() != 0 ){
if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
errMessage = "미성년자 내/외국인 비정상";
return returnPage(model , errMessage , kmcVO) ;
}
}
MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
mjPhoneMemberVO.setUserId(plusInfo);
mjPhoneMemberVO.setPhmType("01");
mjPhoneMemberVO.setPhmAuthType("01");
mjPhoneMemberVO.setFrstRegisterId(plusInfo);
mjPhoneMemberVO.setLastUpdusrId(plusInfo);
mjPhoneMemberVO.setPhoneNumber(phoneNo);
mjPhoneMemberVO.setUserName(name);
mjPhoneMemberVO.setAuthYn("Y");
mjonMsgService.insertSendNumber(mjPhoneMemberVO);
model.addAttribute("kmcVO", kmcVO);
return "web/user/mberSecessionKmcReqPage";
}
// 파라미터 유효성 검증 --------------------------------------------
public Boolean paramChk(String patn, String param){
Pattern pattern = Pattern.compile(patn);
Matcher matcher = pattern.matcher(param);
boolean b = matcher.matches();
return b;
}
// 파라미터 유효성 검증 --------------------------------------------
public String returnPage(ModelMap model , String errMessage , KmcVO kmcVO){
kmcVO.setErrMessage(errMessage);
model.addAttribute("kmcVO", kmcVO);
return "web/cop/nicepay/payRequestAjax";
}
public Boolean findIdKmcCheck(String DI, String Name, String PhoneNo) throws Exception {
UserManageVO userManageVO = new UserManageVO();
userManageVO.setEmplyrNm(Name);
userManageVO.setMoblphonNo(PhoneNo);
userManageVO.setMblDn(DI);
List usedNmList = userManageService.selectUserIdAjax(userManageVO);
boolean TorF = usedNmList.size() > 0 ? true : false;
return TorF;
}
/**
* KISA 신고 목록
*/
@RequestMapping(value="/web/user/kisaReport.do")
public String kisaReport(
@ModelAttribute KisaVO kisaVO
, HttpServletRequest request
, ModelMap model) throws Exception {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO == null) {
return "redirect:/web/user/login/login.do";
}
model.addAttribute("loginVO", loginVO);
kisaVO.setMberId(loginVO.getId());
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(loginVO.getId());
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
model.addAttribute("userInfo", userInfo);
model.addAttribute("pageTab", "kisaReport");
// List Start
if(kisaVO.getPageUnit() != 10) {
kisaVO.setPageUnit(kisaVO.getPageUnit());
}
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(kisaVO.getPageIndex());
paginationInfo.setRecordCountPerPage(kisaVO.getPageUnit());
paginationInfo.setPageSize(kisaVO.getPageSize());
kisaVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
kisaVO.setLastIndex(paginationInfo.getLastRecordIndex());
kisaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(kisaVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
kisaVO.setSearchSortCnd("kisaId");
kisaVO.setSearchSortOrd("desc");
}
List kisaList = kisaService.selectKisaList(kisaVO);
int totCnt = 0;
if(kisaList.size() > 0) {
totCnt = kisaList.get(0).getTotcnt();
}
model.addAttribute("kisaList", kisaList);
paginationInfo.setTotalRecordCount(totCnt);
model.addAttribute("paginationInfo", paginationInfo);
return "web/user/kisaReport";
}
/**
* KISA 신고 상세
*/
@RequestMapping(value="/web/user/kisaReportDetailAjax.do")
public ModelAndView kisaReportDetailAjax(@ModelAttribute KisaVO kisaVO,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
List fileList = null;
try {
kisaVO = kisaService.selectKisaDetail(kisaVO);
if(kisaVO.getAtchFileId() !=null) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(kisaVO.getAtchFileId());
fileList = fileService.selectFileInfs(fileVO);
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("result", kisaVO);
model.addAttribute("fileList", fileList);
return modelAndView;
}
/**
* KISA 서명자료(첨부파일) 목록
*/
@RequestMapping(value="/web/user/kisaSignFileListAjax.do")
public ModelAndView kisaSignFileListAjax(@ModelAttribute KisaVO kisaVO,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
List fileList = null;
try {
kisaVO = kisaService.selectKisaDetail(kisaVO);
if(kisaVO.getAtchFileId2() !=null) {
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(kisaVO.getAtchFileId2());
fileList = fileService.selectFileInfs(fileVO);
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
model.addAttribute("fileList", fileList);
return modelAndView;
}
/**
* KISA 서명 파일업로드
*/
@RequestMapping(value="/web/user/kisaSignFileSaveAjax.do")
public ModelAndView kisaSignFileSaveAjax(final MultipartHttpServletRequest multiRequest
, KisaVO kisaVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
kisaVO = kisaService.selectKisaDetail(kisaVO);
String atchFileId2 = kisaVO.getAtchFileId2();
final Map files = multiRequest.getFileMap();
if (!files.isEmpty()) {
if ("".equals(atchFileId2)) {
List result = fileUtil.parseFileInf(files, "KISA_SIGN_", 0, atchFileId2, "", "");
atchFileId2 = fileMngService.insertFileInfs(result);
kisaVO.setAtchFileId2(atchFileId2);
} else {
FileVO fvo = new FileVO();
fvo.setAtchFileId(atchFileId2);
int cnt = fileMngService.getMaxFileSN(fvo);
List result = fileUtil.parseFileInf(files, "KISA_", cnt, atchFileId2, "", "");
fileMngService.updateFileInfs(result);
}
}
kisaVO.setKisaReceptState("4"); // KISA 소명자료 제출 완료
kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close
kisaService.updateKisa(kisaVO);
modelAndView.addObject("result", "success");
return modelAndView;
}
/**
* KISA 서명하기
*/
@RequestMapping(value="/web/user/kisaSignSaveAjax.do")
public ModelAndView kisaSignSaveAjax(final MultipartHttpServletRequest multiRequest
, KisaVO kisaVO
, RedirectAttributes redirectAttributes
, HttpServletRequest request) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
// 날짜
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
// 서명정보
String kisaSignNm = "";
String kisaSignPhoneNo = "";
String kisaSignPnttm = "";
try {
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
if(loginVO != null) {
// 서명정보
kisaSignNm = loginVO.getName();
kisaSignPhoneNo = loginVO.getMoblphonNo();
kisaSignPnttm = sdf1.format(now);
for(String kisaId : kisaVO.getKisaIds()) {
kisaVO.setKisaId(kisaId);
kisaVO = kisaService.selectKisaDetail(kisaVO);
// 업데이트
kisaVO.setKisaSignNm(kisaSignNm);
kisaVO.setKisaSignPhoneNo(kisaSignPhoneNo);
kisaVO.setKisaSignPnttm(kisaSignPnttm);
if (kisaVO.getKisaReportState().equals("1")) {
// KISA 서명 요청
kisaVO.setKisaReceptState("2"); // KISA 서명 서명 완료
kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close
}
else if (kisaVO.getKisaReportState().equals("3")) {
// 당사경고 서명 요청
kisaVO.setKisaReceptState("2"); // KISA 서명 서명 완료
kisaVO.setKisaPopupYn("N"); // 매인페이지 Popup Close
}
else {
// KISA 소명자료 요청
kisaVO.setKisaReceptState("3"); // KISA 소명자료 미제출
}
kisaService.updateKisa(kisaVO);
}
}
else {
isSuccess = false;
msg = "로그인후 이용해주세요.";
}
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
@RequestMapping(value = "/web/user/selectRejectAjax.do")
public ModelAndView selectRejectAjax(@ModelAttribute("mjPhoneMemberVO") MjPhoneMemberVO mjPhoneMemberVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
try {
MjPhoneMemberVO rejectInfo = mjonMsgService.selectSendPhoneNumberByPhmId(mjPhoneMemberVO.getPhmId());
modelAndView.addObject("rejectInfo", rejectInfo);
modelAndView.addObject("result", "success");
}catch (Exception e) {
modelAndView.addObject("message", "다시 시도 부탁드립니다.");
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
}