From 2ac147144c0686b8835f265f62da21fc5a022dc7 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 12 Dec 2024 19:11:28 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=A9=EC=8A=A4=20=ED=99=98=EB=B6=88=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/let/mjo/msg/service/RefundDTO.java | 20 + .../service/impl/MjonMsgDataServiceImpl.java | 4317 ++++++++--------- .../itn/let/mjo/test/web/TestController.java | 43 +- .../schdlr/service/SchdlrManageService.java | 2 + .../itn/let/schdlr/service/SchedulerUtil.java | 23 +- .../service/impl/SchdlrManageServiceImpl.java | 533 +- .../sqlmap/let/msg/MjonMsgData_SQL_mysql.xml | 154 +- src/main/webapp/js/MJUtill.js | 12 +- 8 files changed, 2523 insertions(+), 2581 deletions(-) create mode 100644 src/main/java/itn/let/mjo/msg/service/RefundDTO.java diff --git a/src/main/java/itn/let/mjo/msg/service/RefundDTO.java b/src/main/java/itn/let/mjo/msg/service/RefundDTO.java new file mode 100644 index 00000000..4d1d1871 --- /dev/null +++ b/src/main/java/itn/let/mjo/msg/service/RefundDTO.java @@ -0,0 +1,20 @@ +package itn.let.mjo.msg.service; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class RefundDTO { + private String userId; + private String msgGroupId; + private int userData; + private String eachPrice ; // 전송문자 개별가격 + + public RefundDTO(String userId, String msgGroupId, int userData, String eachPrice) { + this.userId = userId; + this.msgGroupId = msgGroupId; + this.userData = userData; + this.eachPrice = eachPrice; + } +} 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 cb857dda..077d7d92 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 @@ -73,87 +73,84 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service("MjonMsgDataService") -public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements MjonMsgDataService{ +public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements MjonMsgDataService { - @Resource(name="MjonMsgDataDAO") - private MjonMsgDataDAO mjonMsgDataDAO; + @Resource(name = "MjonMsgDataDAO") + private MjonMsgDataDAO mjonMsgDataDAO; - @Resource(name="mjonMsgDAO") - private MjonMsgDAO mjonMsgDAO; + @Resource(name = "mjonMsgDAO") + private MjonMsgDAO mjonMsgDAO; - @Resource(name="mjonPayDAO") - private MjonPayDAO mjonPayDAO; + @Resource(name = "mjonPayDAO") + private MjonPayDAO mjonPayDAO; - @Resource(name="mjonMsgAgentStsDAO") - private MjonMsgAgentStsDAO mjonMsgAgentStsDAO; + @Resource(name = "mjonMsgAgentStsDAO") + private MjonMsgAgentStsDAO mjonMsgAgentStsDAO; - @Resource(name="siteManagerDAO") - SiteManagerDAO siteManagerDAO; + @Resource(name = "siteManagerDAO") + SiteManagerDAO siteManagerDAO; - @Resource(name="MsgHolidayDAO") - private MsgHolidayDAO msgHolidayDAO; + @Resource(name = "MsgHolidayDAO") + private MsgHolidayDAO msgHolidayDAO; + @Resource(name = "LetterDAO") + private LetterDAO letterDAO; - @Resource(name="LetterDAO") - private LetterDAO letterDAO; + /** userManageService */ + @Resource(name = "userManageService") + private EgovUserManageService userManageService; - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; + @Resource(name = "egovMjonMsgIdGnrService") + private EgovIdGnrService idgenMsgId; - @Resource(name = "egovMjonMsgIdGnrService") - private EgovIdGnrService idgenMsgId; - - @Resource(name = "egovMjonMsgIdCGnrService") - private CustomIdGnrService idgenMsgCId; + @Resource(name = "egovMjonMsgIdCGnrService") + private CustomIdGnrService idgenMsgCId; - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; + @Resource(name = "egovMjonMsgGroupIdGnrService") + private EgovIdGnrService idgenMjonMsgGroupId; - @Resource(name = "egovPhoneMemberIdGnrService") - private EgovIdGnrService idgenPhoneMemberId; + @Resource(name = "egovPhoneMemberIdGnrService") + private EgovIdGnrService idgenPhoneMemberId; - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; + @Resource(name = "egovMjonCashIdGnrService") + private EgovIdGnrService idgenMjonCashId; - @Resource(name = "egovSystemSendIdGnrService") - private EgovIdGnrService idgenSystemSendId; + @Resource(name = "egovSystemSendIdGnrService") + private EgovIdGnrService idgenSystemSendId; - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; + @Resource(name = "MjonMsgDataService") + private MjonMsgDataService mjonMsgDataService; - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; + @Resource(name = "mjonPayService") + private MjonPayService mjonPayService; - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; + @Resource(name = "MjonEventService") + private MjonEventService mjonEventService; + + @Resource(name = "mjonMsgAgentStsService") + private MjonMsgAgentStsService mjonMsgAgentStsService; - @Resource(name = "mjonMsgAgentStsService") - private MjonMsgAgentStsService mjonMsgAgentStsService; - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; + private MjonSpamMsgService mjonSpamMsgService; - /** 사이트 설정 */ + /** 사이트 설정 */ @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; + EgovSiteManagerService egovSiteManagerService; - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - + private MsgHolidayService msgHolidayService; - @Autowired - private PriceAndPoint priceAndPoint; - - @Autowired - private MjonCommon mjonCommon; - + @Autowired + private PriceAndPoint priceAndPoint; + + @Autowired + private MjonCommon mjonCommon; public List selectCcmCmmCodeList() throws Exception { return mjonMsgDataDAO.selectCcmCmmCodeList(); } + public MjonMsgReturnVO insertMsgDataInfo_advc(MjonMsgVO mjonMsgVO) throws Exception { MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); @@ -169,11 +166,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M int limitCnt = 1000; int blockCnt = 0; - int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) String befCash = mjonMsgVO.getBefCash(); @@ -183,12 +178,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M List dupliBlockList = MJUtil.getDuplicateList(userBlockList); int usrBlockCnt = dupliBlockList.size(); - // 회원 전용 전송사 정보 불러오기 MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); String hotlineAgentCode = userInfo.getHotlineAgentCode(); - // 전용 전송사가 있는 경우 처리 if (!"00".equals(hotlineAgentCode)) { @@ -206,7 +199,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M mjonMsgAgentStsVO.setMsgType("S"); } - List hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); + List hotlineMsgAgentList = mjonMsgAgentStsDAO + .selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); String mberAgentConde = ""; String mberSendRate = ""; String mberRepAgent = ""; @@ -255,24 +249,24 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M String sndAgentCode = sendRate.getAgentCode(); int sendCount = Math.round(callToCnt * Float.parseFloat(sendRate.getSendRate())); switch (sndAgentCode) { - case "01": - iheartCnt = sendCount; - break; - case "02": - hncCnt = sendCount; - break; - case "03": - imoCnt = sendCount; - break; - case "04": - bizCnt = sendCount; - break; - case "05": - jjCnt = sendCount; - break; - case "07": - ivtCnt = sendCount; - break; + case "01": + iheartCnt = sendCount; + break; + case "02": + hncCnt = sendCount; + break; + case "03": + imoCnt = sendCount; + break; + case "04": + bizCnt = sendCount; + break; + case "05": + jjCnt = sendCount; + break; + case "07": + ivtCnt = sendCount; + break; } } } @@ -286,10 +280,6 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M limitCnt = 1000; } - - - - // 수신자 리스트 처리 List msgDataInfo = new ArrayList(); @@ -312,22 +302,14 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M String smishingYn = mjonMsgVO.getSmishingYn();// 스미싱 의심 유무 String delayYn = "N"; // 문자발송 30분 지연 처리 유무 - if (StringUtils.isEmpty(spamStatus)) - { + if (StringUtils.isEmpty(spamStatus)) { spamStatus = "N"; } - if (StringUtils.isEmpty(smishingYn)) - { + if (StringUtils.isEmpty(smishingYn)) { smishingYn = "N"; } - - - - - - // 사용자 시스템 단가에 스미싱노티 컬럼이 있음 JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); // 야간 스미싱 알림여부 정보 불러오기 @@ -369,8 +351,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M spamSmishingPassStatus = true; } - - + // 야간 스미싱 알림여부가 활성화 이고 예외시간에 포함되는 경우 스팸, 스미싱, 딜레이 값을 모두 N 으로 처리 if (spamSmishingPassStatus) { @@ -889,9 +870,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 returnVO.setAgentCode(agentCode); - - - }catch (Exception e) { + } catch (Exception e) { // 실패 returnVO.setSendMsgCnt(Integer.toString(0)); // 발송 건수 저장 returnVO.setSendMsgBlockCnt(Integer.toString(0)); // 수신차단 건수 저장 @@ -905,9 +884,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return returnVO; } - public MjonMsgReturnVO insertMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception { - + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); try { @@ -921,7 +899,6 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M int limitCnt = 1000; int blockCnt = 0; - int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); @@ -1138,7 +1115,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M int divideCnt = 0; int count = 1; // 분할 카운트 String delayTime = "";// 30분 지연시간 - String spamStatus = mjonMsgVO.getSpamStatus();// 스팸 문구 유무 + String spamStatus = mjonMsgVO.getSpamStatus();// 스팸 문구 유무 String smishingYn = mjonMsgVO.getSmishingYn();// 스미싱 의심 유무 String delayYn = "N"; // 문자발송 30분 지연 처리 유무 @@ -1689,2359 +1666,2319 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } - //이벤트 회원 캐시 변경 함수 - 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); + // 이벤트 회원인 경우 이벤트 캐시도 함께 차감. + 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 evntRemainCash = (float) eventMberInfo.getEventRemainCash(); + float totPrice = (float) Math.abs(mjonPayVO.getCash()); - float totRemainCash = evntRemainCash - totPrice; - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); + 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); + // 이벤트 상태값을 종료로 변경한다. + mjonEventVO.setEventStatus("E"); + mjonEventVO.setEventRemainCash(0.0); + mjonEventService.updateEventEndStatus(mjonEventVO); - }else {//이벤트 회원 캐시 차감시킴 + } else {// 이벤트 회원 캐시 차감시킴 - mjonEventVO.setEventRemainCash(totRemainCash); - mjonEventService.updateEventRemainCash(mjonEventVO); + 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(); - } + // 문자 전송 그룹아이디 생성 + if ("".equals(p_msgGroupId)) { + // String s_msgGroupId = idgenMjonMsgGroupId.getNextStringId(); + p_msgGroupId = idgenMjonMsgGroupId.getNextStringId(); + } - mjonMsgVO.setMsgGroupId(p_msgGroupId); + mjonMsgVO.setMsgGroupId(p_msgGroupId); - // 문자 아이디 생성 - //mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); + // 문자 아이디 생성 + // mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); + 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; - // 장문 전송 - 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; // 전체 받는사람 건수 - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - return 0 ; - }*/ + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + Date now = new Date(); - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + mjonMsgVO.setReqDate(sdFormat.format(now)); - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + } - Date now = new Date(); + /* + * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 + * 하도록 한다. + * + * + */ - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + if (callToCnt >= 1000) { - mjonMsgVO.setReqDate(sdFormat.format(now)); + limitCnt = 100; - } + } + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); - /* - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 하도록 한다. - * - * - * */ + int cnt = 1; + int totCnt = 1; - if(callToCnt >= 1000) { + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); - limitCnt = 100; + // 예약시간 변환 + // SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - } + int turmMin = 0; + int totalCallCnt = 0; + int divideCnt = 0; + int count = 1; // 분할 카운트 - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); + 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 리스트 - int cnt = 1; - int totCnt = 1; + // for(String phonNum : mjonMsgVO.getCallToList()) { - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); + for (int i = 0; i < callToCnt; i++) { - //예약시간 변환 - //SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + // 전송사 랜덤 발생 + int random1 = (int) (Math.random() * (i_nRate + i_hRate + i_iRate));// 5~14 - length - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 + // System.out.println("random1"); + // System.out.println(random1); + if (random1 < i_nRate) + agentCode = "01"; + else if (random1 < (i_nRate + i_hRate)) + agentCode = "02"; + else + agentCode = "03"; + Boolean blockSts = false; - 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 리스트 + if (!blockSts) { // 수신거부가 아니면 추가 - //for(String phonNum : mjonMsgVO.getCallToList()) { + MjonMsgVO tempVO = new MjonMsgVO(); - for(int i = 0; i < callToCnt; i++) { + tempVO.setMsgId(idgenMsgId.getNextStringId()); + tempVO.setUserId(mjonMsgVO.getUserId()); + tempVO.setCallTo(phoneList[i]); + tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - //전송사 랜덤 발생 - int random1 = (int )(Math.random() * (i_nRate+i_hRate+i_iRate));//5~14 - length + tempVO.setMsgType(mjonMsgVO.getMsgType()); + // tempVO.setAgentCode(mjonMsgVO.getAgentCode()); + tempVO.setAgentCode(agentCode); - //System.out.println("random1"); - //System.out.println(random1); + tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - if (random1 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - Date now = new Date(); + // 그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) + if (StringUtil.isNotEmpty(contents)) { + fileCnt = fileCnt + 1; + } + tempVO.setFileCnt(Integer.toString(fileCnt)); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + } else { + tempVO.setFileCnt("1"); + } - tempVO.setReqDate(sdFormat.format(now)); + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); + tempVO.setSmsTxt(smsTxt); + tempVO.setContSeq(contSeq); - } + } - if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); - tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); - //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()); + } // 수신거부 처리로직 끝 - } + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode.equals("01") && msgType.equals("6")) { + if (msgDataInfo.size() > 0) { - // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - //이미지가 있는경우 file_type, file_Cnt 값 셋팅 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - String contents = mjonMsgVO.getSmsTxt(); + } - if(fileCnt > 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { - fileCnt = fileCnt + 1; - } - tempVO.setFileCnt(Integer.toString(fileCnt)); + } else { - }else { - tempVO.setFileCnt("1"); - } + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); - tempVO.setSmsTxt(smsTxt); - tempVO.setContSeq(contSeq); + if (msgDataInfo.size() > 0) { - } + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - //문자 내용 추가해 주기 - msgDataInfo.add(tempVO); + } - }//수신거부 처리로직 끝 + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; - int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { + // List 초기화 하기 + msgDataInfo.clear(); - if(msgDataInfo.size() > 0) { + } - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + } - } + cnt++; + totCnt++; + } - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; + // 문자 발송 캐시 차감 해주기 - 삭제했음 - }else { + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { + returnVO.setMsgGroupId(p_msgGroupId); + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 - if(msgDataInfo.size() > 0) { + return returnVO; + } - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + // JSP 2022.04.08 + // 080 자동 수신거부목록 > 결과알림 => 수신거부목록 체크 제거 + public MjonMsgReturnVO insertMsgDataByBlockInfo(MjonMsgVO mjonMsgVO) throws Exception { - } + // 문자 전송 그룹아이디 생성 + mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + // 문자 아이디 생성 + mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; + String msgType = mjonMsgVO.getMsgType(); + String agentCode = mjonMsgVO.getAgentCode(); + // 장문 전송 + String contSeq = ""; - //List 초기화 하기 - msgDataInfo.clear(); + // 최종 입력 수 저장 변수 + int resultCnt = 0; + int limitCnt = 1000; + int blockCnt = 0; - } + // 총 보유 금액과 전송 합계 비교 - } + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + * + * return 0 ; } + */ - cnt++; - totCnt++; + 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"); - MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); + mjonMsgVO.setReqDate(sdFormat.format(now)); - returnVO.setMsgGroupId(p_msgGroupId); - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 + } - return returnVO; - } + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + String befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); + mjonMsgVO.setBefCash(befCash); + if (callToCnt >= 1000) { - // JSP 2022.04.08 - // 080 자동 수신거부목록 > 결과알림 => 수신거부목록 체크 제거 - public MjonMsgReturnVO insertMsgDataByBlockInfo(MjonMsgVO mjonMsgVO) throws Exception{ + limitCnt = 100; - // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + } - // 문자 아이디 생성 - mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - // 장문 전송 - String contSeq = ""; + int cnt = 1; + int totCnt = 1; - // 최종 입력 수 저장 변수 - int resultCnt = 0; - int limitCnt = 1000; - int blockCnt = 0; + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); - // 총 보유 금액과 전송 합계 비교 + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + int turmMin = 0; + int totalCallCnt = 0; + int divideCnt = 0; + int count = 1; // 분할 카운트 - return 0 ; - }*/ + if (!mjonMsgVO.getReserveYn().equals("N")) { - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + } - Date now = new Date(); + 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 리스트 - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + // for(String phonNum : mjonMsgVO.getCallToList()) { - mjonMsgVO.setReqDate(sdFormat.format(now)); + 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.setCallFrom(mjonMsgVO.getCallFrom()); - } + tempVO.setMsgType(mjonMsgVO.getMsgType()); + tempVO.setAgentCode(mjonMsgVO.getAgentCode()); + tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) - String befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); + // 문자내용 내용 - 치환 처리 + String smsTxt = mjonMsgVO.getSmsTxt(); // 발송 문자 내용 - mjonMsgVO.setBefCash(befCash); - if(callToCnt >= 1000) { + 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("§", ","))); + if (smsTxt.indexOf("[*2*]") > -1) + smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replace("§", ","))); + if (smsTxt.indexOf("[*3*]") > -1) + smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replace("§", ","))); + if (smsTxt.indexOf("[*4*]") > -1) + smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replace("§", ","))); - limitCnt = 100; + tempVO.setSmsTxt(smsTxt); - } + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode == "01" && !msgType.equals("4")) { + // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 + int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + if (fileCnt > 0) { - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일 종류 셋팅 - int cnt = 1; - int totCnt = 1; + } - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); + tempVO.setSmsTxt(smsTxt); + tempVO.setContSeq(contSeq); + } - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { + if (msgDataInfo.size() > 0) { - if(!mjonMsgVO.getReserveYn().equals("N")) { + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 + } - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 + } else { - } + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { + if (msgDataInfo.size() > 0) { - 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 리스트 + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - //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.setCallFrom(mjonMsgVO.getCallFrom()); + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; - tempVO.setMsgType(mjonMsgVO.getMsgType()); - tempVO.setAgentCode(mjonMsgVO.getAgentCode()); - tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); + // List 초기화 하기 + msgDataInfo.clear(); - //문자내용 내용 - 치환 처리 - 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("§", ","))); - if (smsTxt.indexOf("[*2*]") > -1) - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replace("§", ","))); - if (smsTxt.indexOf("[*3*]") > -1) - 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); + cnt++; + totCnt++; - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode == "01" && !msgType.equals("4")) { - // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - if(fileCnt > 0) { + } - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일 종류 셋팅 + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); - } + if (blockCnt > 0) { - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); - tempVO.setSmsTxt(smsTxt); - tempVO.setContSeq(contSeq); - } + Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; + Float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + Float endPrice = totPrice - blockPrice; - //문자 내용 추가해 주기 - msgDataInfo.add(tempVO); + mjonMsgVO.setTotPrice(Float.toString(endPrice)); - int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { + // 수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. + int groupCnt = callToCnt - blockCnt; + mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - if(msgDataInfo.size() > 0) { + // mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + } - } + if (Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { + // 문자 전송 그룹 테이블에 정보 입력 + mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; + } - }else { + 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()); - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { + mjonPayDAO.insertCash(mjonPayVO); // 캐시차감 + mjonPayDAO.updateMemberCash(mjonPayVO); // 회원정보 업데이트 - if(msgDataInfo.size() > 0) { + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 - } + return returnVO; + } + // 관리자에서 사용자에게 문자발송하기 + public MjonMsgReturnVO insertAdmToMberMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception { - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; + // 문자 전송 그룹아이디 생성 + mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - //List 초기화 하기 - msgDataInfo.clear(); + // 문자 아이디 생성 + 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; - cnt++; - totCnt++; + // 총 보유 금액과 전송 합계 비교 + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 - } + mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 - if(blockCnt > 0) { + Date now = new Date(); - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; - Float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = totPrice - blockPrice; + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - mjonMsgVO.setTotPrice(Float.toString(endPrice)); + mjonMsgVO.setReqDate(sdFormat.format(now)); - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = callToCnt - blockCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + } - //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + String befCash = mjonMsgVO.getBefCash(); - } + // VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 + if (befCash.equals("") || befCash == null) { + befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); + } - if(Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { + mjonMsgVO.setBefCash(befCash); + // 문자 전송 그룹 테이블에 정보 입력 - // 문자 전송 그룹 테이블에 정보 입력 - mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + // 수신거부 목록 불러오기 + // List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); - } + // List dupliBlockList = MJUtil.getDuplicateList(userBlockList); + // int usrBlockCnt = dupliBlockList.size(); + /* + * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 + * 하도록 한다. + * + * + */ - 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()); + if (callToCnt >= 1000) { - mjonPayDAO.insertCash(mjonPayVO); //캐시차감 - mjonPayDAO.updateMemberCash(mjonPayVO); //회원정보 업데이트 + limitCnt = 100; - MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); + } - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); - return returnVO; - } + int cnt = 1; + int totCnt = 1; - //관리자에서 사용자에게 문자발송하기 - public MjonMsgReturnVO insertAdmToMberMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception{ + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); - // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - // 문자 아이디 생성 - mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); + int turmMin = 0; + int totalCallCnt = 0; + int divideCnt = 0; + int count = 1; // 분할 카운트 - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - // 장문 전송 - String contSeq = ""; + if (!mjonMsgVO.getReserveYn().equals("N")) { - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - // 최종 입력 수 저장 변수 - int resultCnt = 0; - int limitCnt = 1000; - int blockCnt = 0; + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 - // 총 보유 금액과 전송 합계 비교 - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + } - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("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 리스트 - Date now = new Date(); + // for(String phonNum : mjonMsgVO.getCallToList()) { - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + for (int i = 0; i < callToCnt; i++) { - mjonMsgVO.setReqDate(sdFormat.format(now)); + Boolean blockSts = false; + /* + * for(int j = 0; j < usrBlockCnt; j++) { + * + * if(phoneList[i].equals(dupliBlockList.get(j).toString())) { + * + * blockCnt++; //수신 차단 카운드를 해준다. blockSts = true; + * + * } + * + * } + */ - } + if (!blockSts) { // 수신거부가 아니면 추가 - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) - String befCash = mjonMsgVO.getBefCash(); + MjonMsgVO tempVO = new MjonMsgVO(); - //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 - if(befCash.equals("") || befCash == null) { - befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); - } + tempVO.setMsgId(mjonMsgVO.getMsgId()); + tempVO.setUserId(mjonMsgVO.getUserId()); + tempVO.setCallTo(phoneList[i]); + tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - mjonMsgVO.setBefCash(befCash); - // 문자 전송 그룹 테이블에 정보 입력 + tempVO.setMsgType(mjonMsgVO.getMsgType()); + tempVO.setAgentCode(mjonMsgVO.getAgentCode()); + tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); + tempVO.setSmsTxt(mjonMsgVO.getSmsTxt()); - //수신거부 목록 불러오기 - //List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); + // 즉시 / 예약 전송 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 - //List dupliBlockList = MJUtil.getDuplicateList(userBlockList); - //int usrBlockCnt = dupliBlockList.size(); + Date now = new Date(); - /* - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 2만 건이 넘어가면, 1만건씩 끊어서 발송 하도록 한다. - * - * - * */ + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - if(callToCnt >= 1000) { + tempVO.setReqDate(sdFormat.format(now)); - limitCnt = 100; + } else { // 예약 발송의 경우 예약 시간을 입력 - } + // 분할 발송을 체크 한 경우 + if (mjonMsgVO.getDivideChk() != null) { - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); + if (count > divideCnt) { - int cnt = 1; - int totCnt = 1; + count = 1; - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); + // 분할 시간 간격을 증가시켜 준다. + cal.add(Calendar.MINUTE, turmMin); + dividDay = transFormat.format(cal.getTime()); - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + tempVO.setReqDate(dividDay); // 분할 문자 예약 시간 입력해주기 + count++; - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 + } else { + tempVO.setReqDate(dividDay); // 분할 문자 예약 시간 입력해주기 + count++; - if(!mjonMsgVO.getReserveYn().equals("N")) { + } - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 + } else {// 일반 예약 발송의 경우 - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); + tempVO.setReqDate(mjonMsgVO.getReqDate()); - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 + } + } - } + if (!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); + // 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()); - //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()) { + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode.equals("01") && msgType.equals("6")) { - for(int i = 0; i < callToCnt; i++) { + // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - Boolean blockSts = false; - /*for(int j = 0; j < usrBlockCnt; j++) { + // 이미지가 있는경우 file_type, file_Cnt 값 셋팅 + int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + String contents = mjonMsgVO.getSmsTxt(); - if(phoneList[i].equals(dupliBlockList.get(j).toString())) { + if (fileCnt > 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - blockCnt++; //수신 차단 카운드를 해준다. - blockSts = true; + // 그림문자일 경우 이미지 갯수 + 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(contents); + tempVO.setContSeq(contSeq); - if(!blockSts) { //수신거부가 아니면 추가 + } - MjonMsgVO tempVO = new MjonMsgVO(); + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); - 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()); + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { - //즉시 / 예약 전송 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + if (msgDataInfo.size() > 0) { - Date now = new Date(); + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + } - tempVO.setReqDate(sdFormat.format(now)); + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; - }else { // 예약 발송의 경우 예약 시간을 입력 + } else { - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { - if(count > divideCnt) { + if (msgDataInfo.size() > 0) { - count = 1; + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); + } - tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; - }else { + // List 초기화 하기 + msgDataInfo.clear(); - tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; + } - } + } - }else {//일반 예약 발송의 경우 + cnt++; + totCnt++; - tempVO.setReqDate(mjonMsgVO.getReqDate()); + } - } - } + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); - if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + if (resultCnt > 0 && blockCnt > 0) { - tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); - //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()); + Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; + Float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + Float endPrice = totPrice - blockPrice; - } + mjonMsgVO.setTotPrice(Float.toString(endPrice)); - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode.equals("01") && msgType.equals("6")) { + // 수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. + int groupCnt = callToCnt - blockCnt; + mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 + } - //이미지가 있는경우 file_type, file_Cnt 값 셋팅 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - String contents = mjonMsgVO.getSmsTxt(); + // 문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. + if (resultCnt > 0 && Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { - if(fileCnt > 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + // 문자 전송 그룹 테이블에 정보 입력 + mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { - fileCnt = fileCnt + 1; - } - tempVO.setFileCnt(Integer.toString(fileCnt)); + } - }else { - tempVO.setFileCnt("1"); - } + // 1건 이상 발송이 완료된 경우 시스템 로그를 기록한다. + if (resultCnt > 0) { - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); - tempVO.setSmsTxt(contents); - tempVO.setContSeq(contSeq); + // 시스템 발송 로그 + SendLogVO sendLogVO = new SendLogVO(); + // SendType 1:문자로 발송 2:이메일로 발송 + sendLogVO.setSendId(mjonMsgVO.getMsgGroupId()); + sendLogVO.setSendType("1"); + sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); + sendLogVO.setReceive(mjonMsgVO.getCallTo()); + sendLogVO.setCheckNo(""); + sendLogVO.setContents(mjonMsgVO.getSmsTxt()); - } + mjonMsgDataService.insertSysMsgLog(sendLogVO); - //문자 내용 추가해 주기 - msgDataInfo.add(tempVO); + } - }//수신거부 처리로직 끝 + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 - if(msgDataInfo.size() > 0) { + return returnVO; - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + } - } + public List selectLetterList(LetterVO letterVO) throws Exception { - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; + return mjonMsgDataDAO.selectLetterList(letterVO); + } - }else { + public List selectPhotoLetterList(LetterVO letterVO) throws Exception { - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { + return mjonMsgDataDAO.selectPhotoLetterList(letterVO); - if(msgDataInfo.size() > 0) { + } - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + public List selectCustomPopupImgList(LetterVO letterVO) throws Exception { - } + return mjonMsgDataDAO.selectCustomPopupImgList(letterVO); + } + public int insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; + return mjonMsgDataDAO.insertMyMsgDataAjax(mjonMsgDataVO); + } - //List 초기화 하기 - msgDataInfo.clear(); + public List selectMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { - } + return mjonMsgDataDAO.selectMyMsgDataListAjax(mjonMsgDataVO); + } - } + public List selectSendPhonNumList(String userId) throws Exception { - cnt++; - totCnt++; + return mjonMsgDataDAO.selectSendPhonNumList(userId); + } - } + // 차단 발신번호 리스트 불러오기 + public List selectBlockPhonNumList() throws Exception { + return mjonMsgDataDAO.selectBlockPhonNumList(); + } - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); + public JoinSettingVO selectJoinSettingInfo() throws Exception { - if(resultCnt > 0 && blockCnt > 0) { + return mjonMsgDataDAO.selectJoinSettingInfo(); + } - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * blockCnt; - Float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = totPrice - blockPrice; + public MberManageVO selectMberManageInfo(String userId) throws Exception { - mjonMsgVO.setTotPrice(Float.toString(endPrice)); + return mjonMsgDataDAO.selectMberManageInfo(userId); + } - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = callToCnt - blockCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + public List selectMyMsgPhotoListInfo(List myMsgList) throws Exception { - } + List atchFileList = new ArrayList(); - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultCnt > 0 && Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { + int size = myMsgList.size(); + for (int i = 0; i < size; i++) { - // 문자 전송 그룹 테이블에 정보 입력 - mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + 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("")) { - //1건 이상 발송이 완료된 경우 시스템 로그를 기록한다. - if(resultCnt > 0) { + atchFileList.add(atchFileId1); - // 시스템 발송 로그 - SendLogVO sendLogVO = new SendLogVO(); - // SendType 1:문자로 발송 2:이메일로 발송 - sendLogVO.setSendId(mjonMsgVO.getMsgGroupId()); - sendLogVO.setSendType("1"); - sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); - sendLogVO.setReceive(mjonMsgVO.getCallTo()); - sendLogVO.setCheckNo(""); - sendLogVO.setContents(mjonMsgVO.getSmsTxt()); + } + if (atchFileId2 != null && !atchFileId2.equals("")) { - mjonMsgDataService.insertSysMsgLog(sendLogVO); + atchFileList.add(atchFileId2); - } + } + if (atchFileId3 != null && !atchFileId3.equals("")) { - MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); + atchFileList.add(atchFileId3); - returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 - returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 + } - return returnVO; + } - } + MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); + mjonMsgDataVO.setAtchFileList(atchFileList); + return mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); - public List selectLetterList(LetterVO letterVO) throws Exception{ + } - return mjonMsgDataDAO.selectLetterList(letterVO); - } + public void deleteMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { - public List selectPhotoLetterList(LetterVO letterVO) throws Exception{ + mjonMsgDataDAO.deleteMyMsgDataListAjax(mjonMsgDataVO); + } - return mjonMsgDataDAO.selectPhotoLetterList(letterVO); + public List selectLatestMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception { - } + return mjonMsgDataDAO.selectLatestMsgList(mjonMsgDataVO); + } - public List selectCustomPopupImgList(LetterVO letterVO) throws Exception { + public List selectBookMarkMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.selectCustomPopupImgList(letterVO); - } + return mjonMsgDataDAO.selectBookMarkMsgList(mjonMsgDataVO); + } - public int insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public String selectBeforeCashData(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.insertMyMsgDataAjax(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); + } - public List selectMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public String selectBeforePointData(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectMyMsgDataListAjax(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectBeforePointData(mjonMsgVO); + } - public List selectSendPhonNumList(String userId) throws Exception{ + @Override + public List selectPayUserList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserList(mjonMsgVO); + } - return mjonMsgDataDAO.selectSendPhonNumList(userId); - } + @Override + public List selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO); + } - //차단 발신번호 리스트 불러오기 - public List selectBlockPhonNumList() throws Exception{ - return mjonMsgDataDAO.selectBlockPhonNumList(); - } + @Override + public List selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserSumList(mjonMsgVO); + } - public JoinSettingVO selectJoinSettingInfo() throws Exception{ + // 시스템 문자발송 + public MjonMsgReturnVO insertSysMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectJoinSettingInfo(); - } + // 문자 전송 그룹아이디 생성 + mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - public MberManageVO selectMberManageInfo(String userId) throws Exception{ + // 문자 아이디 생성 + mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); - return mjonMsgDataDAO.selectMberManageInfo(userId); - } + String msgType = mjonMsgVO.getMsgType(); + String agentCode = mjonMsgVO.getAgentCode(); + // 장문 전송 + String contSeq = ""; - public List selectMyMsgPhotoListInfo(List myMsgList) throws Exception{ + // float myPrice = 10000; + // float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); + // 최종 입력 수 저장 변수 + int resultCnt = 0; + int limitCnt = 1000; + int blockCnt = 0; - List atchFileList = new ArrayList(); + // 총 보유 금액과 전송 합계 비교 - int size = myMsgList.size(); - for(int i=0; i < size; i++ ) { + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + * + * return 0 ; } + */ - 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() : ""; + int callToCnt = 1; // 전체 받는사람 건수 - if(atchFileId1 != null && !atchFileId1.equals("")) { + mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - atchFileList.add(atchFileId1); + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + if (mjonMsgVO.getReserveYn().equals("N")) {// 즉시 전송의 경우 현재 시간을 입력 - } - if(atchFileId2 != null && !atchFileId2.equals("")) { + Date now = new Date(); - atchFileList.add(atchFileId2); + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - } - if(atchFileId3 != null && !atchFileId3.equals("")) { + mjonMsgVO.setReqDate(sdFormat.format(now)); - atchFileList.add(atchFileId3); + } - } + if (callToCnt >= 1000) { - } + limitCnt = 100; - MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); - mjonMsgDataVO.setAtchFileList(atchFileList); + } - return mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); - } + int cnt = 1; + int totCnt = 1; - public void deleteMyMsgDataListAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); - mjonMsgDataDAO.deleteMyMsgDataListAjax(mjonMsgDataVO); - } + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - public List selectLatestMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + int turmMin = 0; + int totalCallCnt = 0; + int divideCnt = 0; + int count = 1; // 분할 카운트 - return mjonMsgDataDAO.selectLatestMsgList(mjonMsgDataVO); - } + if (!mjonMsgVO.getReserveYn().equals("N")) { - public List selectBookMarkMsgList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 - return mjonMsgDataDAO.selectBookMarkMsgList(mjonMsgDataVO); - } + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); - public String selectBeforeCashData(MjonMsgVO mjonMsgVO) throws Exception{ + totalCallCnt = 1; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 - return mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); - } + } - public String selectBeforePointData(MjonMsgVO mjonMsgVO) throws Exception{ + 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()) { - return mjonMsgDataDAO.selectBeforePointData(mjonMsgVO); - } + for (int i = 0; i < callToCnt; i++) { - @Override - public List selectPayUserList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectPayUserList(mjonMsgVO); - } + /* + * Boolean blockSts = false; for(int j = 0; j < usrBlockCnt; j++) { + * + * if(phoneList[i].equals(userBlockList.get(j).toString())) { + * + * blockCnt++; //수신 차단 카운드를 해준다. blockSts = true; + * + * } + * + * } + */ - @Override - public List selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO); - } + MjonMsgVO tempVO = new MjonMsgVO(); - @Override - public List selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectPayUserSumList(mjonMsgVO); - } + tempVO.setMsgId(mjonMsgVO.getMsgId()); + tempVO.setUserId(mjonMsgVO.getUserId()); + // tempVO.setCallTo(phoneList[i]); + tempVO.setCallTo(mjonMsgVO.getCallTo()); + tempVO.setCallFrom(mjonMsgVO.getCallFrom()); - //시스템 문자발송 - public MjonMsgReturnVO insertSysMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception{ + tempVO.setMsgType(mjonMsgVO.getMsgType()); + tempVO.setAgentCode(mjonMsgVO.getAgentCode()); + tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); - // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); + // 문자내용 내용 - 치환 처리 + /* + * 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()); - // 문자 아이디 생성 - mjonMsgVO.setMsgId(idgenMsgId.getNextStringId()); + Date now = new Date(); - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - // 장문 전송 - String contSeq = ""; + SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - // 최종 입력 수 저장 변수 - int resultCnt = 0; - int limitCnt = 1000; - int blockCnt = 0; + tempVO.setReqDate(sdFormat.format(now)); - // 총 보유 금액과 전송 합계 비교 + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { - return 0 ; - }*/ + if (msgDataInfo.size() > 0) { - int callToCnt = 1; //전체 받는사람 건수 + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertSysMsgDataInfo(msgDataInfo, msgType, agentCode); - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + } + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + } else { - Date now = new Date(); + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + if (msgDataInfo.size() > 0) { - mjonMsgVO.setReqDate(sdFormat.format(now)); + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertSysMsgDataInfo(msgDataInfo, msgType, agentCode); - } + } - if(callToCnt >= 1000) { + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; - limitCnt = 100; + // List 초기화 하기 + msgDataInfo.clear(); - } + } - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); + } - int cnt = 1; - int totCnt = 1; + cnt++; + totCnt++; - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); + } - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + if (blockCnt > 0) { - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 + // 수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. + int groupCnt = callToCnt - blockCnt; + mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + // mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - if(!mjonMsgVO.getReserveYn().equals("N")) { + } - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 + // 시스템 발송은 문자 발송 금액이 없음 + mjonMsgVO.setTotPrice("0"); + mjonMsgVO.setBefCash("0"); + mjonMsgVO.setFileCnt("0"); + mjonMsgVO.setEachPrice("0"); - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); + if (Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { - totalCallCnt = 1; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 + // 문자 전송 그룹 테이블에 정보 입력 + mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - } + } - 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()) { + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - for(int i = 0; i < callToCnt; i++) { + returnVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 - /*Boolean blockSts = false; - for(int j = 0; j < usrBlockCnt; j++) { + return returnVO; + } - 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(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);*/ - 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) { - - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertSysMsgDataInfo(msgDataInfo, msgType, agentCode); - - } - - - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - - }else { - - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { - - if(msgDataInfo.size() > 0) { - - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertSysMsgDataInfo(msgDataInfo, msgType, agentCode); - - } - - - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; - - //List 초기화 하기 - msgDataInfo.clear(); - - } - - } - - cnt++; - totCnt++; - - } - - if(blockCnt > 0) { - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = callToCnt - blockCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - - } - - //시스템 발송은 문자 발송 금액이 없음 - mjonMsgVO.setTotPrice("0"); - mjonMsgVO.setBefCash("0"); - mjonMsgVO.setFileCnt("0"); - mjonMsgVO.setEachPrice("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)); //수신차단 건수 저장 - - return returnVO; - } - - @Override - public void insertSysMsgLog(SendLogVO sendLogVO) throws Exception{ - //시스템 문자발송 이력 Idgen + @Override + public void insertSysMsgLog(SendLogVO sendLogVO) throws Exception { + // 시스템 문자발송 이력 Idgen // sendLogVO.setSendId(idgenMjonMsgGroupId.getNextStringId()); - mjonMsgDataDAO.insertSysMsgLog(sendLogVO); - } + mjonMsgDataDAO.insertSysMsgLog(sendLogVO); + } - @Override - public SendLogVO selectSysMsgLog(SendLogVO sendLogVO) throws Exception { - return mjonMsgDataDAO.selectSysMsgLog(sendLogVO); - } + @Override + public SendLogVO selectSysMsgLog(SendLogVO sendLogVO) throws Exception { + return mjonMsgDataDAO.selectSysMsgLog(sendLogVO); + } - public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception{ + public List selectMsgAddrListAjax(AddrVO addrVO) throws Exception { - return mjonMsgDataDAO.selectMsgAddrListAjax(addrVO); - } + return mjonMsgDataDAO.selectMsgAddrListAjax(addrVO); + } - public MjonMsgDataVO selectMsgAddInfoAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public MjonMsgDataVO selectMsgAddInfoAjax(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.selectMsgAddInfoAjax(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectMsgAddInfoAjax(mjonMsgDataVO); + } - public List selectMsgAddPhotoInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public List selectMsgAddPhotoInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception { - List atchFileList = new ArrayList(); + 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() : ""; + 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); + atchFileList.add(atchFileId1); - } - if(atchFileId2 != null && !atchFileId2.equals("")) { + } + if (atchFileId2 != null && !atchFileId2.equals("")) { - atchFileList.add(atchFileId2); + atchFileList.add(atchFileId2); - } - if(atchFileId3 != null && !atchFileId3.equals("")) { + } + if (atchFileId3 != null && !atchFileId3.equals("")) { - atchFileList.add(atchFileId3); + atchFileList.add(atchFileId3); - } + } - mjonMsgDataVO.setAtchFileList(atchFileList); + mjonMsgDataVO.setAtchFileList(atchFileList); - List result = new ArrayList<>(); + List result = new ArrayList<>(); - if(atchFileList.size() > 0) { //저장 내용에 그림 이미지가 있는 경우만 처리 + if (atchFileList.size() > 0) { // 저장 내용에 그림 이미지가 있는 경우만 처리 - result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); + result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); - } + } - return result; - } + return result; + } - public List selectReSendMsgDataList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public List selectReSendMsgDataList(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.selectReSendMsgDataList(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectReSendMsgDataList(mjonMsgDataVO); + } - public MjonMsgDataVO selectMsgReSendPhotoInfo(MjonMsgVO mjonMsgVO) throws Exception{ + public MjonMsgDataVO selectMsgReSendPhotoInfo(MjonMsgVO mjonMsgVO) throws Exception { - MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); + 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 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 = ""; + 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("/"); + filePath1 = filePath1.replace("/usr/local/tomcat_mjon/webapps/mjon/", ""); + String[] spFilePath = filePath1.split("/"); - String cours = ""; - String fileNm = ""; - String extsn = ""; + 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 내용 저장 + String[] spFileNm = spFilePath[2].replace(".", "/").split("/"); + fileNm = spFileNm[0]; // 파일 STRE_FILE_NM 내용 저장 + extsn = spFileNm[1]; // 파일 FILE_EXTSN 내용 저장 - mjonMsgDataVO.setFileStreCours(cours); - mjonMsgDataVO.setStreFileNm(fileNm); - mjonMsgDataVO.setFileExtsn(extsn); + mjonMsgDataVO.setFileStreCours(cours); + mjonMsgDataVO.setStreFileNm(fileNm); + mjonMsgDataVO.setFileExtsn(extsn); - atchFileId1 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); + atchFileId1 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); - mjonMsgDataVO.setAtchFileId1(atchFileId1); - //atchFileList.add(atchFileId1); + mjonMsgDataVO.setAtchFileId1(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("/"); + filePath2 = filePath2.replace("/usr/local/tomcat_mjon/webapps/mjon/", ""); + String[] spFilePath = filePath1.split("/"); - String cours = ""; - String fileNm = ""; - String extsn = ""; + 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 내용 저장 + String[] spFileNm = spFilePath[2].replace(".", "/").split("/"); + fileNm = spFileNm[0]; // 파일 STRE_FILE_NM 내용 저장 + extsn = spFileNm[1]; // 파일 FILE_EXTSN 내용 저장 - mjonMsgDataVO.setFileStreCours(cours); - mjonMsgDataVO.setStreFileNm(fileNm); - mjonMsgDataVO.setFileExtsn(extsn); + mjonMsgDataVO.setFileStreCours(cours); + mjonMsgDataVO.setStreFileNm(fileNm); + mjonMsgDataVO.setFileExtsn(extsn); - atchFileId2 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); - mjonMsgDataVO.setAtchFileId2(atchFileId2); - //atchFileList.add(atchFileId2); + atchFileId2 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); + mjonMsgDataVO.setAtchFileId2(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("/"); + filePath3 = filePath3.replace("/usr/local/tomcat_mjon/webapps/mjon/", ""); + String[] spFilePath = filePath1.split("/"); - String cours = ""; - String fileNm = ""; - String extsn = ""; + 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 내용 저장 + String[] spFileNm = spFilePath[2].replace(".", "/").split("/"); + fileNm = spFileNm[0]; // 파일 STRE_FILE_NM 내용 저장 + extsn = spFileNm[1]; // 파일 FILE_EXTSN 내용 저장 - mjonMsgDataVO.setFileStreCours(cours); - mjonMsgDataVO.setStreFileNm(fileNm); - mjonMsgDataVO.setFileExtsn(extsn); + mjonMsgDataVO.setFileStreCours(cours); + mjonMsgDataVO.setStreFileNm(fileNm); + mjonMsgDataVO.setFileExtsn(extsn); - atchFileId3 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); - mjonMsgDataVO.setAtchFileId3(atchFileId3); - //atchFileList.add(atchFileId3); + atchFileId3 = mjonMsgDataDAO.selectMsgPhotoAtchFilIdInfo(mjonMsgDataVO); + mjonMsgDataVO.setAtchFileId3(atchFileId3); + // atchFileList.add(atchFileId3); - } + } - //mjonMsgDataVO.setAtchFileList(atchFileList); + // mjonMsgDataVO.setAtchFileList(atchFileList); - List result = new ArrayList<>(); + List result = new ArrayList<>(); - /*if(atchFileList.size() > 0) { //저장 내용에 그림 이미지가 있는 경우만 처리 + /* + * if(atchFileList.size() > 0) { //저장 내용에 그림 이미지가 있는 경우만 처리 + * + * result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); + * + * } + */ - result = mjonMsgDataDAO.selectMyMsgPhotoListInfo(mjonMsgDataVO); + return mjonMsgDataVO; - }*/ + } - return mjonMsgDataVO; + public MjonMsgDataVO selectLetterCnById(MjonMsgDataVO mjonMsgDataVO) throws Exception { - } + return mjonMsgDataDAO.selectLetterCnById(mjonMsgDataVO); + } - public MjonMsgDataVO selectLetterCnById(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public int selectMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.selectLetterCnById(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectMsgSearchWordCnt(mjonMsgDataVO); + } - public int selectMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public int insertMsgSearchWordInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.selectMsgSearchWordCnt(mjonMsgDataVO); - } + return mjonMsgDataDAO.insertMsgSearchWordInfo(mjonMsgDataVO); + } - public int insertMsgSearchWordInfo(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public int updateMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.insertMsgSearchWordInfo(mjonMsgDataVO); - } + return mjonMsgDataDAO.updateMsgSearchWordCnt(mjonMsgDataVO); + } - public int updateMsgSearchWordCnt(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + public List selectMsgSearchWordList(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.updateMsgSearchWordCnt(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectMsgSearchWordList(mjonMsgDataVO); + } - public List selectMsgSearchWordList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + // 문자검색 인기검색어(노출여부=Y) 리스트 불러오기 2023-05-30 Hans + public List selectMsgSearchWordExpList(MjonMsgDataVO mjonMsgDataVO) throws Exception { - return mjonMsgDataDAO.selectMsgSearchWordList(mjonMsgDataVO); - } + return mjonMsgDataDAO.selectMsgSearchWordExpList(mjonMsgDataVO); + } - //문자검색 인기검색어(노출여부=Y) 리스트 불러오기 2023-05-30 Hans - public List selectMsgSearchWordExpList(MjonMsgDataVO mjonMsgDataVO) throws Exception{ + // 문자검색 전송 실패 리스트 불러오기 + public void selectMsgSentFailList() throws Exception { - return mjonMsgDataDAO.selectMsgSearchWordExpList(mjonMsgDataVO); - } + List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); + for (MjonMsgVO vo : msgFailList) { + mjonMsgDataDAO.updateMsgSentFailPayBack(vo); - //문자검색 전송 실패 리스트 불러오기 - public void selectMsgSentFailList()throws Exception{ + } - List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); + } - for(MjonMsgVO vo : msgFailList) { + // 문자검색 전송 실패 리스트 불러오기 + public void selectMsgSentFailListOneByDay() throws Exception { - mjonMsgDataDAO.updateMsgSentFailPayBack(vo); + List msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); - } + System.out.println(" ++ 주석함 msgFailList.size() : " + msgFailList.size()); - } +// for(MjonMsgVO vo : msgFailList) { - //문자검색 전송 실패 리스트 불러오기 - public void selectMsgSentFailListOneByDay()throws Exception{ +// mjonMsgDataDAO.updateMsgSentFailPayBack(vo); - List msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); - - System.out.println(" ++ msgFailList.size() : " + msgFailList.size()); +// } - for(MjonMsgVO vo : msgFailList) { + } - mjonMsgDataDAO.updateMsgSentFailPayBack(vo); + // 현재 월 총 발송 건수 합계 구하기 + public String selectMsgSentSumData(String userId) throws Exception { + return mjonMsgDataDAO.selectMsgSentSumData(userId); + } - } + public int insertMsgDataInfoIheartTest() throws Exception { + int result = mjonMsgDataDAO.insertMsgDataInfoIheartTest(); - } + return result; + } - //현재 월 총 발송 건수 합계 구하기 - public String selectMsgSentSumData(String userId) throws Exception{ - return mjonMsgDataDAO.selectMsgSentSumData(userId); - } + // 결제관리 사용내역화면의 문자 상세보기 내용 + public MjonMsgVO selectPayUserMsgDetailDataAjax(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserMsgDetailDataAjax(mjonMsgVO); + } + // MsgGroupData Not Exist Check + public MjonMsgVO selectMsgGroupNotExistInfo(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectMsgGroupNotExistInfo(mjonMsgVO); + } - public int insertMsgDataInfoIheartTest() throws Exception{ - int result = mjonMsgDataDAO.insertMsgDataInfoIheartTest(); + // 문자발송 스팸 문자 리스트 불러오기 + public List selectSpamKeywordList() throws Exception { + return mjonMsgDataDAO.selectSpamKeywordList(); + } - return result; - } + public List selectBestMsgDataList(LetterVO letterVO) throws Exception { - //결제관리 사용내역화면의 문자 상세보기 내용 - public MjonMsgVO selectPayUserMsgDetailDataAjax(MjonMsgVO mjonMsgVO) throws Exception{ - return mjonMsgDataDAO.selectPayUserMsgDetailDataAjax(mjonMsgVO); - } + return mjonMsgDataDAO.selectBestMsgDataList(letterVO); + } - // MsgGroupData Not Exist Check - public MjonMsgVO selectMsgGroupNotExistInfo(MjonMsgVO mjonMsgVO) throws Exception{ - return mjonMsgDataDAO.selectMsgGroupNotExistInfo(mjonMsgVO); - } + public List selectBestPhotoMsgDataList(LetterVO letterVO) throws Exception { - //문자발송 스팸 문자 리스트 불러오기 - public List selectSpamKeywordList() throws Exception{ - return mjonMsgDataDAO.selectSpamKeywordList(); - } + return mjonMsgDataDAO.selectBestPhotoMsgDataList(letterVO); + } - public List selectBestMsgDataList(LetterVO letterVO) throws Exception{ + @Override + public List selectSendAgentList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); + } - return mjonMsgDataDAO.selectBestMsgDataList(letterVO); - } + @Override + public MjonMsgVO selectSendAgentInfo(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectSendAgentInfo(mjonMsgVO); + } - public List selectBestPhotoMsgDataList(LetterVO letterVO) throws Exception{ + @Override + public List selectPayUserWithKakaoList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserWithKakaoList(mjonMsgVO); + } - return mjonMsgDataDAO.selectBestPhotoMsgDataList(letterVO); - } + @Override + public List selectPayUserWithKakaoSumList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserWithKakaoSumList(mjonMsgVO); + } - @Override - public List selectSendAgentList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); - } + // 문자 그룹정보 => 재전송용 + public MjonMsgDataVO selectMjMsgGroupInfoByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMjMsgGroupInfoByResend(mjonMsgDataVO); + } - @Override - public MjonMsgVO selectSendAgentInfo(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectSendAgentInfo(mjonMsgVO); - } + // 문자 상세정보 => 재전송용 + public List selectMjMsgListByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception { + return mjonMsgDataDAO.selectMjMsgListByResend(mjonMsgDataVO); + } - @Override - public List selectPayUserWithKakaoList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectPayUserWithKakaoList(mjonMsgVO); - } + /* + * 대량 문자 데이터 배치 입력 처리 신규 추가 2024/02/02 우영두 + * + * + */ + public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception { - @Override - public List selectPayUserWithKakaoSumList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectPayUserWithKakaoSumList(mjonMsgVO); - } + MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - // 문자 그룹정보 => 재전송용 - public MjonMsgDataVO selectMjMsgGroupInfoByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - return mjonMsgDataDAO.selectMjMsgGroupInfoByResend(mjonMsgDataVO); - } + try { - // 문자 상세정보 => 재전송용 - public List selectMjMsgListByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception{ - return mjonMsgDataDAO.selectMjMsgListByResend(mjonMsgDataVO); - } + 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; + // 총 보유 금액과 전송 합계 비교 -/* - * 대량 문자 데이터 배치 입력 처리 신규 추가 - * 2024/02/02 우영두 - * - * - * */ - public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception{ + /* + * if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + * + * return 0 ; } + */ - MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); + int callToCnt = mjonMsgVO.getCallToList().length; // 전체 받는사람 건수 - try { + mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); - String msgType = mjonMsgVO.getMsgType(); - String agentCode = mjonMsgVO.getAgentCode(); - // 장문 전송 - String contSeq = ""; + // 그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 + /* + * if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + * + * Date now = new Date(); + * + * SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + * + * mjonMsgVO.setReqDate(sdFormat.format(now)); + * + * } + */ - //float myPrice = 10000; - //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - // 최종 입력 수 저장 변수 - int resultCnt = 0; - int limitCnt = 10000; - int blockCnt = 0; + // 사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) + String befCash = mjonMsgVO.getBefCash(); - // 총 보유 금액과 전송 합계 비교 + // VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 + if ("".equals(befCash) || befCash == null) { + befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); + } - /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴 + mjonMsgVO.setBefCash(befCash); + // 문자 전송 그룹 테이블에 정보 입력 + // mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - return 0 ; - }*/ + // 수신거부 목록 불러오기 + List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); - int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 + List dupliBlockList = MJUtil.getDuplicateList(userBlockList); + int usrBlockCnt = dupliBlockList.size(); - mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); + // 회원 전용 전송사 정보 불러오기 + MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); + String hotlineAgentCode = userInfo.getHotlineAgentCode(); + // 야간스미싱 알림여부 정보 불러오기 + JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 - /*if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 + System.out.println("++++++++++++++++++ holiSmishingNoti ::: " + holiSmishingNoti); + // 스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 + boolean spamSmishingPassStatus = false; // 야간스미싱 알림여부가 활성화인 경우 예외 알림 일정에 포함되는 시간에는 슬랙 및 30분 딜레이를 하지 않는다. - Date now = new Date(); + // 스팸, 스미싱 상태인 경우에만 true 처리 + // 야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. + // 야간 스미싱 알림 여부가 활성화 이고 스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. + if (holiSmishingNoti.equals("Y")) { - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - mjonMsgVO.setReqDate(sdFormat.format(now)); + msgAlarmSetVO.setUseYn("Y"); + msgAlarmSetVO.setFirstIndex(0); - }*/ + List resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); - //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) - String befCash = mjonMsgVO.getBefCash(); + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); - //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 - if("".equals(befCash) || befCash == null) { - befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); - } + MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); + msgHolidayVO.setFirstIndex(0); + msgHolidayVO.setRecordCountPerPage(100); + msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - mjonMsgVO.setBefCash(befCash); - // 문자 전송 그룹 테이블에 정보 입력 - //mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + List resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); - //수신거부 목록 불러오기 - List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); + MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - List dupliBlockList = MJUtil.getDuplicateList(userBlockList); - int usrBlockCnt = dupliBlockList.size(); + boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, + resultHolidayList); - //회원 전용 전송사 정보 불러오기 - MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); - String hotlineAgentCode = userInfo.getHotlineAgentCode(); + spamSmishingPassStatus = smishingAlarmPassSts; + } else { - //야간스미싱 알림여부 정보 불러오기 - JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + spamSmishingPassStatus = true; + } - System.out.println("++++++++++++++++++ holiSmishingNoti ::: "+holiSmishingNoti); - //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 - boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 예외 알림 일정에 포함되는 시간에는 슬랙 및 30분 딜레이를 하지 않는다. + // 전용 전송사가 지정되어 있으면 실행 + if (!hotlineAgentCode.equals("00")) { - //스팸, 스미싱 상태인 경우에만 true 처리 - //야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. - //야간 스미싱 알림 여부가 활성화 이고 스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. - if(holiSmishingNoti.equals("Y")) { + MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); + mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); + // 문자 타입 셋팅 + if (msgType.equals("6")) { + int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + if (fCnt > 0) { - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); + mjonMsgAgentStsVO.setMsgType("P"); - List resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); + } else { + mjonMsgAgentStsVO.setMsgType("L"); + } - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); + } else { + mjonMsgAgentStsVO.setMsgType("S"); + } - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); + List hotlineMsgAgentList = mjonMsgAgentStsDAO + .selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); - List resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + String mberAgentConde = ""; + String mberSendRate = ""; + String mberRepAgent = ""; - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); + for (MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); + mberAgentConde = tmp.getAgentCode(); + mberSendRate = tmp.getSendRate(); + mberRepAgent = tmp.getRepAgent(); + String useYn = tmp.getUseYn(); - spamSmishingPassStatus = smishingAlarmPassSts; - }else { + if (userInfo.getBlineCode().equals("N")) { + // 회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. + if (mberSendRate.equals("0") || useYn.equals("N")) { - spamSmishingPassStatus = true; - } + hotlineAgentCode = mberRepAgent; - //전용 전송사가 지정되어 있으면 실행 - 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"); + /** + * Agent 추가시 셋팅하기 Agent 발송 비율 불러오기 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 + * : 비즈뿌리오(04) 추가 23.04.10 : 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 + */ - }else { - mjonMsgAgentStsVO.setMsgType("L"); - } + int iheartCnt = 0; // 아이하트 전송갯수 + int hncCnt = 0; // 현대퓨처넷 전송갯수 + int imoCnt = 0; // 아이엠오 전송갯수 + int bizCnt = 0; // 비즈뿌리오 전송갯수 + int jjCnt = 0; // 제이제이 전송갯수 + int ivtCnt = 0; // 인비토 전송갯수 - }else { - mjonMsgAgentStsVO.setMsgType("S"); - } + // 전송사별 발송 리스트 조회 + List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); - List hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); + if (callToCnt >= 10) { + // 전송사별 배분률 조회 + int sendRateSize = sendRateList.size(); - String mberAgentConde = ""; - String mberSendRate = ""; - String mberRepAgent = ""; + /** + * Agent 추가시 셋팅하기 + * + * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) 22.10.12 : 비즈뿌리오(04) 추가 23.04.10 : + * 제이제이(05) 추가 23.05.02 : 인비토 (07) 추가 + */ - for(MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { + for (int i = 0; i < sendRateSize; i++) { - mberAgentConde = tmp.getAgentCode(); - mberSendRate = tmp.getSendRate(); - mberRepAgent = tmp.getRepAgent(); - String useYn = tmp.getUseYn(); + String sndAgentCode = sendRateList.get(i).getAgentCode(); - if(userInfo.getBlineCode().equals("N")) { - //회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. - if(mberSendRate.equals("0") || useYn.equals("N")) { + if (sndAgentCode.equals("01")) {// 아이하트 전송비율 - hotlineAgentCode = mberRepAgent; + 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())); - /** - * Agent 추가시 셋팅하기 - * Agent 발송 비율 불러오기 - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * */ + } else if (sndAgentCode.equals("04")) {// 비즈뿌리오 전송비율 - int iheartCnt = 0; //아이하트 전송갯수 - int hncCnt = 0; //현대퓨처넷 전송갯수 - int imoCnt = 0; //아이엠오 전송갯수 - int bizCnt = 0; //비즈뿌리오 전송갯수 - int jjCnt = 0; //제이제이 전송갯수 - int ivtCnt = 0; //인비토 전송갯수 + bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - // 전송사별 발송 리스트 조회 - List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); + } else if (sndAgentCode.equals("05")) {// 제이제이 전송비율 - if(callToCnt >= 10) { - // 전송사별 배분률 조회 - int sendRateSize = sendRateList.size(); + jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - /** - * Agent 추가시 셋팅하기 - * - * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) - * 22.10.12 : 비즈뿌리오(04) 추가 - * 23.04.10 : 제이제이(05) 추가 - * 23.05.02 : 인비토 (07) 추가 - * */ + } else if (sndAgentCode.equals("07")) {// 인비토 전송비율 - for(int i=0; i< sendRateSize; i++) { + ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); - 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")) {//현대퓨처넷 전송비율 + /* + * if(callToCnt >= 10000) { + * + * limitCnt = 1000; + * + * } + */ - hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + // 수신자 리스트 처리 + List msgDataInfo = new ArrayList(); - }else if(sndAgentCode.equals("03")) {//아이엠오 전송비율 + int cnt = 1; + int totCnt = 1; - imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + // 분할문자 시간에 간격시간 더해주기 + String dividDay = null; + Calendar cal = Calendar.getInstance(); - }else if(sndAgentCode.equals("04")) {//비즈뿌리오 전송비율 + // 예약시간 변환 + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + 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분 지연 처리 유무 - }else if(sndAgentCode.equals("05")) {//제이제이 전송비율 + if (spamStatus == null || spamStatus.equals("")) { - jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + spamStatus = "N"; - }else if(sndAgentCode.equals("07")) {//인비토 전송비율 + } - ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); + if (smishingYn == null || smishingYn.equals("")) { - } + smishingYn = "N"; - } - } + } - /** - * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. - * 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 하도록 한다. - * */ + // 스팸스미싱 예외 상태가 true 이면 30분 딜레이 및 슬랙 알림을 하지 않는다. + if (spamSmishingPassStatus) { - /*if(callToCnt >= 10000) { + spamStatus = "N"; + smishingYn = "N"; + delayYn = "N"; - limitCnt = 1000; + } - }*/ + if (!mjonMsgVO.getReserveYn().equals("N")) {// 예약문자인 경우 시간 셋팅 - //수신자 리스트 처리 - List msgDataInfo = new ArrayList(); + Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(toDate); // 예약 시간 캘린터 변수에 입력 - int cnt = 1; - int totCnt = 1; + // String 타입 시간 Int로 변환 + turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할발송 시간 간격 + dividDay = transFormat.format(cal.getTime()); - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); + totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 + divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + if (spamStatus.equals("Y") || smishingYn.equals("Y")) { - 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분 지연 처리 유무 + mjonMsgVO.setDelayYn("Y");// 일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 + // 넣어줘야한다. - if(spamStatus == null || spamStatus.equals("")) { + } else { - spamStatus = "N"; + mjonMsgVO.setDelayYn("N");// 일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임 + } - } + } else {// 즉시발송의 경우 현재 시간으로 입력해 준다. - if(smishingYn == null || smishingYn.equals("")) { + Date now = new Date(); + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 + // 시킨다. - smishingYn = "N"; + 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분 지연 코드 셋팅 - //스팸스미싱 예외 상태가 true 이면 30분 딜레이 및 슬랙 알림을 하지 않는다. - if(spamSmishingPassStatus) { + } else {// 정상적인 문자인 경우 즉시발송 처리해준다. - spamStatus = "N"; - smishingYn = "N"; - delayYn = "N"; + mjonMsgVO.setReqDate(transFormat.format(now)); + mjonMsgVO.setDelayYn(delayYn);// 문자 발송 30분 지연 디폴트 값 셋팅(N) - } + } + } - if(!mjonMsgVO.getReserveYn().equals("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 리스트 - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 + // Controller에서 전달 받은 분할 시간 정보 리스트 + List dividDayList = mjonMsgVO.getDividDay(); - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); + String frstDelayTime = mjonMsgVO.getReqDate(); - 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); - - String userLastIdgen = mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); - System.out.println(userLastIdgen); - - //기존에 등록된 pk값이 없으면 초기 번호로 셋팅 - if(userLastIdgen == null || userLastIdgen.equals("null")) { - - userLastIdgen = subUserId + "_00000000000000"; - - }*/ + /* + * 대용량 발송자의 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(!blockSts) { //수신거부가 아니면 추가 - - MjonMsgVO tempVO = new MjonMsgVO(); - - /** - * Agent 추가시 셋팅하기 - * - * 최초 : 아이하트(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")) { + 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 (!blockSts) { // 수신거부가 아니면 추가 + + MjonMsgVO tempVO = new MjonMsgVO(); + + /** + * Agent 추가시 셋팅하기 + * + * 최초 : 아이하트(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"); - // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 - if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 + } else { // 그림포함 문자인경우 - mjonMsgVO.setNeoType("2"); + mjonMsgVO.setNeoType("4"); - }else{ // 그림포함 문자인경우 + } + + } + + // 문자내용 내용 - 치환 처리 + String smsTxt = mjonMsgVO.getSmsTxt(); // 발송 문자 내용 - mjonMsgVO.setNeoType("4"); + // 일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. + 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) { - //문자내용 내용 - 치환 처리 - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 + // 스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. + // 20230630 우영두 추가 + if (spamStatus.equals("Y") || smishingYn.equals("Y")) { - //일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. - 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("\\[\\*이름\\*\\]", ""); - } - } + Date delayDate = transFormat.parse(dividDayList.get(i)); - 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\\*\\]", ""); - } - } + cal.setTime(delayDate); + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); - 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\\*\\]", ""); - } - } + tempVO.setReqDate(delayTime); // 분할 문자 예약 시간 입력해주기 - 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\\*\\]", ""); - } - } + } else { - 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.setReqDate(dividDayList.get(i)); // 분할 문자 예약 시간 입력해주기 - tempVO.setSmsTxt(smsTxt); + } - //즉시 / 예약 전송 처리 - if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 준다. + } else {// 일반 예약 발송의 경우 + if (spamStatus.equals("Y") || smishingYn.equals("Y")) {// 스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 + // 처리해준다. - tempVO.setReqDate(mjonMsgVO.getReqDate());//상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 입력함. + Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); + cal.setTime(delayDate); + cal.add(Calendar.MINUTE, 30); + delayTime = transFormat.format(cal.getTime()); - }else {//일반 문자인 경우 현재시간을 입력해 준다. + tempVO.setReqDate(delayTime); - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - tempVO.setReqDate(sdFormat.format(now)); + } else { - } + tempVO.setReqDate(mjonMsgVO.getReqDate()); - }else { // 예약 발송의 경우 예약 시간을 입력 - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { + } - //스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. - //20230630 우영두 추가 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) { + } - Date delayDate = transFormat.parse(dividDayList.get(i)); + // 딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. + // 분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. + // mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. + if (i == 0) { + frstDelayTime = tempVO.getReqDate(); + } + } - cal.setTime(delayDate); - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); + if (!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 - tempVO.setReqDate(delayTime); //분할 문자 예약 시간 입력해주기 + /** + * 장문 / 그림문자 일 경우 제목 처리 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 내용 텍스트가 없는 경우는 + * 어쩔수 없는 것으로 간주하여 Null로 처리한다. + * + */ + String contents = tempVO.getSmsTxt(); // 문자 내용 + if (StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 + // 입력이 + // 없는 + // 경우 - }else { + if (StringUtil.isNotEmpty(contents) && contents != null) {// 문자내용이 있는 경우 처리 - tempVO.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기 + String[] split = contents.split("\n"); - } + if (split.length > 0) { + String subject = ""; + String msgKind = mjonMsgVO.getMsgKind();// 문자 타입(일반, 광고, 선거문자) - }else {//일반 예약 발송의 경우 - if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. + // 선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 + if (msgKind.equals("C")) { + if (split.length > 1) { + subject = split[1].trim(); + } else { + subject = split[0].substring(0, 20); + } + } else { + subject = split[0].trim(); + } - Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); + } - cal.setTime(delayDate); - cal.add(Calendar.MINUTE, 30); - delayTime = transFormat.format(cal.getTime()); + } - tempVO.setReqDate(delayTime); + } else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅 + tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); + } - }else { + tempVO.setFileCnt(mjonMsgVO.getFileCnt()); + tempVO.setFileName1(mjonMsgVO.getFileName1()); + tempVO.setFileName2(mjonMsgVO.getFileName2()); + tempVO.setFileName3(mjonMsgVO.getFileName3()); + tempVO.setNeoType(mjonMsgVO.getNeoType()); + tempVO.setContSeq(mjonMsgVO.getContSeq()); - tempVO.setReqDate(mjonMsgVO.getReqDate()); + } - } + // 아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 + if (agentCode.equals("01") && msgType.equals("6")) { - } + // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 - //딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. - //분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. - //mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. - if(i==0) { - frstDelayTime = tempVO.getReqDate(); - } - } + // 이미지가 있는경우 file_type, file_Cnt 값 셋팅 + int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); + String contents = mjonMsgVO.getSmsTxt(); - if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가 + if (fileCnt > 0) { + tempVO.setFileType1("IMG"); // 아이하트 그림문자 전송시 파일종류 이미지로 셋팅 - /** - * 장문 / 그림문자 일 경우 제목 처리 - * 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 - * 내용 텍스트가 없는 경우는 어쩔수 없는 것으로 간주하여 Null로 처리한다. - * - * */ - String contents = tempVO.getSmsTxt(); //문자 내용 - if(StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 입력이 없는 경우 + // 그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) + if (StringUtil.isNotEmpty(contents)) { + fileCnt = fileCnt + 1; + } + tempVO.setFileCnt(Integer.toString(fileCnt)); - if(StringUtil.isNotEmpty(contents) && contents != null) {//문자내용이 있는 경우 처리 + } else { + tempVO.setFileCnt("1"); + } - String[] split = contents.split("\n"); + contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); + mjonMsgVO.setContSeq(contSeq); + tempVO.setSmsTxt(smsTxt); + tempVO.setContSeq(contSeq); - if(split.length > 0) { + } - String subject = ""; - String msgKind = mjonMsgVO.getMsgKind();//문자 타입(일반, 광고, 선거문자) + // 문자 내용 추가해 주기 + msgDataInfo.add(tempVO); - //선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 - if(msgKind.equals("C")) { - if(split.length > 1) { - subject = split[1].trim(); - }else { - subject = split[0].substring(0,20); - } - }else { - subject = split[0].trim(); - } + } // 수신거부 처리로직 끝 - } + int instCnt = 0; + // 지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 + if (totCnt == callToCnt) { - } + if (msgDataInfo.size() > 0) { - }else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅 - tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); - } + // 데이터 디비 입력해주기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - tempVO.setFileCnt(mjonMsgVO.getFileCnt()); - tempVO.setFileName1(mjonMsgVO.getFileName1()); - tempVO.setFileName2(mjonMsgVO.getFileName2()); - tempVO.setFileName3(mjonMsgVO.getFileName3()); - tempVO.setNeoType(mjonMsgVO.getNeoType()); - tempVO.setContSeq(mjonMsgVO.getContSeq()); + } - } + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; - //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 - if(agentCode.equals("01") && msgType.equals("6")) { + } else { - // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 + // 특정 건수 이상일 경우 분할해서 디비에 넣어준다. + if (cnt == limitCnt) { - //이미지가 있는경우 file_type, file_Cnt 값 셋팅 - int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - String contents = mjonMsgVO.getSmsTxt(); + if (msgDataInfo.size() > 0) { - if(fileCnt > 0) { - tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅 + // 분할 최대건수가 되면 디비에 입력하기 + instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); - //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) - if(StringUtil.isNotEmpty(contents)) { - fileCnt = fileCnt + 1; - } - tempVO.setFileCnt(Integer.toString(fileCnt)); + } - }else { - tempVO.setFileCnt("1"); - } + // 총 디비 입력 건수 저장하기 + resultCnt = resultCnt + instCnt; + cnt = 0; - contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); - mjonMsgVO.setContSeq(contSeq); - tempVO.setSmsTxt(smsTxt); - tempVO.setContSeq(contSeq); + // List 초기화 하기 + msgDataInfo.clear(); - } + } - //문자 내용 추가해 주기 - msgDataInfo.add(tempVO); + } - }//수신거부 처리로직 끝 + cnt++; + totCnt++; - int instCnt = 0; - //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 - if(totCnt == callToCnt) { + } - if(msgDataInfo.size() > 0) { + /* + * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 2. + * 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) + * + */ - //데이터 디비 입력해주기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + // 문자 발송 캐시 차감 해주기 + MjonPayVO mjonPayVO = new MjonPayVO(); - } + // 1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. + if (resultCnt > 0) { - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; + int totSendCnt = mjonMsgVO.getTotalCallCnt(); + Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); + Float totPrice = eachPrice * resultCnt; + String strTotPrice = String.format("%.1f", totPrice); - }else { + 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()); - //특정 건수 이상일 경우 분할해서 디비에 넣어준다. - if(cnt == limitCnt) { + mjonPayService.insertCash(mjonPayVO); // 캐시차감 + mjonPayService.updateMemberCash(mjonPayVO); // 회원정보 업데이트 + } - if(msgDataInfo.size() > 0) { + // 문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. + if (resultCnt > 0) { - //분할 최대건수가 되면 디비에 입력하기 - instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); + // 문자 전송 그룹 테이블에 정보 입력 + int groupCnt = resultCnt; + mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); + // mjonMsgService.insertGroupMsgData(mjonMsgVO); + int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); - } + // 메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. + if (msgGroupDataCnt < 1) { + mjonMsgVO.setAgentCode(agentCode);// 전송사 코드 번호를 셋팅해 준다. - //총 디비 입력 건수 저장하기 - resultCnt = resultCnt + instCnt; - cnt = 0; + // 지연 유무 코드가 Null 인경우 체크 + String tmpDelayYn = mjonMsgVO.getDelayYn(); + if (tmpDelayYn == null) { + mjonMsgVO.setDelayYn("N"); + } - //List 초기화 하기 - msgDataInfo.clear(); + // 예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 + // 셋팅해준다. + if (mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) { - } + mjonMsgVO.setReqDate(frstDelayTime); - } + } + mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - cnt++; - totCnt++; + try { - } + // 야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 + // 우영두 추가 + if (holiSmishingNoti.equals("Y") && spamSmishingPassStatus + && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { + mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } - /* - * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 - * 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 - * 2. 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) - * - * */ + } catch (Exception e) { + System.out.println( + "++++++++++++++++++++++++++++++ spamSmishingPassStatus HG 대량 선거 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + } - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); + } else { + mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); + } - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultCnt > 0) { + // 이벤트 회원 남은 캐시 업데이트 + fnUpdateEventRemainCash(mjonPayVO); - 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()); + // 성공 + returnVO.setSendMsgCnt(Integer.toString(resultCnt)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); // 수신차단 건수 저장 + returnVO.setAgentCode(agentCode); - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - } + } catch (Exception e) { + // 실패 + returnVO.setSendMsgCnt(Integer.toString(0)); // 발송 건수 저장 + returnVO.setSendMsgBlockCnt(Integer.toString(0)); // 수신차단 건수 저장 + returnVO.setAgentCode("01"); - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultCnt > 0) { + System.out.println("========================================================================="); + System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfoBatch ERROR !!! : " + e); + System.out.println("========================================================================="); + return returnVO; - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultCnt; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - //mjonMsgService.insertGroupMsgData(mjonMsgVO); - int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); + } - //메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. - if(msgGroupDataCnt < 1) { - mjonMsgVO.setAgentCode(agentCode);//전송사 코드 번호를 셋팅해 준다. + return returnVO; - //지연 유무 코드가 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"))) { + // 대용량 문자 전송시 사용자 마지막 PK 값 조회하기 + @Override + public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); + } - mjonMsgVO.setReqDate(frstDelayTime); + @Override + public List selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception { - } - mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + return mjonMsgDataDAO.selectMsgAddrListAjax_advc(addrVO); + } - try { + @Override + public int countByMsgAddrListAjax_advc(AddrVO addrVO) throws Exception { - //야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 - if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { - mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); - } + return mjonMsgDataDAO.countByMsgAddrListAjax_advc(addrVO); + } - } catch (Exception e) { - System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus HG 대량 선거 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); - } + @Override + public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserSumFaxList(mjonMsgVO); + } - }else { - mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); - } + @Override + public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception { - //이벤트 회원 남은 캐시 업데이트 - 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.setAgentCode("01"); - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfoBatch ERROR !!! : " + e); - System.out.println("========================================================================="); - return returnVO; - - } - - return returnVO; - - } - - - //대용량 문자 전송시 사용자 마지막 PK 값 조회하기 - @Override - public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{ - return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); - } - - @Override - public List selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception { - - return mjonMsgDataDAO.selectMsgAddrListAjax_advc(addrVO); - } - - @Override - public int countByMsgAddrListAjax_advc(AddrVO addrVO) throws Exception { - - return mjonMsgDataDAO.countByMsgAddrListAjax_advc(addrVO); - } - - @Override - public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception { - return mjonMsgDataDAO.selectPayUserSumFaxList(mjonMsgVO); - } - - @Override - public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception { - - log.info("mjonMsgVO [{}]" , mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone()); + log.info("mjonMsgVO [{}]", mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone()); log.info(" :: sendMsgData_advc :: "); - + Map returnMap = new HashMap<>(); - - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() + ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() + : null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { + + if (userId.equals("")) { return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다."); } - + mjonMsgVO.setUserId(userId); - - //발신번호가 등록된 유효한 번호인지 확인 + + // 발신번호가 등록된 유효한 번호인지 확인 int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO); - if(sendCallFromCnt < 1) { + if (sendCallFromCnt < 1) { return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다."); } /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ + * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함 + */ boolean mberSttus = userManageService.selectUserStatusInfo(userId); - if(!mberSttus) { + if (!mberSttus) { request.getSession().invalidate(); // UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때 - return new StatusResponse(HttpStatus.UNAUTHORIZED, "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); + return new StatusResponse(HttpStatus.UNAUTHORIZED, + "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); } String smsTxt = mjonMsgVO.getSmsTxtArea(); // 광고문자면 처리 - 광고 A - if("A".equals(mjonMsgVO.getMsgKind())) { - smsTxt = "(광고)"+smsTxt - +"\n"+"무료거부 0808800858"; + if ("A".equals(mjonMsgVO.getMsgKind())) { + smsTxt = "(광고)" + smsTxt + "\n" + "무료거부 0808800858"; } mjonMsgVO.setSmsTxt(smsTxt); @@ -4050,19 +3987,16 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M StatusResponse statusResponse = new StatusResponse(); mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse); - if(mjonMsgVO == null) { + if (mjonMsgVO == null) { return statusResponse; } List mjonMsgSendVOList = mjonMsgVO.getMjonMsgSendVOList(); - // 삭제 전 리스트 크기 저장 int initialSize = mjonMsgSendVOList.size(); // 수신목록 셋팅 List userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); - - // 리스트 초기 크기 mjonMsgSendVOList.removeIf(vo -> userBlockList.contains(vo.getPhone())); @@ -4072,19 +4006,15 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M int deletedCount = initialSize - finalSize; // 수신거부 목록 returnMap.put("resultBlockSts", deletedCount); - - if(mjonMsgSendVOList.size() < 1) { + + if (mjonMsgSendVOList.size() < 1) { return new StatusResponse(HttpStatus.BAD_REQUEST, "수신거부와 매칭되는 번호 제거 후 \n발송 가능한 수신목록이 존재하지 않습니다."); } - - - - // 전용 전송사 코드 및 대표 전송사 조회 MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(userId); String hotlineAgentCode = userInfo.getHotlineAgentCode(); - + // 핫라인 전송사 처리 if (!"00".equals(hotlineAgentCode)) { hotlineAgentCode = handleHotlineAgent(mjonMsgVO, hotlineAgentCode, userInfo); @@ -4097,7 +4027,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // 수신자 총 명수 기준으로 전송사 비율 처리 // 전송사별 배분률 조회 List sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); - + // finalSize :: 수신거부 번호 제거 후 총 수신자 수 if (finalSize >= 10) { // 전송사별 발송 비율 계산 @@ -4105,60 +4035,47 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M MsgSendUtils.calculateSendCounts(agentSendCounts, sendRate, finalSize); } } - + mjonMsgVO.setAgentCode(hotlineAgentCode); - + // 스팸관련 키워드 select List resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); - /** - * @methodName : populateReplacementLists - * @author : 이호영 - * @date : 2024.09.26 - * @description : 배열에 데이터를 채우는 메서드 - * 1. 치환 문자열 데이터 확인 및 문자 치환 - * 2. 스팸 문자 체크 - * 3. 메세지 타입 구하기 - * 4. 제목 셋팅 : 타입에 따라 분기 - * 5. 이미지 갯수 셋팅 - * 6. 예약 및 분할에 따른 시간 설정 - * 7. 전송사 코드 셋팅 + /** + * @methodName : populateReplacementLists + * @author : 이호영 + * @date : 2024.09.26 + * @description : 배열에 데이터를 채우는 메서드 1. 치환 문자열 데이터 확인 및 문자 치환 2. 스팸 문자 체크 3. 메세지 + * 타입 구하기 4. 제목 셋팅 : 타입에 따라 분기 5. 이미지 갯수 셋팅 6. 예약 및 분할에 따른 시간 설정 7. + * 전송사 코드 셋팅 */ - if(!MsgSendUtils.populateSendLists(mjonMsgVO, mjonMsgSendVOList, statusResponse, resultSpamTxt - , agentSendCounts, sendRateList)) {; - //문자 치환 후 전송 문자 길이를 초과하였습니다. - //문자 치환 중 오류가 발생하였습니다. + if (!MsgSendUtils.populateSendLists(mjonMsgVO, mjonMsgSendVOList, statusResponse, resultSpamTxt, + agentSendCounts, sendRateList)) { + ; + // 문자 치환 후 전송 문자 길이를 초과하였습니다. + // 문자 치환 중 오류가 발생하였습니다. return statusResponse; } // group_data에 insert하기위해 추가 mjonMsgVO.setReqDate(mjonMsgSendVOList.get(0).getReqDate()); - - //1.시스템 기본 단가 정보 불러오기 + // 1.시스템 기본 단가 정보 불러오기 JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - //2.사용자 개인 단가 정보 불러오기 + // 2.사용자 개인 단가 정보 불러오기 MberManageVO mberManageVO = mjonMsgDataDAO.selectMberManageInfo(userId); MsgSendUtils.setPriceforVO(mjonMsgVO, mjonMsgSendVOList, sysJoinSetVO, mberManageVO); - - - // msg_id 대량 생성 List idList = idgenMsgCId.getNextStringId(mjonMsgSendVOList.size()); for (int i = 0; i < mjonMsgSendVOList.size(); i++) { - mjonMsgSendVOList.get(i).setMsgId(idList.get(i)); + mjonMsgSendVOList.get(i).setMsgId(idList.get(i)); } - /* - * 이벤트 영역 - * 이벤트 정보 가져오기 - * 이벤트 상태가 "E"가 아닌 경우에만 호출 - * 이벤트 금액이 있을 시 발송 LIST에서 - * => optimalMsgList로 데이터 이동 - * 이동하면서 이벤트 금액으로 설정 - */ + * 이벤트 영역 이벤트 정보 가져오기 이벤트 상태가 "E"가 아닌 경우에만 호출 이벤트 금액이 있을 시 발송 LIST에서 => + * optimalMsgList로 데이터 이동 이동하면서 이벤트 금액으로 설정 + */ // mjonCommon 호출 statusResponse = mjonCommon.processEventMessages(userId, mjonMsgVO, mjonMsgSendVOList); if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) { @@ -4166,27 +4083,20 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return statusResponse; } - if (!isCashSufficient(mjonMsgVO)) { log.error("Insufficient balance for message sending."); return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다."); } - - System.out.println("==================== insert 시작 ===================="); - - + // log.info("mj_msg_data insert start [{}]", mjonMsgSendVOList.size()); // 합산 금액을 String으로 변환하여 설정 - - - // Step 1: 메시지를 가격별로 그룹화 Map> priceGroupedMessages = mjonMsgSendVOList.stream() - .collect(Collectors.groupingBy(MjonMsgSendVO::getEachPrice)); - + .collect(Collectors.groupingBy(MjonMsgSendVO::getEachPrice)); + int instTotalCnt = 0; // Step 2: 그룹화 된 데이터를 그룹별로 insert 처리 for (Map.Entry> entry : priceGroupedMessages.entrySet()) { @@ -4196,21 +4106,17 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // msgGroupId 생성 String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId(); groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId)); - + // 발송 데이터 삽입 int instCnt = this.insertMsgData_advc(groupedMsgList); - - if(instCnt > 0) { + + if (instCnt > 0) { instTotalCnt += instCnt; this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList); // 금액 및 포인트 insert - priceAndPoint.insertCashAndPoint( - userId - , -Float.parseFloat(mjonMsgVO.getTotPrice()) - , "SMS 문자 총 " + groupedMsgList.size() + "건 중 " + instCnt + "건 발송" - , mjonMsgVO.getMsgGroupId() - ); + priceAndPoint.insertCashAndPoint(userId, -Float.parseFloat(mjonMsgVO.getTotPrice()), + "SMS 문자 총 " + groupedMsgList.size() + "건 중 " + instCnt + "건 발송", mjonMsgVO.getMsgGroupId()); // spam 문자 저장 handleSpamMsg_advc(mjonMsgVO, groupedMsgList.get(0)); } @@ -4219,16 +4125,13 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // returnMap.put("resultSts", instCnt); log.debug("가격 [{}]의 총 갯수: [{}]", price, groupedMsgList.size()); - - } - - + } + // 분할 최대건수가 되면 디비에 입력하기 // int instCnt = mjonMsgDataDAO.insertMsgDataInfo_advc(mjonMsgSendVOList); // int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList); - // 총 발송 건수 returnMap.put("resultSts", instTotalCnt); log.debug("총 단가 합계: [{}]", mjonMsgVO.getTotPrice()); @@ -4248,23 +4151,22 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return statusResponse; } - - private void insertMsgGroupDataTb_advc(int instCnt, MjonMsgVO mjonMsgVO, List mjonMsgSendVOList) throws Exception { + private void insertMsgGroupDataTb_advc(int instCnt, MjonMsgVO mjonMsgVO, List mjonMsgSendVOList) + throws Exception { - // insert 총 데이터 + // insert 총 데이터 mjonMsgVO.setMsgGroupCnt(Integer.toString(instCnt)); - // insert 총 금액 + // insert 총 금액 float totalPrice = MsgSendUtils.setPriceforVO(mjonMsgSendVOList); mjonMsgVO.setTotPrice(String.valueOf(totalPrice)); - - + MjonMsgSendVO mjonMsgSendVO = mjonMsgSendVOList.get(0); - + // 개별단가 mjonMsgVO.setEachPrice(mjonMsgSendVO.getEachPrice()); - + // 전송사 코드 번호를 셋팅해 준다. mjonMsgVO.setAgentCode(mjonMsgSendVO.getAgentCode()); @@ -4274,13 +4176,11 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M mjonMsgVO.setMsgGroupId(mjonMsgSendVO.getMsgGroupId()); mjonMsgVO.setMsgType(mjonMsgSendVO.getMsgType()); mjonMsgDAO.insertGroupMsgData(mjonMsgVO); - + } - - + private int insertMsgData_advc(List mjonMsgSendVOList) { - - + // 시작 시간 측정 long totalStartTime = System.currentTimeMillis(); @@ -4304,9 +4204,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M long batchStartTime = System.currentTimeMillis(); // Batch 리스트 생성 - List batchList = mjonMsgSendVOList.subList( - i, Math.min(i + batchSize, totalSize) - ); + List batchList = mjonMsgSendVOList.subList(i, Math.min(i + batchSize, totalSize)); System.out.println("Batch 시작 인덱스: " + i); // DAO 호출 @@ -4339,92 +4237,86 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M System.out.println("배치 " + (k + 1) + " 실행 시간 :: " + batchExecutionTimes.get(k) + "초"); } - - - return instCnt; } - /** - * @methodName : handleHotlineAgent - * @author : 이호영 - * @date : 2024.11.26 - * @description : agent 발송 비율 리스트를 가져오기위해 msgType 수정 - * @param mjonMsgVO - * @param hotlineAgentCode - * @param userInfo - * @return - * @throws Exception - */ - private String handleHotlineAgent(MjonMsgVO mjonMsgVO, String hotlineAgentCode, MberManageVO userInfo) throws Exception { - MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); - mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); - // 메시지 타입에 따른 전송사 설정 - if ("6".equals(mjonMsgVO.getMsgType())) { - int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt()); - mjonMsgAgentStsVO.setMsgType(fileCount > 0 ? "P" : "L"); - } else { - mjonMsgAgentStsVO.setMsgType("S"); - } + /** + * @methodName : handleHotlineAgent + * @author : 이호영 + * @date : 2024.11.26 + * @description : agent 발송 비율 리스트를 가져오기위해 msgType 수정 + * @param mjonMsgVO + * @param hotlineAgentCode + * @param userInfo + * @return + * @throws Exception + */ + private String handleHotlineAgent(MjonMsgVO mjonMsgVO, String hotlineAgentCode, MberManageVO userInfo) + throws Exception { + MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); + mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); - // 핫라인 전송사 리스트 조회 - List hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); + // 메시지 타입에 따른 전송사 설정 + if ("6".equals(mjonMsgVO.getMsgType())) { + int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt()); + mjonMsgAgentStsVO.setMsgType(fileCount > 0 ? "P" : "L"); + } else { + mjonMsgAgentStsVO.setMsgType("S"); + } - // 핫라인 전송사 코드 업데이트 - for (MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { - hotlineAgentCode = MsgSendUtils.handleHotlineAgentRate(userInfo, tmp, hotlineAgentCode); - } + // 핫라인 전송사 리스트 조회 + List hotlineMsgAgentList = mjonMsgAgentStsDAO + .selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); + + // 핫라인 전송사 코드 업데이트 + for (MjonMsgAgentStsVO tmp : hotlineMsgAgentList) { + hotlineAgentCode = MsgSendUtils.handleHotlineAgentRate(userInfo, tmp, hotlineAgentCode); + } + + return hotlineAgentCode; // 최종 변경된 hotlineAgentCode 반환 + } - return hotlineAgentCode; // 최종 변경된 hotlineAgentCode 반환 - } - - private MjonMsgVO setImagesSetting(MjonMsgVO mjonMsgVO, StatusResponse statusResponse) throws Exception { - + int fileCount = 0; // 장문 메시지일 경우 + 그림 이미지가 첨부된 경우 - // - if (mjonMsgVO.getMsgType().equals("6") - && mjonMsgVO.getImgFilePathAdvc() != null - && mjonMsgVO.getImgFileIdAdvc() != null - ) - { - - //그림 이미지가 첨부된 경우 - + // + if (mjonMsgVO.getMsgType().equals("6") && mjonMsgVO.getImgFilePathAdvc() != null + && mjonMsgVO.getImgFileIdAdvc() != null) { + + // 그림 이미지가 첨부된 경우 + String[] path; - if(mjonMsgVO.getImgFilePathAdvc().contains(",")) { + if (mjonMsgVO.getImgFilePathAdvc().contains(",")) { path = mjonMsgVO.getImgFilePathAdvc().split(","); - }else { + } else { path = new String[1]; // 크기 1의 배열로 초기화 path[0] = mjonMsgVO.getImgFilePathAdvc(); } - - String[] fileId = null; - if(mjonMsgVO.getImgFileIdAdvc().contains(",")) { + + String[] fileId = null; + if (mjonMsgVO.getImgFileIdAdvc().contains(",")) { fileId = mjonMsgVO.getImgFileIdAdvc().split(","); - }else { + } else { fileId = new String[1]; // 크기 1의 배열로 초기화 fileId[0] = mjonMsgVO.getImgFileIdAdvc(); } - - + String[] templateYn = null; - if(mjonMsgVO.getTemplateYnAdvc().contains(",")) { + if (mjonMsgVO.getTemplateYnAdvc().contains(",")) { templateYn = mjonMsgVO.getTemplateYnAdvc().split(","); - }else { + } else { templateYn = new String[1]; // 크기 1의 배열로 초기화 templateYn[0] = mjonMsgVO.getTemplateYnAdvc(); } - - - for(int i=0; i resultMap = sendMessages(mjonMsgVO, lists); - - if(!resultMap.isEmpty()) { - - if(resultMap.get("result").contains("fail")) { - - statusResponse.setMessage(resultMap.get("message")); - statusResponse.setObject(resultMap); - statusResponse.setStatus(HttpStatus.BAD_REQUEST); - return statusResponse; - - } - - } - - - statusResponse.setObject(resultMap); - statusResponse.setStatus(HttpStatus.OK); - statusResponse.setMessage("문자 전송이 완료되었습니다."); - - return statusResponse; - } -*/ + * // 그림 문자 발송 처리 메서드 private StatusResponse processMessageSending(MjonMsgVO + * mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse) throws + * Exception { + * + * Map resultMap = sendMessages(mjonMsgVO, lists); + * + * if(!resultMap.isEmpty()) { + * + * if(resultMap.get("result").contains("fail")) { + * + * statusResponse.setMessage(resultMap.get("message")); + * statusResponse.setObject(resultMap); + * statusResponse.setStatus(HttpStatus.BAD_REQUEST); return statusResponse; + * + * } + * + * } + * + * + * statusResponse.setObject(resultMap); statusResponse.setStatus(HttpStatus.OK); + * statusResponse.setMessage("문자 전송이 완료되었습니다."); + * + * return statusResponse; } + */ private Map fncSendMsgRtnMap(MjonMsgVO mjonMsgVO) throws Exception { Map returnMap = new HashMap(); - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 + int resultSts = 0; // 발송결과 건수 + int resultBlockSts = 0; // 수신거부 등록번호로 발송을 안한 건수 // advc 현재 보유 금액 확인 if (!isCashSufficient(mjonMsgVO)) { @@ -4525,42 +4391,38 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // 보유 금액 및 포인트 데이터를 반환받아 새 MjonMsgVO 생성 MjonMsgVO updatedMsgVO = setUserMoneyData(mjonMsgVO); - - - //문자 전송 그룹아이디 생성 + + // 문자 전송 그룹아이디 생성 updatedMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - + int callToListCnt = updatedMsgVO.getCallToList().length; updatedMsgVO.setTotalCallCnt(callToListCnt); - // 예약 문자 처리 후 새로운 MjonMsgVO 반환 updatedMsgVO = handleReserveMsg(updatedMsgVO); - - //분할 예약 시간 저장 리스트 생성 + + // 분할 예약 시간 저장 리스트 생성 List dividDayList = new ArrayList(); - - + mjonMsgVO.setDividDay(dividDayList); MjonMsgReturnVO returnVO = insertMsgDataInfo_advc(updatedMsgVO); resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - + System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultSts ::: " + resultSts); + System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultSts ::: " + resultSts); System.out.println("========================================================================="); handleSpamMsg(updatedMsgVO); - - //문자 발송 후 남은 보유 캐시 정보 불러오기 + + // 문자 발송 후 남은 보유 캐시 정보 불러오기 String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); returnMap.put("afterCash", afterCash); returnMap.put("message", "문자 전송이 완료되었습니다."); returnMap.put("result", "success"); returnMap.put("resultSts", Integer.toString(resultSts)); returnMap.put("resultBlockSts", Integer.toString(resultBlockSts)); - + return returnMap; } @@ -4574,22 +4436,21 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M System.err.println("스팸 문구 처리 중 오류 발생: " + e.getMessage()); } } - - private void handleSpamMsg_advc(MjonMsgVO mjonMsgVO, MjonMsgSendVO mjonMsgSendVO) throws Exception{ - if ("Y".equals(mjonMsgVO.getSpamStatus())) - { - MjonMsgVO mjonSpamMsgVO = mjonMsgVO; - mjonSpamMsgVO.setSubject(mjonSpamMsgVO.getMmsSubject()); - - mjonSpamMsgVO.setEachPrice(mjonMsgSendVO.getEachPrice()); - mjonSpamMsgVO.setFilePath1(mjonMsgSendVO.getFilePath1()); - mjonSpamMsgVO.setFilePath2(mjonMsgSendVO.getFilePath2()); - mjonSpamMsgVO.setFilePath3(mjonMsgSendVO.getFilePath3()); - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - System.out.println("스팸 문구 발송 내용 등록: " + resultCnt); - } + private void handleSpamMsg_advc(MjonMsgVO mjonMsgVO, MjonMsgSendVO mjonMsgSendVO) throws Exception { + if ("Y".equals(mjonMsgVO.getSpamStatus())) { + MjonMsgVO mjonSpamMsgVO = mjonMsgVO; + + mjonSpamMsgVO.setSubject(mjonSpamMsgVO.getMmsSubject()); + + mjonSpamMsgVO.setEachPrice(mjonMsgSendVO.getEachPrice()); + mjonSpamMsgVO.setFilePath1(mjonMsgSendVO.getFilePath1()); + mjonSpamMsgVO.setFilePath2(mjonMsgSendVO.getFilePath2()); + mjonSpamMsgVO.setFilePath3(mjonMsgSendVO.getFilePath3()); + + int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); + System.out.println("스팸 문구 발송 내용 등록: " + resultCnt); + } } // 예약 문자인 경우 처리하는 메서드 @@ -4597,40 +4458,41 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M if (!mjonMsgVO.getReserveYn().equals("N")) { Calendar cal = Calendar.getInstance(); SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - + Date reserveDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(reserveDate); // 예약 시간 셋팅 - - int turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할 시간 간격 - int divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 - + cal.setTime(reserveDate); // 예약 시간 셋팅 + + int turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); // 분할 시간 간격 + int divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); // 분할 발송 갯수 + // 분할 발송 예약 시간 셋팅 List dividDayList = setDivideSendTime(mjonMsgVO, cal, transFormat, turmMin, divideCnt); - + mjonMsgVO.setDividDay(dividDayList); - + return mjonMsgVO; } - + return mjonMsgVO; } // 분할 발송 시간을 설정하여 리스트 반환 - private List setDivideSendTime(MjonMsgVO mjonMsgVO, Calendar cal, SimpleDateFormat transFormat, int turmMin, int divideCnt) { + private List setDivideSendTime(MjonMsgVO mjonMsgVO, Calendar cal, SimpleDateFormat transFormat, int turmMin, + int divideCnt) { List dividDayList = new ArrayList<>(); String dividDay = transFormat.format(cal.getTime()); - + int count = 1; for (int i = 0; i < mjonMsgVO.getCallToList().length; i++) { if (count > divideCnt) { count = 1; - cal.add(Calendar.MINUTE, turmMin); // 분할 시간 증가 + cal.add(Calendar.MINUTE, turmMin); // 분할 시간 증가 dividDay = transFormat.format(cal.getTime()); } dividDayList.add(dividDay); count++; } - + return dividDayList; } @@ -4641,16 +4503,16 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); String userMoney = priceAndPoint.getBefCash(mjonMsgVO.getUserId()); String userPoint = priceAndPoint.getBefPoint(mjonMsgVO.getUserId()); - + BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - + MjonMsgVO updatedMsgVO = new MjonMsgVO(); // 원본을 복사한 새로운 객체 생성 updatedMsgVO = mjonMsgVO; updatedMsgVO.setBefPoint(userPoint); updatedMsgVO.setBefCash(befCash.toString()); - + return updatedMsgVO; - + } // 보유 금액이 충분한지 확인하는 메서드 @@ -4658,219 +4520,179 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M String userMoney = priceAndPoint.getBefCash(mjonMsgVO.getUserId()); // 쉼표 제거 userMoney = userMoney.replace(",", ""); - + String totalPrice = mjonMsgVO.getTotPrice(); // 쉼표 제거 totalPrice = totalPrice.replace(",", ""); - + BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); BigDecimal totMsgPrice = new BigDecimal(totalPrice).setScale(2, RoundingMode.HALF_EVEN); // String userMoney = priceAndPoint.getBefCash(mjonMsgVO.getUserId()); // BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); // BigDecimal totMsgPrice = new BigDecimal(mjonMsgVO.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN); - + return befCash.compareTo(totMsgPrice) >= 0; } /** * 범용 메시지 발송 처리 메서드 * - * @param msgVO 발송할 메시지 VO - * @param lists 치환 데이터 리스트 - * @param msgType 메시지 유형 (short, long, img) + * @param msgVO 발송할 메시지 VO + * @param lists 치환 데이터 리스트 + * @param msgType 메시지 유형 (short, long, img) * @return 발송 결과 * @throws Exception * - * 20241002 이호영 - * 치환 후 장문, 단문이 모두 있을 수 있기 때문에 아래 로직처럼 모든 if를 열어둠 + * 20241002 이호영 치환 후 장문, 단문이 모두 있을 수 있기 때문에 아래 로직처럼 모든 if를 열어둠 */ - + /* - private Map sendMessages(MjonMsgVO msgVO, ReplacementListsVO lists) throws Exception { - - Map resultMap = new HashMap<>(); - int totalResultSts = 0; - int totalResultBlockSts = 0; - - Map tempResult; - - // Short 메시지 발송 - if (lists.getShortCnt() > 0) { - msgVO.setNameList(lists.getShortNameList()); - msgVO.setCallToList(lists.getShortPhone()); - msgVO.setRep1List(lists.getShortRep1()); - msgVO.setRep2List(lists.getShortRep2()); - msgVO.setRep3List(lists.getShortRep3()); - msgVO.setRep4List(lists.getShortRep4()); - - log.info(" :: sendMessages - Type: short :: "); - tempResult = fncSendMsgRtnMap(msgVO); - - // 실패 여부 체크 후 즉시 반환 - if (tempResult.get("result").contains("fail")) { - return tempResult; - } - - // 결과 합산 - totalResultSts += Integer.parseInt(tempResult.get("resultSts")); - totalResultBlockSts += Integer.parseInt(tempResult.get("resultBlockSts")); - - resultMap.putAll(tempResult); - } - - // Long 메시지 발송 - if (lists.getLongCnt() > 0) { - msgVO.setNameList(lists.getLongNameList()); - msgVO.setCallToList(lists.getLongPhone()); - msgVO.setRep1List(lists.getLongRep1()); - msgVO.setRep2List(lists.getLongRep2()); - msgVO.setRep3List(lists.getLongRep3()); - msgVO.setRep4List(lists.getLongRep4()); - - log.info(" :: sendMessages - Type: long :: "); - tempResult = fncSendMsgRtnMap(msgVO); - - // 실패 여부 체크 후 즉시 반환 - if (tempResult.get("result").contains("fail")) { - return tempResult; - } - - // 결과 합산 - totalResultSts += Integer.parseInt(tempResult.get("resultSts")); - totalResultBlockSts += Integer.parseInt(tempResult.get("resultBlockSts")); - - resultMap.putAll(tempResult); - } - - // Img 메시지 발송 - if (lists.getImgCnt() > 0) { - msgVO.setNameList(lists.getImgNameList()); - msgVO.setCallToList(lists.getImgPhone()); - msgVO.setRep1List(lists.getImgRep1()); - msgVO.setRep2List(lists.getImgRep2()); - msgVO.setRep3List(lists.getImgRep3()); - msgVO.setRep4List(lists.getImgRep4()); - - log.info(" :: sendMessages - Type: img :: "); - tempResult = fncSendMsgRtnMap(msgVO); - - // 실패 여부 체크 후 즉시 반환 - if (tempResult.get("result").contains("fail")) { - return tempResult; - } - - // 결과 합산 - totalResultSts += Integer.parseInt(tempResult.get("resultSts")); - totalResultBlockSts += Integer.parseInt(tempResult.get("resultBlockSts")); - - resultMap.putAll(tempResult); - } - - // 누적된 resultSts와 resultBlockSts를 최종적으로 resultMap에 저장 - resultMap.put("resultSts", Integer.toString(totalResultSts)); - resultMap.put("resultBlockSts", Integer.toString(totalResultBlockSts)); - - return resultMap; - -/* - String msgType = ""; - - if (lists.getShortCnt() > 0) { - msgType = "short"; - } else if (lists.getLongCnt() > 0) { - msgType = "long"; - } else if (lists.getImgCnt() > 0) { - msgType = "img"; - } - - log.info(" :: sendMessages - Type: {} :: ", msgType); - - switch (msgType) { - case "short": - msgVO.setNameList(lists.getShortNameList()); - msgVO.setCallToList(lists.getShortPhone()); - msgVO.setRep1List(lists.getShortRep1()); - msgVO.setRep2List(lists.getShortRep2()); - msgVO.setRep3List(lists.getShortRep3()); - msgVO.setRep4List(lists.getShortRep4()); - break; - - case "long": - msgVO.setNameList(lists.getLongNameList()); - msgVO.setCallToList(lists.getLongPhone()); - msgVO.setRep1List(lists.getLongRep1()); - msgVO.setRep2List(lists.getLongRep2()); - msgVO.setRep3List(lists.getLongRep3()); - msgVO.setRep4List(lists.getLongRep4()); - break; - - case "img": - msgVO.setNameList(lists.getImgNameList()); - msgVO.setCallToList(lists.getImgPhone()); - msgVO.setRep1List(lists.getImgRep1()); - msgVO.setRep2List(lists.getImgRep2()); - msgVO.setRep3List(lists.getImgRep3()); - msgVO.setRep4List(lists.getImgRep4()); - break; - } - - return fncSendMsgRtnMap(msgVO); - - */ + * private Map sendMessages(MjonMsgVO msgVO, ReplacementListsVO + * lists) throws Exception { + * + * Map resultMap = new HashMap<>(); int totalResultSts = 0; int + * totalResultBlockSts = 0; + * + * Map tempResult; + * + * // Short 메시지 발송 if (lists.getShortCnt() > 0) { + * msgVO.setNameList(lists.getShortNameList()); + * msgVO.setCallToList(lists.getShortPhone()); + * msgVO.setRep1List(lists.getShortRep1()); + * msgVO.setRep2List(lists.getShortRep2()); + * msgVO.setRep3List(lists.getShortRep3()); + * msgVO.setRep4List(lists.getShortRep4()); + * + * log.info(" :: sendMessages - Type: short :: "); tempResult = + * fncSendMsgRtnMap(msgVO); + * + * // 실패 여부 체크 후 즉시 반환 if (tempResult.get("result").contains("fail")) { return + * tempResult; } + * + * // 결과 합산 totalResultSts += Integer.parseInt(tempResult.get("resultSts")); + * totalResultBlockSts += Integer.parseInt(tempResult.get("resultBlockSts")); + * + * resultMap.putAll(tempResult); } + * + * // Long 메시지 발송 if (lists.getLongCnt() > 0) { + * msgVO.setNameList(lists.getLongNameList()); + * msgVO.setCallToList(lists.getLongPhone()); + * msgVO.setRep1List(lists.getLongRep1()); + * msgVO.setRep2List(lists.getLongRep2()); + * msgVO.setRep3List(lists.getLongRep3()); + * msgVO.setRep4List(lists.getLongRep4()); + * + * log.info(" :: sendMessages - Type: long :: "); tempResult = + * fncSendMsgRtnMap(msgVO); + * + * // 실패 여부 체크 후 즉시 반환 if (tempResult.get("result").contains("fail")) { return + * tempResult; } + * + * // 결과 합산 totalResultSts += Integer.parseInt(tempResult.get("resultSts")); + * totalResultBlockSts += Integer.parseInt(tempResult.get("resultBlockSts")); + * + * resultMap.putAll(tempResult); } + * + * // Img 메시지 발송 if (lists.getImgCnt() > 0) { + * msgVO.setNameList(lists.getImgNameList()); + * msgVO.setCallToList(lists.getImgPhone()); + * msgVO.setRep1List(lists.getImgRep1()); msgVO.setRep2List(lists.getImgRep2()); + * msgVO.setRep3List(lists.getImgRep3()); msgVO.setRep4List(lists.getImgRep4()); + * + * log.info(" :: sendMessages - Type: img :: "); tempResult = + * fncSendMsgRtnMap(msgVO); + * + * // 실패 여부 체크 후 즉시 반환 if (tempResult.get("result").contains("fail")) { return + * tempResult; } + * + * // 결과 합산 totalResultSts += Integer.parseInt(tempResult.get("resultSts")); + * totalResultBlockSts += Integer.parseInt(tempResult.get("resultBlockSts")); + * + * resultMap.putAll(tempResult); } + * + * // 누적된 resultSts와 resultBlockSts를 최종적으로 resultMap에 저장 + * resultMap.put("resultSts", Integer.toString(totalResultSts)); + * resultMap.put("resultBlockSts", Integer.toString(totalResultBlockSts)); + * + * return resultMap; + * + * /* String msgType = ""; + * + * if (lists.getShortCnt() > 0) { msgType = "short"; } else if + * (lists.getLongCnt() > 0) { msgType = "long"; } else if (lists.getImgCnt() > + * 0) { msgType = "img"; } + * + * log.info(" :: sendMessages - Type: {} :: ", msgType); + * + * switch (msgType) { case "short": msgVO.setNameList(lists.getShortNameList()); + * msgVO.setCallToList(lists.getShortPhone()); + * msgVO.setRep1List(lists.getShortRep1()); + * msgVO.setRep2List(lists.getShortRep2()); + * msgVO.setRep3List(lists.getShortRep3()); + * msgVO.setRep4List(lists.getShortRep4()); break; + * + * case "long": msgVO.setNameList(lists.getLongNameList()); + * msgVO.setCallToList(lists.getLongPhone()); + * msgVO.setRep1List(lists.getLongRep1()); + * msgVO.setRep2List(lists.getLongRep2()); + * msgVO.setRep3List(lists.getLongRep3()); + * msgVO.setRep4List(lists.getLongRep4()); break; + * + * case "img": msgVO.setNameList(lists.getImgNameList()); + * msgVO.setCallToList(lists.getImgPhone()); + * msgVO.setRep1List(lists.getImgRep1()); msgVO.setRep2List(lists.getImgRep2()); + * msgVO.setRep3List(lists.getImgRep3()); msgVO.setRep4List(lists.getImgRep4()); + * break; } + * + * return fncSendMsgRtnMap(msgVO); + * + */ /* + * } + */ + + // 20240924 이호영 + // 이벤트 상태를 처리하는 메서드 + // 개선중에 service 처리부분으로 일단 utils화 보류 + private boolean handleEventStatus(MjonEventVO eventMberInfo, float paramEachPrice, MjonEventVO mjonEventVO, + boolean compareEndDate) { + try { + String eventEndDate = eventMberInfo.getEventEndDate(); + if (eventEndDate != null) { + float eventRemainCash = (float) eventMberInfo.getEventRemainCash(); + + if (!compareEndDate || eventRemainCash < paramEachPrice) { + if (!"E".equals(eventMberInfo.getEventStatus())) { + // 이벤트 상태를 종료로 변경 + mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); + mjonEventVO.setEventStatus("E"); + mjonEventVO.setEventMemo("발송 최소 금액(" + paramEachPrice + ") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); + mjonEventVO.setEventRemainCash(eventRemainCash); + mjonEventService.updateEventEndStatus(mjonEventVO); + eventMberInfo.setEventStatus("E"); + } + } + } + return true; // 성공 시 true 리턴 + } catch (Exception e) { + // 예외 발생 시 로그를 남기고 false 리턴 + e.printStackTrace(); + return false; + } } -*/ - - // 20240924 이호영 - // 이벤트 상태를 처리하는 메서드 - // 개선중에 service 처리부분으로 일단 utils화 보류 - private boolean handleEventStatus(MjonEventVO eventMberInfo, float paramEachPrice, MjonEventVO mjonEventVO,boolean compareEndDate){ - try { - String eventEndDate = eventMberInfo.getEventEndDate(); - if (eventEndDate != null) { - float eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - if (!compareEndDate || eventRemainCash < paramEachPrice) { - if (!"E".equals(eventMberInfo.getEventStatus())) { - // 이벤트 상태를 종료로 변경 - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - } - } - } - return true; // 성공 시 true 리턴 - } catch (Exception e) { - // 예외 발생 시 로그를 남기고 false 리턴 - e.printStackTrace(); - return false; - } - } - - - - - - - /** - * 문자발송시 치환문자가 없거나 그림문자일 경우 타는 로직 - * param : MjonMsgVO - * return : StatusResponse - * @throws Exception + * 문자발송시 치환문자가 없거나 그림문자일 경우 타는 로직 param : MjonMsgVO return : StatusResponse * - * */ + * @throws Exception + * + */ public StatusResponse fncSendMsg(MjonMsgVO mjonMsgVO) throws Exception { log.info(" :: fncSendMsg :: "); - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 + int resultSts = 0; // 발송결과 건수 + int resultBlockSts = 0; // 수신거부 등록번호로 발송을 안한 건수 // Step 1: 메시지 내용이 있는지 확인 후 msgType 정하기 // String msgType = checkMessageContent(mjonMsgVO); @@ -4883,7 +4705,6 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } mjonMsgVO.setMsgType(msgType); - log.debug("Step 2: Checking balance availability."); // Step 2: 발신자의 잔액 확인 if (!isCashSufficient(mjonMsgVO)) { @@ -4895,10 +4716,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M mjonMsgVO.setBefPoint(priceAndPoint.getBefPoint(mjonMsgVO.getUserId())); // 현재 보유 포인트 정보 저장 mjonMsgVO.setBefCash(priceAndPoint.getBefCash(mjonMsgVO.getUserId())); // 현재 보유 캐시 정보 저장 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - log.debug("Step 3: Handling scheduled message."); // Step 3: 예약 문자 처리 if (isScheduledMessage(mjonMsgVO)) { @@ -4920,15 +4739,13 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return new StatusResponse(HttpStatus.OK, "문자 전송이 완료되었습니다.", getReturnMap(resultSts, resultBlockSts)); } - - /** * @param mjonMsgVO * @return String 메시지 타입 반환 (유효하지 않은 경우 "INVALID" 반환, 내용이 없을 경우 null 반환) * @discription 메시지 내용을 확인하고 파일 첨부 여부 및 문자 길이에 따라 MMS 또는 SMS를 결정합니다. * @throws IllegalArgumentException 메시지 길이가 초과된 경우 예외 발생 * @작성자 20241007 이호영 - */ + */ // private String checkMessageContent(MjonMsgVO mjonMsgVO) { // try { // // 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리 @@ -4951,15 +4768,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M // } // } - - - /** * @param mjonMsgVO * @return boolean 값으로 예약 문자 여부 확인 * @discription 예약 여부에 따라 추가적인 예약 처리가 필요한지 확인합니다. * @작성자 20241007 이호영 - */ + */ private boolean isScheduledMessage(MjonMsgVO mjonMsgVO) { log.debug("Checking if the message is scheduled."); // 예약 문자 여부 확인 (reserveYn이 "N"이 아닌 경우) @@ -4995,7 +4809,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M * @return boolean 값으로 분할 발송 여부 확인 (DivideChk 기준) * @discription DivideChk 필드를 기반으로 메시지가 분할 발송되어야 하는지 여부를 확인합니다. * @작성자 20241007 이호영 - */ + */ private boolean isDivideMessage(MjonMsgVO mjonMsgVO) { log.debug("Checking if the message needs to be divided."); boolean needsDivide = mjonMsgVO.getDivideChk() != null; @@ -5005,31 +4819,31 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M /** * @param mjonMsgVO - * @throws Exception + * @throws Exception * @discription 메시지가 DivideChk 기준으로 분할 발송이 필요한 경우 처리합니다. * @작성자 20241007 이호영 - */ + */ private void handleDivideMessage(MjonMsgVO mjonMsgVO) throws Exception { log.debug("Handling divided message based on DivideChk."); - + // DivideChk 필드에 따라 메시지를 분할 발송하는 로직 구현 // 예: 예약 시간 간격을 설정하고 해당 간격에 따라 여러 메시지로 나누어 발송합니다. String[] phoneList = mjonMsgVO.getCallToList(); int callToListCnt = phoneList.length; mjonMsgVO.setTotalCallCnt(callToListCnt); log.debug("Total call count set to: {}", callToListCnt); - + int batchSize = Integer.parseInt(mjonMsgVO.getDivideCnt()); // DivideChk에 설정된 배치 크기 사용 int batchCount = (int) Math.ceil((double) callToListCnt / batchSize); Calendar cal = Calendar.getInstance(); SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); List dividDayList = new ArrayList<>(); - + for (int batchIndex = 0; batchIndex < batchCount; batchIndex++) { int startIdx = batchIndex * batchSize; int endIdx = Math.min(startIdx + batchSize, callToListCnt); String[] batchPhoneList = Arrays.copyOfRange(phoneList, startIdx, endIdx); - + // 분할 시간 설정 if (batchIndex > 0) { cal.add(Calendar.MINUTE, Integer.parseInt(mjonMsgVO.getDivideTime())); @@ -5037,22 +4851,21 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M String dividDay = transFormat.format(cal.getTime()); dividDayList.add(dividDay); mjonMsgVO.setDividDay(dividDayList); - + log.debug("Processing divided batch {} with {} recipients.", batchIndex + 1, batchPhoneList.length); mjonMsgVO.setCallToList(batchPhoneList); sendMessage(mjonMsgVO); } - + log.debug("Divide message handling completed."); } - /** * @param mjonMsgVO * @return boolean 값으로 분할 발송 여부 반환 * @discription 메시지 발송 시 수신자 목록의 길이를 기준으로 분할 발송이 필요한지 판단합니다. * @작성자 20241007 이호영 - */ + */ private boolean isSplitRequired(MjonMsgVO mjonMsgVO) { log.debug("Determining if split is required based on recipient count."); int recipientCount = mjonMsgVO.getCallToList().length; @@ -5061,34 +4874,32 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return needsSplit; } - - /** * @param mjonMsgVO - * @throws Exception + * @throws Exception * @discription 메시지가 분할 발송이 필요한 경우 각 배치로 나누어 처리합니다. * @작성자 20241007 이호영 - */ + */ private void handleSplitMessage(MjonMsgVO mjonMsgVO) throws Exception { log.debug("Handling split message."); String[] phoneList = mjonMsgVO.getCallToList(); int callToListCnt = phoneList.length; mjonMsgVO.setTotalCallCnt(callToListCnt); log.debug("Total call count set to: {}", callToListCnt); - + int batchSize = 200; int batchCount = (int) Math.ceil((double) callToListCnt / batchSize); Calendar cal = Calendar.getInstance(); SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); List dividDayList = new ArrayList<>(); String[] tempPhoneList = new String[batchSize]; - + for (int batchIndex = 0; batchIndex < batchCount; batchIndex++) { int startIdx = batchIndex * batchSize; int endIdx = Math.min(startIdx + batchSize, callToListCnt); String[] batchPhoneList = Arrays.copyOfRange(phoneList, startIdx, endIdx); System.arraycopy(batchPhoneList, 0, tempPhoneList, 0, batchPhoneList.length); - + // 분할 시간 설정 if (batchIndex > 0) { cal.add(Calendar.MINUTE, Integer.parseInt(mjonMsgVO.getDivideTime())); @@ -5096,18 +4907,17 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M String dividDay = transFormat.format(cal.getTime()); dividDayList.add(dividDay); mjonMsgVO.setDividDay(dividDayList); - + log.debug("Processing batch {} with {} recipients.", batchIndex + 1, batchPhoneList.length); if (this.isLastBatch(batchPhoneList.length, batchIndex, batchCount)) { - this.processLastBatch(mjonMsgVO, tempPhoneList, batchPhoneList.length, dividDayList, phoneList[endIdx - 1]); + this.processLastBatch(mjonMsgVO, tempPhoneList, batchPhoneList.length, dividDayList, + phoneList[endIdx - 1]); } else { sendMessage(mjonMsgVO); } } } - - /** * @param sendCnt * @param currentIndex @@ -5115,7 +4925,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M * @return boolean 값으로 마지막 배치 여부 확인 * @discription 현재 처리 중인 배치가 마지막 배치인지 확인합니다. * @작성자 20241007 이호영 - */ + */ private boolean isLastBatch(int sendCnt, int currentIndex, int totalLength) { boolean isLast = sendCnt == 199 || currentIndex == totalLength - 1; log.debug("Is last batch: {}", isLast); @@ -5123,18 +4933,18 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return isLast; } - /** * @param mjonMsgVO * @param tempPhoneList * @param sendCnt * @param dividDayList * @param currentPhone - * @throws Exception + * @throws Exception * @discription 마지막 배치를 처리하고 메시지를 발송합니다. * @작성자 20241007 이호영 - */ - private void processLastBatch(MjonMsgVO mjonMsgVO, String[] tempPhoneList, int sendCnt, List dividDayList, String currentPhone) throws Exception { + */ + private void processLastBatch(MjonMsgVO mjonMsgVO, String[] tempPhoneList, int sendCnt, List dividDayList, + String currentPhone) throws Exception { log.debug("Processing last batch and sending message."); tempPhoneList[sendCnt] = currentPhone; // 현재 전화번호를 배치에 추가 mjonMsgVO.setCallToList(Arrays.copyOf(tempPhoneList, sendCnt + 1)); // 발송할 전화번호 목록 설정 @@ -5144,10 +4954,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M /** * @param mjonMsgVO - * @throws Exception + * @throws Exception * @discription 메시지 발송 데이터를 삽입하고 결과를 로그로 기록합니다. * @작성자 20241007 이호영 - */ + */ private void sendMessage(MjonMsgVO mjonMsgVO) throws Exception { log.debug("Sending message."); // 메시지 데이터를 삽입하고 반환 값을 가져옴 @@ -5165,5 +4975,4 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return returnMap; } - } diff --git a/src/main/java/itn/let/mjo/test/web/TestController.java b/src/main/java/itn/let/mjo/test/web/TestController.java index 7beda0eb..93c9972d 100644 --- a/src/main/java/itn/let/mjo/test/web/TestController.java +++ b/src/main/java/itn/let/mjo/test/web/TestController.java @@ -17,6 +17,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.imageio.ImageIO; @@ -84,6 +85,7 @@ import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.mjocommon.MjonHolidayApi; import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; +import itn.let.mjo.msg.service.RefundDTO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; @@ -3433,9 +3435,15 @@ public class TestController { // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 //schdlrManageService.msgFailPayBack(); - + + long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); + + long forAfterTime1 = System.currentTimeMillis(); // 코드 실행 후 시간 + long forSecDiffTime1 = (forAfterTime1 - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack list =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime1 +"초"); + // 리스트가 비어있는 경우 종료 if (msgFailList == null || msgFailList.isEmpty()) { System.out.println("No messages to process."); @@ -3443,29 +3451,22 @@ public class TestController { } - long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 -// int count = 0; System.out.println("== msgFailList =============> : "+ msgFailList.size()); -// for(MjonMsgVO vo : msgFailList) { -// System.out.println(count + " : "+ msgFailList.size()); + try { + // 필요한 필드만 DTO로 매핑 + List dtoList = msgFailList.stream() + .map(msg -> new RefundDTO(msg.getUserId(), msg.getMsgGroupId(), Integer.parseInt(msg.getUserData()), msg.getEachPrice())) + .collect(Collectors.toList()); + // JSON 변환 + ObjectMapper objectMapper = new ObjectMapper(); + String msgFailListJson = objectMapper.writeValueAsString(dtoList); + + mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson); - try { - - // JSON 변환 - ObjectMapper objectMapper = new ObjectMapper(); - String msgFailListJson = objectMapper.writeValueAsString(msgFailList); - - System.out.println("JSON Data: " + msgFailListJson); - - - mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson); - -// mjonMsgDataDAO.updateMsgSentFailPayBack(vo); - }catch(Exception ex) { - ex.printStackTrace(); - } + }catch(Exception ex) { + ex.printStackTrace(); + } -// count = count + 1; // } long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) diff --git a/src/main/java/itn/let/schdlr/service/SchdlrManageService.java b/src/main/java/itn/let/schdlr/service/SchdlrManageService.java index 84bbbc05..3717a18b 100644 --- a/src/main/java/itn/let/schdlr/service/SchdlrManageService.java +++ b/src/main/java/itn/let/schdlr/service/SchdlrManageService.java @@ -52,4 +52,6 @@ public interface SchdlrManageService { //문자온 문자전송 실패 건수 환불 배치 public void payBack(String type, int limitCout) throws Exception; + + public void payBack_advc(String p_type) throws Exception; } diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index 1a70d231..dc2675e4 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -92,8 +92,8 @@ public class SchedulerUtil { * 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. * */ // Schdule Lock (10분동안) -// @Scheduled(cron = "0 0/10 * * * ?") -// @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) + @Scheduled(cron = "0 0/10 * * * ?") + @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runScenarioOneTime() throws Exception { // do something... @@ -119,10 +119,10 @@ public class SchedulerUtil { } /* - * 매일 5시20분에 31일전 데이터에서 환불 대상을 찾아서 환불 한다. + * 매일 5시20분 20초에 31일전 데이터에서 환불 대상을 찾아서 환불 한다. * */ -// @Scheduled(cron = "20 20 5 * * ?") -// @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) + @Scheduled(cron = "20 25 5 * * ?") + @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runScenarioOneTimeOneByDay() throws Exception { // do something... @@ -477,10 +477,14 @@ public class SchedulerUtil { //환불 실행 private void PayBack(String p_type) throws Exception { + + // 문자 환불 + schdlrManageService.payBack_advc(p_type); + + /* if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행 schdlrManageService.msgFailPayBackOneByDay(); - }else { // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 @@ -489,10 +493,8 @@ public class SchedulerUtil { List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 - int count = 0; System.out.println("== msgFailList =============> : "+ msgFailList.size()); for(MjonMsgVO vo : msgFailList) { - System.out.println(count + " : "+ msgFailList.size()); try { mjonMsgDataDAO.updateMsgSentFailPayBack(vo); @@ -502,15 +504,16 @@ public class SchedulerUtil { ex.printStackTrace(); } - count = count + 1; } long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초"); } + */ System.out.println("==== faxFailPayBack ===="); // 팩스 환불 - schdlrManageService.faxFailPayBack(); + schdlrManageService.faxFailPayBack(); + } } diff --git a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java index 624b6ee7..b93f3785 100644 --- a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java +++ b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java @@ -1,8 +1,10 @@ package itn.let.schdlr.service.impl; import java.io.File; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -10,8 +12,12 @@ import org.jsoup.Jsoup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import com.fasterxml.jackson.databind.ObjectMapper; + import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import itn.com.cmm.EgovMultiPartEmail; @@ -19,8 +25,10 @@ import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.impl.FileManageDAO; import itn.let.fax.user.service.impl.FaxDAO; import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; +import itn.let.mail.service.StatusResponse; import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.msg.service.MjonMsgVO; +import itn.let.mjo.msg.service.RefundDTO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; import itn.let.mjo.pay.service.MjonPayService; @@ -40,21 +48,21 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements @Resource(name = "egovItsmSchdlrGnrService") private EgovIdGnrService idgenSchdlrId; - + @Resource(name = "egovItsmSchdlrConfigGnrService") private EgovIdGnrService idgenSchCfgId; - + @Resource(name = "egovItsmSchdlrShareIdGnrService") private EgovIdGnrService idgenSchdlrShareId; - - @Resource(name="SchdlrManageDAO") + + @Resource(name = "SchdlrManageDAO") private SchdlrManageDAO schdlrManageDAO; - + @Resource(name = "FileManageDAO") private FileManageDAO fileMngDAO; - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileMngService; @Resource(name = "egovMultiPartEmail") private EgovMultiPartEmail egovMultiPartEmail; @@ -64,48 +72,48 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements @Value("#{globalSettings['Globals.HOMPAGE_URL']}") private String HOMPAGE_URL; - - @Resource(name="MjonMsgDataDAO") + + @Resource(name = "MjonMsgDataDAO") private MjonMsgDataDAO mjonMsgDataDAO; - - //문자온 카카오 알림톡 발송 서비스 + + // 문자온 카카오 알림톡 발송 서비스 @Resource(name = "kakaoAlimTalkService") private KakaoAlimTalkService kakaoAlimTalkService; - - //문자온 문자 발송 서비스 - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - //세틀뱅크 입금전문 서비스 - @Resource(name = "vacsAhstService") - private VacsAhstService vacsAhstService; - - //문자온 결제 서비스 - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - /** userManageService */ + // 문자온 문자 발송 서비스 + @Resource(name = "MjonMsgDataService") + private MjonMsgDataService mjonMsgDataService; + + // 세틀뱅크 입금전문 서비스 + @Resource(name = "vacsAhstService") + private VacsAhstService vacsAhstService; + + // 문자온 결제 서비스 + @Resource(name = "mjonPayService") + private MjonPayService mjonPayService; + + /** userManageService */ @Resource(name = "userManageService") private EgovUserManageService userManageService; - - /** 사이트 설정 */ + + /** 사이트 설정 */ @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - + EgovSiteManagerService egovSiteManagerService; + /** 알림전송 Util */ @Resource(name = "mjonNoticeSendUtil") - private MjonNoticeSendUtil mjonNoticeSendUtil; - - @Resource(name="MjonCommon") + private MjonNoticeSendUtil mjonNoticeSendUtil; + + @Resource(name = "MjonCommon") private MjonCommon mjonCommon; - + @Resource(name = "faxDAO") public FaxDAO faxDao; - + private static final Logger LOGGER = LoggerFactory.getLogger(SchdlrManageServiceImpl.class); - + // 스케줄달력 목록(월별) - public List selectSchdlrList(SchdlrVO schdlrVO) throws Exception { + public List selectSchdlrList(SchdlrVO schdlrVO) throws Exception { return schdlrManageDAO.selectSchdlrList(schdlrVO); } @@ -113,12 +121,12 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements public void schdlrInsert(SchdlrVO schdlrVO) throws Exception { schdlrVO.setSchdlrId(idgenSchdlrId.getNextStringId()); // 신규 키 schdlrManageDAO.schdlrInsert(schdlrVO); // 등록 - - if(schdlrVO.getSchdlrUserId() != null && schdlrVO.getSchdlrUserId().length() != 0) { + + if (schdlrVO.getSchdlrUserId() != null && schdlrVO.getSchdlrUserId().length() != 0) { String userId[] = schdlrVO.getSchdlrUserId().split(","); String userName[] = schdlrVO.getSchdlrUserName().split(","); - - for(int i=0; i selectSchdlrShare(SchdlrVO schdlrVO) throws Exception { return schdlrManageDAO.selectSchdlrShare(schdlrVO); } - // 일정 목록 조회 - public List selectSchList(SchdlrVO schdlrVO) throws Exception { + public List selectSchList(SchdlrVO schdlrVO) throws Exception { return schdlrManageDAO.selectSchList(schdlrVO); } - + // 환경설정 등록 public void insertSchConfig(SchdlrVO schdlrVO) throws Exception { schdlrVO.setSchdlrCfgId(idgenSchCfgId.getNextStringId()); // 신규 키 schdlrManageDAO.insertSchConfig(schdlrVO); // 등록 } - + // 환경설정 수정 public void updateSchConfig(SchdlrVO schdlrVO) throws Exception { schdlrManageDAO.updateSchConfig(schdlrVO); } - + // 환경설정 상세 조회 public SchdlrVO selectSchConfigDetail(SchdlrVO schdlrVO) throws Exception { SchdlrVO result = schdlrManageDAO.selectSchConfigDetail(schdlrVO); - + if (result == null) { // 첫 조회시 기본값 등록 result = new SchdlrVO(); result.setSchdlrCfgId(idgenSchCfgId.getNextStringId()); @@ -197,163 +204,174 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements result.setSchdlrColorPerCd("03"); schdlrManageDAO.insertSchConfig(result); } - + return result; } - + // 일정 알림 메일 전송 public void schMailSend(String bgnDateTime) throws Exception { List mailList = schdlrManageDAO.selectMailSendList(bgnDateTime); - + for (SchdlrVO vo : mailList) { - if (("").equals(vo.getEmailAdres())) continue; - + if (("").equals(vo.getEmailAdres())) + continue; + boolean result = sendMail(vo); LOGGER.debug("send succ update:", result); - - if (result) schdlrManageDAO.updateMailSend(vo); + + if (result) + schdlrManageDAO.updateMailSend(vo); } } - /** * 일정 알림 메일 전송 + * * @param SchdlrVO schdlrVO * @return boolean - * @throws Exception + * @throws Exception */ private boolean sendMail(SchdlrVO schdlrVO) throws Exception { boolean result = false; try { - String mailSj = "["+schdlrVO.getSchdlrTitle()+"] N-CMS 스케줄러 일정 메일 알림입니다."; + String mailSj = "[" + schdlrVO.getSchdlrTitle() + "] N-CMS 스케줄러 일정 메일 알림입니다."; String alram = ""; - + // // 알림설정 표시 // if (Pattern.matches("^[0-9]*$", schdlrVO.getSchdlrAlarmCnd())) { // alram = schdlrVO.getSchdlrAlarmCnd() + " 분전"; // } else if (schdlrVO.getSchdlrAlarmCnd().equals("etc")) { // alram = schdlrVO.getSchdlrAlarmDatetime(); // } - switch(schdlrVO.getSchdlrAlarmCnd()) { - case "0" : alram = "정시"; break; - case "10" : alram = "십분 전"; break; - case "30" : alram = "삼십분 전"; break; - case "60" : alram = "한시간 전"; break; - case "etc" : alram = schdlrVO.getSchdlrAlarmDatetime(); break; + switch (schdlrVO.getSchdlrAlarmCnd()) { + case "0": + alram = "정시"; + break; + case "10": + alram = "십분 전"; + break; + case "30": + alram = "삼십분 전"; + break; + case "60": + alram = "한시간 전"; + break; + case "etc": + alram = schdlrVO.getSchdlrAlarmDatetime(); + break; } - - String mailContent = Jsoup.parse(new File(MAIL_CONTENT_PATH + "/direct/mail_template/sch_alrm_cont.html"), "UTF-8").toString(); + + String mailContent = Jsoup + .parse(new File(MAIL_CONTENT_PATH + "/direct/mail_template/sch_alrm_cont.html"), "UTF-8") + .toString(); mailContent = mailContent.replace("#일정명", schdlrVO.getSchdlrTitle()); - mailContent = mailContent.replace("#일시", schdlrVO.getSchdlrBgnDatetime() + " ~ " + schdlrVO.getSchdlrEndDatetime()); + mailContent = mailContent.replace("#일시", + schdlrVO.getSchdlrBgnDatetime() + " ~ " + schdlrVO.getSchdlrEndDatetime()); mailContent = mailContent.replace("#장소", schdlrVO.getSchdlrPlace()); mailContent = mailContent.replace("#내용", schdlrVO.getSchdlrCn().replaceAll("(\r\n|\r|\n|\n\r)", "
")); mailContent = mailContent.replace("#알림설정", alram); - + String resultMsg = egovMultiPartEmail.send(schdlrVO.getEmailAdres(), mailSj, "", mailContent); // egovMultiPartEmail.send(mailAddres, mailSj", mgs); // Simple Text Mail method - + result = true; LOGGER.debug("mail send resultMsg: ", resultMsg); } catch (Exception ex) { LOGGER.error("Sending Mail Exception : {} [unknown Exception]", ex.getCause()); - //LOGGER.error(ex.getMessage()); + // LOGGER.error(ex.getMessage()); } - + return result; } - - + // 메인화면 > 전체일정 - public List selectMainSchList(SchdlrVO schdlrVO) throws Exception { + public List selectMainSchList(SchdlrVO schdlrVO) throws Exception { return schdlrManageDAO.selectMainSchList(schdlrVO); } - - //문자온 문자발송 실패 건수 환불 배치(1주 대상) - public void msgFailPayBack() throws Exception{ - + + // 문자온 문자발송 실패 건수 환불 배치(1주 대상) + public void msgFailPayBack() throws Exception { + Date now = new Date(); System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(1weeks)" + now); /* - * 문자발송 실패 건수 확인 및 캐시 환불 처리 - * */ + * 문자발송 실패 건수 확인 및 캐시 환불 처리 + */ mjonMsgDataService.selectMsgSentFailList(); - + /* * 세틀뱅크 입금 확인 및 캐시 충전 배치 프로세스 - * */ - /*VacsAhstVO vacsAhstVO = new VacsAhstVO(); - List resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO); - - if(resultBeforCashList != null) { - - for(VacsAhstVO temp : resultBeforCashList) { - - StVcVO stvcVO = new StVcVO(); - - stvcVO.setOrgCd(temp.getOrgCd()); - stvcVO.setBankCd(temp.getBankCd()); - stvcVO.setIacctNo(temp.getIacctNo()); - stvcVO.setTrNo(temp.getTrNo()); - stvcVO.setTrIl(temp.getTrIl()); - stvcVO.setTrAmt(temp.getTrAmt()); - stvcVO.setIacctNm(temp.getIacctNm()); - stvcVO.setMberId(temp.getMberId()); - - //세틀뱅크 입금 내역 자동 충전하기 - mjonPayService.insertVcCharge(stvcVO); - - //세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기 - vacsAhstService.updateVacsAhstCashComplete(temp); - - } - - }*/ - + */ + /* + * VacsAhstVO vacsAhstVO = new VacsAhstVO(); List + * resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO); + * + * if(resultBeforCashList != null) { + * + * for(VacsAhstVO temp : resultBeforCashList) { + * + * StVcVO stvcVO = new StVcVO(); + * + * stvcVO.setOrgCd(temp.getOrgCd()); stvcVO.setBankCd(temp.getBankCd()); + * stvcVO.setIacctNo(temp.getIacctNo()); stvcVO.setTrNo(temp.getTrNo()); + * stvcVO.setTrIl(temp.getTrIl()); stvcVO.setTrAmt(temp.getTrAmt()); + * stvcVO.setIacctNm(temp.getIacctNm()); stvcVO.setMberId(temp.getMberId()); + * + * //세틀뱅크 입금 내역 자동 충전하기 mjonPayService.insertVcCharge(stvcVO); + * + * //세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기 + * vacsAhstService.updateVacsAhstCashComplete(temp); + * + * } + * + * } + */ + } - - //문자온 문자발송 실패 건수 환불 배치(31일) - public void msgFailPayBackOneByDay() throws Exception{ - + + // 문자온 문자발송 실패 건수 환불 배치(31일) + public void msgFailPayBackOneByDay() throws Exception { + Date now = new Date(); System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(31days)" + now); /* - * 문자발송 실패 건수 확인 및 캐시 환불 처리 - * */ - mjonMsgDataService.selectMsgSentFailListOneByDay(); - + * 문자발송 실패 건수 확인 및 캐시 환불 처리 + */ +// mjonMsgDataService.selectMsgSentFailListOneByDay(); + } - + // 팩스 발송 실패 건수 환불 배치 - public void faxFailPayBack() throws Exception{ - + public void faxFailPayBack() throws Exception { + System.out.println("팩스 실패 건수 환불 스케줄러 실행!!!" + new Date()); - + // 팩스 발송 실패 건수 확인 및 캐시 환불 처리 faxDao.selectFaxSentFailList(); } - - //전용계좌 자동 충전 배치 - public void vacsAutoCharge() throws Exception{ - + + // 전용계좌 자동 충전 배치 + public void vacsAutoCharge() throws Exception { + Date now = new Date(); System.out.println("문자온 전용계좌 자동 충전 스케줄러 실행 !!!" + now); /* - * 문자발송 실패 건수 확인 및 캐시 환불 처리 - * */ - //mjonMsgDataService.selectMsgSentFailList(); - + * 문자발송 실패 건수 확인 및 캐시 환불 처리 + */ + // mjonMsgDataService.selectMsgSentFailList(); + /* * 세틀뱅크 입금 확인 및 캐시 충전 배치 프로세스 - * */ + */ VacsAhstVO vacsAhstVO = new VacsAhstVO(); List resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO); - - if(resultBeforCashList != null) { - - for(VacsAhstVO temp : resultBeforCashList) { - + + if (resultBeforCashList != null) { + + for (VacsAhstVO temp : resultBeforCashList) { + StVcVO stvcVO = new StVcVO(); - + stvcVO.setOrgCd(temp.getOrgCd()); stvcVO.setBankCd(temp.getBankCd()); stvcVO.setIacctNo(temp.getIacctNo()); @@ -362,115 +380,180 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements stvcVO.setTrAmt(temp.getTrAmt()); stvcVO.setIacctNm(temp.getIacctNm()); stvcVO.setMberId(temp.getMberId()); - - //세틀뱅크 입금 내역 자동 충전하기 + + // 세틀뱅크 입금 내역 자동 충전하기 mjonPayService.insertVcCharge(stvcVO); - - //세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기 + + // 세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기 vacsAhstService.updateVacsAhstCashComplete(temp); - + try { String Userid = temp.getMberId(); String mberNm = ""; - - // 대상 : 휴대폰결제, 즉시이체, 전용계좌 - // Step 1. 스미싱의심 지정 여부 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { - // Step 1. 개인회원 여부 체크 - int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); - if (isPersnalMemberCnt == 1) { - // Step 2. 첫결제 여부 체크 - int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); - if (isFirstPayCnt == 1) { - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/전용계좌 첫결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/전용계좌 첫결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - } - } - } - catch (Exception e) { + // 대상 : 휴대폰결제, 즉시이체, 전용계좌 + // Step 1. 스미싱의심 지정 여부 + JoinSettingVO joinSettingVO = new JoinSettingVO(); + joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); + if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { + // Step 1. 개인회원 여부 체크 + int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); + if (isPersnalMemberCnt == 1) { + // Step 2. 첫결제 여부 체크 + int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); + if (isFirstPayCnt == 1) { + // SMS 체크 + if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { + // 스미싱의심 SMS 알림전송 + mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/전용계좌 첫결제", Userid, mberNm); + } + + // SLACK 체크 + if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { + // Slack 메시지 발송(단순본문) + String msg = "[문자온] 스미싱의심/전용계좌 첫결제 - " + mberNm + "(" + Userid + ")"; + mjonCommon.sendSimpleSlackMsg(msg); + } + + // 스미싱 의심회원으로 변경 + UserManageVO userManageVO = new UserManageVO(); + userManageVO.setSmishingYn("Y"); + userManageVO.setMberId(Userid); + userManageService.updateOneUserSmishingYnNotAlert(userManageVO); + } + } + } + + } catch (Exception e) { System.out.println("#############################################################"); System.out.println("전용계좌 슬랙알림 & 스미싱의심 처리 Error"); System.out.println("전용계좌 TrNo : " + temp.getTrNo()); - System.out.println("전용계좌 e.getMessage() : " + e.getMessage()); - } - - + System.out.println("전용계좌 e.getMessage() : " + e.getMessage()); + } + } - + } - + } - - //카카오 환불 처리 리스트 + // 카카오 환불 처리 리스트 public void kakaoFailPayBack() throws Exception { - - //카카오 알림톡 환불 처리 + + // 카카오 알림톡 환불 처리 kakaoAlimTalkService.selectKakaoAtSentRefundList(); - - //카카오 친구톡 환불 처리 + + // 카카오 친구톡 환불 처리 kakaoAlimTalkService.selectKakaoFtSentRefundList(); - + } @Override public void payBack(String type, int limitCout) throws Exception { // 문자 환불 - if ("ONE".equals(type)) { //하루에 한번만 31일 대상으로 실행 - msgFailPayBackOneByDay(); - - }else { //2분 마다는 7일을 대상으로 실행 + if ("ONE".equals(type)) { // 하루에 한번만 31일 대상으로 실행 + msgFailPayBackOneByDay(); + + } else { // 2분 마다는 7일을 대상으로 실행 MjonMsgVO mjonMsgVO = new MjonMsgVO(); mjonMsgVO.setRecordCountPerPage(limitCout); - - List msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO); + + List msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO); long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 - int batchSize = 300; - int totalSize = msgFailList.size(); - int endj =0; - for (int i = 0; i < totalSize; i += batchSize) { - int end = Math.min(i + batchSize, totalSize); - long beforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 - for(int j=endj; j < end; j++) { - System.out.println(j+" : "+ end); - try { + int batchSize = 300; + int totalSize = msgFailList.size(); + int endj = 0; + for (int i = 0; i < totalSize; i += batchSize) { + int end = Math.min(i + batchSize, totalSize); + long beforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 + for (int j = endj; j < end; j++) { + System.out.println(j + " : " + end); + try { mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j)); - }catch(Exception ex) { + } catch (Exception ex) { System.out.println("=============SchedulerUtil=====PayBack Catch =============>"); - System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData()); + System.out.println(msgFailList.get(j).getUserId() + " : " + + msgFailList.get(j).getMsgGroupId() + " : " + msgFailList.get(j).getUserData()); ex.printStackTrace(); } - } - endj = end; - - long afterTime = System.currentTimeMillis(); // 코드 실행 후 시간 - long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) - System.out.println("==PayBack for 1 =============> : " + secDiffTime +"초"); - } + } + endj = end; + + long afterTime = System.currentTimeMillis(); // 코드 실행 후 시간 + long secDiffTime = (afterTime - beforeTime) / 1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack for 1 =============> : " + secDiffTime + "초"); + } long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 - long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) - System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초"); - + long forSecDiffTime = (forAfterTime - forBeforeTime) / 1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println( + "==PayBack for 2 =============> 수량 : " + msgFailList.size() + " ===== " + forSecDiffTime + "초"); + } } + + /** + * @methodName : refundTest + * @author : 이호영 + * @date : 2024.12.12 + * @description : 환불 데이터 + * @param p_type + * @param request + * @param model + * @return + * @throws Exception + */ + @Override + public void payBack_advc(String p_type) throws Exception { + List msgFailList = new ArrayList<>(); + + msgFailList = getMsgFailList(p_type); + + // 리스트가 비어있는 경우 종료 + if (msgFailList == null || msgFailList.isEmpty()) { + System.out.println("No payBack messages empty."); + } + + try { + // 필요한 필드만 DTO로 매핑 + List dtoList = msgFailList.stream().map(msg -> new RefundDTO(msg.getUserId(), + msg.getMsgGroupId(), Integer.parseInt(msg.getUserData()), msg.getEachPrice())) + .collect(Collectors.toList()); + // JSON 변환 + ObjectMapper objectMapper = new ObjectMapper(); + String msgFailListJson = objectMapper.writeValueAsString(dtoList); + + mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson); + + } catch (Exception ex) { + ex.printStackTrace(); + } + + // TODO Auto-generated method stub + + } + + /** + * @methodName : getMsgFailList + * @author : 이호영 + * @date : 2024.12.12 + * @description : 파라미터에 따라 환불 데이터 가져오기 + * @param p_type + * @return + * @throws Exception + */ + private List getMsgFailList(String p_type) throws Exception { + List msgFailList = new ArrayList<>(); + // 문자 환불 + if ("ONE".equals(p_type)) { // 하루에 한번만 31일 대상으로 실행 + + msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); + } else { + // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. + // schdlrManageService.msgFailPayBack(); + + msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); + } + + return msgFailList; + } } 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 2df9d3c7..596341d8 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 @@ -4040,28 +4040,38 @@ @@ -4145,54 +4158,65 @@ diff --git a/src/main/webapp/js/MJUtill.js b/src/main/webapp/js/MJUtill.js index 07c05c2a..de5afce4 100644 --- a/src/main/webapp/js/MJUtill.js +++ b/src/main/webapp/js/MJUtill.js @@ -55,12 +55,12 @@ function checkOnlyHpNum(str) { 위 번호로 시작하는 팩스 번호만 허용함. */ -function checkFaxNum(str) { - str = removeDash(str); - var subNum = str.substring(0,3); - var regExp = /^(02|0[3-6][1-4]|030|050|060|070|080|1\d{2})$/; - return regExp.test(subNum); -} + function checkFaxNum(str) { + str = removeDash(str); + var subNum = str.substring(0,3); + var regExp = /^(02|03[1-3]|04[1-4]|05[1-5]|06[1-4]|030|050|060|070|080|1\d{2})$/; + return regExp.test(subNum); + } /* * 일반전화 유효성 체크