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("01084329333"); 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"; } } }