선거문자 10만건 이상 대량 발송 개발 2차 소스 커밋
@2e8a4c0bd85d685bff138cc437e557bdccdc124e
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
... | ... | @@ -206,6 +206,8 @@ |
| 206 | 206 |
private double failSendPrice; |
| 207 | 207 |
private double totSuccSendPrice; |
| 208 | 208 |
|
| 209 |
+ private String bookmarkYn = "N"; |
|
| 210 |
+ |
|
| 209 | 211 |
public String getSearchDelayMsgYn() {
|
| 210 | 212 |
return searchDelayMsgYn; |
| 211 | 213 |
} |
... | ... | @@ -1638,4 +1640,10 @@ |
| 1638 | 1640 |
public void setTotSuccSendPrice(double totSuccSendPrice) {
|
| 1639 | 1641 |
this.totSuccSendPrice = totSuccSendPrice; |
| 1640 | 1642 |
} |
| 1643 |
+ public String getBookmarkYn() {
|
|
| 1644 |
+ return bookmarkYn; |
|
| 1645 |
+ } |
|
| 1646 |
+ public void setBookmarkYn(String bookmarkYn) {
|
|
| 1647 |
+ this.bookmarkYn = bookmarkYn; |
|
| 1648 |
+ } |
|
| 1641 | 1649 |
} |
--- src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateService.java
+++ src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateService.java
... | ... | @@ -2,6 +2,8 @@ |
| 2 | 2 |
|
| 3 | 3 |
import java.util.List; |
| 4 | 4 |
|
| 5 |
+import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 6 |
+ |
|
| 5 | 7 |
public interface MjonCandidateService {
|
| 6 | 8 |
|
| 7 | 9 |
// 선거문자 후보자 정보 불러오기 |
... | ... | @@ -52,4 +54,7 @@ |
| 52 | 54 |
//선거문자 20건 전송 후 CallTo 상태값 전송 완료로 변경 처리 |
| 53 | 55 |
public int updateMsgTWCallToListSendFlag(MjonCandidateTWVO mjonCandidateTWVO) throws Exception; |
| 54 | 56 |
|
| 57 |
+ //선거문자 대량 전송 주소록 그룹 정보 조회하기 |
|
| 58 |
+ public List<String> selectAddrGrpHGList(MjonMsgVO mjonMsgVO) throws Exception; |
|
| 59 |
+ |
|
| 55 | 60 |
} |
--- src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateDAO.java
+++ src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateDAO.java
... | ... | @@ -6,6 +6,7 @@ |
| 6 | 6 |
import org.springframework.stereotype.Repository; |
| 7 | 7 |
|
| 8 | 8 |
import egovframework.rte.psl.dataaccess.EgovAbstractDAO; |
| 9 |
+import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 9 | 10 |
import itn.let.mjo.msgcampain.service.MjonCandidateTWVO; |
| 10 | 11 |
import itn.let.mjo.msgcampain.service.MjonCandidateVO; |
| 11 | 12 |
|
... | ... | @@ -208,4 +209,21 @@ |
| 208 | 209 |
return resultCnt; |
| 209 | 210 |
} |
| 210 | 211 |
|
| 212 |
+ //선거문자 대량 전송 주소록 그룹 정보 조회하기 |
|
| 213 |
+ @SuppressWarnings("unchecked")
|
|
| 214 |
+ public List<String> selectAddrGrpHGList(MjonMsgVO mjonMsgVO) throws Exception{
|
|
| 215 |
+ |
|
| 216 |
+ List<String> resultList = new ArrayList<String>(); |
|
| 217 |
+ |
|
| 218 |
+ try {
|
|
| 219 |
+ |
|
| 220 |
+ resultList = (List<String>) list("mjonCandidateDAO.selectAddrGrpHGList",mjonMsgVO);
|
|
| 221 |
+ |
|
| 222 |
+ } catch (Exception e) {
|
|
| 223 |
+ System.out.println("selectAddrGrpHGList DAO Error!!! " + e);
|
|
| 224 |
+ } |
|
| 225 |
+ |
|
| 226 |
+ return resultList; |
|
| 227 |
+ } |
|
| 228 |
+ |
|
| 211 | 229 |
} |
--- src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
+++ src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
... | ... | @@ -8,6 +8,7 @@ |
| 8 | 8 |
import org.springframework.stereotype.Service; |
| 9 | 9 |
|
| 10 | 10 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 11 |
+import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 11 | 12 |
import itn.let.mjo.msgcampain.service.MjonCandidateService; |
| 12 | 13 |
import itn.let.mjo.msgcampain.service.MjonCandidateTWVO; |
| 13 | 14 |
import itn.let.mjo.msgcampain.service.MjonCandidateVO; |
... | ... | @@ -293,4 +294,21 @@ |
| 293 | 294 |
|
| 294 | 295 |
} |
| 295 | 296 |
|
| 297 |
+ @Override |
|
| 298 |
+ //선거문자 대량 전송 주소록 그룹 정보 조회하기 |
|
| 299 |
+ public List<String> selectAddrGrpHGList(MjonMsgVO mjonMsgVO) throws Exception{
|
|
| 300 |
+ |
|
| 301 |
+ List<String> resultList = new ArrayList<String>(); |
|
| 302 |
+ |
|
| 303 |
+ try {
|
|
| 304 |
+ |
|
| 305 |
+ resultList = mjonCandidateDAO.selectAddrGrpHGList(mjonMsgVO); |
|
| 306 |
+ |
|
| 307 |
+ } catch (Exception e) {
|
|
| 308 |
+ System.out.println("selectAddrGrpHGList Service Imple Error!!! " + e);
|
|
| 309 |
+ } |
|
| 310 |
+ |
|
| 311 |
+ return resultList; |
|
| 312 |
+ } |
|
| 313 |
+ |
|
| 296 | 314 |
} |
--- src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java
+++ src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java
... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 |
import java.util.Calendar; |
| 8 | 8 |
import java.util.Date; |
| 9 | 9 |
import java.util.List; |
| 10 |
+import java.util.stream.Collectors; |
|
| 10 | 11 |
|
| 11 | 12 |
import javax.annotation.Resource; |
| 12 | 13 |
import javax.servlet.http.HttpServletRequest; |
... | ... | @@ -16,6 +17,8 @@ |
| 16 | 17 |
import org.springframework.ui.ModelMap; |
| 17 | 18 |
import org.springframework.web.bind.annotation.ModelAttribute; |
| 18 | 19 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 20 |
+import org.springframework.web.servlet.ModelAndView; |
|
| 21 |
+import org.springframework.web.servlet.mvc.support.RedirectAttributes; |
|
| 19 | 22 |
|
| 20 | 23 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 21 | 24 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
... | ... | @@ -37,11 +40,14 @@ |
| 37 | 40 |
import itn.let.mjo.addr.service.AddrVO; |
| 38 | 41 |
import itn.let.mjo.event.service.MjonEventService; |
| 39 | 42 |
import itn.let.mjo.event.service.MjonEventVO; |
| 43 |
+import itn.let.mjo.mjocommon.MjonCommon; |
|
| 40 | 44 |
import itn.let.mjo.msg.service.MjonMsgService; |
| 45 |
+import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 41 | 46 |
import itn.let.mjo.msgcampain.service.MjonCandidateService; |
| 42 | 47 |
import itn.let.mjo.msgcampain.service.MjonCandidateVO; |
| 43 | 48 |
import itn.let.mjo.msgdata.service.MjonMsgDataService; |
| 44 | 49 |
import itn.let.mjo.msgdata.service.MjonMsgDataVO; |
| 50 |
+import itn.let.mjo.msgdata.service.MjonMsgReturnVO; |
|
| 45 | 51 |
import itn.let.mjo.pay.service.MjonPayService; |
| 46 | 52 |
import itn.let.mjo.spammsg.service.MjonSpamMsgService; |
| 47 | 53 |
import itn.let.mjo.symbol.service.MjonSymbolService; |
... | ... | @@ -54,6 +60,7 @@ |
| 54 | 60 |
import itn.let.uss.umt.service.EgovMberManageService; |
| 55 | 61 |
import itn.let.uss.umt.service.EgovUserManageService; |
| 56 | 62 |
import itn.let.uss.umt.service.MberManageVO; |
| 63 |
+import itn.let.uss.umt.service.UserManageVO; |
|
| 57 | 64 |
import itn.let.utl.fcc.service.EgovCryptoUtil; |
| 58 | 65 |
|
| 59 | 66 |
@Controller |
... | ... | @@ -150,7 +157,7 @@ |
| 150 | 157 |
, HttpServletRequest request |
| 151 | 158 |
, ModelMap model) throws Exception{
|
| 152 | 159 |
|
| 153 |
-String categoryType = cateCode.getCateType(); |
|
| 160 |
+ String categoryType = cateCode.getCateType(); |
|
| 154 | 161 |
|
| 155 | 162 |
if(categoryType == null) {
|
| 156 | 163 |
|
... | ... | @@ -537,4 +544,560 @@ |
| 537 | 544 |
return "web/msgcampain/huge/MsgHGDataSMLView"; |
| 538 | 545 |
} |
| 539 | 546 |
|
| 547 |
+ |
|
| 548 |
+ /** |
|
| 549 |
+ * 선거문자 10만건 이상 대량 문자 발송 처리 |
|
| 550 |
+ * @param searchVO |
|
| 551 |
+ * @param model |
|
| 552 |
+ * @return "/web/mjon/msgcampain/huge/sendMsgHGDataAjax.do" |
|
| 553 |
+ * @throws Exception |
|
| 554 |
+ */ |
|
| 555 |
+ @RequestMapping(value= {"/web/mjon/msgcampain/huge/sendMsgHGDataAjax.do"})
|
|
| 556 |
+ public ModelAndView sendMsgHGDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
|
|
| 557 |
+ RedirectAttributes redirectAttributes, |
|
| 558 |
+ HttpServletRequest request, |
|
| 559 |
+ ModelMap model) throws Exception{
|
|
| 560 |
+ |
|
| 561 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 562 |
+ modelAndView.setViewName("jsonView");
|
|
| 563 |
+ |
|
| 564 |
+ int resultSts = 0; //발송결과 건수 |
|
| 565 |
+ int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 |
|
| 566 |
+ |
|
| 567 |
+ //로그인 권한정보 불러오기 |
|
| 568 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 569 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 570 |
+ |
|
| 571 |
+ if(userId.equals("")) {
|
|
| 572 |
+ |
|
| 573 |
+ modelAndView.addObject("result", "loginFail");
|
|
| 574 |
+ modelAndView.addObject("message", "로그인이 필요합니다.");
|
|
| 575 |
+ return modelAndView; |
|
| 576 |
+ |
|
| 577 |
+ }else {
|
|
| 578 |
+ |
|
| 579 |
+ mjonMsgVO.setUserId(userId); |
|
| 580 |
+ |
|
| 581 |
+ /** |
|
| 582 |
+ * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 |
|
| 583 |
+ * 현재 로그인 세션도 만료 처리함 |
|
| 584 |
+ * */ |
|
| 585 |
+ boolean mberSttus = userManageService.selectUserStatusInfo(userId); |
|
| 586 |
+ |
|
| 587 |
+ if(!mberSttus) {
|
|
| 588 |
+ |
|
| 589 |
+ modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
|
| 590 |
+ modelAndView.addObject("result", "statusFail");
|
|
| 591 |
+ modelAndView.addObject("resultSts", resultSts);
|
|
| 592 |
+ |
|
| 593 |
+ request.getSession().invalidate(); |
|
| 594 |
+ |
|
| 595 |
+ return modelAndView; |
|
| 596 |
+ |
|
| 597 |
+ } |
|
| 598 |
+ |
|
| 599 |
+ } |
|
| 600 |
+ |
|
| 601 |
+ try {
|
|
| 602 |
+ |
|
| 603 |
+/*+++++++++화면에서 사용하지 않는 값 디폴트 셋팅++++++++++++++*/ |
|
| 604 |
+ mjonMsgVO.setDivideTime("1");
|
|
| 605 |
+ mjonMsgVO.setDivideCnt("20");
|
|
| 606 |
+ |
|
| 607 |
+/*++++++스미싱 의심 및 문자 길이 초과 여부 체크++++++++++++++++ */ |
|
| 608 |
+ //회원정보에서 스미싱 회원 여부 정보 조회 |
|
| 609 |
+ UserManageVO userManageVO = new UserManageVO(); |
|
| 610 |
+ |
|
| 611 |
+ userManageVO.setMberId(userId); |
|
| 612 |
+ UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO); |
|
| 613 |
+ String smishingYn = resultUserVO.getSmishingYn(); |
|
| 614 |
+ mjonMsgVO.setSmishingYn(smishingYn); |
|
| 615 |
+ |
|
| 616 |
+ String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 |
|
| 617 |
+ String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n");
|
|
| 618 |
+ |
|
| 619 |
+ int FrBytes = smsCont.getBytes(charset).length; |
|
| 620 |
+ |
|
| 621 |
+ if(FrBytes > 2000) {
|
|
| 622 |
+ |
|
| 623 |
+ modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다.");
|
|
| 624 |
+ modelAndView.addObject("result", "smsLengFail");
|
|
| 625 |
+ return modelAndView; |
|
| 626 |
+ |
|
| 627 |
+ } |
|
| 628 |
+ |
|
| 629 |
+ |
|
| 630 |
+/*++++++문자 종류(단/장/그림) 체크++++++++++++++++ */ |
|
| 631 |
+ String msgType = mjonMsgVO.getMsgType(); |
|
| 632 |
+ |
|
| 633 |
+ //내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두 |
|
| 634 |
+ if(msgType.equals("P") || msgType.equals("L")) {
|
|
| 635 |
+ msgType = "6"; |
|
| 636 |
+ }else if(msgType.equals("S")) {
|
|
| 637 |
+ |
|
| 638 |
+ msgType = "4"; |
|
| 639 |
+ } |
|
| 640 |
+ |
|
| 641 |
+ //메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다. |
|
| 642 |
+ if(msgType.equals("4")) {
|
|
| 643 |
+ |
|
| 644 |
+ //메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다. |
|
| 645 |
+ if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) {
|
|
| 646 |
+ |
|
| 647 |
+ msgType = "6"; |
|
| 648 |
+ |
|
| 649 |
+ } |
|
| 650 |
+ |
|
| 651 |
+ } |
|
| 652 |
+ |
|
| 653 |
+ mjonMsgVO.setMsgType(msgType); |
|
| 654 |
+ |
|
| 655 |
+ //장문 메세지일 경우 |
|
| 656 |
+ int fileCount = 0; |
|
| 657 |
+ if(msgType.equals("6")) {
|
|
| 658 |
+ |
|
| 659 |
+ //그림 이미지가 첨부된 경우 |
|
| 660 |
+ if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) {
|
|
| 661 |
+ |
|
| 662 |
+ String[] path = mjonMsgVO.getImgFilePath(); |
|
| 663 |
+ String[] fileId = mjonMsgVO.getImgFileId(); |
|
| 664 |
+ String[] templateYn = mjonMsgVO.getTemplateYn(); |
|
| 665 |
+ |
|
| 666 |
+ for(int i=0; i<path.length; i++) {
|
|
| 667 |
+ |
|
| 668 |
+ if("Y".equals(templateYn[i])) {
|
|
| 669 |
+ //템플릿 사용누계 증가 |
|
| 670 |
+ letterService.updateTemplateUseCount(fileId[i]); |
|
| 671 |
+ } |
|
| 672 |
+ |
|
| 673 |
+ String atchFileId = fileId[i]; |
|
| 674 |
+ String imgFilePath = mjonMsgService.selectPhotoImgFileRealPath(atchFileId); |
|
| 675 |
+ |
|
| 676 |
+ // 아이하트, 현대퓨쳐넷 두 중계사는 이미지 경로는 풀패스 경로로 넘겨주면 됨 |
|
| 677 |
+ if(i == 0) {
|
|
| 678 |
+ |
|
| 679 |
+ mjonMsgVO.setFileName1(imgFilePath); |
|
| 680 |
+ |
|
| 681 |
+ }else if(i == 1) {
|
|
| 682 |
+ |
|
| 683 |
+ mjonMsgVO.setFileName2(imgFilePath); |
|
| 684 |
+ |
|
| 685 |
+ }else {
|
|
| 686 |
+ |
|
| 687 |
+ mjonMsgVO.setFileName3(imgFilePath); |
|
| 688 |
+ |
|
| 689 |
+ } |
|
| 690 |
+ fileCount ++; |
|
| 691 |
+ } |
|
| 692 |
+ |
|
| 693 |
+ //첨부파일 갯수 셋팅해주기 |
|
| 694 |
+ mjonMsgVO.setFileCnt(Integer.toString(fileCount)); |
|
| 695 |
+ |
|
| 696 |
+ } |
|
| 697 |
+ |
|
| 698 |
+ } |
|
| 699 |
+ |
|
| 700 |
+ //파일 갯수는 있는데 파일 경로가 없는 경우 문자발송이 안되도록 튕겨내도록 함 - 20220520 우영두 |
|
| 701 |
+ if(fileCount > 0) {
|
|
| 702 |
+ |
|
| 703 |
+ if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) {
|
|
| 704 |
+ |
|
| 705 |
+ modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
|
|
| 706 |
+ modelAndView.addObject("result", "imgSourceFail");
|
|
| 707 |
+ modelAndView.addObject("resultSts", "0");
|
|
| 708 |
+ modelAndView.addObject("resultBlockSts", "0");
|
|
| 709 |
+ |
|
| 710 |
+ return modelAndView; |
|
| 711 |
+ |
|
| 712 |
+ } |
|
| 713 |
+ |
|
| 714 |
+ } |
|
| 715 |
+ |
|
| 716 |
+ System.out.println("++++++++++++ msgType ::: "+mjonMsgVO.getMsgType());
|
|
| 717 |
+ |
|
| 718 |
+ |
|
| 719 |
+ /* |
|
| 720 |
+ * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 |
|
| 721 |
+ * 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회 |
|
| 722 |
+ * 조회 단가를 이용하여 총 결제 캐시 금액 계산 |
|
| 723 |
+ * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. |
|
| 724 |
+ */ |
|
| 725 |
+ MjonEventVO mjonEventVO = new MjonEventVO(); |
|
| 726 |
+ mjonEventVO.setMberId(userId); |
|
| 727 |
+ MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); |
|
| 728 |
+ |
|
| 729 |
+ //1.시스템 기본 단가 정보 불러오기 |
|
| 730 |
+ JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); |
|
| 731 |
+ |
|
| 732 |
+ // 등급제 단가 추출 => 시스템 단가에 적용 |
|
| 733 |
+ sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId); |
|
| 734 |
+ |
|
| 735 |
+ //2.사용자 개인 단가 정보 불러오기 |
|
| 736 |
+ MberManageVO mberManageVO = new MberManageVO(); |
|
| 737 |
+ mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); |
|
| 738 |
+ |
|
| 739 |
+ //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 |
|
| 740 |
+ Float shortPrice = mberManageVO.getShortPrice(); |
|
| 741 |
+ Float longPrice = mberManageVO.getLongPrice(); |
|
| 742 |
+ Float picturePrice = mberManageVO.getPicturePrice(); |
|
| 743 |
+ Float picture2Price = mberManageVO.getPicture2Price(); |
|
| 744 |
+ Float picture3Price = mberManageVO.getPicture3Price(); |
|
| 745 |
+ |
|
| 746 |
+ //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 |
|
| 747 |
+ boolean compareEndDate = false; |
|
| 748 |
+ float eventRemainCash = 0; |
|
| 749 |
+ float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); |
|
| 750 |
+ |
|
| 751 |
+ if(eventMberInfo != null) {
|
|
| 752 |
+ |
|
| 753 |
+ String eventEndDate = eventMberInfo.getEventEndDate(); |
|
| 754 |
+ |
|
| 755 |
+ if(eventEndDate != null) {
|
|
| 756 |
+ compareEndDate = MJUtil.getCompareDate(eventEndDate); |
|
| 757 |
+ eventRemainCash = (float) eventMberInfo.getEventRemainCash(); |
|
| 758 |
+ |
|
| 759 |
+ //이벤트 금액 및 기간 체크 |
|
| 760 |
+ if(!compareEndDate || eventRemainCash < paramEachPrice) {
|
|
| 761 |
+ |
|
| 762 |
+ if(!eventMberInfo.getEventStatus().equals("E")) {
|
|
| 763 |
+ |
|
| 764 |
+ //이벤트 상태값을 종료로 변경한다. |
|
| 765 |
+ mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); |
|
| 766 |
+ mjonEventVO.setEventStatus("E");
|
|
| 767 |
+ mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴");
|
|
| 768 |
+ mjonEventVO.setEventRemainCash(eventRemainCash); |
|
| 769 |
+ mjonEventService.updateEventEndStatus(mjonEventVO); |
|
| 770 |
+ eventMberInfo.setEventStatus("E");
|
|
| 771 |
+ |
|
| 772 |
+ } |
|
| 773 |
+ |
|
| 774 |
+ } |
|
| 775 |
+ } |
|
| 776 |
+ } |
|
| 777 |
+ |
|
| 778 |
+ //이벤트 진행 회원의 발송 단가 처리해주기 |
|
| 779 |
+ if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) {
|
|
| 780 |
+ |
|
| 781 |
+ shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); |
|
| 782 |
+ longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); |
|
| 783 |
+ picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); |
|
| 784 |
+ picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); |
|
| 785 |
+ picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); |
|
| 786 |
+ |
|
| 787 |
+ }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기
|
|
| 788 |
+ |
|
| 789 |
+ shortPrice = (float) sysJoinSetVO.getShortPrice(); |
|
| 790 |
+ longPrice = (float) sysJoinSetVO.getLongPrice(); |
|
| 791 |
+ picturePrice = (float) sysJoinSetVO.getPicturePrice(); |
|
| 792 |
+ picture2Price = (float) sysJoinSetVO.getPicture2Price(); |
|
| 793 |
+ picture3Price = (float) sysJoinSetVO.getPicture3Price(); |
|
| 794 |
+ |
|
| 795 |
+ } |
|
| 796 |
+ |
|
| 797 |
+ // 토탈금액 "," 리플레이스 처리 |
|
| 798 |
+ mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", ""));
|
|
| 799 |
+ |
|
| 800 |
+ float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); |
|
| 801 |
+ float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); |
|
| 802 |
+ |
|
| 803 |
+ System.out.println("+++ tmpOrgEachPrice ::: "+tmpOrgEachPrice);
|
|
| 804 |
+ System.out.println("+++ tmpOrgTotPrice ::: "+tmpOrgTotPrice);
|
|
| 805 |
+ |
|
| 806 |
+ // MSG_TYPE 다시계산 |
|
| 807 |
+ if(mjonMsgVO.getFileName1() != null) {
|
|
| 808 |
+ mjonMsgVO.setMsgType("6");
|
|
| 809 |
+ }else {
|
|
| 810 |
+ if(FrBytes < 2000) {
|
|
| 811 |
+ if(FrBytes > 90) {// 90Byte 초과시 장문
|
|
| 812 |
+ mjonMsgVO.setMsgType("6");
|
|
| 813 |
+ }else {// 그외 단문
|
|
| 814 |
+ mjonMsgVO.setMsgType("4");
|
|
| 815 |
+ } |
|
| 816 |
+ } |
|
| 817 |
+ } |
|
| 818 |
+ |
|
| 819 |
+ System.out.println("mjonMsgVO.getMsgType3() ::: "+mjonMsgVO.getMsgType());
|
|
| 820 |
+/* |
|
| 821 |
+ * 간혹 화면에서 넘어오는 단가와 실제 문자 타입별 단가가 다르게 처리되는 부분이 있어서 |
|
| 822 |
+ * 다시 한번 문자 종류 및 단가 체크해서 타입별 문자 단가로 조정 처리 |
|
| 823 |
+ * */ |
|
| 824 |
+ |
|
| 825 |
+ //각 문자 종류별 단가 셋팅해주기 |
|
| 826 |
+ float tmpEachPrice = 0; |
|
| 827 |
+ if(mjonMsgVO.getMsgType().equals("4")) {
|
|
| 828 |
+ mjonMsgVO.setEachPrice(shortPrice.toString()); |
|
| 829 |
+ tmpEachPrice = shortPrice; |
|
| 830 |
+ }else if(mjonMsgVO.getMsgType().equals("6")) {
|
|
| 831 |
+ |
|
| 832 |
+ if(mjonMsgVO.getFileName3() != null) {
|
|
| 833 |
+ mjonMsgVO.setEachPrice(picture3Price.toString()); |
|
| 834 |
+ tmpEachPrice = picture3Price; |
|
| 835 |
+ }else if(mjonMsgVO.getFileName2() != null) {
|
|
| 836 |
+ mjonMsgVO.setEachPrice(picture2Price.toString()); |
|
| 837 |
+ tmpEachPrice = picture2Price; |
|
| 838 |
+ }else if(mjonMsgVO.getFileName1() != null) {
|
|
| 839 |
+ mjonMsgVO.setEachPrice(picturePrice.toString()); |
|
| 840 |
+ tmpEachPrice = picturePrice; |
|
| 841 |
+ }else {
|
|
| 842 |
+ mjonMsgVO.setEachPrice(longPrice.toString()); |
|
| 843 |
+ tmpEachPrice = longPrice; |
|
| 844 |
+ } |
|
| 845 |
+ |
|
| 846 |
+ } |
|
| 847 |
+ |
|
| 848 |
+ |
|
| 849 |
+/* |
|
| 850 |
+ * 주소록 그룹에서 조회한 주소 갯수 카운팅 |
|
| 851 |
+ * 중복 제거한 데이터 갯수 적용해주기 |
|
| 852 |
+ * |
|
| 853 |
+ * */ |
|
| 854 |
+ List<String> resultAddrList = mjonCandidateService.selectAddrGrpHGList(mjonMsgVO); |
|
| 855 |
+ |
|
| 856 |
+ if(resultAddrList == null) {
|
|
| 857 |
+ |
|
| 858 |
+ modelAndView.addObject("message", "주소록 정보를 불러올 수 없습니다.");
|
|
| 859 |
+ modelAndView.addObject("result", "statusFail");
|
|
| 860 |
+ modelAndView.addObject("resultSts", "0");
|
|
| 861 |
+ modelAndView.addObject("resultBlockSts", "0");
|
|
| 862 |
+ |
|
| 863 |
+ } |
|
| 864 |
+ |
|
| 865 |
+ int addrListLen = resultAddrList.size(); |
|
| 866 |
+ int addrDupListLen = 0; |
|
| 867 |
+ |
|
| 868 |
+ //주소록 그룹 전체 주소정보 중복 제거 |
|
| 869 |
+ resultAddrList = resultAddrList.stream().distinct().collect(Collectors.toList()); |
|
| 870 |
+ |
|
| 871 |
+ //제거 중복 건수 계산 |
|
| 872 |
+ addrDupListLen = resultAddrList.size(); |
|
| 873 |
+ |
|
| 874 |
+ //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 |
|
| 875 |
+ int tmpTotCallCnt = addrDupListLen; //mjonMsgVO.getCallToList().length; |
|
| 876 |
+ float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; |
|
| 877 |
+ |
|
| 878 |
+ |
|
| 879 |
+ //화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 |
|
| 880 |
+ if(tmpOrgEachPrice != tmpEachPrice) {
|
|
| 881 |
+ mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); |
|
| 882 |
+ |
|
| 883 |
+ System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice);
|
|
| 884 |
+ System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice);
|
|
| 885 |
+ }else {
|
|
| 886 |
+ System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice);
|
|
| 887 |
+ } |
|
| 888 |
+ |
|
| 889 |
+ if(tmpOrgTotPrice != tmpTotPrice ) {
|
|
| 890 |
+ mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); |
|
| 891 |
+ |
|
| 892 |
+ System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice);
|
|
| 893 |
+ System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice);
|
|
| 894 |
+ }else {
|
|
| 895 |
+ System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice);
|
|
| 896 |
+ } |
|
| 897 |
+ |
|
| 898 |
+/* |
|
| 899 |
+ * 개별단가 및 총결제 캐시 금액 체크 로직 종료 |
|
| 900 |
+ * |
|
| 901 |
+ * */ |
|
| 902 |
+ |
|
| 903 |
+ |
|
| 904 |
+/* |
|
| 905 |
+ * 치환문자는 사용 안하므로 스킵 |
|
| 906 |
+ * */ |
|
| 907 |
+ |
|
| 908 |
+ |
|
| 909 |
+ |
|
| 910 |
+/* |
|
| 911 |
+ * 사용자 현재 보유금액 및 포인트 조회 |
|
| 912 |
+ * */ |
|
| 913 |
+ |
|
| 914 |
+ //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 |
|
| 915 |
+ String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); |
|
| 916 |
+ String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); |
|
| 917 |
+ mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 |
|
| 918 |
+ String totPrice = mjonMsgVO.getTotPrice(); |
|
| 919 |
+ String eachPrice = mjonMsgVO.getEachPrice(); |
|
| 920 |
+ |
|
| 921 |
+ if(msgType.equals("6")) {//문자 mms, lms 단가 설정하기
|
|
| 922 |
+ |
|
| 923 |
+ if(fileCount > 2) {//그림 이미지가 3개
|
|
| 924 |
+ |
|
| 925 |
+ eachPrice = mjonMsgVO.getP3Price(); |
|
| 926 |
+ |
|
| 927 |
+ }else if(fileCount > 1) {//그림 이미지가 2개
|
|
| 928 |
+ |
|
| 929 |
+ eachPrice = mjonMsgVO.getP2Price(); |
|
| 930 |
+ |
|
| 931 |
+ }else if(fileCount == 1) {//그림 이미지가 1개
|
|
| 932 |
+ eachPrice = mjonMsgVO.getpPrice(); |
|
| 933 |
+ |
|
| 934 |
+ }else {//장문 문자인 경우
|
|
| 935 |
+ |
|
| 936 |
+ eachPrice = mjonMsgVO.getmPrice(); |
|
| 937 |
+ } |
|
| 938 |
+ |
|
| 939 |
+ } |
|
| 940 |
+ |
|
| 941 |
+ BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); |
|
| 942 |
+ BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); |
|
| 943 |
+ |
|
| 944 |
+ |
|
| 945 |
+ System.out.println("++++ befCash ::: "+befCash);
|
|
| 946 |
+ System.out.println("++++ totMsgPrice ::: "+totMsgPrice);
|
|
| 947 |
+ |
|
| 948 |
+ |
|
| 949 |
+/*+++++++++++주소록 그룹의 모든 주소록 정보 조회해오기++++++++++++++++++++++++*/ |
|
| 950 |
+ |
|
| 951 |
+ |
|
| 952 |
+ //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 |
|
| 953 |
+ //BigDecimal 비교 연산 |
|
| 954 |
+ // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 |
|
| 955 |
+ if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice,
|
|
| 956 |
+ |
|
| 957 |
+ mjonMsgVO.setBefCash(befCash.toString()); |
|
| 958 |
+ |
|
| 959 |
+ //문자 전송 그룹아이디 생성 |
|
| 960 |
+ mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); |
|
| 961 |
+ |
|
| 962 |
+ int maxRow = 0; |
|
| 963 |
+ int rowCnt = 0; |
|
| 964 |
+ int i = 0; |
|
| 965 |
+ List<String> arrAddrList = new ArrayList<String>(); |
|
| 966 |
+ |
|
| 967 |
+ System.out.println("++++++++++++++++++ 데이터베이스 입력 시작 ::: "+new Date());
|
|
| 968 |
+ |
|
| 969 |
+ for(String callTo : resultAddrList) {
|
|
| 970 |
+ |
|
| 971 |
+ arrAddrList.add(callTo); |
|
| 972 |
+ if(maxRow == 4999) {
|
|
| 973 |
+ |
|
| 974 |
+ rowCnt = rowCnt + maxRow; |
|
| 975 |
+ maxRow = 0; |
|
| 976 |
+ String[] arrPhoneList = arrAddrList.toArray(new String[arrAddrList.size()]); |
|
| 977 |
+ System.out.println("arrPhoneList len ::: "+arrPhoneList.length);
|
|
| 978 |
+ mjonMsgVO.setCallToList(arrPhoneList); |
|
| 979 |
+ |
|
| 980 |
+ MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); |
|
| 981 |
+ mjonMsgVO.setAgentCode(returnVO.getAgentCode()); |
|
| 982 |
+ resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); |
|
| 983 |
+ resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); |
|
| 984 |
+ |
|
| 985 |
+ arrAddrList.clear();//리스트 초기화 해주기 |
|
| 986 |
+ |
|
| 987 |
+ System.out.println("=========================================================================");
|
|
| 988 |
+ System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 ==> 5000 resultSts ::: " + resultSts);
|
|
| 989 |
+ System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 ==> 5000 resultBlockSts ::: " + resultBlockSts);
|
|
| 990 |
+ System.out.println("=========================================================================");
|
|
| 991 |
+ |
|
| 992 |
+ }else {
|
|
| 993 |
+ |
|
| 994 |
+ maxRow++; |
|
| 995 |
+ |
|
| 996 |
+ } |
|
| 997 |
+ |
|
| 998 |
+ i++; |
|
| 999 |
+ } |
|
| 1000 |
+ |
|
| 1001 |
+ rowCnt = rowCnt + maxRow; |
|
| 1002 |
+ |
|
| 1003 |
+/* |
|
| 1004 |
+ * loop를 돌고 남은 잔여 건수 디비 입력 처리해주기 |
|
| 1005 |
+ * */ |
|
| 1006 |
+ String[] arrLastPhoneList = arrAddrList.toArray(new String[arrAddrList.size()]); |
|
| 1007 |
+ |
|
| 1008 |
+ mjonMsgVO.setCallToList(arrLastPhoneList); |
|
| 1009 |
+ |
|
| 1010 |
+ MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); |
|
| 1011 |
+ mjonMsgVO.setAgentCode(returnVO.getAgentCode()); |
|
| 1012 |
+ resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); |
|
| 1013 |
+ resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); |
|
| 1014 |
+ |
|
| 1015 |
+ System.out.println("=========================================================================");
|
|
| 1016 |
+ System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 마지막 잔여건수 처리 ==> resultSts ::: " + resultSts);
|
|
| 1017 |
+ System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 마지막 잔여건수 처리 ==> resultBlockSts ::: " + resultBlockSts);
|
|
| 1018 |
+ System.out.println("=========================================================================");
|
|
| 1019 |
+ |
|
| 1020 |
+ System.out.println("Last arrLastPhoneList ::: "+arrLastPhoneList.length);
|
|
| 1021 |
+ System.out.println("req Date ::: "+ mjonMsgVO.getReqDate());
|
|
| 1022 |
+ System.out.println("addrDupListLen ::: "+addrDupListLen);
|
|
| 1023 |
+ |
|
| 1024 |
+ } |
|
| 1025 |
+ |
|
| 1026 |
+ System.out.println("++++++++++++++++++ 데이터베이스 입력 종료 ::: "+new Date());
|
|
| 1027 |
+ |
|
| 1028 |
+ } catch (Exception e) {
|
|
| 1029 |
+ System.out.println("=========================================================================");
|
|
| 1030 |
+ System.out.println("++++++++sendMsgHGDataAjax Controller Error!!!+++++++++++++++++++++ 선거문자 ==> 기타 시스템 오류 !!! : " + e);
|
|
| 1031 |
+ System.out.println("=========================================================================");
|
|
| 1032 |
+ |
|
| 1033 |
+ modelAndView.addObject("result", "fail");
|
|
| 1034 |
+ modelAndView.addObject("message", "기타 시스템 오류 ");
|
|
| 1035 |
+ } |
|
| 1036 |
+ |
|
| 1037 |
+ modelAndView.addObject("message", "문자 전송이 완료되었습니다.");
|
|
| 1038 |
+ modelAndView.addObject("result", "success");
|
|
| 1039 |
+ modelAndView.addObject("resultSts", resultSts);
|
|
| 1040 |
+ modelAndView.addObject("resultBlockSts", resultBlockSts);
|
|
| 1041 |
+ |
|
| 1042 |
+ |
|
| 1043 |
+ /** |
|
| 1044 |
+ * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 |
|
| 1045 |
+ * |
|
| 1046 |
+ * */ |
|
| 1047 |
+ |
|
| 1048 |
+ try {
|
|
| 1049 |
+ |
|
| 1050 |
+ if(resultSts > 0) {//전송 결과가 한건 이상인 경우
|
|
| 1051 |
+ |
|
| 1052 |
+ String adminSmsNoticeYn = "Y"; |
|
| 1053 |
+ String smishingYn = "N"; |
|
| 1054 |
+ String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 |
|
| 1055 |
+ |
|
| 1056 |
+ UserManageVO userManageVO = new UserManageVO(); |
|
| 1057 |
+ userManageVO.setMberId(userId); |
|
| 1058 |
+ if(!userId.equals("")) {
|
|
| 1059 |
+ userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); |
|
| 1060 |
+ adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); |
|
| 1061 |
+ smishingYn = userManageVO.getSmishingYn(); |
|
| 1062 |
+ } |
|
| 1063 |
+ |
|
| 1064 |
+ //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 |
|
| 1065 |
+ if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) {
|
|
| 1066 |
+ |
|
| 1067 |
+ if(spamStatus.equals("Y")) {
|
|
| 1068 |
+ |
|
| 1069 |
+ mjonMsgVO.setDelayYn("Y");
|
|
| 1070 |
+ |
|
| 1071 |
+ }else if(smishingYn.equals("Y")) {
|
|
| 1072 |
+ |
|
| 1073 |
+ mjonMsgVO.setSmishingYn("Y");
|
|
| 1074 |
+ } |
|
| 1075 |
+ |
|
| 1076 |
+ // 법인폰 알람여부 체크 |
|
| 1077 |
+ JoinSettingVO joinSettingVO = new JoinSettingVO(); |
|
| 1078 |
+ joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); |
|
| 1079 |
+ // SMS 체크 |
|
| 1080 |
+ if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
|
|
| 1081 |
+ MjonMsgCampainDataController mcdController = new MjonMsgCampainDataController(); |
|
| 1082 |
+ mcdController.getAdminPhoneSendMsgData(mjonMsgVO); |
|
| 1083 |
+ } |
|
| 1084 |
+ |
|
| 1085 |
+ // SLACK 체크 |
|
| 1086 |
+ if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
|
|
| 1087 |
+ //Slack으로 메세지 전송 처리 |
|
| 1088 |
+ MjonCommon comm = new MjonCommon(); |
|
| 1089 |
+ comm.getAdminSandSlack(mjonMsgVO); |
|
| 1090 |
+ } |
|
| 1091 |
+ } |
|
| 1092 |
+ |
|
| 1093 |
+ } |
|
| 1094 |
+ |
|
| 1095 |
+ } catch (Exception e) {
|
|
| 1096 |
+ throw new Exception("++++++++++++++++++++++ 선거문자 메뉴 getAdminPhoneSendMsgData Error !!! " + e);
|
|
| 1097 |
+ } |
|
| 1098 |
+ |
|
| 1099 |
+ |
|
| 1100 |
+ return modelAndView; |
|
| 1101 |
+ } |
|
| 1102 |
+ |
|
| 540 | 1103 |
} |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
... | ... | @@ -7,6 +7,8 @@ |
| 7 | 7 |
<sqlMap namespace="Msg"> |
| 8 | 8 |
<typeAlias alias="mjonCandidateVO" type="itn.let.mjo.msgcampain.service.MjonCandidateVO"/> |
| 9 | 9 |
<typeAlias alias="mjonCandidateTWVO" type="itn.let.mjo.msgcampain.service.MjonCandidateTWVO"/> |
| 10 |
+ <typeAlias alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/> |
|
| 11 |
+ |
|
| 10 | 12 |
|
| 11 | 13 |
<select id="mjonCandidateDAO.selectCandidateDataInfo" parameterClass="String" resultClass="mjonCandidateVO"> |
| 12 | 14 |
|
... | ... | @@ -273,6 +275,32 @@ |
| 273 | 275 |
]]> |
| 274 | 276 |
</delete> |
| 275 | 277 |
|
| 278 |
+ <select id="mjonCandidateDAO.selectAddrGrpHGList" parameterClass="mjonMsgVO" resultClass = "String"> |
|
| 279 |
+ |
|
| 280 |
+ SELECT ADDR_PHONE_NO |
|
| 281 |
+ FROM MJ_ADDR a |
|
| 282 |
+ WHERE a.MBER_ID = #userId# |
|
| 283 |
+ |
|
| 284 |
+ <iterate prepend="AND ADDR_GRP_ID IN " open="(" close=")" conjunction="," property="callToList">
|
|
| 285 |
+ #callToList[]# |
|
| 286 |
+ </iterate> |
|
| 287 |
+ |
|
| 288 |
+ <isEqual property="bookmarkYn" compareValue="N"> |
|
| 289 |
+ AND a.BOOKMARK = 'N' |
|
| 290 |
+ </isEqual> |
|
| 291 |
+ <isEqual property="bookmarkYn" compareValue="B"> |
|
| 292 |
+ AND a.BOOKMARK IN ('N','Y')
|
|
| 293 |
+ </isEqual> |
|
| 294 |
+ <isEqual property="bookmarkYn" compareValue="Y"> |
|
| 295 |
+ AND a.BOOKMARK = 'Y' |
|
| 296 |
+ </isEqual> |
|
| 297 |
+ |
|
| 298 |
+ AND a.DELETE_YN = 'N' |
|
| 299 |
+ |
|
| 300 |
+ ORDER BY a.ADDR_PHONE_NO |
|
| 301 |
+ |
|
| 302 |
+ </select> |
|
| 303 |
+ |
|
| 276 | 304 |
</sqlMap> |
| 277 | 305 |
|
| 278 | 306 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/addr/huge/MsgHGAddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/addr/huge/MsgHGAddrGroupListAjax.jsp
... | ... | @@ -103,8 +103,8 @@ |
| 103 | 103 |
<label for="group1" class="label"></label> |
| 104 | 104 |
<input type="checkbox" id="group1"> |
| 105 | 105 |
<!-- <p onClick="javascript:fnSelectAddrList('none','',this); return false;"> -->
|
| 106 |
- <p> |
|
| 107 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">그룹미지정[<span id="nogrpCnt"></span>명] |
|
| 106 |
+ <p style="padding-left:10px;"> |
|
| 107 |
+ <!-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> -->그룹미지정[<span id="nogrpCnt"></span>명] |
|
| 108 | 108 |
</p> |
| 109 | 109 |
</div> |
| 110 | 110 |
|
... | ... | @@ -112,8 +112,8 @@ |
| 112 | 112 |
<label for="group2" class="label"></label> |
| 113 | 113 |
<input type="checkbox" id="group2"> |
| 114 | 114 |
<!-- <p onClick="javascript:fnSelectAddrList('book','',this); return false;"> -->
|
| 115 |
- <p> |
|
| 116 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘">자주보내는 번호[<span id="bookmarkCnt"></span>명] |
|
| 115 |
+ <p style="padding-left:10px;"> |
|
| 116 |
+ <!-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> -->자주보내는 번호[<span id="bookmarkCnt"></span>명] |
|
| 117 | 117 |
</p> |
| 118 | 118 |
</div> |
| 119 | 119 |
|
... | ... | @@ -124,8 +124,8 @@ |
| 124 | 124 |
<label for="group${status.index+3}" class="label"></label>
|
| 125 | 125 |
<input type="checkbox" name="grpCheck" id="group${status.index+3}" value="${addrGroupList.addrGrpId}§${addrGroupList.addrGrpNm}§${addrGroupList.grpCount}">
|
| 126 | 126 |
<%-- <p onClick="javascript:fnSelectAddrList('grp','${addrGroupList.addrGrpId}',this); return false;"> --%>
|
| 127 |
- <p> |
|
| 128 |
- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> |
|
| 127 |
+ <p style="padding-left:10px;"> |
|
| 128 |
+ <!-- <img src="/publish/images/content/close_folder2.png" alt="폴더 닫힘"> --> |
|
| 129 | 129 |
<c:out value="${addrGroupList.addrGrpNm}" />[<span><c:out value="${addrGroupList.grpCount}" /></span>명]
|
| 130 | 130 |
</p> |
| 131 | 131 |
</div> |
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataSMLView.jsp
... | ... | @@ -3875,7 +3875,7 @@ |
| 3875 | 3875 |
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/> |
| 3876 | 3876 |
|
| 3877 | 3877 |
<!-- 이벤트 관련 변수 --> |
| 3878 |
- <input type="hidden" id="eventStatus" name="eventStatus" value="<c:out value='${eventMberInfo.eventStatus}'/>"/>
|
|
| 3878 |
+ <input type="hidden" id="eventStatus" name="eventStatus" value="E"/> |
|
| 3879 | 3879 |
<input type="hidden" id="eventRemainCash" name="eventRemainCash" value="<c:out value='${eventRemainCash}'/>"/>
|
| 3880 | 3880 |
<input type="hidden" id="eventYn" name="eventYn" value="N"/> |
| 3881 | 3881 |
|
... | ... | @@ -3894,7 +3894,9 @@ |
| 3894 | 3894 |
<input type="hidden" id="evnShortMsgCnt" name="evnShortMsgCnt" value="0"/><!-- 치환 이벤트 단문 건수 --> |
| 3895 | 3895 |
<input type="hidden" id="evnLongMsgCnt" name="evnLongMsgCnt" value="0"/><!-- 치환 이벤트 장문 건수 --> |
| 3896 | 3896 |
|
| 3897 |
- <input type="hidden" id="divideChk" name="divideChk" value="N"> |
|
| 3897 |
+ <!-- <input type="hidden" id="divideChk" name="divideChk" value="N"> --><!-- 분할발송 여부 --> |
|
| 3898 |
+ <input type="hidden" id="bookmarkYn" name="bookmarkYn" value="N"><!-- 자주사용하는 그룹 사용여버 --> |
|
| 3899 |
+ |
|
| 3898 | 3900 |
|
| 3899 | 3901 |
<!-- <div class="top_content current" id="tab1_1"> --> |
| 3900 | 3902 |
<div class="heading"> |
... | ... | @@ -4087,7 +4089,7 @@ |
| 4087 | 4089 |
<button type="button" class="btn_close" onclick="miniPopup(this);">닫기</button> |
| 4088 | 4090 |
</div> |
| 4089 | 4091 |
</div> |
| 4090 |
- <div class="btn_popup_wrap convers_wrap"> |
|
| 4092 |
+ <!-- <div class="btn_popup_wrap convers_wrap"> |
|
| 4091 | 4093 |
<button type="button" class="btnType btnType7" onclick="miniPopup(this)">특정문구 일괄변환<i class="qmMark"></i></button> |
| 4092 | 4094 |
<div class="send_miniPop convers"> |
| 4093 | 4095 |
<div> |
... | ... | @@ -4105,7 +4107,7 @@ |
| 4105 | 4107 |
</div> |
| 4106 | 4108 |
<button type="button" class="btn_close" onclick="miniPopup(this);">닫기</button> |
| 4107 | 4109 |
</div> |
| 4108 |
- </div> |
|
| 4110 |
+ </div> --> |
|
| 4109 | 4111 |
<button type="button" class="btnType btnType7" onclick="javascript:fnGoMyMsg(); return false;">내문자함</button> |
| 4110 | 4112 |
<button type="button" class="btnType btnType8" onclick="openPhotoEditor();">이미지 불러오기</button> |
| 4111 | 4113 |
<div class="send_btnWrap"> |
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataView.jsp
... | ... | @@ -988,44 +988,48 @@ |
| 988 | 988 |
|
| 989 | 989 |
//수신번호 리스트 체크하기 |
| 990 | 990 |
var numCnt = 0; |
| 991 |
- /* var nameList = []; //치환문자 이름 |
|
| 992 |
- var phoneNum = []; //받는사람 |
|
| 993 |
- var rep1List = []; //치환문자1 |
|
| 994 |
- var rep2List = []; //치환문자2 |
|
| 995 |
- var rep3List = []; //치환문자3 |
|
| 996 |
- var rep4List = []; //치환문자4 */ |
|
| 997 | 991 |
var addrGrpList = []; //주소록 그룹 리스트 |
| 998 |
- |
|
| 999 | 992 |
var selectedData = tableL.getRows(); |
| 1000 | 993 |
|
| 1001 | 994 |
if(selectedData == "" || selectedData == null){
|
| 1002 |
- |
|
| 1003 | 995 |
alert("주소록을 한 건 이상 추가해주세요.");
|
| 1004 | 996 |
return false; |
| 1005 |
- |
|
| 1006 | 997 |
}else{ // 선택한 Row '-' 문자 삭제하기
|
| 1007 | 998 |
|
| 999 |
+ var groupSts = false; |
|
| 1000 |
+ var bookSts = false; |
|
| 1001 |
+ |
|
| 1008 | 1002 |
for(var i=0; i < selectedData.length; i++){
|
| 1009 |
- |
|
| 1010 | 1003 |
//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
| 1011 | 1004 |
var addrGrpId = tableL.getRows()[i].getData().addrGrpId; |
| 1012 |
- |
|
| 1013 | 1005 |
if(addrGrpId == ""){
|
| 1014 |
- |
|
| 1015 | 1006 |
alert("수신 목록에 주소록 정보가 없습니다.");
|
| 1016 | 1007 |
return false; |
| 1017 |
- |
|
| 1018 | 1008 |
} |
| 1019 | 1009 |
|
| 1010 |
+ if(addrGrpId == 'group1'){
|
|
| 1011 |
+ |
|
| 1012 |
+ addrGrpId = '0'; |
|
| 1013 |
+ groupSts = true; |
|
| 1014 |
+ |
|
| 1015 |
+ }else if(addrGrpId == 'bookmark'){
|
|
| 1016 |
+ |
|
| 1017 |
+ addrGrpId = '0'; |
|
| 1018 |
+ bookSts = true; |
|
| 1019 |
+ |
|
| 1020 |
+ } |
|
| 1020 | 1021 |
addrGrpList[i] = addrGrpId; |
| 1022 |
+ } |
|
| 1023 |
+ |
|
| 1024 |
+ if(groupSts && bookSts){
|
|
| 1025 |
+ |
|
| 1026 |
+ $("#bookmarkYn").val("B");
|
|
| 1027 |
+ |
|
| 1028 |
+ }else if(bookSts){
|
|
| 1029 |
+ |
|
| 1030 |
+ $("#bookmarkYn").val("Y");
|
|
| 1021 | 1031 |
|
| 1022 | 1032 |
} |
| 1023 |
- |
|
| 1024 |
- } |
|
| 1025 |
- |
|
| 1026 |
- for(var i=0; i< addrGrpList.length; i++){
|
|
| 1027 |
- |
|
| 1028 |
- console.log("++++++++++++ addr group id ::: "+addrGrpList[i]);
|
|
| 1029 | 1033 |
|
| 1030 | 1034 |
} |
| 1031 | 1035 |
|
... | ... | @@ -1063,18 +1067,14 @@ |
| 1063 | 1067 |
} |
| 1064 | 1068 |
|
| 1065 | 1069 |
var fileLinks = document.getElementsByName("fileLinks");
|
| 1066 |
- |
|
| 1067 | 1070 |
var conLeng = conByteLeng($('#smsTxt').val()); // 내용 문자 입력 바이트 수 계산하기
|
| 1068 | 1071 |
|
| 1069 | 1072 |
if(conLeng > 2000){
|
| 1070 |
- |
|
| 1071 | 1073 |
alert("문자 내용은 2000byte를 넘을 수 없습니다.");
|
| 1072 | 1074 |
return false; |
| 1073 |
- |
|
| 1074 | 1075 |
} |
| 1075 | 1076 |
|
| 1076 | 1077 |
if(confirm("문자를 전송하시겠습니까?")){
|
| 1077 |
- |
|
| 1078 | 1078 |
|
| 1079 | 1079 |
imgFilePath = []; |
| 1080 | 1080 |
$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
|
... | ... | @@ -1134,16 +1134,11 @@ |
| 1134 | 1134 |
}); |
| 1135 | 1135 |
|
| 1136 | 1136 |
form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기 |
| 1137 |
- form.callToList.value = phoneNum; //수신자번호 리스트 저장해주기 |
|
| 1137 |
+ form.callToList.value = addrGrpList; //수신자 주소록 그룹 리스트 저장해주기 |
|
| 1138 | 1138 |
form.callFrom.value = removeDash(form.callFromList.value); // 발신번호 대쉬(-) 문자 없애주기 |
| 1139 | 1139 |
form.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부 |
| 1140 | 1140 |
form.templateYn.value = templateYn; |
| 1141 | 1141 |
form.imgFileId.value = imgFileId; |
| 1142 |
- //form.nameList.value = nameList; |
|
| 1143 |
- //form.rep1List.value = rep1List; |
|
| 1144 |
- //form.rep2List.value = rep2List; |
|
| 1145 |
- //form.rep3List.value = rep3List; |
|
| 1146 |
- //form.rep4List.value = rep4List; |
|
| 1147 | 1142 |
|
| 1148 | 1143 |
//총 결제금액 천단위 콤마 삭제 후 전송 |
| 1149 | 1144 |
var totPrice = form.totPrice.value; |
... | ... | @@ -1153,7 +1148,6 @@ |
| 1153 | 1148 |
//문자내용이 입력된 경우 스팸 필터링 실행 |
| 1154 | 1149 |
if(!form.smsTxtArea.value == "" && exceptSpamYn == "N"){
|
| 1155 | 1150 |
|
| 1156 |
- console.log(smsTxtArea); |
|
| 1157 | 1151 |
var spmData = new FormData(form); |
| 1158 | 1152 |
url = "/web/mjon/msgdata/selectSpamTxtChkAjax.do"; |
| 1159 | 1153 |
|
... | ... | @@ -1202,390 +1196,8 @@ |
| 1202 | 1196 |
|
| 1203 | 1197 |
} |
| 1204 | 1198 |
|
| 1205 |
- |
|
| 1206 |
- //이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요. |
|
| 1207 |
- //이벤트 캐시가 부족한 경우 이벤트 캐시로 발송 가능한 만큼만 이벤트 금액으로 발송 처리해줌. |
|
| 1208 |
- //이 후 나머지 발송 건수는 이벤트 캐시가 아닌 일반 단가로 발송 처리를 진행 함. |
|
| 1209 |
- var eventStatus = form.eventStatus.value; |
|
| 1210 |
- |
|
| 1211 |
- if(eventStatus == 'Y'){ //이벤트 진행 대상자이면 문자종류에 이벤트로 구분
|
|
| 1212 |
- |
|
| 1213 |
- form.eventYn.value = "Y"; //이벤트문자 종류 설정 |
|
| 1214 |
- |
|
| 1215 |
- } |
|
| 1216 |
- |
|
| 1217 |
- var eventRemainCash = parseFloat(form.eventRemainCash.value); |
|
| 1218 |
- |
|
| 1219 |
- if(eventStatus == 'Y'){
|
|
| 1220 |
- |
|
| 1221 |
- if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
|
|
| 1222 |
- |
|
| 1223 |
- if(confirm("고객님의 이벤트 캐시 잔액(" + eventRemainCash + "원) 부족으로 요청하신 문자("+numberWithCommas(phoneNum.length)+"건)를 모두 발송할 수 없습니다. 이벤트 캐시 초과 건에 대해서는 일반 단가를 적용하여 발송하시겠습니까?")){
|
|
| 1224 |
- |
|
| 1225 |
- var smsTxtArea = $('#smsTxtArea').val();
|
|
| 1226 |
- var evnMsgType = $("#msgType").val();
|
|
| 1227 |
- var evnEachPrice = $("#eachPrice").val(); //form 에 저장된 이벤트 개별 단가 불러오기
|
|
| 1228 |
- var evnSendCnt = Math.floor(eventRemainCash / evnEachPrice); |
|
| 1229 |
- var norEachPrice = 0; |
|
| 1230 |
- var imgCnt = $("#imgCnt").val(); //그림 이미지 갯수
|
|
| 1231 |
- var txtReplYn = $("#txtReplYn").val(); //치환문자 포함 여부
|
|
| 1232 |
- var evnPhoneNumCnt = Number($("#evnPhoneNumCnt").val()); //치환문자 체크하면서 단/장문 건수 카운팅하면서 이벤트 금액으로 발송가능한 수신자 갯수 정보
|
|
| 1233 |
- var myPrice = parseFloat($("#myPrice").val()); //회원보유 잔여 캐시 금액
|
|
| 1234 |
- |
|
| 1235 |
- //수신목록 저장 배열 변수 |
|
| 1236 |
- var evnPhoneNum = []; //이벤트 단가 받는사람 |
|
| 1237 |
- var norPhoneNum = []; //일반 단가 받는 사람 |
|
| 1238 |
- |
|
| 1239 |
- //치환문자 포함 문자 저장 배열 변수(이벤트 문자 저장) |
|
| 1240 |
- var evnName = []; |
|
| 1241 |
- var evnRep1 = []; |
|
| 1242 |
- var evnRep2 = []; |
|
| 1243 |
- var evnRep3 = []; |
|
| 1244 |
- var evnRep4 = []; |
|
| 1245 |
- |
|
| 1246 |
- //치환문자 포함 문자 저장 배열 변수(일반 문자 저장) |
|
| 1247 |
- var norName = []; |
|
| 1248 |
- var norRep1 = []; |
|
| 1249 |
- var norRep2 = []; |
|
| 1250 |
- var norRep3 = []; |
|
| 1251 |
- var norRep4 = []; |
|
| 1252 |
- |
|
| 1253 |
- |
|
| 1254 |
- /** |
|
| 1255 |
- Desc: 1. 그림, 치환, 일반 문자에 대해서 각각 이벤트 단가로 전송할 리스트 와 일반단가로 전송할 리스트를 분리 하는 로직 |
|
| 1256 |
- 2. 그림 및 일반 문자는 단순 이벤트 금액으로 보낼수 있는 건수를 계산하여 리스트[0] 부터 발송 건수만큼 추출하여 evnPhoneNum 배열에 입력 후 이벤트 금액으로 발송 진행 |
|
| 1257 |
- 3. 이벤트 발송이 완료되면, 이벤트 건수를 제외한 나머지 건수를 norPhoneNum 배열에 입력 후 일반 금액으로 발송 진행 |
|
| 1258 |
- 4. 일반 발송시에 전송 단가(eachPrice), 전체금액(totPrice) 등 변수 정보 변경 |
|
| 1259 |
- ===== |
|
| 1260 |
- 5. 그림문자가 아닌 치환문자인 경우 치환 처리를 진행하면서 단문, 장문을 구분하고 이때 이벤트 금액에서 단문, 장문 가격을 차감하여 보낼 수량을 카운팅 함. |
|
| 1261 |
- 6. 치환 체크가 완료되면 치환시 나온 카운트 갯수만큼 이벤트 배열과 일반 배열에 분리처리 후 전송함. |
|
| 1262 |
- Param Array : evnPhoneNum, norPhoneNum |
|
| 1263 |
- function : getNorEachPrice - 메세지 타입(msgType)에 따른 단문, 장문, 그림문자 개별 단가 금액 확인 |
|
| 1264 |
- sendMsgAjax - 문자 발송 요청 Ajax 처리 |
|
| 1265 |
- */ |
|
| 1266 |
- |
|
| 1267 |
- //그림문자인 경우 |
|
| 1268 |
- if(imgCnt > 0){
|
|
| 1269 |
- |
|
| 1270 |
- //이벤트 가격으로 전송 할 받는 사람 리스트 저장처리 |
|
| 1271 |
- for(var i=0; i< evnSendCnt; i++){
|
|
| 1272 |
- evnPhoneNum[i]= phoneNum[i]; |
|
| 1273 |
- |
|
| 1274 |
- //그림문자에 치환문자가 포함된 경우 |
|
| 1275 |
- if(txtReplYn == 'Y'){
|
|
| 1276 |
- |
|
| 1277 |
- evnPhoneNum[i] = phoneNum[i]; |
|
| 1278 |
- evnName[i] = nameList[i]; |
|
| 1279 |
- evnRep1[i] = rep1List[i]; |
|
| 1280 |
- evnRep2[i] = rep2List[i]; |
|
| 1281 |
- evnRep3[i] = rep3List[i]; |
|
| 1282 |
- evnRep4[i] = rep4List[i]; |
|
| 1283 |
- |
|
| 1284 |
- } |
|
| 1285 |
- } |
|
| 1286 |
- |
|
| 1287 |
- //일반 가격으로 전송 할 받는 사람 리스트 저장처리 |
|
| 1288 |
- for(var j=0; j < phoneNum.length - evnSendCnt; j++){
|
|
| 1289 |
- norPhoneNum[j]= phoneNum[j + evnSendCnt]; |
|
| 1290 |
- |
|
| 1291 |
- //그림문자에 치환문자가 포함된 경우 |
|
| 1292 |
- if(txtReplYn == 'Y'){
|
|
| 1293 |
- |
|
| 1294 |
- norPhoneNum[j]= phoneNum[j + evnSendCnt]; |
|
| 1295 |
- norName[j] = nameList[j + evnSendCnt]; |
|
| 1296 |
- norRep1[j] = rep1List[j + evnSendCnt]; |
|
| 1297 |
- norRep2[j] = rep2List[j + evnSendCnt]; |
|
| 1298 |
- norRep3[j] = rep3List[j + evnSendCnt]; |
|
| 1299 |
- norRep4[j] = rep4List[j + evnSendCnt]; |
|
| 1300 |
- |
|
| 1301 |
- } |
|
| 1302 |
- |
|
| 1303 |
- }; |
|
| 1304 |
- |
|
| 1305 |
- }else if(txtReplYn == 'Y'){//치환 문자가 있는 경우 , 그림문자에 치환이 있는 경우 그림문자 가격으로 발송
|
|
| 1306 |
- |
|
| 1307 |
- //이벤트 가격으로 전송 할 받는 사람 리스트 저장처리 |
|
| 1308 |
- for(var i=0; i< evnPhoneNumCnt; i++){
|
|
| 1309 |
- evnPhoneNum[i] = phoneNum[i]; |
|
| 1310 |
- evnName[i] = nameList[i]; |
|
| 1311 |
- evnRep1[i] = rep1List[i]; |
|
| 1312 |
- evnRep2[i] = rep2List[i]; |
|
| 1313 |
- evnRep3[i] = rep3List[i]; |
|
| 1314 |
- evnRep4[i] = rep4List[i]; |
|
| 1315 |
- |
|
| 1316 |
- } |
|
| 1317 |
- |
|
| 1318 |
- //일반 가격으로 전송 할 받는 사람 리스트 저장처리 |
|
| 1319 |
- for(var j=0; j < phoneNum.length - evnPhoneNumCnt; j++){
|
|
| 1320 |
- norPhoneNum[j]= phoneNum[j + evnPhoneNumCnt]; |
|
| 1321 |
- norName[j] = nameList[j + evnPhoneNumCnt]; |
|
| 1322 |
- norRep1[j] = rep1List[j + evnPhoneNumCnt]; |
|
| 1323 |
- norRep2[j] = rep2List[j + evnPhoneNumCnt]; |
|
| 1324 |
- norRep3[j] = rep3List[j + evnPhoneNumCnt]; |
|
| 1325 |
- norRep4[j] = rep4List[j + evnPhoneNumCnt]; |
|
| 1326 |
- |
|
| 1327 |
- }; |
|
| 1328 |
- |
|
| 1329 |
- }else{//치환문자 없는 경우 처리
|
|
| 1330 |
- |
|
| 1331 |
- //이벤트 가격으로 전송 할 받는 사람 리스트 저장처리 |
|
| 1332 |
- for(var i=0; i< evnSendCnt; i++){
|
|
| 1333 |
- evnPhoneNum[i]= phoneNum[i]; |
|
| 1334 |
- } |
|
| 1335 |
- |
|
| 1336 |
- //일반 가격으로 전송 할 받는 사람 리스트 저장처리 |
|
| 1337 |
- for(var j=0; j < phoneNum.length - evnSendCnt; j++){
|
|
| 1338 |
- norPhoneNum[j]= phoneNum[j + evnSendCnt]; |
|
| 1339 |
- }; |
|
| 1340 |
- } |
|
| 1341 |
- |
|
| 1342 |
- var orgShortMsgCnt = $("#shortMsgCnt").val(); //단문 총 건수 백업
|
|
| 1343 |
- var orgLongMsgCnt = $("#longMsgCnt").val(); //장문 총 건수 백업
|
|
| 1344 |
- //이벤트 단가 문자 전송 처리 시작 |
|
| 1345 |
- if(evnPhoneNum.length > 0){
|
|
| 1346 |
- |
|
| 1347 |
- form.callToList.value = evnPhoneNum; //수신자번호 리스트 저장해주기 |
|
| 1348 |
- form.totPrice.value = evnEachPrice * evnSendCnt; //이벤트 단가 총 결제금액 셋팅해주기 |
|
| 1349 |
- form.eventStatus.value = 'Y'; |
|
| 1350 |
- form.eventYn.value = 'Y'; |
|
| 1351 |
- |
|
| 1352 |
- var evnTotPrice = parseFloat(form.totPrice.value); |
|
| 1353 |
- |
|
| 1354 |
- if(myPrice < evnTotPrice){
|
|
| 1355 |
- |
|
| 1356 |
- alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
|
|
| 1357 |
- return false; |
|
| 1358 |
- |
|
| 1359 |
- }else{
|
|
| 1360 |
- |
|
| 1361 |
- myPrice = myPrice - evnTotPrice; |
|
| 1362 |
- |
|
| 1363 |
- } |
|
| 1364 |
- |
|
| 1365 |
- //치환문자가 있는 경우 변수 정보 담아주기(그림문자 아닌경우) |
|
| 1366 |
- if(txtReplYn == 'Y' && imgCnt < 1){
|
|
| 1367 |
- |
|
| 1368 |
- var evnShortMsgCnt = $("#evnShortMsgCnt").val();
|
|
| 1369 |
- var evnLongMsgCnt = $("#evnLongMsgCnt").val();
|
|
| 1370 |
- |
|
| 1371 |
- form.shortMsgCnt.value = evnShortMsgCnt; |
|
| 1372 |
- form.longMsgCnt.value = evnLongMsgCnt; |
|
| 1373 |
- form.nameList.value = evnName; |
|
| 1374 |
- form.rep1List.value = evnRep1; |
|
| 1375 |
- form.rep2List.value = evnRep2; |
|
| 1376 |
- form.rep3List.value = evnRep3; |
|
| 1377 |
- form.rep4List.value = evnRep4; |
|
| 1378 |
- |
|
| 1379 |
- }else if(txtReplYn == 'Y' && imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
|
|
| 1380 |
- |
|
| 1381 |
- form.nameList.value = evnName; |
|
| 1382 |
- form.rep1List.value = evnRep1; |
|
| 1383 |
- form.rep2List.value = evnRep2; |
|
| 1384 |
- form.rep3List.value = evnRep3; |
|
| 1385 |
- form.rep4List.value = evnRep4; |
|
| 1386 |
- |
|
| 1387 |
- } |
|
| 1388 |
- |
|
| 1389 |
- //이벤트 발송 실행 해주기 |
|
| 1390 |
- var form = document.msgForm; |
|
| 1391 |
- |
|
| 1392 |
- var data = new FormData(form); |
|
| 1393 |
- url = "/web/mjon/msgcampain/sendMsgDataAjax.do"; |
|
| 1394 |
- |
|
| 1395 |
- $.ajax({
|
|
| 1396 |
- type: "POST", |
|
| 1397 |
- url: url, |
|
| 1398 |
- data: data, |
|
| 1399 |
- dataType:'json', |
|
| 1400 |
- async: true, |
|
| 1401 |
- processData: false, |
|
| 1402 |
- contentType: false, |
|
| 1403 |
- cache: false, |
|
| 1404 |
- success: function (returnData, status) {
|
|
| 1405 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 1406 |
- if("fail" == returnData.result){
|
|
| 1407 |
- |
|
| 1408 |
- alert(returnData.message); |
|
| 1409 |
- return false; |
|
| 1410 |
- |
|
| 1411 |
- }else if("loginFail" == returnData.result){
|
|
| 1412 |
- |
|
| 1413 |
- alert(returnData.message); |
|
| 1414 |
- return false; |
|
| 1415 |
- |
|
| 1416 |
- }else if("smsLengFail" == returnData.result){
|
|
| 1417 |
- |
|
| 1418 |
- alert(returnData.message); |
|
| 1419 |
- return false; |
|
| 1420 |
- |
|
| 1421 |
- }else if("imgSourceFail" == returnData.result){
|
|
| 1422 |
- |
|
| 1423 |
- $('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
| 1424 |
- $('.pop_msg_fails .msg_text').html(returnData.message);
|
|
| 1425 |
- $('.mask').addClass('on');
|
|
| 1426 |
- |
|
| 1427 |
- }else if("spamKeyWordFail" == returnData.result){//스팸 및 스미싱 단어가 들어간 문자 발송시 회원 이용정지 처리
|
|
| 1428 |
- |
|
| 1429 |
- $('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
| 1430 |
- $('.pop_msg_spam .msg_text').html(returnData.message);
|
|
| 1431 |
- $('.mask').addClass('on');
|
|
| 1432 |
- |
|
| 1433 |
- }else if("statusFail" == returnData.result){
|
|
| 1434 |
- |
|
| 1435 |
- alert(returnData.message); |
|
| 1436 |
- //문자발송 URL Move |
|
| 1437 |
- goMsgUrlMove(); |
|
| 1438 |
- return false; |
|
| 1439 |
- |
|
| 1440 |
- }else{
|
|
| 1441 |
- |
|
| 1442 |
- var smsCnt = returnData.resultSts; |
|
| 1443 |
- var blockCnt = returnData.resultBlockSts; |
|
| 1444 |
- |
|
| 1445 |
- //이벤트 발송 처리가 완료 되면 나머지 일반 캐시로 발송할 문자 처리를 진행해 준다. |
|
| 1446 |
- var norPhoneNumCnt = norPhoneNum.length; |
|
| 1447 |
- if(norPhoneNumCnt > 0){
|
|
| 1448 |
- |
|
| 1449 |
- var norEachPrice = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기 |
|
| 1450 |
- |
|
| 1451 |
- form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기 |
|
| 1452 |
- form.eachPrice.value = norEachPrice; //일반 개별 단가 금액 셋팅해주기 |
|
| 1453 |
- form.totPrice.value = norEachPrice * norPhoneNumCnt; //일반 단가 총 결제 금액 셋팅해주기 |
|
| 1454 |
- form.sPrice.value = $("#norsPrice").val();
|
|
| 1455 |
- form.mPrice.value = $("#normPrice").val();
|
|
| 1456 |
- form.pPrice.value = $("#norpPrice").val();
|
|
| 1457 |
- form.p2Price.value = $("#norp2Price").val();
|
|
| 1458 |
- form.p3Price.value = $("#norp3Price").val();
|
|
| 1459 |
- form.eventStatus.value = 'N'; |
|
| 1460 |
- form.eventYn.value = 'N'; |
|
| 1461 |
- |
|
| 1462 |
- var norTotPrice = parseFloat(form.totPrice.value); |
|
| 1463 |
- |
|
| 1464 |
- if(myPrice < norTotPrice){
|
|
| 1465 |
- |
|
| 1466 |
- var failMsg = "이벤트 캐시 잔액으로 발송한 문자("+smsCnt+"건)의 발송이 완료되었으나 일반 문자 발송("+norPhoneNumCnt+"건)에 필요한 회원님의 보유 잔액이 부족 합니다.";
|
|
| 1467 |
- |
|
| 1468 |
- $('.loading_layer').removeClass('active');
|
|
| 1469 |
- |
|
| 1470 |
- $('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
| 1471 |
- $('.pop_msg_fails .msg_text').html(failMsg);
|
|
| 1472 |
- $('.mask').addClass('on');
|
|
| 1473 |
- |
|
| 1474 |
- return false; |
|
| 1475 |
- |
|
| 1476 |
- } |
|
| 1477 |
- |
|
| 1478 |
- //치환문자가 있는 경우 변수 정보 담아주기(그림문자가 아닌경우) |
|
| 1479 |
- if(txtReplYn == 'Y' && imgCnt < 1){
|
|
| 1480 |
- |
|
| 1481 |
- //치환문자 단/장문 혼용된 경우 각 타입별 건수를 재 계산해준다. |
|
| 1482 |
- //총 단/장문 각각 건수에서 이벤트로 발송한 건수를 빼준다. |
|
| 1483 |
- var evnShortMsgCnt = $("#evnShortMsgCnt").val();
|
|
| 1484 |
- var evnLongMsgCnt = $("#evnLongMsgCnt").val();
|
|
| 1485 |
- |
|
| 1486 |
- var shortMsgCnt = Number(orgShortMsgCnt) - Number(evnShortMsgCnt); |
|
| 1487 |
- var longMsgCnt = Number(orgLongMsgCnt) - Number(evnLongMsgCnt); |
|
| 1488 |
- |
|
| 1489 |
- |
|
| 1490 |
- //계산 값이 음수로 나오는 경우 0건으로 간주한다. |
|
| 1491 |
- if(shortMsgCnt <= 0){
|
|
| 1492 |
- |
|
| 1493 |
- shortMsgCnt = 0; |
|
| 1494 |
- |
|
| 1495 |
- } |
|
| 1496 |
- |
|
| 1497 |
- if(longMsgCnt <= 0){
|
|
| 1498 |
- |
|
| 1499 |
- longMsgCnt = 0; |
|
| 1500 |
- |
|
| 1501 |
- } |
|
| 1502 |
- |
|
| 1503 |
- form.shortMsgCnt.value = shortMsgCnt; |
|
| 1504 |
- form.longMsgCnt.value = longMsgCnt; |
|
| 1505 |
- |
|
| 1506 |
- form.nameList.value = norName; |
|
| 1507 |
- form.rep1List.value = norRep1; |
|
| 1508 |
- form.rep2List.value = norRep2; |
|
| 1509 |
- form.rep3List.value = norRep3; |
|
| 1510 |
- form.rep4List.value = norRep4; |
|
| 1511 |
- |
|
| 1512 |
- }else if(txtReplYn == 'Y' && imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
|
|
| 1513 |
- |
|
| 1514 |
- form.nameList.value = norName; |
|
| 1515 |
- form.rep1List.value = norRep1; |
|
| 1516 |
- form.rep2List.value = norRep2; |
|
| 1517 |
- form.rep3List.value = norRep3; |
|
| 1518 |
- form.rep4List.value = norRep4; |
|
| 1519 |
- |
|
| 1520 |
- } |
|
| 1521 |
- |
|
| 1522 |
- |
|
| 1523 |
- sendMsgAjax(smsCnt, blockCnt); |
|
| 1524 |
- } |
|
| 1525 |
- |
|
| 1526 |
- } |
|
| 1527 |
- |
|
| 1528 |
- } else if(status== 'fail'){
|
|
| 1529 |
- alert(returnData.message); |
|
| 1530 |
- } |
|
| 1531 |
- }, |
|
| 1532 |
- beforeSend : function(xmlHttpRequest) {
|
|
| 1533 |
- //로딩창 show |
|
| 1534 |
- $('.loading_layer').addClass('active');
|
|
| 1535 |
- }, |
|
| 1536 |
- complete : function(xhr, textStatus) {
|
|
| 1537 |
- //로딩창 hide |
|
| 1538 |
- //$('.loading_layer').removeClass('active');
|
|
| 1539 |
- }, |
|
| 1540 |
- error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 1541 |
- }); |
|
| 1542 |
- |
|
| 1543 |
- }else{
|
|
| 1544 |
- |
|
| 1545 |
- //이벤트 건수로 발송 할 수 없는 경우 일반 캐시 단가로 발송처리하기 |
|
| 1546 |
- if(norPhoneNum.length > 0){
|
|
| 1547 |
- |
|
| 1548 |
- form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기 |
|
| 1549 |
- form.eachPrice.value = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기 |
|
| 1550 |
- form.sPrice.value = $("#norsPrice").val();
|
|
| 1551 |
- form.mPrice.value = $("#normPrice").val();
|
|
| 1552 |
- form.pPrice.value = $("#norpPrice").val();
|
|
| 1553 |
- form.p2Price.value = $("#norp2Price").val();
|
|
| 1554 |
- form.p3Price.value = $("#norp3Price").val();
|
|
| 1555 |
- form.eventStatus.value = 'N'; |
|
| 1556 |
- form.eventYn.value = 'N'; |
|
| 1557 |
- |
|
| 1558 |
- sendMsgAjax(0,0); |
|
| 1559 |
- |
|
| 1560 |
- }else{
|
|
| 1561 |
- |
|
| 1562 |
- alert("문자 전송 중 오류가 발생하였습니다.!!");
|
|
| 1563 |
- return false; |
|
| 1564 |
- |
|
| 1565 |
- } |
|
| 1566 |
- |
|
| 1567 |
- } |
|
| 1568 |
- |
|
| 1569 |
- return false; |
|
| 1570 |
- }else{
|
|
| 1571 |
- |
|
| 1572 |
- return false; |
|
| 1573 |
- |
|
| 1574 |
- } |
|
| 1575 |
- |
|
| 1576 |
- }else{
|
|
| 1577 |
- |
|
| 1578 |
- //발송 Ajax 호출해주기 |
|
| 1579 |
- sendMsgAjax(0,0); |
|
| 1580 |
- |
|
| 1581 |
- } |
|
| 1582 |
- |
|
| 1583 |
- }else{
|
|
| 1584 |
- |
|
| 1585 |
- //발송 Ajax 호출해주기 |
|
| 1586 |
- sendMsgAjax(0,0); |
|
| 1587 |
- |
|
| 1588 |
- } |
|
| 1199 |
+ //발송 Ajax 호출해주기 |
|
| 1200 |
+ sendMsgAjax(0,0); |
|
| 1589 | 1201 |
|
| 1590 | 1202 |
} |
| 1591 | 1203 |
|
... | ... | @@ -1640,7 +1252,7 @@ |
| 1640 | 1252 |
var reserYn = $("#reserveYn").val();
|
| 1641 | 1253 |
|
| 1642 | 1254 |
var data = new FormData(form); |
| 1643 |
- url = "/web/mjon/msgcampain/sendMsgDataAjax.do"; |
|
| 1255 |
+ url = "/web/mjon/msgcampain/huge/sendMsgHGDataAjax.do"; |
|
| 1644 | 1256 |
|
| 1645 | 1257 |
$.ajax({
|
| 1646 | 1258 |
type: "POST", |
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/tw/MsgTWDataSMLView.jsp
... | ... | @@ -4494,8 +4494,8 @@ |
| 4494 | 4494 |
<div class="text_preview"> |
| 4495 | 4495 |
<div class="preiew_img preViewShort"></div> |
| 4496 | 4496 |
<div class="preview_auto"> |
| 4497 |
- <p class="none_txt">내용을 입력해주세요.222222</p> |
|
| 4498 |
- <pre class="realtime">adfasfdasdf</pre> |
|
| 4497 |
+ <p class="none_txt">내용을 입력해주세요.</p> |
|
| 4498 |
+ <pre class="realtime"></pre> |
|
| 4499 | 4499 |
</div> |
| 4500 | 4500 |
</div> |
| 4501 | 4501 |
<!-- //텍스트 미리보기 --> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?