From 3e2e039c807169ec9bdd6bf4e3b29c10bc0a8e8d Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Mon, 18 Nov 2024 19:27:19 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=A4=EC=A4=91=20=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?=ED=9C=B4=EB=8C=80=ED=8F=B0=20=EB=B2=88=ED=98=B8=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../msgdata/service/MjonMsgDataService.java | 8 + .../msgdata/service/impl/MjonMsgDataDAO.java | 18 + .../service/impl/MjonMsgDataServiceImpl.java | 4975 ++++++++--------- .../let/uat/uia/service/MberCertPhoneVO.java | 65 + .../uss/umt/web/EgovUserManageController.java | 52 + .../sqlmap/let/msg/MjonMsgData_SQL_mysql.xml | 56 +- .../cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp | 164 +- .../jsp/web/login/EgovLoginGnrlUsr.jsp | 10 +- 8 files changed, 2848 insertions(+), 2500 deletions(-) create mode 100644 src/main/java/itn/let/uat/uia/service/MberCertPhoneVO.java diff --git a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java index 39af3de7..80c55e34 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java +++ b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java @@ -3,9 +3,11 @@ package itn.let.mjo.msgdata.service; import java.util.List; import itn.let.lett.service.LetterVO; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.sym.site.service.JoinSettingVO; +import itn.let.uat.uia.service.MberCertPhoneVO; import itn.let.uat.uia.web.SendLogVO; import itn.let.uss.umt.service.MberManageVO; @@ -176,6 +178,12 @@ public interface MjonMsgDataService { //팩스 거래명세서 합산 정보 public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception; + + public List selectMberCertPhoneList(String userId); + + public StatusResponse insertMberCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO); + + public StatusResponse deleteCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO); } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index 3701a684..58a9d84f 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -6,10 +6,12 @@ import org.springframework.stereotype.Repository; import egovframework.rte.psl.dataaccess.EgovAbstractDAO; import itn.let.lett.service.LetterVO; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataVO; import itn.let.sym.site.service.JoinSettingVO; +import itn.let.uat.uia.service.MberCertPhoneVO; import itn.let.uat.uia.web.SendLogVO; import itn.let.uss.umt.service.MberManageVO; @@ -365,5 +367,21 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception{ return (List) list("mjonMsgDAO.selectPayUserSumFaxList",mjonMsgVO); } + + + public List selectMberCertPhoneList(String userId) { + + return (List) list("mjonMsgDataDAO.selectMberCertPhoneList", userId); + } + + + public void insertMberCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) { + insert("mjonMsgDataDAO.insertMberCertPhoneInfo", mberCertPhoneVO); + } + + + public void deleteCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) { + update("mjonMsgDataDAO.deleteCertPhoneInfo", mberCertPhoneVO); + } } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index cd307bfe..2a28d396 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -1,6 +1,7 @@ package itn.let.mjo.msgdata.service.impl; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -8,6 +9,7 @@ import java.util.List; import javax.annotation.Resource; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; @@ -16,6 +18,7 @@ import egovframework.rte.psl.dataaccess.util.EgovMap; import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.StringUtil; import itn.let.lett.service.LetterVO; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.event.service.MjonEventService; import itn.let.mjo.event.service.MjonEventVO; @@ -37,1262 +40,1251 @@ import itn.let.mjo.pay.service.MjonPayVO; import itn.let.mjo.pay.service.impl.MjonPayDAO; import itn.let.sym.site.service.JoinSettingVO; import itn.let.sym.site.service.impl.SiteManagerDAO; +import itn.let.uat.uia.service.MberCertPhoneVO; import itn.let.uat.uia.web.SendLogVO; import itn.let.uss.umt.service.MberManageVO; @Service("MjonMsgDataService") -public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements MjonMsgDataService{ +public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements MjonMsgDataService { - @Resource(name="MjonMsgDataDAO") + @Resource(name = "MjonMsgDataDAO") private MjonMsgDataDAO mjonMsgDataDAO; - - @Resource(name="mjonMsgDAO") + + @Resource(name = "mjonMsgDAO") private MjonMsgDAO mjonMsgDAO; - - @Resource(name="mjonPayDAO") + + @Resource(name = "mjonPayDAO") private MjonPayDAO mjonPayDAO; - - @Resource(name="mjonMsgAgentStsDAO") + + @Resource(name = "mjonMsgAgentStsDAO") private MjonMsgAgentStsDAO mjonMsgAgentStsDAO; - - @Resource(name="siteManagerDAO") + + @Resource(name = "siteManagerDAO") SiteManagerDAO siteManagerDAO; - - @Resource(name="MsgHolidayDAO") + + @Resource(name = "MsgHolidayDAO") private MsgHolidayDAO msgHolidayDAO; - + @Resource(name = "egovMjonMsgIdGnrService") - private EgovIdGnrService idgenMsgId; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - + private EgovIdGnrService idgenMsgId; + + @Resource(name = "egovMjonMsgGroupIdGnrService") + private EgovIdGnrService idgenMjonMsgGroupId; + @Resource(name = "egovPhoneMemberIdGnrService") - private EgovIdGnrService idgenPhoneMemberId; - + private EgovIdGnrService idgenPhoneMemberId; + @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - + private EgovIdGnrService idgenMjonCashId; + @Resource(name = "egovSystemSendIdGnrService") - private EgovIdGnrService idgenSystemSendId; - + private EgovIdGnrService idgenSystemSendId; + @Resource(name = "MjonMsgDataService") private MjonMsgDataService mjonMsgDataService; - + @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - + private MjonPayService mjonPayService; + @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - + private MjonEventService mjonEventService; + @Resource(name = "mjonMsgAgentStsService") private MjonMsgAgentStsService mjonMsgAgentStsService; - - - public List selectCcmCmmCodeList() throws Exception{ - + + public List selectCcmCmmCodeList() throws Exception { + return mjonMsgDataDAO.selectCcmCmmCodeList(); } - - public MjonMsgReturnVO insertMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception{ - + + public MjonMsgReturnVO insertMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception { + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - + try { - - // 문자 전송 그룹아이디 생성 - //mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - // 문자 아이디 생성 - //mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - // 장문 전송 - String contSeq = ""; - - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - // 최종 입력 수 저장 변수 - int resultCnt = 0; - int limitCnt = 1000; - int blockCnt = 0; - - // 총 보유 금액과 전송 합계 비교 - - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 - - return 0 ; - }*/ - - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - - - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - /*if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - - Date now = new Date(); - - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - mjonMsgVO.setReqDate(sdFormat.format(now)); - - }*/ - - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) - String befCash = mjonMsgVO.getBefCash(); - - //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 - if("".equals(befCash) || befCash == null) { - befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); - } - - mjonMsgVO.setBefCash(befCash); - // 문자 전송 그룹 테이블에 정보 입력 - //mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - - //수신거부 목록 불러오기 - List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); - - List dupliBlockList = MJUtil.getDuplicateList(userBlockList); - int usrBlockCnt = dupliBlockList.size(); - - //회원 전용 전송사 정보 불러오기 - MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); - String hotlineAgentCode = userInfo.getHotlineAgentCode(); - - //야간스미싱 알림여부 정보(관리자 알림관리 상태 정보를 모두 불러옴) 불러오기 20240722 우영두 추가 - JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 - boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다. - - //스팸, 스미싱 상태인 경우에만 true 처리 - //야간스미싱알리 여부가 활성화 인경우 무조건 문자를 즉시 보내도록 한다. - //스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. - if(holiSmishingNoti.equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - spamSmishingPassStatus = smishingAlarmPassSts; - }else { - - spamSmishingPassStatus = true; - - } - - //전용 전송사가 지정되어 있으면 실행 - if(!hotlineAgentCode.equals("00")) { - - MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); - mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); - - //문자 타입 셋팅 - if(msgType.equals("6")) { - int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - if(fCnt > 0) { - - mjonMsgAgentStsVO.setMsgType("P"); - - }else { - mjonMsgAgentStsVO.setMsgType("L"); - } - - }else { - mjonMsgAgentStsVO.setMsgType("S"); - } - - List hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); - - String mberAgentConde = ""; - String mberSendRate = ""; - String mberRepAgent = ""; - - for(MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { - - mberAgentConde = tmp.getAgentCode(); - mberSendRate = tmp.getSendRate(); - mberRepAgent = tmp.getRepAgent(); - String useYn = tmp.getUseYn(); - - if(userInfo.getBlineCode().equals("N")) { - //회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. - if(mberSendRate.equals("0") || useYn.equals("N")) { - - hotlineAgentCode = mberRepAgent; - - } - } - - } - - } - - - /** - * Agent 추가시 셋팅하기 - * Agent 발송 비율 불러오기 - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * */ - - int iheartCnt = 0; //아이하트 전송갯수 - int hncCnt = 0; //현대퓨처넷 전송갯수 - int imoCnt = 0; //아이엠오 전송갯수 - int bizCnt = 0; //비즈뿌리오 전송갯수 - int jjCnt = 0; //제이제이 전송갯수 - int ivtCnt = 0; //인비토 전송갯수 - - // 전송사별 발송 리스트 조회 - List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); - - if(callToCnt >= 10) { - // 전송사별 배분률 조회 - int sendRateSize = sendRateList.size(); - - /** - * Agent 추가시 셋팅하기 + // 문자 전송 그룹아이디 생성 + // mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + + // 문자 아이디 생성 + // mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); + + String msgType = mjonMsgVO.getMsgType(); + String agentCode = mjonMsgVO.getAgentCode(); + // 장문 전송 + String contSeq = ""; + + // float myPrice = 10000; + // float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + // 최종 입력 수 저장 변수 + int resultCnt = 0; + int limitCnt = 1000; + int blockCnt = 0; + + // 총 보유 금액과 전송 합계 비교 + + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 * - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * */ - - for(int i=0; i< sendRateSize; i++) { - - String sndAgentCode = sendRateList.get(i).getAgentCode(); - - if(sndAgentCode.equals("01")) {//아이하트 전송비율 - - iheartCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("02")) {//현대퓨처넷 전송비율 - - hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("03")) {//아이엠오 전송비율 - - imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("04")) {//비즈뿌리오 전송비율 - - bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("05")) {//제이제이 전송비율 - - jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("07")) {//인비토 전송비율 - - ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - } - - } - } - - /** - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 하도록 한다. - * */ - - if(callToCnt >= 10000) { - - limitCnt = 1000; - - } - - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); - - int cnt = 1; - int totCnt = 1; - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 - String delayTime ="";//30분 지연시간 - String spamStatus = mjonMsgVO.getSpamStatus();//스팸 문구 유무 - String smishingYn = mjonMsgVO.getSmishingYn();//스미싱 의심 유무 - String delayYn = "N"; //문자발송 30분 지연 처리 유무 - - if(spamStatus == null || spamStatus.equals("")) { - - spamStatus = "N"; - - } - - if(smishingYn == null || smishingYn.equals("")) { - - smishingYn = "N"; - - } - - //야간 스미싱 알림여부가 활성화 이고 예외시간에 포함되는 경우 스팸, 스미싱, 딜레이 값을 모두 N 으로 처리 - if(spamSmishingPassStatus) { - - spamStatus = "N"; - smishingYn = "N"; - delayYn = "N"; - - } - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - if(spamStatus.equals("Y") || smishingYn.equals("Y")) { - - mjonMsgVO.setDelayYn("Y");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 넣어줘야한다. - - }else { - - mjonMsgVO.setDelayYn("N");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임 - } - - }else {//즉시발송의 경우 현재 시간으로 입력해 준다. - - Date now = new Date(); - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 시킨다. - - String nowDate = transFormat.format(now); - Date toDate = transFormat.parse(nowDate); - System.out.println("++++++++++++++++++++ origin reqDate ::: "+toDate); - cal.setTime(toDate); - - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); - mjonMsgVO.setReqDate(delayTime); - System.out.println("++++++++++++++++++++ delay reqDate ::: "+mjonMsgVO.getReqDate()); - delayYn = "Y"; - mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 코드 셋팅 - - }else {//정상적인 문자인 경우 즉시발송 처리해준다. - - mjonMsgVO.setReqDate(transFormat.format(now)); - mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 디폴트 값 셋팅(N) - - } - - } - - - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //Controller에서 전달 받은 분할 시간 정보 리스트 - List dividDayList = mjonMsgVO.getDividDay(); - - String frstDelayTime = mjonMsgVO.getReqDate(); - //문자발송 리스트 생성 시작 - for(int i = 0; i < callToCnt; i++) { - - Boolean blockSts = false; - for(int j = 0; j < usrBlockCnt; j++) { + * return 0 ; } + */ - if(phoneList[i].equals(dupliBlockList.get(j).toString())) { - - blockCnt++; //수신 차단 카운드를 해준다. - blockSts = true; - - } - + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 + + mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + /* + * if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + * + * Date now = new Date(); + * + * SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + * + * mjonMsgVO.setReqDate(sdFormat.format(now)); + * + * } + */ + + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + String befCash = mjonMsgVO.getBefCash(); + + // VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 + if ("".equals(befCash) || befCash == null) { + befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); } - - if(!blockSts) { //수신거부가 아니면 추가 - - MjonMsgVO tempVO = new MjonMsgVO(); - + + mjonMsgVO.setBefCash(befCash); + // 문자 전송 그룹 테이블에 정보 입력 + // mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + + // 수신거부 목록 불러오기 + List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); + + List dupliBlockList = MJUtil.getDuplicateList(userBlockList); + int usrBlockCnt = dupliBlockList.size(); + + // 회원 전용 전송사 정보 불러오기 + MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); + String hotlineAgentCode = userInfo.getHotlineAgentCode(); + + // 야간스미싱 알림여부 정보(관리자 알림관리 상태 정보를 모두 불러옴) 불러오기 20240722 우영두 추가 + JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + + // 스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 + boolean spamSmishingPassStatus = false; // 야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다. + + // 스팸, 스미싱 상태인 경우에만 true 처리 + // 야간스미싱알리 여부가 활성화 인경우 무조건 문자를 즉시 보내도록 한다. + // 스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. + if (holiSmishingNoti.equals("Y")) { + + MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); + + msgAlarmSetVO.setUseYn("Y"); + msgAlarmSetVO.setFirstIndex(0); + + List resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); + + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + + MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); + msgHolidayVO.setFirstIndex(0); + msgHolidayVO.setRecordCountPerPage(100); + msgHolidayVO.setSearchHoliYear(Integer.toString(year)); + + List resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + + MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); + + boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, + resultHolidayList); + + spamSmishingPassStatus = smishingAlarmPassSts; + } else { + + spamSmishingPassStatus = true; + + } + + // 전용 전송사가 지정되어 있으면 실행 + if (!hotlineAgentCode.equals("00")) { + + MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); + mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); + + // 문자 타입 셋팅 + if (msgType.equals("6")) { + int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + if (fCnt > 0) { + + mjonMsgAgentStsVO.setMsgType("P"); + + } else { + mjonMsgAgentStsVO.setMsgType("L"); + } + + } else { + mjonMsgAgentStsVO.setMsgType("S"); + } + + List hotlineMsgAgentList = mjonMsgAgentStsDAO + .selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); + + String mberAgentConde = ""; + String mberSendRate = ""; + String mberRepAgent = ""; + + for (MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { + + mberAgentConde = tmp.getAgentCode(); + mberSendRate = tmp.getSendRate(); + mberRepAgent = tmp.getRepAgent(); + String useYn = tmp.getUseYn(); + + if (userInfo.getBlineCode().equals("N")) { + // 회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. + if (mberSendRate.equals("0") || useYn.equals("N")) { + + hotlineAgentCode = mberRepAgent; + + } + } + + } + + } + + /** + * Agent 추가시 셋팅하기 Agent 발송 비율 불러오기 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 + * : 비즈뿌리오(04) 추가 23.04.10 : 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 + */ + + int iheartCnt = 0; // 아이하트 전송갯수 + int hncCnt = 0; // 현대퓨처넷 전송갯수 + int imoCnt = 0; // 아이엠오 전송갯수 + int bizCnt = 0; // 비즈뿌리오 전송갯수 + int jjCnt = 0; // 제이제이 전송갯수 + int ivtCnt = 0; // 인비토 전송갯수 + + // 전송사별 발송 리스트 조회 + List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); + + if (callToCnt >= 10) { + // 전송사별 배분률 조회 + int sendRateSize = sendRateList.size(); + /** * Agent 추가시 셋팅하기 * - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * 23.05.09 : 회원 전용 전송사 정보가 있으면 모든 문자를 전용 전송사로 발송처리함. - * */ + * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 : 비즈뿌리오(04) 추가 23.04.10 : + * 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 + */ + + for (int i = 0; i < sendRateSize; i++) { + + String sndAgentCode = sendRateList.get(i).getAgentCode(); + + if (sndAgentCode.equals("01")) {// 아이하트 전송비율 + + iheartCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("02")) {// 현대퓨처넷 전송비율 + + hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("03")) {// 아이엠오 전송비율 + + imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("04")) {// 비즈뿌리오 전송비율 + + bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("05")) {// 제이제이 전송비율 + + jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("07")) {// 인비토 전송비율 + + ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - if(hotlineAgentCode.equals("00")) {//전용 전송사가 사용 안함인 경우 분배 및 대표 전송사로 설정 - - if(iheartCnt > 0) { - agentCode = "01"; - tempVO.setAgentCode(agentCode); - iheartCnt--; - }else if(hncCnt > 0) { - agentCode = "02"; - tempVO.setAgentCode(agentCode); - hncCnt--; - }else if(imoCnt > 0) { - agentCode = "03"; - tempVO.setAgentCode(agentCode); - imoCnt--; - }else if(bizCnt > 0) { - agentCode = "04"; - tempVO.setAgentCode(agentCode); - bizCnt--; - }else if(jjCnt > 0) { - agentCode = "05"; - tempVO.setAgentCode(agentCode); - jjCnt--; - }else if(ivtCnt > 0) { - agentCode = "07"; - tempVO.setAgentCode(agentCode); - ivtCnt--; - }else {//전송사 Agent 대표 전송사로 지정한다. - - agentCode = sendRateList.get(0).getRepAgent(); - tempVO.setAgentCode(agentCode); } - - }else {//전용 전송사가 지정되어 있는 경우 전용 전송사로 지정 - - agentCode = hotlineAgentCode; - tempVO.setAgentCode(hotlineAgentCode); + } - //Agent 셋팅 끝 - - tempVO.setMsgId(idgenMsgId.getNextStringId()); - tempVO.setUserId(mjonMsgVO.getUserId()); - tempVO.setCallTo(phoneList[i]); - tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - tempVO.setMsgType(mjonMsgVO.getMsgType()); - tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - - //아이엠오 전송사 문자 타입 설정해 주기 - if(agentCode.equals("03")) { - - // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 - if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 - - mjonMsgVO.setNeoType("2"); - - }else{ // 그림포함 문자인경우 - - mjonMsgVO.setNeoType("4"); - - } - - } - - //문자내용 내용 - 치환 처리 - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - //일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) { - if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - } - } - - if (smsTxt.indexOf("[*1*]") > -1) { - if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - } + } + + /** + * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 + * 하도록 한다. + */ + + if (callToCnt >= 10000) { + + limitCnt = 1000; + + } + + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); + + int cnt = 1; + int totCnt = 1; + + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); + + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + + int turmMin = 0; + int totalCallCnt = 0; + int divideCnt = 0; + int count = 1; // 분할 카운트 + String delayTime = "";// 30분 지연시간 + String spamStatus = mjonMsgVO.getSpamStatus();// 스팸 문구 유무 + String smishingYn = mjonMsgVO.getSmishingYn();// 스미싱 의심 유무 + String delayYn = "N"; // 문자발송 30분 지연 처리 유무 + + if (spamStatus == null || spamStatus.equals("")) { + + spamStatus = "N"; + + } + + if (smishingYn == null || smishingYn.equals("")) { + + smishingYn = "N"; + + } + + // 야간 스미싱 알림여부가 활성화 이고 예외시간에 포함되는 경우 스팸, 스미싱, 딜레이 값을 모두 N 으로 처리 + if (spamSmishingPassStatus) { + + spamStatus = "N"; + smishingYn = "N"; + delayYn = "N"; + + } + + if (!mjonMsgVO.getReserveYn().equals("N")) {// 예약문자인 경우 시간 셋팅 + + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 + + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); + + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + + if (spamStatus.equals("Y") || smishingYn.equals("Y")) { + + mjonMsgVO.setDelayYn("Y");// 일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 + // 넣어줘야한다. + + } else { + + mjonMsgVO.setDelayYn("N");// 일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임 } - - if (smsTxt.indexOf("[*2*]") > -1) { - if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - } + + } else {// 즉시발송의 경우 현재 시간으로 입력해 준다. + + Date now = new Date(); + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 + // 시킨다. + + String nowDate = transFormat.format(now); + Date toDate = transFormat.parse(nowDate); + System.out.println("++++++++++++++++++++ origin reqDate ::: " + toDate); + cal.setTime(toDate); + + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); + mjonMsgVO.setReqDate(delayTime); + System.out.println("++++++++++++++++++++ delay reqDate ::: " + mjonMsgVO.getReqDate()); + delayYn = "Y"; + mjonMsgVO.setDelayYn(delayYn);// 문자 발송 30분 지연 코드 셋팅 + + } else {// 정상적인 문자인 경우 즉시발송 처리해준다. + + mjonMsgVO.setReqDate(transFormat.format(now)); + mjonMsgVO.setDelayYn(delayYn);// 문자 발송 30분 지연 디폴트 값 셋팅(N) + } - - if (smsTxt.indexOf("[*3*]") > -1) { - if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); + + } + + String[] nameList = mjonMsgVO.getNameList(); // 치환 이름 리스트 + String[] phoneList = mjonMsgVO.getCallToList(); // 받는사람 연락처 리스트 + String[] rep1 = mjonMsgVO.getRep1List(); // 치환 문자1 리스트 + String[] rep2 = mjonMsgVO.getRep2List(); // 치환 문자2 리스트 + String[] rep3 = mjonMsgVO.getRep3List(); // 치환 문자3 리스트 + String[] rep4 = mjonMsgVO.getRep4List(); // 치환 문자4 리스트 + + // Controller에서 전달 받은 분할 시간 정보 리스트 + List dividDayList = mjonMsgVO.getDividDay(); + + String frstDelayTime = mjonMsgVO.getReqDate(); + // 문자발송 리스트 생성 시작 + for (int i = 0; i < callToCnt; i++) { + + Boolean blockSts = false; + for (int j = 0; j < usrBlockCnt; j++) { + + if (phoneList[i].equals(dupliBlockList.get(j).toString())) { + + blockCnt++; // 수신 차단 카운드를 해준다. + blockSts = true; + } + } - - if (smsTxt.indexOf("[*4*]") > -1) { - if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - } - } - - tempVO.setSmsTxt(smsTxt); - - //즉시 / 예약 전송 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 준다. - - tempVO.setReqDate(mjonMsgVO.getReqDate());//상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 입력함. - - - }else {//일반 문자인 경우 현재시간을 입력해 준다. - - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - tempVO.setReqDate(sdFormat.format(now)); - - } - - }else { // 예약 발송의 경우 예약 시간을 입력 - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - //스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. - //20230630 우영두 추가 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) { - - Date delayDate = transFormat.parse(dividDayList.get(i)); - - cal.setTime(delayDate); - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); - - tempVO.setReqDate(delayTime); //분할 문자 예약 시간 입력해주기 - - }else { - - tempVO.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기 - - } - - - }else {//일반 예약 발송의 경우 - - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. - - Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); - - cal.setTime(delayDate); - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); - - tempVO.setReqDate(delayTime); - - }else { - - tempVO.setReqDate(mjonMsgVO.getReqDate()); - - } - - } - - //딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. - //분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. - //mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. - if(i==0) { - frstDelayTime = tempVO.getReqDate(); - } - } - - if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 - + + if (!blockSts) { // 수신거부가 아니면 추가 + + MjonMsgVO tempVO = new MjonMsgVO(); + /** - * 장문 / 그림문자 일 경우 제목 처리 - * 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 - * 내용 텍스트가 없는 경우는 어쩔수 없는 것으로 간주하여 Null로 처리한다. + * Agent 추가시 셋팅하기 * - * */ - String contents = tempVO.getSmsTxt(); //문자 내용 - if(StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 입력이 없는 경우 - - if(StringUtil.isNotEmpty(contents) && contents != null) {//문자내용이 있는 경우 처리 - - String[] split = contents.split("\n"); - - if(split.length > 0) { - - String subject = ""; - String msgKind = mjonMsgVO.getMsgKind();//문자 타입(일반, 광고, 선거문자) - - //선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 - /*if(subject.equals("(선거운동정보)")) { - subject = split[1].trim(); - }*/ - - if(msgKind.equals("C")) { - if(split.length > 1) { - subject = split[1].trim(); - }else { - subject = split[0].substring(0,20); - } - }else { - subject = split[0].trim(); - } + * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 : 비즈뿌리오(04) 추가 23.04.10 : + * 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 23.05.09 : 회원 전용 전송사 정보가 있으면 모든 문자를 전용 + * 전송사로 발송처리함. + */ - //제목 글자수 20글자로 제한. - /*if(subject.length() > 20) { - subject = subject.substring(0,20); - } - tempVO.setMmsSubject(subject); - mjonMsgVO.setMmsSubject(subject); - */ - - } - + if (hotlineAgentCode.equals("00")) {// 전용 전송사가 사용 안함인 경우 분배 및 대표 전송사로 설정 + + if (iheartCnt > 0) { + agentCode = "01"; + tempVO.setAgentCode(agentCode); + iheartCnt--; + } else if (hncCnt > 0) { + agentCode = "02"; + tempVO.setAgentCode(agentCode); + hncCnt--; + } else if (imoCnt > 0) { + agentCode = "03"; + tempVO.setAgentCode(agentCode); + imoCnt--; + } else if (bizCnt > 0) { + agentCode = "04"; + tempVO.setAgentCode(agentCode); + bizCnt--; + } else if (jjCnt > 0) { + agentCode = "05"; + tempVO.setAgentCode(agentCode); + jjCnt--; + } else if (ivtCnt > 0) { + agentCode = "07"; + tempVO.setAgentCode(agentCode); + ivtCnt--; + } else {// 전송사 Agent 대표 전송사로 지정한다. + + agentCode = sendRateList.get(0).getRepAgent(); + tempVO.setAgentCode(agentCode); } - - }else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅 - tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); + + } else {// 전용 전송사가 지정되어 있는 경우 전용 전송사로 지정 + + agentCode = hotlineAgentCode; + tempVO.setAgentCode(hotlineAgentCode); } - - tempVO.setFileCnt(mjonMsgVO.getFileCnt()); - tempVO.setFileName1(mjonMsgVO.getFileName1()); - tempVO.setFileName2(mjonMsgVO.getFileName2()); - tempVO.setFileName3(mjonMsgVO.getFileName3()); - tempVO.setNeoType(mjonMsgVO.getNeoType()); - tempVO.setContSeq(mjonMsgVO.getContSeq()); - - } - - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode.equals("01") && msgType.equals("6")) { - - // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - - //이미지가 있는경우 file_type, file_Cnt 값 셋팅 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - String contents = mjonMsgVO.getSmsTxt(); - - if(fileCnt > 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { - fileCnt = fileCnt + 1; + // Agent 셋팅 끝 + + tempVO.setMsgId(idgenMsgId.getNextStringId()); + tempVO.setUserId(mjonMsgVO.getUserId()); + tempVO.setCallTo(phoneList[i]); + tempVO.setCallFrom(mjonMsgVO.getCallFrom()); + tempVO.setMsgType(mjonMsgVO.getMsgType()); + tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); + + // 아이엠오 전송사 문자 타입 설정해 주기 + if (agentCode.equals("03")) { + + // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 + if (mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 + + mjonMsgVO.setNeoType("2"); + + } else { // 그림포함 문자인경우 + + mjonMsgVO.setNeoType("4"); + } - tempVO.setFileCnt(Integer.toString(fileCnt)); - - }else { - tempVO.setFileCnt("1"); + } - - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); + + // 문자내용 내용 - 치환 처리 + String smsTxt = mjonMsgVO.getSmsTxt(); // 발송 문자 내용 + + // 일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. + smsTxt = smsTxt.replaceAll(String.valueOf((char) 13), ""); + if (smsTxt.indexOf("[*이름*]") > -1) { + if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { + smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", + StringUtil.getString(nameList[i].replaceAll("§", ","))); + } else { + smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); + } + } + + if (smsTxt.indexOf("[*1*]") > -1) { + if (rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { + smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", + StringUtil.getString(rep1[i].replaceAll("§", ","))); + } else { + smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); + } + } + + if (smsTxt.indexOf("[*2*]") > -1) { + if (rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { + smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", + StringUtil.getString(rep2[i].replaceAll("§", ","))); + } else { + smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); + } + } + + if (smsTxt.indexOf("[*3*]") > -1) { + if (rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { + smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", + StringUtil.getString(rep3[i].replaceAll("§", ","))); + } else { + smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); + } + } + + if (smsTxt.indexOf("[*4*]") > -1) { + if (rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { + smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", + StringUtil.getString(rep4[i].replaceAll("§", ","))); + } else { + smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); + } + } + tempVO.setSmsTxt(smsTxt); - tempVO.setContSeq(contSeq); - - } - - //문자 내용 추가해 주기 - msgDataInfo.add(tempVO); - - }//수신거부 처리로직 끝 - - int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { - - if(msgDataInfo.size() > 0) { - - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - - } - - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - - } - - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; - - //List 초기화 하기 - msgDataInfo.clear(); - - } - - } - - cnt++; - totCnt++; - - } - - /* - * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 - * 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 - * 2. 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) - * - * */ - - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); - - /*if(resultCnt > 0 && blockCnt > 0) { - - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; - Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = resultTotPrice - blockPrice; - - mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = resultCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - - }*/ - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultCnt > 0) { - - int totSendCnt = mjonMsgVO.getTotalCallCnt(); - Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - Float totPrice = eachPrice * resultCnt; - String strTotPrice = String.format("%.1f", totPrice); - - mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅 - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(strTotPrice)); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultCnt > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - //mjonMsgService.insertGroupMsgData(mjonMsgVO); - int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); - //메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. - if(msgGroupDataCnt < 1) { - mjonMsgVO.setAgentCode(agentCode);//전송사 코드 번호를 셋팅해 준다. - - //지연 유무 코드가 Null 인경우 체크 - String tmpDelayYn = mjonMsgVO.getDelayYn(); - if(tmpDelayYn == null) { - mjonMsgVO.setDelayYn("N"); - } - - //예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 셋팅해준다. - if(mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) { - - mjonMsgVO.setReqDate(frstDelayTime); - - } - mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - - try { - - //야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 - if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { - mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + // 즉시 / 예약 전송 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 + // 준다. + + tempVO.setReqDate(mjonMsgVO.getReqDate());// 상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 + // 입력함. + + } else {// 일반 문자인 경우 현재시간을 입력해 준다. + + Date now = new Date(); + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + tempVO.setReqDate(sdFormat.format(now)); + + } + + } else { // 예약 발송의 경우 예약 시간을 입력 + + // 분할 발송을 체크 한 경우 + if (mjonMsgVO.getDivideChk() != null) { + + // 스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. + // 20230630 우영두 추가 + if (spamStatus.equals("Y") || smishingYn.equals("Y")) { + + Date delayDate = transFormat.parse(dividDayList.get(i)); + + cal.setTime(delayDate); + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); + + tempVO.setReqDate(delayTime); // 분할 문자 예약 시간 입력해주기 + + } else { + + tempVO.setReqDate(dividDayList.get(i)); // 분할 문자 예약 시간 입력해주기 + + } + + } else {// 일반 예약 발송의 경우 + + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 + // 처리해준다. + + Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); + + cal.setTime(delayDate); + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); + + tempVO.setReqDate(delayTime); + + } else { + + tempVO.setReqDate(mjonMsgVO.getReqDate()); + + } + + } + + // 딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. + // 분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. + // mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. + if (i == 0) { + frstDelayTime = tempVO.getReqDate(); + } } - - } catch (Exception e) { - System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + + if (!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + + /** + * 장문 / 그림문자 일 경우 제목 처리 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 내용 텍스트가 없는 경우는 + * 어쩔수 없는 것으로 간주하여 Null로 처리한다. + * + */ + String contents = tempVO.getSmsTxt(); // 문자 내용 + if (StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 + // 입력이 + // 없는 + // 경우 + + if (StringUtil.isNotEmpty(contents) && contents != null) {// 문자내용이 있는 경우 처리 + + String[] split = contents.split("\n"); + + if (split.length > 0) { + + String subject = ""; + String msgKind = mjonMsgVO.getMsgKind();// 문자 타입(일반, 광고, 선거문자) + + // 선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 + /* + * if(subject.equals("(선거운동정보)")) { subject = split[1].trim(); } + */ + + if (msgKind.equals("C")) { + if (split.length > 1) { + subject = split[1].trim(); + } else { + subject = split[0].substring(0, 20); + } + } else { + subject = split[0].trim(); + } + + // 제목 글자수 20글자로 제한. + /* + * if(subject.length() > 20) { subject = subject.substring(0,20); } + * tempVO.setMmsSubject(subject); mjonMsgVO.setMmsSubject(subject); + */ + + } + + } + + } else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅 + tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); + } + + tempVO.setFileCnt(mjonMsgVO.getFileCnt()); + tempVO.setFileName1(mjonMsgVO.getFileName1()); + tempVO.setFileName2(mjonMsgVO.getFileName2()); + tempVO.setFileName3(mjonMsgVO.getFileName3()); + tempVO.setNeoType(mjonMsgVO.getNeoType()); + tempVO.setContSeq(mjonMsgVO.getContSeq()); + + } + + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode.equals("01") && msgType.equals("6")) { + + // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 + + // 이미지가 있는경우 file_type, file_Cnt 값 셋팅 + int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + String contents = mjonMsgVO.getSmsTxt(); + + if (fileCnt > 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + + // 그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) + if (StringUtil.isNotEmpty(contents)) { + fileCnt = fileCnt + 1; + } + tempVO.setFileCnt(Integer.toString(fileCnt)); + + } else { + tempVO.setFileCnt("1"); + } + + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); + tempVO.setSmsTxt(smsTxt); + tempVO.setContSeq(contSeq); + + } + + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); + + } // 수신거부 처리로직 끝 + + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + + if (msgDataInfo.size() > 0) { + + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + + } + + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + + } else { + + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + + if (msgDataInfo.size() > 0) { + + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + + } + + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; + + // List 초기화 하기 + msgDataInfo.clear(); + + } + } - - }else { - mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); + + cnt++; + totCnt++; + } - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - } - - // 성공 - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 - returnVO.setAgentCode(agentCode); - + + /* + * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 2. + * 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) + * + */ + + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); + + /* + * if(resultCnt > 0 && blockCnt > 0) { + * + * Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; + * Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); Float + * endPrice = resultTotPrice - blockPrice; + * + * mjonMsgVO.setTotPrice(Float.toString(endPrice)); + * + * //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. int groupCnt = + * resultCnt; mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + * + * //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); + * + * } + */ + + // 1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. + if (resultCnt > 0) { + + int totSendCnt = mjonMsgVO.getTotalCallCnt(); + Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); + Float totPrice = eachPrice * resultCnt; + String strTotPrice = String.format("%.1f", totPrice); + + mjonMsgVO.setTotPrice(strTotPrice);// 현재 합산 금액 셋팅 + mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); + mjonPayVO.setUserId(mjonMsgVO.getUserId()); + mjonPayVO.setCash(-Float.parseFloat(strTotPrice)); + mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); + mjonPayVO.setMemo("SMS 문자 총 " + totSendCnt + "건 중 " + resultCnt + "건 발송"); + mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + + mjonPayService.insertCash(mjonPayVO); // 캐시차감 + mjonPayService.updateMemberCash(mjonPayVO); // 회원정보 업데이트 + } + + // 문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. + if (resultCnt > 0) { + + // 문자 전송 그룹 테이블에 정보 입력 + int groupCnt = resultCnt; + mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + // mjonMsgService.insertGroupMsgData(mjonMsgVO); + int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); + + // 메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. + if (msgGroupDataCnt < 1) { + mjonMsgVO.setAgentCode(agentCode);// 전송사 코드 번호를 셋팅해 준다. + + // 지연 유무 코드가 Null 인경우 체크 + String tmpDelayYn = mjonMsgVO.getDelayYn(); + if (tmpDelayYn == null) { + mjonMsgVO.setDelayYn("N"); + } + + // 예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 + // 셋팅해준다. + if (mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) { + + mjonMsgVO.setReqDate(frstDelayTime); + + } + mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + + try { + + // 야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 + // 우영두 추가 + if (holiSmishingNoti.equals("Y") && spamSmishingPassStatus + && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { + mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } + + } catch (Exception e) { + System.out.println( + "++++++++++++++++++++++++++++++ spamSmishingPassStatus 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + } + + } else { + mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); + } + + // 이벤트 회원 남은 캐시 업데이트 + fnUpdateEventRemainCash(mjonPayVO); + + } + + // 성공 + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + returnVO.setAgentCode(agentCode); + } catch (Exception e) { // 실패 - returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장 + returnVO.setSendMsgCnt(Integer.toString(0)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(0)); // 수신차단 건수 저장 returnVO.setAgentCode("01"); - + System.out.println("========================================================================="); System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfo ERROR !!! : " + e); System.out.println("========================================================================="); return returnVO; - + } - + return returnVO; - + } - - //이벤트 회원 캐시 변경 함수 - public void fnUpdateEventRemainCash(MjonPayVO mjonPayVO) throws Exception{ - - //이벤트 회원인 경우 이벤트 캐시도 함께 차감. + + // 이벤트 회원 캐시 변경 함수 + public void fnUpdateEventRemainCash(MjonPayVO mjonPayVO) throws Exception { + + // 이벤트 회원인 경우 이벤트 캐시도 함께 차감. MjonEventVO mjonEventVO = new MjonEventVO(); mjonEventVO.setMberId(mjonPayVO.getUserId()); mjonEventVO.setEventStatus("Y"); MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - if(eventMberInfo != null) { - + + if (eventMberInfo != null) { + float evntRemainCash = (float) eventMberInfo.getEventRemainCash(); float totPrice = (float) Math.abs(mjonPayVO.getCash()); - + float totRemainCash = evntRemainCash - totPrice; mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - - if(totRemainCash <= 0.0) {//차감액이 남아있지 않으면 이벤트를 종료 - - //이벤트 상태값을 종료로 변경한다. + + if (totRemainCash <= 0.0) {// 차감액이 남아있지 않으면 이벤트를 종료 + + // 이벤트 상태값을 종료로 변경한다. mjonEventVO.setEventStatus("E"); mjonEventVO.setEventRemainCash(0.0); mjonEventService.updateEventEndStatus(mjonEventVO); - - }else {//이벤트 회원 캐시 차감시킴 - + + } else {// 이벤트 회원 캐시 차감시킴 + mjonEventVO.setEventRemainCash(totRemainCash); mjonEventService.updateEventRemainCash(mjonEventVO); - + } - + } - + } - //성능 테스트용************************************************************************ - public MjonMsgReturnVO insertMsgTestDataInfo(MjonMsgVO mjonMsgVO - , int i_nRate - , int i_hRate - , int i_iRate - , String p_msgGroupId - ) throws Exception{ - + // 성능 + // 테스트용************************************************************************ + public MjonMsgReturnVO insertMsgTestDataInfo(MjonMsgVO mjonMsgVO, int i_nRate, int i_hRate, int i_iRate, + String p_msgGroupId) throws Exception { + // 문자 전송 그룹아이디 생성 if ("".equals(p_msgGroupId)) { - //String s_msgGroupId = idgenMjonMsgGroupId.getNextStringId(); - p_msgGroupId = idgenMjonMsgGroupId.getNextStringId(); + // String s_msgGroupId = idgenMjonMsgGroupId.getNextStringId(); + p_msgGroupId = idgenMjonMsgGroupId.getNextStringId(); } - - mjonMsgVO.setMsgGroupId(p_msgGroupId); - - // 문자 아이디 생성 - //mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - - + mjonMsgVO.setMsgGroupId(p_msgGroupId); + + // 문자 아이디 생성 + // mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); + + String msgType = mjonMsgVO.getMsgType(); + String agentCode = mjonMsgVO.getAgentCode(); + // 장문 전송 String contSeq = ""; - - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + + // float myPrice = 10000; + // float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); // 최종 입력 수 저장 변수 int resultCnt = 0; int limitCnt = 1000; int blockCnt = 0; - + // 총 보유 금액과 전송 합계 비교 - - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 - - return 0 ; - }*/ - - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + * + * return 0 ; } + */ + + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - - - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - + + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + Date now = new Date(); - + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + mjonMsgVO.setReqDate(sdFormat.format(now)); - + } - - + /* - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 하도록 한다. + * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 + * 하도록 한다. * * - * */ - - if(callToCnt >= 1000) { - + */ + + if (callToCnt >= 1000) { + limitCnt = 100; - + } - - //수신자 리스트 처리 + + // 수신자 리스트 처리 List msgDataInfo = new ArrayList(); - + int cnt = 1; int totCnt = 1; - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - //SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); + + // 예약시간 변환 + // SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + int turmMin = 0; int totalCallCnt = 0; int divideCnt = 0; - int count = 1; //분할 카운트 - - - - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //for(String phonNum : mjonMsgVO.getCallToList()) { - - for(int i = 0; i < callToCnt; i++) { - - //전송사 랜덤 발생 - int random1 = (int )(Math.random() * (i_nRate+i_hRate+i_iRate));//5~14 - length - - //System.out.println("random1"); - //System.out.println(random1); - - if (random1 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { + + if (fileCnt > 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + + // 그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) + if (StringUtil.isNotEmpty(contents)) { fileCnt = fileCnt + 1; } tempVO.setFileCnt(Integer.toString(fileCnt)); - - }else { + + } else { tempVO.setFileCnt("1"); } - - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); + + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); tempVO.setSmsTxt(smsTxt); tempVO.setContSeq(contSeq); - + } - - //문자 내용 추가해 주기 + + // 문자 내용 추가해 주기 msgDataInfo.add(tempVO); - - }//수신거부 처리로직 끝 - + + } // 수신거부 처리로직 끝 + int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { - - if(msgDataInfo.size() > 0) { - - //데이터 디비 입력해주기 + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + + if (msgDataInfo.size() > 0) { + + // 데이터 디비 입력해주기 instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 + + } else { + + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + + if (msgDataInfo.size() > 0) { + + // 분할 최대건수가 되면 디비에 입력하기 instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; cnt = 0; - - //List 초기화 하기 + + // List 초기화 하기 msgDataInfo.clear(); - + } - + } - + cnt++; totCnt++; - + } - - //문자 발송 캐시 차감 해주기 - 삭제했음 - - - + + // 문자 발송 캐시 차감 해주기 - 삭제했음 + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - + returnVO.setMsgGroupId(p_msgGroupId); - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 - - return returnVO; + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + + return returnVO; } - - + // JSP 2022.04.08 - // 080 자동 수신거부목록 > 결과알림 => 수신거부목록 체크 제거 - public MjonMsgReturnVO insertMsgDataByBlockInfo(MjonMsgVO mjonMsgVO) throws Exception{ - + // 080 자동 수신거부목록 > 결과알림 => 수신거부목록 체크 제거 + public MjonMsgReturnVO insertMsgDataByBlockInfo(MjonMsgVO mjonMsgVO) throws Exception { + // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - // 문자 아이디 생성 + mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + + // 문자 아이디 생성 mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - + String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); + String agentCode = mjonMsgVO.getAgentCode(); // 장문 전송 String contSeq = ""; - + // 최종 입력 수 저장 변수 int resultCnt = 0; int limitCnt = 1000; int blockCnt = 0; - + // 총 보유 금액과 전송 합계 비교 - - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 - - return 0 ; - }*/ - - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + * + * return 0 ; } + */ + + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - - - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - + + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + Date now = new Date(); - + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + mjonMsgVO.setReqDate(sdFormat.format(now)); - + } - - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) String befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); - + mjonMsgVO.setBefCash(befCash); - if(callToCnt >= 1000) { - + if (callToCnt >= 1000) { + limitCnt = 100; - + } - - //수신자 리스트 처리 + + // 수신자 리스트 처리 List msgDataInfo = new ArrayList(); - + int cnt = 1; int totCnt = 1; - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); + + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + int turmMin = 0; int totalCallCnt = 0; int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) { - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - + int count = 1; // 분할 카운트 + + if (!mjonMsgVO.getReserveYn().equals("N")) { + + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 + + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); + + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + } - - - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //for(String phonNum : mjonMsgVO.getCallToList()) { - - for(int i = 0; i < callToCnt; i++) { + + String[] nameList = mjonMsgVO.getNameList(); // 치환 이름 리스트 + String[] phoneList = mjonMsgVO.getCallToList(); // 받는사람 연락처 리스트 + String[] rep1 = mjonMsgVO.getRep1List(); // 치환 문자1 리스트 + String[] rep2 = mjonMsgVO.getRep2List(); // 치환 문자2 리스트 + String[] rep3 = mjonMsgVO.getRep3List(); // 치환 문자3 리스트 + String[] rep4 = mjonMsgVO.getRep4List(); // 치환 문자4 리스트 + + // for(String phonNum : mjonMsgVO.getCallToList()) { + + for (int i = 0; i < callToCnt; i++) { MjonMsgVO tempVO = new MjonMsgVO(); tempVO.setReqDate(mjonMsgVO.getReqDate()); tempVO.setMsgId(mjonMsgVO.getMsgId()); tempVO.setUserId(mjonMsgVO.getUserId()); tempVO.setCallTo(phoneList[i]); - //tempVO.setCallTo("01063170383"); + // tempVO.setCallTo("01063170383"); tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - + tempVO.setMsgType(mjonMsgVO.getMsgType()); tempVO.setAgentCode(mjonMsgVO.getAgentCode()); tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - - //문자내용 내용 - 치환 처리 - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) + + // 문자내용 내용 - 치환 처리 + String smsTxt = mjonMsgVO.getSmsTxt(); // 발송 문자 내용 + + smsTxt = smsTxt.replaceAll(String.valueOf((char) 13), ""); + if (smsTxt.indexOf("[*이름*]") > -1) smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replace("§", ","))); if (smsTxt.indexOf("[*1*]") > -1) smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replace("§", ","))); @@ -1302,414 +1294,408 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replace("§", ","))); if (smsTxt.indexOf("[*4*]") > -1) smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replace("§", ","))); - + tempVO.setSmsTxt(smsTxt); - - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode == "01" && !msgType.equals("4")) { + + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode == "01" && !msgType.equals("4")) { // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - if(fileCnt > 0) { - - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일 종류 셋팅 - + int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + if (fileCnt > 0) { + + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일 종류 셋팅 + } - + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); mjonMsgVO.setContSeq(contSeq); tempVO.setSmsTxt(smsTxt); tempVO.setContSeq(contSeq); } - - //문자 내용 추가해 주기 + + // 문자 내용 추가해 주기 msgDataInfo.add(tempVO); - + int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { - - if(msgDataInfo.size() > 0) { - - //데이터 디비 입력해주기 + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + + if (msgDataInfo.size() > 0) { + + // 데이터 디비 입력해주기 instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 + + } else { + + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + + if (msgDataInfo.size() > 0) { + + // 분할 최대건수가 되면 디비에 입력하기 instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; cnt = 0; - - //List 초기화 하기 + + // List 초기화 하기 msgDataInfo.clear(); - + } - + } - + cnt++; totCnt++; - + } - - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); - - if(blockCnt > 0) { - + + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); + + if (blockCnt > 0) { + Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; Float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); Float endPrice = totPrice - blockPrice; - + mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. + + // 수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. int groupCnt = callToCnt - blockCnt; mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - + + // mjonMsgDAO.updateGroupMsgData(mjonMsgVO); + } - - if(Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { - + + if (Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { + // 문자 전송 그룹 테이블에 정보 입력 mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - + } - - + mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); mjonPayVO.setUserId(mjonMsgVO.getUserId()); mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); mjonPayVO.setMemo("SMS 문자 " + resultCnt + "건 발송"); mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayDAO.insertCash(mjonPayVO); //캐시차감 - mjonPayDAO.updateMemberCash(mjonPayVO); //회원정보 업데이트 - + + mjonPayDAO.insertCash(mjonPayVO); // 캐시차감 + mjonPayDAO.updateMemberCash(mjonPayVO); // 회원정보 업데이트 + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 - + + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + return returnVO; - } - - //관리자에서 사용자에게 문자발송하기 - public MjonMsgReturnVO insertAdmToMberMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception{ - + } + + // 관리자에서 사용자에게 문자발송하기 + public MjonMsgReturnVO insertAdmToMberMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception { + // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - // 문자 아이디 생성 + mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + + // 문자 아이디 생성 mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - + String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); + String agentCode = mjonMsgVO.getAgentCode(); // 장문 전송 String contSeq = ""; - - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + + // float myPrice = 10000; + // float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); // 최종 입력 수 저장 변수 int resultCnt = 0; int limitCnt = 1000; int blockCnt = 0; - + // 총 보유 금액과 전송 합계 비교 - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - - - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - + + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + Date now = new Date(); - + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + mjonMsgVO.setReqDate(sdFormat.format(now)); - + } - - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) String befCash = mjonMsgVO.getBefCash(); - - //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 - if(befCash.equals("") || befCash == null) { + + // VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 + if (befCash.equals("") || befCash == null) { befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); } - + mjonMsgVO.setBefCash(befCash); // 문자 전송 그룹 테이블에 정보 입력 - - //수신거부 목록 불러오기 - //List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); - - //List dupliBlockList = MJUtil.getDuplicateList(userBlockList); - //int usrBlockCnt = dupliBlockList.size(); - + + // 수신거부 목록 불러오기 + // List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); + + // List dupliBlockList = MJUtil.getDuplicateList(userBlockList); + // int usrBlockCnt = dupliBlockList.size(); + /* - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 하도록 한다. + * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 + * 하도록 한다. * * - * */ - - if(callToCnt >= 1000) { - + */ + + if (callToCnt >= 1000) { + limitCnt = 100; - + } - - //수신자 리스트 처리 + + // 수신자 리스트 처리 List msgDataInfo = new ArrayList(); - + int cnt = 1; int totCnt = 1; - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); + + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + int turmMin = 0; int totalCallCnt = 0; int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) { - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - - //String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - //String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - //String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - //String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - //String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //for(String phonNum : mjonMsgVO.getCallToList()) { - - for(int i = 0; i < callToCnt; i++) { - - Boolean blockSts = false; - /*for(int j = 0; j < usrBlockCnt; j++) { + int count = 1; // 분할 카운트 + + if (!mjonMsgVO.getReserveYn().equals("N")) { + + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 + + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); + + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + + } + + // String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 + String[] phoneList = mjonMsgVO.getCallToList(); // 받는사람 연락처 리스트 + // String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 + // String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 + // String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 + // String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 + + // for(String phonNum : mjonMsgVO.getCallToList()) { + + for (int i = 0; i < callToCnt; i++) { + + Boolean blockSts = false; + /* + * for(int j = 0; j < usrBlockCnt; j++) { + * + * if(phoneList[i].equals(dupliBlockList.get(j).toString())) { + * + * blockCnt++; //수신 차단 카운드를 해준다. blockSts = true; + * + * } + * + * } + */ + + if (!blockSts) { // 수신거부가 아니면 추가 - if(phoneList[i].equals(dupliBlockList.get(j).toString())) { - - blockCnt++; //수신 차단 카운드를 해준다. - blockSts = true; - - } - - }*/ - - if(!blockSts) { //수신거부가 아니면 추가 - MjonMsgVO tempVO = new MjonMsgVO(); - + tempVO.setMsgId(mjonMsgVO.getMsgId()); tempVO.setUserId(mjonMsgVO.getUserId()); tempVO.setCallTo(phoneList[i]); tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - + tempVO.setMsgType(mjonMsgVO.getMsgType()); tempVO.setAgentCode(mjonMsgVO.getAgentCode()); tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); tempVO.setSmsTxt(mjonMsgVO.getSmsTxt()); - - //즉시 / 예약 전송 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - + + // 즉시 / 예약 전송 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + Date now = new Date(); - + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + tempVO.setReqDate(sdFormat.format(now)); - - }else { // 예약 발송의 경우 예약 시간을 입력 - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - }else {//일반 예약 발송의 경우 - + + } else { // 예약 발송의 경우 예약 시간을 입력 + + // 분할 발송을 체크 한 경우 + if (mjonMsgVO.getDivideChk() != null) { + + if (count > divideCnt) { + + count = 1; + + // 분할 시간 간격을 증가시켜 준다. + cal.add(Calendar.MINUTE, turmMin); + dividDay = transFormat.format(cal.getTime()); + + tempVO.setReqDate(dividDay); // 분할 문자 예약 시간 입력해주기 + count++; + + } else { + + tempVO.setReqDate(dividDay); // 분할 문자 예약 시간 입력해주기 + count++; + + } + + } else {// 일반 예약 발송의 경우 + tempVO.setReqDate(mjonMsgVO.getReqDate()); - + } } - - if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 - + + if (!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); - //tempVO.setSmsTxt(smsTxt); + // tempVO.setSmsTxt(smsTxt); tempVO.setFileCnt(mjonMsgVO.getFileCnt()); tempVO.setFileName1(mjonMsgVO.getFileName1()); tempVO.setFileName2(mjonMsgVO.getFileName2()); tempVO.setFileName3(mjonMsgVO.getFileName3()); tempVO.setNeoType(mjonMsgVO.getNeoType()); tempVO.setContSeq(mjonMsgVO.getContSeq()); - + } - - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode.equals("01") && msgType.equals("6")) { - + + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode.equals("01") && msgType.equals("6")) { + // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - - //이미지가 있는경우 file_type, file_Cnt 값 셋팅 + + // 이미지가 있는경우 file_type, file_Cnt 값 셋팅 int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); String contents = mjonMsgVO.getSmsTxt(); - - if(fileCnt > 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { + + if (fileCnt > 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + + // 그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) + if (StringUtil.isNotEmpty(contents)) { fileCnt = fileCnt + 1; } tempVO.setFileCnt(Integer.toString(fileCnt)); - - }else { + + } else { tempVO.setFileCnt("1"); } - - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); + + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); tempVO.setSmsTxt(contents); tempVO.setContSeq(contSeq); - + } - - //문자 내용 추가해 주기 + + // 문자 내용 추가해 주기 msgDataInfo.add(tempVO); - - }//수신거부 처리로직 끝 - + + } // 수신거부 처리로직 끝 + int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { - - if(msgDataInfo.size() > 0) { - - //데이터 디비 입력해주기 + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + + if (msgDataInfo.size() > 0) { + + // 데이터 디비 입력해주기 instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 + + } else { + + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + + if (msgDataInfo.size() > 0) { + + // 분할 최대건수가 되면 디비에 입력하기 instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; cnt = 0; - - //List 초기화 하기 + + // List 초기화 하기 msgDataInfo.clear(); - + } - + } - + cnt++; totCnt++; - + } - - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); - - if(resultCnt > 0 && blockCnt > 0) { - + + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); + + if (resultCnt > 0 && blockCnt > 0) { + Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; Float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); Float endPrice = totPrice - blockPrice; - + mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. + + // 수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. int groupCnt = callToCnt - blockCnt; mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - + } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultCnt > 0 && Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { - + + // 문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. + if (resultCnt > 0 && Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { + // 문자 전송 그룹 테이블에 정보 입력 mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - + } - - //1건 이상 발송이 완료된 경우 시스템 로그를 기록한다. - if(resultCnt > 0) { - + + // 1건 이상 발송이 완료된 경우 시스템 로그를 기록한다. + if (resultCnt > 0) { + // 시스템 발송 로그 SendLogVO sendLogVO = new SendLogVO(); // SendType 1:문자로 발송 2:이메일로 발송 @@ -1721,123 +1707,128 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M sendLogVO.setContents(mjonMsgVO.getSmsTxt()); mjonMsgDataService.insertSysMsgLog(sendLogVO); - + } - + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 - - return returnVO; - - } - - - public List selectLetterList(LetterVO letterVO) throws Exception{ - + + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + + return returnVO; + + } + + public List selectLetterList(LetterVO letterVO) throws Exception { + return mjonMsgDataDAO.selectLetterList(letterVO); } - - public List selectPhotoLetterList(LetterVO letterVO) throws Exception{ - + + public List selectPhotoLetterList(LetterVO letterVO) throws Exception { + return mjonMsgDataDAO.selectPhotoLetterList(letterVO); - + } - + public List selectCustomPopupImgList(LetterVO letterVO) throws Exception { - + return mjonMsgDataDAO.selectCustomPopupImgList(letterVO); } - - public int insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public int insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.insertMyMsgDataAjax(mjonMsgDataVO); } - - public List selectMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public List selectMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMyMsgDataListAjax(mjonMsgDataVO); } - - public List selectSendPhonNumList(String userId) throws Exception{ - + + public List selectSendPhonNumList(String userId) throws Exception { + return mjonMsgDataDAO.selectSendPhonNumList(userId); } - - //차단 발신번호 리스트 불러오기 - public List selectBlockPhonNumList() throws Exception{ + + // 차단 발신번호 리스트 불러오기 + public List selectBlockPhonNumList() throws Exception { return mjonMsgDataDAO.selectBlockPhonNumList(); } - public JoinSettingVO selectJoinSettingInfo() throws Exception{ - + public JoinSettingVO selectJoinSettingInfo() throws Exception { + return mjonMsgDataDAO.selectJoinSettingInfo(); } - - public MberManageVO selectMberManageInfo(String userId) throws Exception{ - + + public MberManageVO selectMberManageInfo(String userId) throws Exception { + return mjonMsgDataDAO.selectMberManageInfo(userId); } - - public List selectMyMsgPhotoListInfo(List myMsgList) throws Exception{ - - List atchFileList = new ArrayList(); - - int size = myMsgList.size(); - for(int i=0; i < size; i++ ) { - - String atchFileId1 = ((EgovMap)myMsgList.get(i)).get("atchFileId1") != null ? ((EgovMap)myMsgList.get(i)).get("atchFileId1").toString() : ""; - String atchFileId2 = ((EgovMap)myMsgList.get(i)).get("atchFileId2") != null ? ((EgovMap)myMsgList.get(i)).get("atchFileId2").toString() : ""; - String atchFileId3 = ((EgovMap)myMsgList.get(i)).get("atchFileId3") != null ? ((EgovMap)myMsgList.get(i)).get("atchFileId3").toString() : ""; - if(atchFileId1 != null && !atchFileId1.equals("")) { - + public List selectMyMsgPhotoListInfo(List myMsgList) throws Exception { + + List atchFileList = new ArrayList(); + + int size = myMsgList.size(); + for (int i = 0; i < size; i++) { + + String atchFileId1 = ((EgovMap) myMsgList.get(i)).get("atchFileId1") != null + ? ((EgovMap) myMsgList.get(i)).get("atchFileId1").toString() + : ""; + String atchFileId2 = ((EgovMap) myMsgList.get(i)).get("atchFileId2") != null + ? ((EgovMap) myMsgList.get(i)).get("atchFileId2").toString() + : ""; + String atchFileId3 = ((EgovMap) myMsgList.get(i)).get("atchFileId3") != null + ? ((EgovMap) myMsgList.get(i)).get("atchFileId3").toString() + : ""; + + if (atchFileId1 != null && !atchFileId1.equals("")) { + atchFileList.add(atchFileId1); - + } - if(atchFileId2 != null && !atchFileId2.equals("")) { - + if (atchFileId2 != null && !atchFileId2.equals("")) { + atchFileList.add(atchFileId2); - + } - if(atchFileId3 != null && !atchFileId3.equals("")) { - + if (atchFileId3 != null && !atchFileId3.equals("")) { + atchFileList.add(atchFileId3); - + } - + } - + MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); mjonMsgDataVO.setAtchFileList(atchFileList); - + return mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); - + } - - public void deleteMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public void deleteMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { + mjonMsgDataDAO.deleteMyMsgDataListAjax(mjonMsgDataVO); } - - public List selectLatestMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public List selectLatestMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectLatestMsgList(mjonMsgDataVO); } - - public List selectBookMarkMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public List selectBookMarkMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectBookMarkMsgList(mjonMsgDataVO); } - - public String selectBeforeCashData(MjonMsgVO mjonMsgVO) throws Exception{ - + + public String selectBeforeCashData(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); } - - public String selectBeforePointData(MjonMsgVO mjonMsgVO) throws Exception{ - + + public String selectBeforePointData(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectBeforePointData(mjonMsgVO); } @@ -1845,244 +1836,240 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M public List selectPayUserList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserList(mjonMsgVO); } - + @Override public List selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO); } - + @Override public List selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserSumList(mjonMsgVO); } - - //시스템 문자발송 - public MjonMsgReturnVO insertSysMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception{ - + + // 시스템 문자발송 + public MjonMsgReturnVO insertSysMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception { + // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - // 문자 아이디 생성 + mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + + // 문자 아이디 생성 mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - + String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); + String agentCode = mjonMsgVO.getAgentCode(); // 장문 전송 String contSeq = ""; - - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + + // float myPrice = 10000; + // float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); // 최종 입력 수 저장 변수 int resultCnt = 0; int limitCnt = 1000; int blockCnt = 0; - + // 총 보유 금액과 전송 합계 비교 - - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 - - return 0 ; - }*/ - - int callToCnt = 1; //전체 받는사람 건수 + + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + * + * return 0 ; } + */ + + int callToCnt = 1; // 전체 받는사람 건수 mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - - - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - + + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + Date now = new Date(); - + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + mjonMsgVO.setReqDate(sdFormat.format(now)); - + } - - if(callToCnt >= 1000) { - + + if (callToCnt >= 1000) { + limitCnt = 100; - + } - - //수신자 리스트 처리 + + // 수신자 리스트 처리 List msgDataInfo = new ArrayList(); - + int cnt = 1; int totCnt = 1; - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); + + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + int turmMin = 0; int totalCallCnt = 0; int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) { - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = 1; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - /*String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 -*/ - //for(String phonNum : mjonMsgVO.getCallToList()) { - - for(int i = 0; i < callToCnt; i++) { - - /*Boolean blockSts = false; - for(int j = 0; j < usrBlockCnt; j++) { + int count = 1; // 분할 카운트 + + if (!mjonMsgVO.getReserveYn().equals("N")) { + + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 + + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); + + totalCallCnt = 1; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + + } + + String[] phoneList = mjonMsgVO.getCallToList(); // 받는사람 연락처 리스트 + /* + * String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 String[] rep1 = + * mjonMsgVO.getRep1List(); //치환 문자1 리스트 String[] rep2 = + * mjonMsgVO.getRep2List(); //치환 문자2 리스트 String[] rep3 = + * mjonMsgVO.getRep3List(); //치환 문자3 리스트 String[] rep4 = + * mjonMsgVO.getRep4List(); //치환 문자4 리스트 + */ + // for(String phonNum : mjonMsgVO.getCallToList()) { + + for (int i = 0; i < callToCnt; i++) { + + /* + * Boolean blockSts = false; for(int j = 0; j < usrBlockCnt; j++) { + * + * if(phoneList[i].equals(userBlockList.get(j).toString())) { + * + * blockCnt++; //수신 차단 카운드를 해준다. blockSts = true; + * + * } + * + * } + */ - if(phoneList[i].equals(userBlockList.get(j).toString())) { - - blockCnt++; //수신 차단 카운드를 해준다. - blockSts = true; - - } - - }*/ - - MjonMsgVO tempVO = new MjonMsgVO(); - + tempVO.setMsgId(mjonMsgVO.getMsgId()); tempVO.setUserId(mjonMsgVO.getUserId()); - //tempVO.setCallTo(phoneList[i]); + // tempVO.setCallTo(phoneList[i]); tempVO.setCallTo(mjonMsgVO.getCallTo()); tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - + tempVO.setMsgType(mjonMsgVO.getMsgType()); tempVO.setAgentCode(mjonMsgVO.getAgentCode()); tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - - //문자내용 내용 - 치환 처리 - /*String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i])); - if (smsTxt.indexOf("[*1*]") > -1) - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i])); - if (smsTxt.indexOf("[*2*]") > -1) - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i])); - if (smsTxt.indexOf("[*3*]") > -1) - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i])); - if (smsTxt.indexOf("[*4*]") > -1) - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i])); - - tempVO.setSmsTxt(smsTxt);*/ + + // 문자내용 내용 - 치환 처리 + /* + * String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 + * + * smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); if + * (smsTxt.indexOf("[*이름*]") > -1) smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", + * StringUtil.getString(nameList[i])); if (smsTxt.indexOf("[*1*]") > -1) smsTxt + * = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i])); if + * (smsTxt.indexOf("[*2*]") > -1) smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", + * StringUtil.getString(rep2[i])); if (smsTxt.indexOf("[*3*]") > -1) smsTxt = + * smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i])); if + * (smsTxt.indexOf("[*4*]") > -1) smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", + * StringUtil.getString(rep4[i])); + * + * tempVO.setSmsTxt(smsTxt); + */ tempVO.setSmsTxt(mjonMsgVO.getSmsTxt()); - + Date now = new Date(); - + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + tempVO.setReqDate(sdFormat.format(now)); - - //문자 내용 추가해 주기 + + // 문자 내용 추가해 주기 msgDataInfo.add(tempVO); - - + int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { - - if(msgDataInfo.size() > 0) { - - //데이터 디비 입력해주기 + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + + if (msgDataInfo.size() > 0) { + + // 데이터 디비 입력해주기 instCnt = mjonMsgDataDAO.insertSysMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 + + } else { + + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + + if (msgDataInfo.size() > 0) { + + // 분할 최대건수가 되면 디비에 입력하기 instCnt = mjonMsgDataDAO.insertSysMsgDataInfo(msgDataInfo, msgType, agentCode); - + } - - - //총 디비 입력 건수 저장하기 + + // 총 디비 입력 건수 저장하기 resultCnt = resultCnt + instCnt; cnt = 0; - - //List 초기화 하기 + + // List 초기화 하기 msgDataInfo.clear(); - + } - + } - + cnt++; totCnt++; - + } - - if(blockCnt > 0) { - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. + + if (blockCnt > 0) { + + // 수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. int groupCnt = callToCnt - blockCnt; mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - + + // mjonMsgDAO.updateGroupMsgData(mjonMsgVO); + } - - //시스템 발송은 문자 발송 금액이 없음 + + // 시스템 발송은 문자 발송 금액이 없음 mjonMsgVO.setTotPrice("0"); mjonMsgVO.setBefCash("0"); mjonMsgVO.setFileCnt("0"); mjonMsgVO.setEachPrice("0"); - - if(Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { - + + if (Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { + // 문자 전송 그룹 테이블에 정보 입력 mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - + } - + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - + returnVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 - + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + return returnVO; } - + @Override - public void insertSysMsgLog(SendLogVO sendLogVO) throws Exception{ - //시스템 문자발송 이력 Idgen + public void insertSysMsgLog(SendLogVO sendLogVO) throws Exception { + // 시스템 문자발송 이력 Idgen // sendLogVO.setSendId(idgenMjonMsgGroupId.getNextStringId()); mjonMsgDataDAO.insertSysMsgLog(sendLogVO); } @@ -2091,259 +2078,258 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M public SendLogVO selectSysMsgLog(SendLogVO sendLogVO) throws Exception { return mjonMsgDataDAO.selectSysMsgLog(sendLogVO); } - + @Override public SendLogVO selectSysMsgLogCheck(SendLogVO sendLogVO) throws Exception { return mjonMsgDataDAO.selectSysMsgLogCheck(sendLogVO); } - - public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception{ - + + public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception { + return mjonMsgDataDAO.selectMsgAddrListAjax(addrVO); } - - public MjonMsgDataVO selectMsgAddInfoAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public MjonMsgDataVO selectMsgAddInfoAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMsgAddInfoAjax(mjonMsgDataVO); } - - public List selectMsgAddPhotoInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public List selectMsgAddPhotoInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception { + List atchFileList = new ArrayList(); - + String atchFileId1 = mjonMsgDataVO.getAtchFileId1() != null ? mjonMsgDataVO.getAtchFileId1() : ""; String atchFileId2 = mjonMsgDataVO.getAtchFileId2() != null ? mjonMsgDataVO.getAtchFileId2() : ""; String atchFileId3 = mjonMsgDataVO.getAtchFileId3() != null ? mjonMsgDataVO.getAtchFileId3() : ""; - if(atchFileId1 != null && !atchFileId1.equals("")) { - + if (atchFileId1 != null && !atchFileId1.equals("")) { + atchFileList.add(atchFileId1); - + } - if(atchFileId2 != null && !atchFileId2.equals("")) { - + if (atchFileId2 != null && !atchFileId2.equals("")) { + atchFileList.add(atchFileId2); - + } - if(atchFileId3 != null && !atchFileId3.equals("")) { - + if (atchFileId3 != null && !atchFileId3.equals("")) { + atchFileList.add(atchFileId3); - + } - + mjonMsgDataVO.setAtchFileList(atchFileList); - + List result = new ArrayList<>(); - - if(atchFileList.size() > 0) { //저장 내용에 그림 이미지가 있는 경우만 처리 - + + if (atchFileList.size() > 0) { // 저장 내용에 그림 이미지가 있는 경우만 처리 + result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); - + } - + return result; } - - public List selectReSendMsgDataList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public List selectReSendMsgDataList(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectReSendMsgDataList(mjonMsgDataVO); } - - public MjonMsgDataVO selectMsgReSendPhotoInfo(MjonMsgVO mjonMsgVO) throws Exception{ - + + public MjonMsgDataVO selectMsgReSendPhotoInfo(MjonMsgVO mjonMsgVO) throws Exception { + MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); - + String filePath1 = mjonMsgVO.getFileType1() != null ? mjonMsgVO.getFileType1() : ""; String filePath2 = mjonMsgVO.getFileType2() != null ? mjonMsgVO.getFileType2() : ""; String filePath3 = mjonMsgVO.getFileType3() != null ? mjonMsgVO.getFileType3() : ""; - + String atchFileId1 = ""; String atchFileId2 = ""; String atchFileId3 = ""; - - if(filePath1 != null && !filePath1.equals("")) { - + + if (filePath1 != null && !filePath1.equals("")) { + filePath1 = filePath1.replace("/usr/local/tomcat_mjon/webapps/mjon/", ""); - String[] spFilePath = filePath1.split("/"); - + String[] spFilePath = filePath1.split("/"); + String cours = ""; String fileNm = ""; String extsn = ""; - - cours = "/" + spFilePath[0] + "/" + spFilePath[1]; //파일 STRE_FILE_COURS 내용 저장 - + + cours = "/" + spFilePath[0] + "/" + spFilePath[1]; // 파일 STRE_FILE_COURS 내용 저장 + String[] spFileNm = spFilePath[2].replace(".", "/").split("/"); - fileNm = spFileNm[0]; //파일 STRE_FILE_NM 내용 저장 - extsn = spFileNm[1]; //파일 FILE_EXTSN 내용 저장 - + fileNm = spFileNm[0]; // 파일 STRE_FILE_NM 내용 저장 + extsn = spFileNm[1]; // 파일 FILE_EXTSN 내용 저장 + mjonMsgDataVO.setFileStreCours(cours); mjonMsgDataVO.setStreFileNm(fileNm); mjonMsgDataVO.setFileExtsn(extsn); - + atchFileId1 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); - + mjonMsgDataVO.setAtchFileId1(atchFileId1); - //atchFileList.add(atchFileId1); - + // atchFileList.add(atchFileId1); + } - - if(filePath2 != null && !filePath2.equals("")) { - + + if (filePath2 != null && !filePath2.equals("")) { + filePath2 = filePath2.replace("/usr/local/tomcat_mjon/webapps/mjon/", ""); - String[] spFilePath = filePath1.split("/"); - + String[] spFilePath = filePath1.split("/"); + String cours = ""; String fileNm = ""; String extsn = ""; - - cours = "/" + spFilePath[0] + "/" + spFilePath[1]; //파일 STRE_FILE_COURS 내용 저장 - + + cours = "/" + spFilePath[0] + "/" + spFilePath[1]; // 파일 STRE_FILE_COURS 내용 저장 + String[] spFileNm = spFilePath[2].replace(".", "/").split("/"); - fileNm = spFileNm[0]; //파일 STRE_FILE_NM 내용 저장 - extsn = spFileNm[1]; //파일 FILE_EXTSN 내용 저장 - + fileNm = spFileNm[0]; // 파일 STRE_FILE_NM 내용 저장 + extsn = spFileNm[1]; // 파일 FILE_EXTSN 내용 저장 + mjonMsgDataVO.setFileStreCours(cours); mjonMsgDataVO.setStreFileNm(fileNm); mjonMsgDataVO.setFileExtsn(extsn); - + atchFileId2 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); mjonMsgDataVO.setAtchFileId2(atchFileId2); - //atchFileList.add(atchFileId2); - + // atchFileList.add(atchFileId2); + } - - if(filePath3 != null && !filePath3.equals("")) { - + + if (filePath3 != null && !filePath3.equals("")) { + filePath3 = filePath3.replace("/usr/local/tomcat_mjon/webapps/mjon/", ""); - String[] spFilePath = filePath1.split("/"); - + String[] spFilePath = filePath1.split("/"); + String cours = ""; String fileNm = ""; String extsn = ""; - - cours = "/" + spFilePath[0] + "/" + spFilePath[1]; //파일 STRE_FILE_COURS 내용 저장 - + + cours = "/" + spFilePath[0] + "/" + spFilePath[1]; // 파일 STRE_FILE_COURS 내용 저장 + String[] spFileNm = spFilePath[2].replace(".", "/").split("/"); - fileNm = spFileNm[0]; //파일 STRE_FILE_NM 내용 저장 - extsn = spFileNm[1]; //파일 FILE_EXTSN 내용 저장 - + fileNm = spFileNm[0]; // 파일 STRE_FILE_NM 내용 저장 + extsn = spFileNm[1]; // 파일 FILE_EXTSN 내용 저장 + mjonMsgDataVO.setFileStreCours(cours); mjonMsgDataVO.setStreFileNm(fileNm); mjonMsgDataVO.setFileExtsn(extsn); - + atchFileId3 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); mjonMsgDataVO.setAtchFileId3(atchFileId3); - //atchFileList.add(atchFileId3); - + // atchFileList.add(atchFileId3); + } - - //mjonMsgDataVO.setAtchFileList(atchFileList); - + + // mjonMsgDataVO.setAtchFileList(atchFileList); + List result = new ArrayList<>(); - - /*if(atchFileList.size() > 0) { //저장 내용에 그림 이미지가 있는 경우만 처리 - - result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); - - }*/ - + + /* + * if(atchFileList.size() > 0) { //저장 내용에 그림 이미지가 있는 경우만 처리 + * + * result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); + * + * } + */ + return mjonMsgDataVO; - + } - - public MjonMsgDataVO selectLetterCnById(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public MjonMsgDataVO selectLetterCnById(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectLetterCnById(mjonMsgDataVO); } - - public int selectMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public int selectMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMsgSearchWordCnt(mjonMsgDataVO); } - - public int insertMsgSearchWordInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public int insertMsgSearchWordInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.insertMsgSearchWordInfo(mjonMsgDataVO); } - - public int updateMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public int updateMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.updateMsgSearchWordCnt(mjonMsgDataVO); } - - public List selectMsgSearchWordList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + public List selectMsgSearchWordList(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMsgSearchWordList(mjonMsgDataVO); } - - //문자검색 인기검색어(노출여부=Y) 리스트 불러오기 2023-05-30 Hans - public List selectMsgSearchWordExpList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - + + // 문자검색 인기검색어(노출여부=Y) 리스트 불러오기 2023-05-30 Hans + public List selectMsgSearchWordExpList(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMsgSearchWordExpList(mjonMsgDataVO); } - - - - //문자검색 전송 실패 리스트 불러오기 - public void selectMsgSentFailList()throws Exception{ - List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); - - for(MjonMsgVO vo : msgFailList) { - + // 문자검색 전송 실패 리스트 불러오기 + public void selectMsgSentFailList() throws Exception { + + List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); + + for (MjonMsgVO vo : msgFailList) { + mjonMsgDataDAO.updateMsgSentFailPayBack(vo); - + } - + } - //문자검색 전송 실패 리스트 불러오기 - public void selectMsgSentFailListOneByDay()throws Exception{ + // 문자검색 전송 실패 리스트 불러오기 + public void selectMsgSentFailListOneByDay() throws Exception { + + List msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); + + for (MjonMsgVO vo : msgFailList) { - List msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); - - for(MjonMsgVO vo : msgFailList) { - mjonMsgDataDAO.updateMsgSentFailPayBack(vo); - + } - + } - - //현재 월 총 발송 건수 합계 구하기 - public String selectMsgSentSumData(String userId) throws Exception{ + + // 현재 월 총 발송 건수 합계 구하기 + public String selectMsgSentSumData(String userId) throws Exception { return mjonMsgDataDAO.selectMsgSentSumData(userId); } - - - public int insertMsgDataInfoIheartTest() throws Exception{ - int result = mjonMsgDataDAO.insertMsgDataInfoIheartTest(); - + + public int insertMsgDataInfoIheartTest() throws Exception { + int result = mjonMsgDataDAO.insertMsgDataInfoIheartTest(); + return result; } - - //결제관리 사용내역화면의 문자 상세보기 내용 - public MjonMsgVO selectPayUserMsgDetailDataAjax(MjonMsgVO mjonMsgVO) throws Exception{ + + // 결제관리 사용내역화면의 문자 상세보기 내용 + public MjonMsgVO selectPayUserMsgDetailDataAjax(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserMsgDetailDataAjax(mjonMsgVO); } - + // MsgGroupData Not Exist Check - public MjonMsgVO selectMsgGroupNotExistInfo(MjonMsgVO mjonMsgVO) throws Exception{ + public MjonMsgVO selectMsgGroupNotExistInfo(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectMsgGroupNotExistInfo(mjonMsgVO); } - - //문자발송 스팸 문자 리스트 불러오기 - public List selectSpamKeywordList() throws Exception{ + + // 문자발송 스팸 문자 리스트 불러오기 + public List selectSpamKeywordList() throws Exception { return mjonMsgDataDAO.selectSpamKeywordList(); } - - public List selectBestMsgDataList(LetterVO letterVO) throws Exception{ - + + public List selectBestMsgDataList(LetterVO letterVO) throws Exception { + return mjonMsgDataDAO.selectBestMsgDataList(letterVO); } - public List selectBestPhotoMsgDataList(LetterVO letterVO) throws Exception{ - + public List selectBestPhotoMsgDataList(LetterVO letterVO) throws Exception { + return mjonMsgDataDAO.selectBestPhotoMsgDataList(letterVO); } @@ -2356,839 +2342,840 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M public MjonMsgVO selectSendAgentInfo(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectSendAgentInfo(mjonMsgVO); } - + @Override public List selectPayUserWithKakaoList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserWithKakaoList(mjonMsgVO); } - + @Override public List selectPayUserWithKakaoSumList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserWithKakaoSumList(mjonMsgVO); } - + // 문자 그룹정보 => 재전송용 - public MjonMsgDataVO selectMjMsgGroupInfoByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public MjonMsgDataVO selectMjMsgGroupInfoByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception { return mjonMsgDataDAO.selectMjMsgGroupInfoByResend(mjonMsgDataVO); } // 문자 상세정보 => 재전송용 - public List selectMjMsgListByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public List selectMjMsgListByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception { return mjonMsgDataDAO.selectMjMsgListByResend(mjonMsgDataVO); } - - - -/* - * 대량 문자 데이터 배치 입력 처리 신규 추가 - * 2024/02/02 우영두 - * - * - * */ - public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception{ - + + /* + * 대량 문자 데이터 배치 입력 처리 신규 추가 2024/02/02 우영두 + * + * + */ + public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception { + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - + try { - - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - // 장문 전송 - String contSeq = ""; - - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - // 최종 입력 수 저장 변수 - int resultCnt = 0; - int limitCnt = 10000; - int blockCnt = 0; - - // 총 보유 금액과 전송 합계 비교 - - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 - - return 0 ; - }*/ - - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - - - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - /*if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - - Date now = new Date(); - - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - mjonMsgVO.setReqDate(sdFormat.format(now)); - - }*/ - - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) - String befCash = mjonMsgVO.getBefCash(); - - //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 - if("".equals(befCash) || befCash == null) { - befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); - } - - mjonMsgVO.setBefCash(befCash); - // 문자 전송 그룹 테이블에 정보 입력 - //mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - - //수신거부 목록 불러오기 - List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); - - List dupliBlockList = MJUtil.getDuplicateList(userBlockList); - int usrBlockCnt = dupliBlockList.size(); - - //회원 전용 전송사 정보 불러오기 - MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); - String hotlineAgentCode = userInfo.getHotlineAgentCode(); - - //야간스미싱 알림여부 정보 불러오기 - JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - System.out.println("++++++++++++++++++ holiSmishingNoti ::: "+holiSmishingNoti); - //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 - boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 예외 알림 일정에 포함되는 시간에는 슬랙 및 30분 딜레이를 하지 않는다. - - //스팸, 스미싱 상태인 경우에만 true 처리 - //야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. - //야간 스미싱 알림 여부가 활성화 이고 스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. - if(holiSmishingNoti.equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - spamSmishingPassStatus = smishingAlarmPassSts; - }else { - - spamSmishingPassStatus = true; - } - - //전용 전송사가 지정되어 있으면 실행 - if(!hotlineAgentCode.equals("00")) { - - MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); - mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); - - //문자 타입 셋팅 - if(msgType.equals("6")) { - int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - if(fCnt > 0) { - - mjonMsgAgentStsVO.setMsgType("P"); - - }else { - mjonMsgAgentStsVO.setMsgType("L"); - } - - }else { - mjonMsgAgentStsVO.setMsgType("S"); - } - - List hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); - - String mberAgentConde = ""; - String mberSendRate = ""; - String mberRepAgent = ""; - - for(MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { - - mberAgentConde = tmp.getAgentCode(); - mberSendRate = tmp.getSendRate(); - mberRepAgent = tmp.getRepAgent(); - String useYn = tmp.getUseYn(); - - if(userInfo.getBlineCode().equals("N")) { - //회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. - if(mberSendRate.equals("0") || useYn.equals("N")) { - - hotlineAgentCode = mberRepAgent; - - } - } - - } - - } - - - /** - * Agent 추가시 셋팅하기 - * Agent 발송 비율 불러오기 - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * */ - - int iheartCnt = 0; //아이하트 전송갯수 - int hncCnt = 0; //현대퓨처넷 전송갯수 - int imoCnt = 0; //아이엠오 전송갯수 - int bizCnt = 0; //비즈뿌리오 전송갯수 - int jjCnt = 0; //제이제이 전송갯수 - int ivtCnt = 0; //인비토 전송갯수 - - // 전송사별 발송 리스트 조회 - List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); - - if(callToCnt >= 10) { - // 전송사별 배분률 조회 - int sendRateSize = sendRateList.size(); - - /** - * Agent 추가시 셋팅하기 + String msgType = mjonMsgVO.getMsgType(); + String agentCode = mjonMsgVO.getAgentCode(); + // 장문 전송 + String contSeq = ""; + + // float myPrice = 10000; + // float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + // 최종 입력 수 저장 변수 + int resultCnt = 0; + int limitCnt = 10000; + int blockCnt = 0; + + // 총 보유 금액과 전송 합계 비교 + + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 * - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * */ - - for(int i=0; i< sendRateSize; i++) { - - String sndAgentCode = sendRateList.get(i).getAgentCode(); - - if(sndAgentCode.equals("01")) {//아이하트 전송비율 - - iheartCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("02")) {//현대퓨처넷 전송비율 - - hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("03")) {//아이엠오 전송비율 - - imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("04")) {//비즈뿌리오 전송비율 - - bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("05")) {//제이제이 전송비율 - - jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - }else if(sndAgentCode.equals("07")) {//인비토 전송비율 - - ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - - } - - } - } - - /** - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 하도록 한다. - * */ - - /*if(callToCnt >= 10000) { - - limitCnt = 1000; - - }*/ - - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); - - int cnt = 1; - int totCnt = 1; - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 - String delayTime ="";//30분 지연시간 - String spamStatus = mjonMsgVO.getSpamStatus();//스팸 문구 유무 - String smishingYn = mjonMsgVO.getSmishingYn();//스미싱 의심 유무 - String delayYn = "N"; //문자발송 30분 지연 처리 유무 - - if(spamStatus == null || spamStatus.equals("")) { - - spamStatus = "N"; - - } - - if(smishingYn == null || smishingYn.equals("")) { - - smishingYn = "N"; - - } - - //스팸스미싱 예외 상태가 true 이면 30분 딜레이 및 슬랙 알림을 하지 않는다. - if(spamSmishingPassStatus) { - - spamStatus = "N"; - smishingYn = "N"; - delayYn = "N"; - - } - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - if(spamStatus.equals("Y") || smishingYn.equals("Y")) { - - mjonMsgVO.setDelayYn("Y");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 넣어줘야한다. - - }else { - - mjonMsgVO.setDelayYn("N");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임 - } - - }else {//즉시발송의 경우 현재 시간으로 입력해 준다. - - Date now = new Date(); - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 시킨다. - - String nowDate = transFormat.format(now); - Date toDate = transFormat.parse(nowDate); - System.out.println("++++++++++++++++++++ origin reqDate ::: "+toDate); - cal.setTime(toDate); - - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); - mjonMsgVO.setReqDate(delayTime); - System.out.println("++++++++++++++++++++ delay reqDate ::: "+mjonMsgVO.getReqDate()); - delayYn = "Y"; - mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 코드 셋팅 - - }else {//정상적인 문자인 경우 즉시발송 처리해준다. - - mjonMsgVO.setReqDate(transFormat.format(now)); - mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 디폴트 값 셋팅(N) - - } - - } - - - //String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - //String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - //String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - //String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - //String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //Controller에서 전달 받은 분할 시간 정보 리스트 - List dividDayList = mjonMsgVO.getDividDay(); - - String frstDelayTime = mjonMsgVO.getReqDate(); - -/* - * 대용량 발송자의 msg_id 마지막 값 불러오기 - * 신규 IDgen 값 생성해주기 - * - * */ - /*String subUserId = ""; - if(mjonMsgVO.getUserId().length() < 5) { - int a = 5 - mjonMsgVO.getUserId().length(); - subUserId = mjonMsgVO.getUserId(); - for(int i=0; i < a; i++) { - subUserId += "0"; - } - }else { - subUserId = mjonMsgVO.getUserId().substring(0, 5).toUpperCase(); - } - mjonMsgVO.setSearchKeyword(subUserId); - System.out.println("+++++++++++ subUserId ::: "+subUserId); + * return 0 ; } + */ - String userLastIdgen = mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); - System.out.println(userLastIdgen); - - //기존에 등록된 pk값이 없으면 초기 번호로 셋팅 - if(userLastIdgen == null || userLastIdgen.equals("null")) { - - userLastIdgen = subUserId + "_00000000000000"; - - }*/ - -// System.out.println("+_+++++ startUserId ::: "+startUserId); - String startUserId = ""; - MjonCommon mjComm = new MjonCommon(); - //문자발송 리스트 생성 시작 - for(int i = 0; i < callToCnt; i++) { - startUserId = idgenMsgId.getNextStringId(); - //신규 pk IDgen 데이터 생성 - /*startUserId = mjComm.getCreateMsgUserIdgen(subUserId, startUserId);*/ - - Boolean blockSts = false; - for(int j = 0; j < usrBlockCnt; j++) { + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 - if(phoneList[i].equals(dupliBlockList.get(j).toString())) { - - blockCnt++; //수신 차단 카운드를 해준다. - blockSts = true; - - } - + mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + /* + * if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + * + * Date now = new Date(); + * + * SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + * + * mjonMsgVO.setReqDate(sdFormat.format(now)); + * + * } + */ + + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + String befCash = mjonMsgVO.getBefCash(); + + // VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 + if ("".equals(befCash) || befCash == null) { + befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); } - - if(!blockSts) { //수신거부가 아니면 추가 - - MjonMsgVO tempVO = new MjonMsgVO(); - + + mjonMsgVO.setBefCash(befCash); + // 문자 전송 그룹 테이블에 정보 입력 + // mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + + // 수신거부 목록 불러오기 + List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); + + List dupliBlockList = MJUtil.getDuplicateList(userBlockList); + int usrBlockCnt = dupliBlockList.size(); + + // 회원 전용 전송사 정보 불러오기 + MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); + String hotlineAgentCode = userInfo.getHotlineAgentCode(); + + // 야간스미싱 알림여부 정보 불러오기 + JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + + System.out.println("++++++++++++++++++ holiSmishingNoti ::: " + holiSmishingNoti); + // 스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 + boolean spamSmishingPassStatus = false; // 야간스미싱 알림여부가 활성화인 경우 예외 알림 일정에 포함되는 시간에는 슬랙 및 30분 딜레이를 하지 않는다. + + // 스팸, 스미싱 상태인 경우에만 true 처리 + // 야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. + // 야간 스미싱 알림 여부가 활성화 이고 스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. + if (holiSmishingNoti.equals("Y")) { + + MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); + + msgAlarmSetVO.setUseYn("Y"); + msgAlarmSetVO.setFirstIndex(0); + + List resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); + + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + + MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); + msgHolidayVO.setFirstIndex(0); + msgHolidayVO.setRecordCountPerPage(100); + msgHolidayVO.setSearchHoliYear(Integer.toString(year)); + + List resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + + MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); + + boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, + resultHolidayList); + + spamSmishingPassStatus = smishingAlarmPassSts; + } else { + + spamSmishingPassStatus = true; + } + + // 전용 전송사가 지정되어 있으면 실행 + if (!hotlineAgentCode.equals("00")) { + + MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); + mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); + + // 문자 타입 셋팅 + if (msgType.equals("6")) { + int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + if (fCnt > 0) { + + mjonMsgAgentStsVO.setMsgType("P"); + + } else { + mjonMsgAgentStsVO.setMsgType("L"); + } + + } else { + mjonMsgAgentStsVO.setMsgType("S"); + } + + List hotlineMsgAgentList = mjonMsgAgentStsDAO + .selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); + + String mberAgentConde = ""; + String mberSendRate = ""; + String mberRepAgent = ""; + + for (MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { + + mberAgentConde = tmp.getAgentCode(); + mberSendRate = tmp.getSendRate(); + mberRepAgent = tmp.getRepAgent(); + String useYn = tmp.getUseYn(); + + if (userInfo.getBlineCode().equals("N")) { + // 회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. + if (mberSendRate.equals("0") || useYn.equals("N")) { + + hotlineAgentCode = mberRepAgent; + + } + } + + } + + } + + /** + * Agent 추가시 셋팅하기 Agent 발송 비율 불러오기 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 + * : 비즈뿌리오(04) 추가 23.04.10 : 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 + */ + + int iheartCnt = 0; // 아이하트 전송갯수 + int hncCnt = 0; // 현대퓨처넷 전송갯수 + int imoCnt = 0; // 아이엠오 전송갯수 + int bizCnt = 0; // 비즈뿌리오 전송갯수 + int jjCnt = 0; // 제이제이 전송갯수 + int ivtCnt = 0; // 인비토 전송갯수 + + // 전송사별 발송 리스트 조회 + List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); + + if (callToCnt >= 10) { + // 전송사별 배분률 조회 + int sendRateSize = sendRateList.size(); + /** * Agent 추가시 셋팅하기 * - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * 23.05.09 : 회원 전용 전송사 정보가 있으면 모든 문자를 전용 전송사로 발송처리함. - * */ + * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 : 비즈뿌리오(04) 추가 23.04.10 : + * 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 + */ + + for (int i = 0; i < sendRateSize; i++) { + + String sndAgentCode = sendRateList.get(i).getAgentCode(); + + if (sndAgentCode.equals("01")) {// 아이하트 전송비율 + + iheartCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("02")) {// 현대퓨처넷 전송비율 + + hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("03")) {// 아이엠오 전송비율 + + imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("04")) {// 비즈뿌리오 전송비율 + + bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("05")) {// 제이제이 전송비율 + + jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + + } else if (sndAgentCode.equals("07")) {// 인비토 전송비율 + + ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - if(hotlineAgentCode.equals("00")) {//전용 전송사가 사용 안함인 경우 분배 및 대표 전송사로 설정 - - if(iheartCnt > 0) { - agentCode = "01"; - tempVO.setAgentCode(agentCode); - iheartCnt--; - }else if(hncCnt > 0) { - agentCode = "02"; - tempVO.setAgentCode(agentCode); - hncCnt--; - }else if(imoCnt > 0) { - agentCode = "03"; - tempVO.setAgentCode(agentCode); - imoCnt--; - }else if(bizCnt > 0) { - agentCode = "04"; - tempVO.setAgentCode(agentCode); - bizCnt--; - }else if(jjCnt > 0) { - agentCode = "05"; - tempVO.setAgentCode(agentCode); - jjCnt--; - }else if(ivtCnt > 0) { - agentCode = "07"; - tempVO.setAgentCode(agentCode); - ivtCnt--; - }else {//전송사 Agent 대표 전송사로 지정한다. - - agentCode = sendRateList.get(0).getRepAgent(); - tempVO.setAgentCode(agentCode); } - - }else {//전용 전송사가 지정되어 있는 경우 전용 전송사로 지정 - - agentCode = hotlineAgentCode; - tempVO.setAgentCode(hotlineAgentCode); + } - //Agent 셋팅 끝 - - //tempVO.setMsgId(idgenMsgId.getNextStringId()); - - tempVO.setMsgId(startUserId); - - tempVO.setUserId(mjonMsgVO.getUserId()); - tempVO.setCallTo(phoneList[i]); - tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - tempVO.setMsgType(mjonMsgVO.getMsgType()); - tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - - //아이엠오 전송사 문자 타입 설정해 주기 - if(agentCode.equals("03")) { - - // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 - if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 - - mjonMsgVO.setNeoType("2"); - - }else{ // 그림포함 문자인경우 - - mjonMsgVO.setNeoType("4"); - - } - - } - - //문자내용 내용 - 치환 처리 - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - //일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - /*if (smsTxt.indexOf("[*이름*]") > -1) { - if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - } - } - - if (smsTxt.indexOf("[*1*]") > -1) { - if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - } + } + + /** + * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 + * 하도록 한다. + */ + + /* + * if(callToCnt >= 10000) { + * + * limitCnt = 1000; + * + * } + */ + + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); + + int cnt = 1; + int totCnt = 1; + + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); + + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + + int turmMin = 0; + int totalCallCnt = 0; + int divideCnt = 0; + int count = 1; // 분할 카운트 + String delayTime = "";// 30분 지연시간 + String spamStatus = mjonMsgVO.getSpamStatus();// 스팸 문구 유무 + String smishingYn = mjonMsgVO.getSmishingYn();// 스미싱 의심 유무 + String delayYn = "N"; // 문자발송 30분 지연 처리 유무 + + if (spamStatus == null || spamStatus.equals("")) { + + spamStatus = "N"; + + } + + if (smishingYn == null || smishingYn.equals("")) { + + smishingYn = "N"; + + } + + // 스팸스미싱 예외 상태가 true 이면 30분 딜레이 및 슬랙 알림을 하지 않는다. + if (spamSmishingPassStatus) { + + spamStatus = "N"; + smishingYn = "N"; + delayYn = "N"; + + } + + if (!mjonMsgVO.getReserveYn().equals("N")) {// 예약문자인 경우 시간 셋팅 + + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 + + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); + + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + + if (spamStatus.equals("Y") || smishingYn.equals("Y")) { + + mjonMsgVO.setDelayYn("Y");// 일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 + // 넣어줘야한다. + + } else { + + mjonMsgVO.setDelayYn("N");// 일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임 } - - if (smsTxt.indexOf("[*2*]") > -1) { - if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - } + + } else {// 즉시발송의 경우 현재 시간으로 입력해 준다. + + Date now = new Date(); + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 + // 시킨다. + + String nowDate = transFormat.format(now); + Date toDate = transFormat.parse(nowDate); + System.out.println("++++++++++++++++++++ origin reqDate ::: " + toDate); + cal.setTime(toDate); + + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); + mjonMsgVO.setReqDate(delayTime); + System.out.println("++++++++++++++++++++ delay reqDate ::: " + mjonMsgVO.getReqDate()); + delayYn = "Y"; + mjonMsgVO.setDelayYn(delayYn);// 문자 발송 30분 지연 코드 셋팅 + + } else {// 정상적인 문자인 경우 즉시발송 처리해준다. + + mjonMsgVO.setReqDate(transFormat.format(now)); + mjonMsgVO.setDelayYn(delayYn);// 문자 발송 30분 지연 디폴트 값 셋팅(N) + } - - if (smsTxt.indexOf("[*3*]") > -1) { - if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); + + } + + // String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 + String[] phoneList = mjonMsgVO.getCallToList(); // 받는사람 연락처 리스트 + // String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 + // String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 + // String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 + // String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 + + // Controller에서 전달 받은 분할 시간 정보 리스트 + List dividDayList = mjonMsgVO.getDividDay(); + + String frstDelayTime = mjonMsgVO.getReqDate(); + + /* + * 대용량 발송자의 msg_id 마지막 값 불러오기 신규 IDgen 값 생성해주기 + * + */ + /* + * String subUserId = ""; if(mjonMsgVO.getUserId().length() < 5) { int a = 5 - + * mjonMsgVO.getUserId().length(); subUserId = mjonMsgVO.getUserId(); for(int + * i=0; i < a; i++) { subUserId += "0"; } }else { subUserId = + * mjonMsgVO.getUserId().substring(0, 5).toUpperCase(); } + * mjonMsgVO.setSearchKeyword(subUserId); + * System.out.println("+++++++++++ subUserId ::: "+subUserId); + * + * String userLastIdgen = mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); + * System.out.println(userLastIdgen); + * + * //기존에 등록된 pk값이 없으면 초기 번호로 셋팅 if(userLastIdgen == null || + * userLastIdgen.equals("null")) { + * + * userLastIdgen = subUserId + "_00000000000000"; + * + * } + */ + +// System.out.println("+_+++++ startUserId ::: "+startUserId); + String startUserId = ""; + MjonCommon mjComm = new MjonCommon(); + // 문자발송 리스트 생성 시작 + for (int i = 0; i < callToCnt; i++) { + startUserId = idgenMsgId.getNextStringId(); + // 신규 pk IDgen 데이터 생성 + /* startUserId = mjComm.getCreateMsgUserIdgen(subUserId, startUserId); */ + + Boolean blockSts = false; + for (int j = 0; j < usrBlockCnt; j++) { + + if (phoneList[i].equals(dupliBlockList.get(j).toString())) { + + blockCnt++; // 수신 차단 카운드를 해준다. + blockSts = true; + } + } - - if (smsTxt.indexOf("[*4*]") > -1) { - if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - } - }*/ - - tempVO.setSmsTxt(smsTxt); - - //즉시 / 예약 전송 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 준다. - - tempVO.setReqDate(mjonMsgVO.getReqDate());//상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 입력함. - - - }else {//일반 문자인 경우 현재시간을 입력해 준다. - - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - tempVO.setReqDate(sdFormat.format(now)); - - } - - }else { // 예약 발송의 경우 예약 시간을 입력 - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - //스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. - //20230630 우영두 추가 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) { - - Date delayDate = transFormat.parse(dividDayList.get(i)); - - cal.setTime(delayDate); - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); - - tempVO.setReqDate(delayTime); //분할 문자 예약 시간 입력해주기 - - }else { - - tempVO.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기 - - } - - - }else {//일반 예약 발송의 경우 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. - - Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); - - cal.setTime(delayDate); - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); - - tempVO.setReqDate(delayTime); - - }else { - - tempVO.setReqDate(mjonMsgVO.getReqDate()); - - } - - } - - //딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. - //분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. - //mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. - if(i==0) { - frstDelayTime = tempVO.getReqDate(); - } - } - - if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 - + + if (!blockSts) { // 수신거부가 아니면 추가 + + MjonMsgVO tempVO = new MjonMsgVO(); + /** - * 장문 / 그림문자 일 경우 제목 처리 - * 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 - * 내용 텍스트가 없는 경우는 어쩔수 없는 것으로 간주하여 Null로 처리한다. + * Agent 추가시 셋팅하기 * - * */ - String contents = tempVO.getSmsTxt(); //문자 내용 - if(StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 입력이 없는 경우 - - if(StringUtil.isNotEmpty(contents) && contents != null) {//문자내용이 있는 경우 처리 - - String[] split = contents.split("\n"); - - if(split.length > 0) { - - String subject = ""; - String msgKind = mjonMsgVO.getMsgKind();//문자 타입(일반, 광고, 선거문자) - - //선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 - if(msgKind.equals("C")) { - if(split.length > 1) { - subject = split[1].trim(); - }else { - subject = split[0].substring(0,20); + * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 : 비즈뿌리오(04) 추가 23.04.10 : + * 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 23.05.09 : 회원 전용 전송사 정보가 있으면 모든 문자를 전용 + * 전송사로 발송처리함. + */ + + if (hotlineAgentCode.equals("00")) {// 전용 전송사가 사용 안함인 경우 분배 및 대표 전송사로 설정 + + if (iheartCnt > 0) { + agentCode = "01"; + tempVO.setAgentCode(agentCode); + iheartCnt--; + } else if (hncCnt > 0) { + agentCode = "02"; + tempVO.setAgentCode(agentCode); + hncCnt--; + } else if (imoCnt > 0) { + agentCode = "03"; + tempVO.setAgentCode(agentCode); + imoCnt--; + } else if (bizCnt > 0) { + agentCode = "04"; + tempVO.setAgentCode(agentCode); + bizCnt--; + } else if (jjCnt > 0) { + agentCode = "05"; + tempVO.setAgentCode(agentCode); + jjCnt--; + } else if (ivtCnt > 0) { + agentCode = "07"; + tempVO.setAgentCode(agentCode); + ivtCnt--; + } else {// 전송사 Agent 대표 전송사로 지정한다. + + agentCode = sendRateList.get(0).getRepAgent(); + tempVO.setAgentCode(agentCode); + } + + } else {// 전용 전송사가 지정되어 있는 경우 전용 전송사로 지정 + + agentCode = hotlineAgentCode; + tempVO.setAgentCode(hotlineAgentCode); + } + // Agent 셋팅 끝 + + // tempVO.setMsgId(idgenMsgId.getNextStringId()); + + tempVO.setMsgId(startUserId); + + tempVO.setUserId(mjonMsgVO.getUserId()); + tempVO.setCallTo(phoneList[i]); + tempVO.setCallFrom(mjonMsgVO.getCallFrom()); + tempVO.setMsgType(mjonMsgVO.getMsgType()); + tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); + + // 아이엠오 전송사 문자 타입 설정해 주기 + if (agentCode.equals("03")) { + + // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 + if (mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 + + mjonMsgVO.setNeoType("2"); + + } else { // 그림포함 문자인경우 + + mjonMsgVO.setNeoType("4"); + + } + + } + + // 문자내용 내용 - 치환 처리 + String smsTxt = mjonMsgVO.getSmsTxt(); // 발송 문자 내용 + + // 일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. + smsTxt = smsTxt.replaceAll(String.valueOf((char) 13), ""); + /* + * if (smsTxt.indexOf("[*이름*]") > -1) { if(nameList.length > i && + * StringUtil.isNotEmpty(nameList[i])) { smsTxt = + * smsTxt.replaceAll("\\[\\*이름\\*\\]", + * StringUtil.getString(nameList[i].replaceAll("§", ","))); }else { smsTxt = + * smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); } } + * + * if (smsTxt.indexOf("[*1*]") > -1) { if(rep1.length > i && + * StringUtil.isNotEmpty(rep1[i])) { smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", + * StringUtil.getString(rep1[i].replaceAll("§", ","))); }else { smsTxt = + * smsTxt.replaceAll("\\[\\*1\\*\\]", ""); } } + * + * if (smsTxt.indexOf("[*2*]") > -1) { if(rep2.length > i && + * StringUtil.isNotEmpty(rep2[i])) { smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", + * StringUtil.getString(rep2[i].replaceAll("§", ","))); }else { smsTxt = + * smsTxt.replaceAll("\\[\\*2\\*\\]", ""); } } + * + * if (smsTxt.indexOf("[*3*]") > -1) { if(rep3.length > i && + * StringUtil.isNotEmpty(rep3[i])) { smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", + * StringUtil.getString(rep3[i].replaceAll("§", ","))); }else { smsTxt = + * smsTxt.replaceAll("\\[\\*3\\*\\]", ""); } } + * + * if (smsTxt.indexOf("[*4*]") > -1) { if(rep4.length > i && + * StringUtil.isNotEmpty(rep4[i])) { smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", + * StringUtil.getString(rep4[i].replaceAll("§", ","))); }else { smsTxt = + * smsTxt.replaceAll("\\[\\*4\\*\\]", ""); } } + */ + + tempVO.setSmsTxt(smsTxt); + + // 즉시 / 예약 전송 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 + // 준다. + + tempVO.setReqDate(mjonMsgVO.getReqDate());// 상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 + // 입력함. + + } else {// 일반 문자인 경우 현재시간을 입력해 준다. + + Date now = new Date(); + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + tempVO.setReqDate(sdFormat.format(now)); + + } + + } else { // 예약 발송의 경우 예약 시간을 입력 + // 분할 발송을 체크 한 경우 + if (mjonMsgVO.getDivideChk() != null) { + + // 스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. + // 20230630 우영두 추가 + if (spamStatus.equals("Y") || smishingYn.equals("Y")) { + + Date delayDate = transFormat.parse(dividDayList.get(i)); + + cal.setTime(delayDate); + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); + + tempVO.setReqDate(delayTime); // 분할 문자 예약 시간 입력해주기 + + } else { + + tempVO.setReqDate(dividDayList.get(i)); // 분할 문자 예약 시간 입력해주기 + + } + + } else {// 일반 예약 발송의 경우 + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 + // 처리해준다. + + Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); + + cal.setTime(delayDate); + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); + + tempVO.setReqDate(delayTime); + + } else { + + tempVO.setReqDate(mjonMsgVO.getReqDate()); + + } + + } + + // 딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. + // 분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. + // mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. + if (i == 0) { + frstDelayTime = tempVO.getReqDate(); + } + } + + if (!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + + /** + * 장문 / 그림문자 일 경우 제목 처리 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 내용 텍스트가 없는 경우는 + * 어쩔수 없는 것으로 간주하여 Null로 처리한다. + * + */ + String contents = tempVO.getSmsTxt(); // 문자 내용 + if (StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 + // 입력이 + // 없는 + // 경우 + + if (StringUtil.isNotEmpty(contents) && contents != null) {// 문자내용이 있는 경우 처리 + + String[] split = contents.split("\n"); + + if (split.length > 0) { + + String subject = ""; + String msgKind = mjonMsgVO.getMsgKind();// 문자 타입(일반, 광고, 선거문자) + + // 선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 + if (msgKind.equals("C")) { + if (split.length > 1) { + subject = split[1].trim(); + } else { + subject = split[0].substring(0, 20); + } + } else { + subject = split[0].trim(); } - }else { - subject = split[0].trim(); + } } - - } - - }else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅 - tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); - } - - tempVO.setFileCnt(mjonMsgVO.getFileCnt()); - tempVO.setFileName1(mjonMsgVO.getFileName1()); - tempVO.setFileName2(mjonMsgVO.getFileName2()); - tempVO.setFileName3(mjonMsgVO.getFileName3()); - tempVO.setNeoType(mjonMsgVO.getNeoType()); - tempVO.setContSeq(mjonMsgVO.getContSeq()); - - } - - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode.equals("01") && msgType.equals("6")) { - - // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - - //이미지가 있는경우 file_type, file_Cnt 값 셋팅 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - String contents = mjonMsgVO.getSmsTxt(); - - if(fileCnt > 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { - fileCnt = fileCnt + 1; - } - tempVO.setFileCnt(Integer.toString(fileCnt)); - - }else { - tempVO.setFileCnt("1"); - } - - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); - tempVO.setSmsTxt(smsTxt); - tempVO.setContSeq(contSeq); - - } - - //문자 내용 추가해 주기 - msgDataInfo.add(tempVO); - - }//수신거부 처리로직 끝 - - int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { - - if(msgDataInfo.size() > 0) { - - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - - } - - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - - } - - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; - - //List 초기화 하기 - msgDataInfo.clear(); - - } - - } - - cnt++; - totCnt++; - - } - - /* - * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 - * 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 - * 2. 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) - * - * */ - - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultCnt > 0) { - - int totSendCnt = mjonMsgVO.getTotalCallCnt(); - Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - Float totPrice = eachPrice * resultCnt; - String strTotPrice = String.format("%.1f", totPrice); - - mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅 - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(strTotPrice)); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultCnt > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - //mjonMsgService.insertGroupMsgData(mjonMsgVO); - int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); - //메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. - if(msgGroupDataCnt < 1) { - mjonMsgVO.setAgentCode(agentCode);//전송사 코드 번호를 셋팅해 준다. - - //지연 유무 코드가 Null 인경우 체크 - String tmpDelayYn = mjonMsgVO.getDelayYn(); - if(tmpDelayYn == null) { - mjonMsgVO.setDelayYn("N"); - } - - //예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 셋팅해준다. - if(mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) { - - mjonMsgVO.setReqDate(frstDelayTime); - - } - mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - - try { - - //야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 - if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { - mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅 + tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); + } + + tempVO.setFileCnt(mjonMsgVO.getFileCnt()); + tempVO.setFileName1(mjonMsgVO.getFileName1()); + tempVO.setFileName2(mjonMsgVO.getFileName2()); + tempVO.setFileName3(mjonMsgVO.getFileName3()); + tempVO.setNeoType(mjonMsgVO.getNeoType()); + tempVO.setContSeq(mjonMsgVO.getContSeq()); + } - - } catch (Exception e) { - System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus HG 대량 선거 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode.equals("01") && msgType.equals("6")) { + + // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 + + // 이미지가 있는경우 file_type, file_Cnt 값 셋팅 + int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + String contents = mjonMsgVO.getSmsTxt(); + + if (fileCnt > 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + + // 그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) + if (StringUtil.isNotEmpty(contents)) { + fileCnt = fileCnt + 1; + } + tempVO.setFileCnt(Integer.toString(fileCnt)); + + } else { + tempVO.setFileCnt("1"); + } + + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); + tempVO.setSmsTxt(smsTxt); + tempVO.setContSeq(contSeq); + + } + + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); + + } // 수신거부 처리로직 끝 + + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + + if (msgDataInfo.size() > 0) { + + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + + } + + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + + } else { + + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + + if (msgDataInfo.size() > 0) { + + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + + } + + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; + + // List 초기화 하기 + msgDataInfo.clear(); + + } + } - - }else { - mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); + + cnt++; + totCnt++; + } - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - } - - // 성공 - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 - returnVO.setAgentCode(agentCode); - + + /* + * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 2. + * 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) + * + */ + + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); + + // 1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. + if (resultCnt > 0) { + + int totSendCnt = mjonMsgVO.getTotalCallCnt(); + Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); + Float totPrice = eachPrice * resultCnt; + String strTotPrice = String.format("%.1f", totPrice); + + mjonMsgVO.setTotPrice(strTotPrice);// 현재 합산 금액 셋팅 + mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); + mjonPayVO.setUserId(mjonMsgVO.getUserId()); + mjonPayVO.setCash(-Float.parseFloat(strTotPrice)); + mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); + mjonPayVO.setMemo("SMS 문자 총 " + totSendCnt + "건 중 " + resultCnt + "건 발송"); + mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + + mjonPayService.insertCash(mjonPayVO); // 캐시차감 + mjonPayService.updateMemberCash(mjonPayVO); // 회원정보 업데이트 + } + + // 문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. + if (resultCnt > 0) { + + // 문자 전송 그룹 테이블에 정보 입력 + int groupCnt = resultCnt; + mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + // mjonMsgService.insertGroupMsgData(mjonMsgVO); + int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); + + // 메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. + if (msgGroupDataCnt < 1) { + mjonMsgVO.setAgentCode(agentCode);// 전송사 코드 번호를 셋팅해 준다. + + // 지연 유무 코드가 Null 인경우 체크 + String tmpDelayYn = mjonMsgVO.getDelayYn(); + if (tmpDelayYn == null) { + mjonMsgVO.setDelayYn("N"); + } + + // 예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 + // 셋팅해준다. + if (mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) { + + mjonMsgVO.setReqDate(frstDelayTime); + + } + mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + + try { + + // 야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 + // 우영두 추가 + if (holiSmishingNoti.equals("Y") && spamSmishingPassStatus + && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { + mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } + + } catch (Exception e) { + System.out.println( + "++++++++++++++++++++++++++++++ spamSmishingPassStatus HG 대량 선거 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + } + + } else { + mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); + } + + // 이벤트 회원 남은 캐시 업데이트 + fnUpdateEventRemainCash(mjonPayVO); + + } + + // 성공 + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + returnVO.setAgentCode(agentCode); + } catch (Exception e) { // 실패 - returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장 + returnVO.setSendMsgCnt(Integer.toString(0)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(0)); // 수신차단 건수 저장 returnVO.setAgentCode("01"); - + System.out.println("========================================================================="); System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfoBatch ERROR !!! : " + e); System.out.println("========================================================================="); return returnVO; - + } - + return returnVO; - + } - - //대용량 문자 전송시 사용자 마지막 PK 값 조회하기 + // 대용량 문자 전송시 사용자 마지막 PK 값 조회하기 @Override - public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{ + public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); } - + @Override public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDataDAO.selectPayUserSumFaxList(mjonMsgVO); } + + @Override + public List selectMberCertPhoneList(String userId) { + return mjonMsgDataDAO.selectMberCertPhoneList(userId); + } + + @Override + public StatusResponse insertMberCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) { + mjonMsgDataDAO.insertMberCertPhoneInfo(mberCertPhoneVO); + return new StatusResponse(HttpStatus.OK, "등록하였습니다.", LocalDateTime.now()); + } + + + @Override + public StatusResponse deleteCertPhoneInfo(MberCertPhoneVO mberCertPhoneVO) { + mjonMsgDataDAO.deleteCertPhoneInfo(mberCertPhoneVO); + return new StatusResponse(HttpStatus.OK, "삭제하였습니다.", LocalDateTime.now()); + } + } diff --git a/src/main/java/itn/let/uat/uia/service/MberCertPhoneVO.java b/src/main/java/itn/let/uat/uia/service/MberCertPhoneVO.java new file mode 100644 index 00000000..e9669486 --- /dev/null +++ b/src/main/java/itn/let/uat/uia/service/MberCertPhoneVO.java @@ -0,0 +1,65 @@ +package itn.let.uat.uia.service; + +import itn.let.uss.umt.service.UserDefaultVO; + +/** + * + * @author : 이호영 + * @fileName : MberCertPhoneVO.java + * @date : 2024.11.18 + * @description : 발신번호 lettngnrlmber_cert_phone 관련 vo + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- * + * 2024.11.18 이호영 최초 생성 + * + * + * + */ +public class MberCertPhoneVO extends UserDefaultVO{ + + + /** + * @description : + */ + private static final long serialVersionUID = 1L; + + + private String mberId; + private String mbtlnum; + private String certUseYn; + private String certMbtlnum; + + + + + + public String getMberId() { + return mberId; + } + public void setMberId(String mberId) { + this.mberId = mberId; + } + public String getMbtlnum() { + return mbtlnum; + } + public void setMbtlnum(String mbtlnum) { + this.mbtlnum = mbtlnum; + } + + public String getCertUseYn() { + return certUseYn; + } + public void setCertUseYn(String certUseYn) { + this.certUseYn = certUseYn; + } + public String getCertMbtlnum() { + return certMbtlnum; + } + public void setCertMbtlnum(String certMbtlnum) { + this.certMbtlnum = certMbtlnum; + } + + + +} diff --git a/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java b/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java index 45a757c8..1388ce8b 100644 --- a/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java +++ b/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java @@ -17,6 +17,7 @@ import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.RSAPublicKeySpec; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -32,6 +33,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -39,6 +41,8 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; @@ -85,6 +89,7 @@ import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.event.service.MjonEventService; @@ -126,6 +131,7 @@ import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; import itn.let.sym.site.service.SiteManagerVO; import itn.let.uat.uia.service.EgovLoginService; +import itn.let.uat.uia.service.MberCertPhoneVO; import itn.let.uat.uia.web.EmailVO; import itn.let.uat.uia.web.SendLogVO; import itn.let.uat.uia.web.SendMail; @@ -1093,6 +1099,12 @@ public class EgovUserManageController { model.addAttribute("countNum", countNum); model.addAttribute("sendNumberList", sendNumberList); + + + + List mberCertPhoneList = mjonMsgDataService.selectMberCertPhoneList(userId); + model.addAttribute("mberCertPhoneList", mberCertPhoneList); + //문자발송 단가 조회하기 //1.시스템 기본 단가 정보 조회하기 JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); @@ -1645,6 +1657,46 @@ public class EgovUserManageController { return modelAndView; } + @RequestMapping(value = {"/uss/umt/user/insertCertPhone.do"}) + public ResponseEntity insertCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + if(userId == null) { + if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); + } + mberCertPhoneVO.setFrstRegisterId(userId); + + + + return ResponseEntity.ok().body(mjonMsgDataService.insertMberCertPhoneInfo(mberCertPhoneVO)); + } + + @RequestMapping(value = {"/uss/umt/user/deleteCertPhone.do"}) + public ResponseEntity deleteCertPhone(MberCertPhoneVO mberCertPhoneVO) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + if(userId == null) { + if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); + } + mberCertPhoneVO.setLastUpdusrId(userId); + + + + return ResponseEntity.ok().body(mjonMsgDataService.deleteCertPhoneInfo(mberCertPhoneVO)); + } + /** * 회원정보 팝업 이벤트 정보 신규 추가 기능 * @param eventVO diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 1edb8254..fa655e4a 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -20,6 +20,8 @@ + + @@ -3738,7 +3740,7 @@ where MBER_ID=#sendId# union all select mber_id, mbtlnum - from lettngnrlmber + from lettngnrlmber_cert_phone where MBER_ID=#sendId# ) b @@ -3753,6 +3755,58 @@ LIMIT 1 + + + + + + + + INSERT + INTO LETTNGNRLMBER_CERT_PHONE + ( + MBER_ID + , MBTLNUM + , FRST_REGIST_PNTTM + , FRST_REGISTER_ID + ) + VALUES + ( + #mberId# + , #mbtlnum# + , now() + , #frstRegisterId# + ) + + + + + UPDATE LETTNGNRLMBER_CERT_PHONE + SET CERT_USE_YN = 'N' + , LAST_UPDUSR_ID = #lastUpdusrId# + WHERE + MBER_ID = #mberId# + AND MBTLNUM = #mbtlnum# + + + + + " maxlength="9"/> --%> - " title="캐시" maxlength="20" onblur="foucusOut(this)"/> + " title="캐시" maxlength="20" onblur="foucusOut(this)"/> @@ -6260,6 +6397,31 @@ function fnInputSmsTxt(){ + + +
+
인증번호 등록
+
+ + + + + + + + + + + +
인증번호 + +
+
+ + +
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/login/EgovLoginGnrlUsr.jsp b/src/main/webapp/WEB-INF/jsp/web/login/EgovLoginGnrlUsr.jsp index d9a59228..f3caaae5 100644 --- a/src/main/webapp/WEB-INF/jsp/web/login/EgovLoginGnrlUsr.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/login/EgovLoginGnrlUsr.jsp @@ -587,13 +587,15 @@ function fn_click_banner_add_stat(bannerMenuCode){
휴대폰번호
- + + +