package itn.let.utl.user.service;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
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.msgdata.service.MjonMsgReturnVO;
import itn.let.uat.uia.web.SendLogVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.UserManageVO;
/**
*
* 관리자 로그인시 문자인증 기능에 대한 Util 클래스
* @author 사업기술본부 이준호(ITN)
* @since 2022.08.24
* @version 1.0
* @see
*
*
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2022.08.24 이준호 최초 생성 *
*
*
*/
@Service("MjonSmsCertSendUtil")
public class MjonSmsCertSendUtil {
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
/**
* @Method Name : mjonSmsCertSend
* @작성일 : 2022. 8. 24.
* @작성자 : 이준호
* @Method 설명 : 미허용 IP 관리자 페이지 로그인 시 SMS인증번호 발송
*/
public void mjonSmsCertSend(String callTo) throws Exception{
MjonMsgVO mjonMsgVO = new MjonMsgVO();
// 인증번호 내용
String contents = "관리자 미허용 IP 문자인증 로그인 인증번호 문자입니다. 인증번호는 : %code% 입니다.";
String code = "";
long seed = System.currentTimeMillis();
Random random = new Random(seed);
// code = Integer.toString(random.nextInt(4));
StringBuffer randomCode = new StringBuffer();
for (int i = 0; i < 6; i++) {
code = randomCode.append(Integer.toString(random.nextInt(10))).toString();
}
contents = contents.replace("%code%", code);
mjonMsgVO.setSmsTxt(contents);
mjonMsgVO.setReserveYn("N");
// 시스템 문자발송 번호
mjonMsgVO.setCallFrom("15518011");
mjonMsgVO.setCallTo(callTo);
try {
mjonMsgVO.setUserId("system");
String msgType = "4";
// 전송사 전송 배분
MjonMsgVO pramVO = new MjonMsgVO();
List sendRateList = mjonMsgService.selectTodayAgentSendCntList(pramVO); // 전송사 전송 배분률 및 현재 전송건수
// 조회
for (MjonMsgVO tmpVO : sendRateList) {
float cnt = Float.parseFloat(tmpVO.getMsgGroupCnt());
float totCnt = tmpVO.getTotCnt();
tmpVO.setSendRateInfo(Float.parseFloat(tmpVO.getSendRate()) - (cnt / totCnt * 100)); // 배분률 - 현재전송 비율
}
String sendAgent = sendRateList.get(0).getAgentCode();
float maxRate = sendRateList.get(0).getSendRateInfo();
for (MjonMsgVO tmpVO : sendRateList) { // 배분률 대비 현재전송 비율이 가장 적은거 찾기
if (maxRate < tmpVO.getSendRateInfo()) {
maxRate = tmpVO.getSendRateInfo();
sendAgent = tmpVO.getAgentCode();
}
}
mjonMsgVO.setMsgType("4");
mjonMsgVO.setMsgDiv("S"); // 단문
// 문자타입별 대표전송사 정보
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()); //한건 금액
MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO);
// 시스템 발송 로그
SendLogVO sendLogVO = new SendLogVO();
// SendType 1:문자로 발송 2:이메일로 발송
sendLogVO.setSendId(returnVO.getMsgGroupId());
sendLogVO.setSendType("1");
sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom());
sendLogVO.setReceive(mjonMsgVO.getCallTo());
sendLogVO.setCheckNo(code);
sendLogVO.setContents(contents);
mjonMsgDataService.insertSysMsgLog(sendLogVO);
} catch (Exception e) {
System.out.println("!!!!!!!!!!!!!MjonSmsCertSendUtill - ERROR!!!!!!!!!!!!!!!!");
}
}
/**
* @Method Name : mjonSmsCertCheck
* @작성일 : 2022. 8. 25.
* @작성자 : 이준호
* @Method 설명 : 미허용 IP 관리자 페이지 로그인 시 SMS인증번호 체크
*/
public String mjonSmsCertCheck(String callTo, String checkNo, String mberId) throws Exception{
try {
UserManageVO userManageVO = new UserManageVO();
// userManageVO set
userManageVO.setCheckNo(checkNo);
userManageVO.setMoblphonNo(callTo);
userManageVO.setEmplyrId(mberId);
// SendLogVO set
SendLogVO sendLogVO = new SendLogVO();
sendLogVO.setReceive(userManageVO.getMoblphonNo());
// 인증번호 가져오기
sendLogVO = mjonMsgDataService.selectSysMsgLog(sendLogVO);
if (sendLogVO == null) {
return "empty";
} else {
// 시간 비교
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date nowdate = new Date();
Date compareDate = format.parse(sendLogVO.getFrstSendPnttm());
Calendar cal = Calendar.getInstance();
cal.setTime(compareDate);
// 5분 추가
cal.add(Calendar.MINUTE, +5);
compareDate = cal.getTime();
// 인증번호을 발송한지 5분 이내일때
if (compareDate.after(nowdate)) {
UserManageVO checkUser = userManageService.selectAdminUserSmsCertCheck(userManageVO);
if (checkUser != null) {
return "success";
} else {
return "checkNoFail";
}
} else {
return "timeOut";
}
}
} catch (Exception e) {
return "exception";
}
}
}