선거문자 대용량 발송 개발 3차 커밋
@5ddb2353c3fa3714f029d902e8cab358733049f1
--- src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
+++ src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
... | ... | @@ -309,4 +309,38 @@ |
| 309 | 309 |
|
| 310 | 310 |
} |
| 311 | 311 |
|
| 312 |
+ |
|
| 313 |
+ public String getCreateMsgUserIdgen(String subUserId, String lastId) throws Exception{
|
|
| 314 |
+ |
|
| 315 |
+ String returnId = ""; |
|
| 316 |
+ String[] splitId = lastId.split("_");
|
|
| 317 |
+ |
|
| 318 |
+ if(splitId.length > 0) {
|
|
| 319 |
+ |
|
| 320 |
+ int lastNum = Integer.parseInt(splitId[1]); |
|
| 321 |
+ |
|
| 322 |
+ lastNum = lastNum + 1; |
|
| 323 |
+ |
|
| 324 |
+ String tmpLastNum = Integer.toString(lastNum); |
|
| 325 |
+ |
|
| 326 |
+ int zeroPlusCnt = 14 - tmpLastNum.length(); |
|
| 327 |
+ |
|
| 328 |
+ StringBuilder sb = new StringBuilder(); |
|
| 329 |
+ sb.append(subUserId + "_"); |
|
| 330 |
+ |
|
| 331 |
+ for(int i=0; i< zeroPlusCnt; i++) {
|
|
| 332 |
+ |
|
| 333 |
+ sb.append('0');
|
|
| 334 |
+ |
|
| 335 |
+ } |
|
| 336 |
+ |
|
| 337 |
+ sb.append(tmpLastNum); |
|
| 338 |
+ |
|
| 339 |
+ returnId = sb.toString(); |
|
| 340 |
+ |
|
| 341 |
+ } |
|
| 342 |
+ |
|
| 343 |
+ return returnId; |
|
| 344 |
+ } |
|
| 345 |
+ |
|
| 312 | 346 |
} |
--- src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
+++ src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
... | ... | @@ -302,7 +302,28 @@ |
| 302 | 302 |
|
| 303 | 303 |
try {
|
| 304 | 304 |
|
| 305 |
- resultList = mjonCandidateDAO.selectAddrGrpHGList(mjonMsgVO); |
|
| 305 |
+ for(String addrId : mjonMsgVO.getCallToList()) {
|
|
| 306 |
+ |
|
| 307 |
+ MjonMsgVO tmpMsgVO = new MjonMsgVO(); |
|
| 308 |
+ tmpMsgVO.setUserId(mjonMsgVO.getUserId()); |
|
| 309 |
+ tmpMsgVO.setAddrGrpId(addrId); |
|
| 310 |
+ |
|
| 311 |
+ List<String> tmpAddrList = new ArrayList<String>(); |
|
| 312 |
+ System.out.println("++++++++++++++ addrId ::: "+addrId);
|
|
| 313 |
+ |
|
| 314 |
+ if(addrId.equals("group1") || addrId.equals("bookmark")) {
|
|
| 315 |
+ |
|
| 316 |
+ tmpMsgVO.setAddrGrpNm(addrId); |
|
| 317 |
+ |
|
| 318 |
+ } |
|
| 319 |
+ |
|
| 320 |
+ tmpAddrList = mjonCandidateDAO.selectAddrGrpHGList(tmpMsgVO); |
|
| 321 |
+ |
|
| 322 |
+ resultList.addAll(tmpAddrList); |
|
| 323 |
+ |
|
| 324 |
+ } |
|
| 325 |
+ |
|
| 326 |
+ //resultList = mjonCandidateDAO.selectAddrGrpHGList(mjonMsgVO); |
|
| 306 | 327 |
|
| 307 | 328 |
} catch (Exception e) {
|
| 308 | 329 |
System.out.println("selectAddrGrpHGList Service Imple Error!!! " + e);
|
--- src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java
+++ src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java
... | ... | @@ -604,6 +604,31 @@ |
| 604 | 604 |
mjonMsgVO.setDivideTime("1");
|
| 605 | 605 |
mjonMsgVO.setDivideCnt("20");
|
| 606 | 606 |
|
| 607 |
+ //대용량 발송자의 msg_id 마지막 값 불러오기 |
|
| 608 |
+ /*String subUserId = mjonMsgVO.getUserId().substring(0, 5).toUpperCase(); |
|
| 609 |
+ mjonMsgVO.setSearchKeyword(subUserId); |
|
| 610 |
+ System.out.println("+++++++++++ subUserId ::: "+subUserId);
|
|
| 611 |
+ |
|
| 612 |
+ String userLastIdgen = mjonMsgDataService.selectMsgUserLastIdgen(mjonMsgVO); |
|
| 613 |
+ System.out.println(userLastIdgen); |
|
| 614 |
+ |
|
| 615 |
+ if(userLastIdgen == null) {
|
|
| 616 |
+ |
|
| 617 |
+ userLastIdgen = subUserId + "_00000000000000"; |
|
| 618 |
+ |
|
| 619 |
+ } |
|
| 620 |
+ |
|
| 621 |
+ MjonCommon mjComm = new MjonCommon(); |
|
| 622 |
+ String startUserId = userLastIdgen; |
|
| 623 |
+ |
|
| 624 |
+ System.out.println("+_+++++ startUserId ::: "+startUserId);
|
|
| 625 |
+ |
|
| 626 |
+ //문자발송 리스트 생성 시작 |
|
| 627 |
+ for(int i = 0; i < 100; i++) {
|
|
| 628 |
+ startUserId = mjComm.getCreateMsgUserIdgen(subUserId, startUserId); |
|
| 629 |
+ System.out.println("++++++++++++ startUserId ::: "+startUserId);
|
|
| 630 |
+ }*/ |
|
| 631 |
+ |
|
| 607 | 632 |
/*++++++스미싱 의심 및 문자 길이 초과 여부 체크++++++++++++++++ */ |
| 608 | 633 |
//회원정보에서 스미싱 회원 여부 정보 조회 |
| 609 | 634 |
UserManageVO userManageVO = new UserManageVO(); |
... | ... | @@ -871,13 +896,19 @@ |
| 871 | 896 |
//제거 중복 건수 계산 |
| 872 | 897 |
addrDupListLen = resultAddrList.size(); |
| 873 | 898 |
|
| 899 |
+ System.out.println("++++++++++++++ 중복제거 후 리스트 갯수 ::: "+addrDupListLen);
|
|
| 900 |
+ |
|
| 874 | 901 |
//수신자 총 수 * 단가 를 통해 총 결제 금액 계산 |
| 875 | 902 |
int tmpTotCallCnt = addrDupListLen; //mjonMsgVO.getCallToList().length; |
| 876 | 903 |
float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; |
| 877 | 904 |
|
| 905 |
+ //중복 제거한 주소록 총 건수 와 개별 단가를 이용하여 총 발송 금액 계산하기 |
|
| 906 |
+ mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); |
|
| 907 |
+ mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); |
|
| 908 |
+ |
|
| 878 | 909 |
|
| 879 | 910 |
//화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 |
| 880 |
- if(tmpOrgEachPrice != tmpEachPrice) {
|
|
| 911 |
+ /*if(tmpOrgEachPrice != tmpEachPrice) {
|
|
| 881 | 912 |
mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); |
| 882 | 913 |
|
| 883 | 914 |
System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice);
|
... | ... | @@ -893,7 +924,7 @@ |
| 893 | 924 |
System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice);
|
| 894 | 925 |
}else {
|
| 895 | 926 |
System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice);
|
| 896 |
- } |
|
| 927 |
+ }*/ |
|
| 897 | 928 |
|
| 898 | 929 |
/* |
| 899 | 930 |
* 개별단가 및 총결제 캐시 금액 체크 로직 종료 |
... | ... | @@ -977,7 +1008,7 @@ |
| 977 | 1008 |
System.out.println("arrPhoneList len ::: "+arrPhoneList.length);
|
| 978 | 1009 |
mjonMsgVO.setCallToList(arrPhoneList); |
| 979 | 1010 |
|
| 980 |
- MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); |
|
| 1011 |
+ MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfoBatch(mjonMsgVO); |
|
| 981 | 1012 |
mjonMsgVO.setAgentCode(returnVO.getAgentCode()); |
| 982 | 1013 |
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); |
| 983 | 1014 |
resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); |
... | ... | @@ -1007,7 +1038,7 @@ |
| 1007 | 1038 |
|
| 1008 | 1039 |
mjonMsgVO.setCallToList(arrLastPhoneList); |
| 1009 | 1040 |
|
| 1010 |
- MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); |
|
| 1041 |
+ MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfoBatch(mjonMsgVO); |
|
| 1011 | 1042 |
mjonMsgVO.setAgentCode(returnVO.getAgentCode()); |
| 1012 | 1043 |
resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); |
| 1013 | 1044 |
resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); |
--- src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
+++ src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
... | ... | @@ -17,6 +17,9 @@ |
| 17 | 17 |
// 중계사 문자 내용 입력 |
| 18 | 18 |
public MjonMsgReturnVO insertMsgDataInfo(MjonMsgVO mjonMsgVO) throws Exception; |
| 19 | 19 |
|
| 20 |
+ //대량 문자 데이터 배치 입력 처리 |
|
| 21 |
+ public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception; |
|
| 22 |
+ |
|
| 20 | 23 |
// 중계사 문자 내용 입력(성능테스트용) |
| 21 | 24 |
public MjonMsgReturnVO insertMsgTestDataInfo(MjonMsgVO mjonMsgVO |
| 22 | 25 |
, int i_nRate |
... | ... | @@ -167,4 +170,7 @@ |
| 167 | 170 |
// 문자 상세정보 => 재전송용 |
| 168 | 171 |
public List<MjonMsgDataVO> selectMjMsgListByResend(MjonMsgDataVO mjonMsgDataVO) throws Exception; |
| 169 | 172 |
|
| 173 |
+ //대용량 문자 전송시 사용자 마지막 PK 값 조회하기 |
|
| 174 |
+ public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception; |
|
| 175 |
+ |
|
| 170 | 176 |
} |
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
... | ... | @@ -346,4 +346,9 @@ |
| 346 | 346 |
return (List<MjonMsgDataVO>) list("MjonMsgDataDAO.selectMjMsgListByResend", mjonMsgDataVO);
|
| 347 | 347 |
} |
| 348 | 348 |
|
| 349 |
+ |
|
| 350 |
+ public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{
|
|
| 351 |
+ return (String) select("mjonMsgDAO.selectMsgUserLastIdgen", mjonMsgVO);
|
|
| 352 |
+ } |
|
| 353 |
+ |
|
| 349 | 354 |
} |
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
... | ... | @@ -19,6 +19,7 @@ |
| 19 | 19 |
import itn.let.mjo.addr.service.AddrVO; |
| 20 | 20 |
import itn.let.mjo.event.service.MjonEventService; |
| 21 | 21 |
import itn.let.mjo.event.service.MjonEventVO; |
| 22 |
+import itn.let.mjo.mjocommon.MjonCommon; |
|
| 22 | 23 |
import itn.let.mjo.msg.service.MjonMsgVO; |
| 23 | 24 |
import itn.let.mjo.msg.service.impl.MjonMsgDAO; |
| 24 | 25 |
import itn.let.mjo.msgagent.service.MjonMsgAgentStsService; |
... | ... | @@ -2300,4 +2301,750 @@ |
| 2300 | 2301 |
return mjonMsgDataDAO.selectMjMsgListByResend(mjonMsgDataVO); |
| 2301 | 2302 |
} |
| 2302 | 2303 |
|
| 2304 |
+ |
|
| 2305 |
+ |
|
| 2306 |
+/* |
|
| 2307 |
+ * 대량 문자 데이터 배치 입력 처리 신규 추가 |
|
| 2308 |
+ * 2024/02/02 우영두 |
|
| 2309 |
+ * |
|
| 2310 |
+ * |
|
| 2311 |
+ * */ |
|
| 2312 |
+ public MjonMsgReturnVO insertMsgDataInfoBatch(MjonMsgVO mjonMsgVO) throws Exception{
|
|
| 2313 |
+ |
|
| 2314 |
+ MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); |
|
| 2315 |
+ |
|
| 2316 |
+ try {
|
|
| 2317 |
+ |
|
| 2318 |
+ String msgType = mjonMsgVO.getMsgType(); |
|
| 2319 |
+ String agentCode = mjonMsgVO.getAgentCode(); |
|
| 2320 |
+ // 장문 전송 |
|
| 2321 |
+ String contSeq = ""; |
|
| 2322 |
+ |
|
| 2323 |
+ //float myPrice = 10000; |
|
| 2324 |
+ //float totPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); |
|
| 2325 |
+ // 최종 입력 수 저장 변수 |
|
| 2326 |
+ int resultCnt = 0; |
|
| 2327 |
+ int limitCnt = 10000; |
|
| 2328 |
+ int blockCnt = 0; |
|
| 2329 |
+ |
|
| 2330 |
+ // 총 보유 금액과 전송 합계 비교 |
|
| 2331 |
+ |
|
| 2332 |
+ /*if(myPrice < totPrice) { // 보유 금액보다 전송 합계가 적은 경우 리턴
|
|
| 2333 |
+ |
|
| 2334 |
+ return 0 ; |
|
| 2335 |
+ }*/ |
|
| 2336 |
+ |
|
| 2337 |
+ int callToCnt = mjonMsgVO.getCallToList().length; //전체 받는사람 건수 |
|
| 2338 |
+ |
|
| 2339 |
+ mjonMsgVO.setMsgGroupCnt(Integer.toString(callToCnt)); |
|
| 2340 |
+ |
|
| 2341 |
+ |
|
| 2342 |
+ //그룹 테이블에 입력할 발송 시간 및 예약 발송 시간 처리 |
|
| 2343 |
+ /*if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력
|
|
| 2344 |
+ |
|
| 2345 |
+ Date now = new Date(); |
|
| 2346 |
+ |
|
| 2347 |
+ SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 2348 |
+ |
|
| 2349 |
+ mjonMsgVO.setReqDate(sdFormat.format(now)); |
|
| 2350 |
+ |
|
| 2351 |
+ }*/ |
|
| 2352 |
+ |
|
| 2353 |
+ //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) |
|
| 2354 |
+ String befCash = mjonMsgVO.getBefCash(); |
|
| 2355 |
+ |
|
| 2356 |
+ //VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴 |
|
| 2357 |
+ if("".equals(befCash) || befCash == null) {
|
|
| 2358 |
+ befCash = mjonMsgDataDAO.selectBeforeCashData(mjonMsgVO); |
|
| 2359 |
+ } |
|
| 2360 |
+ |
|
| 2361 |
+ mjonMsgVO.setBefCash(befCash); |
|
| 2362 |
+ // 문자 전송 그룹 테이블에 정보 입력 |
|
| 2363 |
+ //mjonMsgDAO.insertGroupMsgData(mjonMsgVO); |
|
| 2364 |
+ |
|
| 2365 |
+ //수신거부 목록 불러오기 |
|
| 2366 |
+ List<String> userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO); |
|
| 2367 |
+ |
|
| 2368 |
+ List<String> dupliBlockList = MJUtil.getDuplicateList(userBlockList); |
|
| 2369 |
+ int usrBlockCnt = dupliBlockList.size(); |
|
| 2370 |
+ |
|
| 2371 |
+ //회원 전용 전송사 정보 불러오기 |
|
| 2372 |
+ MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); |
|
| 2373 |
+ String hotlineAgentCode = userInfo.getHotlineAgentCode(); |
|
| 2374 |
+ |
|
| 2375 |
+ //전용 전송사가 지정되어 있으면 실행 |
|
| 2376 |
+ if(!hotlineAgentCode.equals("00")) {
|
|
| 2377 |
+ |
|
| 2378 |
+ MjonMsgAgentStsVO mjonMsgAgentStsVO = new MjonMsgAgentStsVO(); |
|
| 2379 |
+ mjonMsgAgentStsVO.setAgentCode(hotlineAgentCode); |
|
| 2380 |
+ |
|
| 2381 |
+ //문자 타입 셋팅 |
|
| 2382 |
+ if(msgType.equals("6")) {
|
|
| 2383 |
+ int fCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); |
|
| 2384 |
+ if(fCnt > 0) {
|
|
| 2385 |
+ |
|
| 2386 |
+ mjonMsgAgentStsVO.setMsgType("P");
|
|
| 2387 |
+ |
|
| 2388 |
+ }else {
|
|
| 2389 |
+ mjonMsgAgentStsVO.setMsgType("L");
|
|
| 2390 |
+ } |
|
| 2391 |
+ |
|
| 2392 |
+ }else {
|
|
| 2393 |
+ mjonMsgAgentStsVO.setMsgType("S");
|
|
| 2394 |
+ } |
|
| 2395 |
+ |
|
| 2396 |
+ List<MjonMsgAgentStsVO> hotlineMsgAgentList = mjonMsgAgentStsDAO.selectMsgAgentListByAgentCode(mjonMsgAgentStsVO); |
|
| 2397 |
+ |
|
| 2398 |
+ String mberAgentConde = ""; |
|
| 2399 |
+ String mberSendRate = ""; |
|
| 2400 |
+ String mberRepAgent = ""; |
|
| 2401 |
+ |
|
| 2402 |
+ for(MjonMsgAgentStsVO tmp : hotlineMsgAgentList) {
|
|
| 2403 |
+ |
|
| 2404 |
+ mberAgentConde = tmp.getAgentCode(); |
|
| 2405 |
+ mberSendRate = tmp.getSendRate(); |
|
| 2406 |
+ mberRepAgent = tmp.getRepAgent(); |
|
| 2407 |
+ String useYn = tmp.getUseYn(); |
|
| 2408 |
+ |
|
| 2409 |
+ if(userInfo.getBlineCode().equals("N")) {
|
|
| 2410 |
+ //회원 전용 전송사의 전송 비율이 0 이면 대표전송사로 전송되도록 셋팅함. |
|
| 2411 |
+ if(mberSendRate.equals("0") || useYn.equals("N")) {
|
|
| 2412 |
+ |
|
| 2413 |
+ hotlineAgentCode = mberRepAgent; |
|
| 2414 |
+ |
|
| 2415 |
+ } |
|
| 2416 |
+ } |
|
| 2417 |
+ |
|
| 2418 |
+ } |
|
| 2419 |
+ |
|
| 2420 |
+ } |
|
| 2421 |
+ |
|
| 2422 |
+ |
|
| 2423 |
+ /** |
|
| 2424 |
+ * Agent 추가시 셋팅하기 |
|
| 2425 |
+ * Agent 발송 비율 불러오기 |
|
| 2426 |
+ * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) |
|
| 2427 |
+ * 22.10.12 : 비즈뿌리오(04) 추가 |
|
| 2428 |
+ * 23.04.10 : 제이제이(05) 추가 |
|
| 2429 |
+ * 23.05.02 : 인비토 (07) 추가 |
|
| 2430 |
+ * */ |
|
| 2431 |
+ |
|
| 2432 |
+ int iheartCnt = 0; //아이하트 전송갯수 |
|
| 2433 |
+ int hncCnt = 0; //현대퓨처넷 전송갯수 |
|
| 2434 |
+ int imoCnt = 0; //아이엠오 전송갯수 |
|
| 2435 |
+ int bizCnt = 0; //비즈뿌리오 전송갯수 |
|
| 2436 |
+ int jjCnt = 0; //제이제이 전송갯수 |
|
| 2437 |
+ int ivtCnt = 0; //인비토 전송갯수 |
|
| 2438 |
+ |
|
| 2439 |
+ // 전송사별 발송 리스트 조회 |
|
| 2440 |
+ List<MjonMsgVO> sendRateList = mjonMsgDataDAO.selectSendAgentList(mjonMsgVO); |
|
| 2441 |
+ |
|
| 2442 |
+ if(callToCnt >= 10) {
|
|
| 2443 |
+ // 전송사별 배분률 조회 |
|
| 2444 |
+ int sendRateSize = sendRateList.size(); |
|
| 2445 |
+ |
|
| 2446 |
+ /** |
|
| 2447 |
+ * Agent 추가시 셋팅하기 |
|
| 2448 |
+ * |
|
| 2449 |
+ * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) |
|
| 2450 |
+ * 22.10.12 : 비즈뿌리오(04) 추가 |
|
| 2451 |
+ * 23.04.10 : 제이제이(05) 추가 |
|
| 2452 |
+ * 23.05.02 : 인비토 (07) 추가 |
|
| 2453 |
+ * */ |
|
| 2454 |
+ |
|
| 2455 |
+ for(int i=0; i< sendRateSize; i++) {
|
|
| 2456 |
+ |
|
| 2457 |
+ String sndAgentCode = sendRateList.get(i).getAgentCode(); |
|
| 2458 |
+ |
|
| 2459 |
+ if(sndAgentCode.equals("01")) {//아이하트 전송비율
|
|
| 2460 |
+ |
|
| 2461 |
+ iheartCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); |
|
| 2462 |
+ |
|
| 2463 |
+ }else if(sndAgentCode.equals("02")) {//현대퓨처넷 전송비율
|
|
| 2464 |
+ |
|
| 2465 |
+ hncCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); |
|
| 2466 |
+ |
|
| 2467 |
+ }else if(sndAgentCode.equals("03")) {//아이엠오 전송비율
|
|
| 2468 |
+ |
|
| 2469 |
+ imoCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); |
|
| 2470 |
+ |
|
| 2471 |
+ }else if(sndAgentCode.equals("04")) {//비즈뿌리오 전송비율
|
|
| 2472 |
+ |
|
| 2473 |
+ bizCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); |
|
| 2474 |
+ |
|
| 2475 |
+ }else if(sndAgentCode.equals("05")) {//제이제이 전송비율
|
|
| 2476 |
+ |
|
| 2477 |
+ jjCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); |
|
| 2478 |
+ |
|
| 2479 |
+ }else if(sndAgentCode.equals("07")) {//인비토 전송비율
|
|
| 2480 |
+ |
|
| 2481 |
+ ivtCnt = Math.round(callToCnt * Float.parseFloat(sendRateList.get(i).getSendRate())); |
|
| 2482 |
+ |
|
| 2483 |
+ } |
|
| 2484 |
+ |
|
| 2485 |
+ } |
|
| 2486 |
+ } |
|
| 2487 |
+ |
|
| 2488 |
+ /** |
|
| 2489 |
+ * 한번에 서버가 보낼수 있는 문자건수를 체크 해서 넘으면 분할해서 디비 입렵해 준다. |
|
| 2490 |
+ * 발송 건수가 천 건이 넘어가면, 백건씩 끊어서 발송 하도록 한다. |
|
| 2491 |
+ * */ |
|
| 2492 |
+ |
|
| 2493 |
+ /*if(callToCnt >= 10000) {
|
|
| 2494 |
+ |
|
| 2495 |
+ limitCnt = 1000; |
|
| 2496 |
+ |
|
| 2497 |
+ }*/ |
|
| 2498 |
+ |
|
| 2499 |
+ //수신자 리스트 처리 |
|
| 2500 |
+ List<MjonMsgVO> msgDataInfo = new ArrayList<MjonMsgVO>(); |
|
| 2501 |
+ |
|
| 2502 |
+ int cnt = 1; |
|
| 2503 |
+ int totCnt = 1; |
|
| 2504 |
+ |
|
| 2505 |
+ //분할문자 시간에 간격시간 더해주기 |
|
| 2506 |
+ String dividDay = null; |
|
| 2507 |
+ Calendar cal = Calendar.getInstance(); |
|
| 2508 |
+ |
|
| 2509 |
+ //예약시간 변환 |
|
| 2510 |
+ SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 2511 |
+ |
|
| 2512 |
+ int turmMin = 0; |
|
| 2513 |
+ int totalCallCnt = 0; |
|
| 2514 |
+ int divideCnt = 0; |
|
| 2515 |
+ int count = 1; //분할 카운트 |
|
| 2516 |
+ String delayTime ="";//30분 지연시간 |
|
| 2517 |
+ String spamStatus = mjonMsgVO.getSpamStatus();//스팸 문구 유무 |
|
| 2518 |
+ String smishingYn = mjonMsgVO.getSmishingYn();//스미싱 의심 유무 |
|
| 2519 |
+ String delayYn = "N"; //문자발송 30분 지연 처리 유무 |
|
| 2520 |
+ |
|
| 2521 |
+ if(spamStatus == null || spamStatus.equals("")) {
|
|
| 2522 |
+ |
|
| 2523 |
+ spamStatus = "N"; |
|
| 2524 |
+ |
|
| 2525 |
+ } |
|
| 2526 |
+ |
|
| 2527 |
+ if(smishingYn == null || smishingYn.equals("")) {
|
|
| 2528 |
+ |
|
| 2529 |
+ smishingYn = "N"; |
|
| 2530 |
+ |
|
| 2531 |
+ } |
|
| 2532 |
+ |
|
| 2533 |
+ |
|
| 2534 |
+ if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
|
|
| 2535 |
+ |
|
| 2536 |
+ Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); |
|
| 2537 |
+ cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 |
|
| 2538 |
+ |
|
| 2539 |
+ //String 타입 시간 Int로 변환 |
|
| 2540 |
+ turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 |
|
| 2541 |
+ dividDay = transFormat.format(cal.getTime()); |
|
| 2542 |
+ |
|
| 2543 |
+ totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 |
|
| 2544 |
+ divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 |
|
| 2545 |
+ |
|
| 2546 |
+ if(spamStatus.equals("Y") || smishingYn.equals("Y")) {
|
|
| 2547 |
+ |
|
| 2548 |
+ mjonMsgVO.setDelayYn("Y");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임, 원래는 스팸이면 Y로 넣어줘야한다.
|
|
| 2549 |
+ |
|
| 2550 |
+ }else {
|
|
| 2551 |
+ |
|
| 2552 |
+ mjonMsgVO.setDelayYn("N");//일단 값만 등록해준다. 이거 안해주면 NULL 값으로 들어간다. 차후에 변경하도록 할 예정임
|
|
| 2553 |
+ } |
|
| 2554 |
+ |
|
| 2555 |
+ }else {//즉시발송의 경우 현재 시간으로 입력해 준다.
|
|
| 2556 |
+ |
|
| 2557 |
+ Date now = new Date(); |
|
| 2558 |
+ if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸 문자가 포함되었거나, 스미싱 의심 회원의 경우 문자발송 시간을 30분 딜레이 시킨다.
|
|
| 2559 |
+ |
|
| 2560 |
+ String nowDate = transFormat.format(now); |
|
| 2561 |
+ Date toDate = transFormat.parse(nowDate); |
|
| 2562 |
+ System.out.println("++++++++++++++++++++ origin reqDate ::: "+toDate);
|
|
| 2563 |
+ cal.setTime(toDate); |
|
| 2564 |
+ |
|
| 2565 |
+ cal.add(Calendar.MINUTE, 30); |
|
| 2566 |
+ delayTime = transFormat.format(cal.getTime()); |
|
| 2567 |
+ mjonMsgVO.setReqDate(delayTime); |
|
| 2568 |
+ System.out.println("++++++++++++++++++++ delay reqDate ::: "+mjonMsgVO.getReqDate());
|
|
| 2569 |
+ delayYn = "Y"; |
|
| 2570 |
+ mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 코드 셋팅 |
|
| 2571 |
+ |
|
| 2572 |
+ }else {//정상적인 문자인 경우 즉시발송 처리해준다.
|
|
| 2573 |
+ |
|
| 2574 |
+ mjonMsgVO.setReqDate(transFormat.format(now)); |
|
| 2575 |
+ mjonMsgVO.setDelayYn(delayYn);//문자 발송 30분 지연 디폴트 값 셋팅(N) |
|
| 2576 |
+ |
|
| 2577 |
+ } |
|
| 2578 |
+ |
|
| 2579 |
+ } |
|
| 2580 |
+ |
|
| 2581 |
+ |
|
| 2582 |
+ //String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 |
|
| 2583 |
+ String[] phoneList = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 |
|
| 2584 |
+ //String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 |
|
| 2585 |
+ //String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 |
|
| 2586 |
+ //String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 |
|
| 2587 |
+ //String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 |
|
| 2588 |
+ |
|
| 2589 |
+ //Controller에서 전달 받은 분할 시간 정보 리스트 |
|
| 2590 |
+ List<String> dividDayList = mjonMsgVO.getDividDay(); |
|
| 2591 |
+ |
|
| 2592 |
+ String frstDelayTime = mjonMsgVO.getReqDate(); |
|
| 2593 |
+ |
|
| 2594 |
+/* |
|
| 2595 |
+ * 대용량 발송자의 msg_id 마지막 값 불러오기 |
|
| 2596 |
+ * 신규 IDgen 값 생성해주기 |
|
| 2597 |
+ * |
|
| 2598 |
+ * */ |
|
| 2599 |
+ String subUserId = mjonMsgVO.getUserId().substring(0, 5).toUpperCase(); |
|
| 2600 |
+ mjonMsgVO.setSearchKeyword(subUserId); |
|
| 2601 |
+ System.out.println("+++++++++++ subUserId ::: "+subUserId);
|
|
| 2602 |
+ |
|
| 2603 |
+ String userLastIdgen = mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); |
|
| 2604 |
+ System.out.println(userLastIdgen); |
|
| 2605 |
+ |
|
| 2606 |
+ //기존에 등록된 pk값이 없으면 초기 번호로 셋팅 |
|
| 2607 |
+ if(userLastIdgen == null) {
|
|
| 2608 |
+ |
|
| 2609 |
+ userLastIdgen = subUserId + "_00000000000000"; |
|
| 2610 |
+ |
|
| 2611 |
+ } |
|
| 2612 |
+ |
|
| 2613 |
+ MjonCommon mjComm = new MjonCommon(); |
|
| 2614 |
+ String startUserId = userLastIdgen; |
|
| 2615 |
+ System.out.println("+_+++++ startUserId ::: "+startUserId);
|
|
| 2616 |
+ |
|
| 2617 |
+ //문자발송 리스트 생성 시작 |
|
| 2618 |
+ for(int i = 0; i < callToCnt; i++) {
|
|
| 2619 |
+ |
|
| 2620 |
+ //신규 pk IDgen 데이터 생성 |
|
| 2621 |
+ startUserId = mjComm.getCreateMsgUserIdgen(subUserId, startUserId); |
|
| 2622 |
+ |
|
| 2623 |
+ Boolean blockSts = false; |
|
| 2624 |
+ for(int j = 0; j < usrBlockCnt; j++) {
|
|
| 2625 |
+ |
|
| 2626 |
+ if(phoneList[i].equals(dupliBlockList.get(j).toString())) {
|
|
| 2627 |
+ |
|
| 2628 |
+ blockCnt++; //수신 차단 카운드를 해준다. |
|
| 2629 |
+ blockSts = true; |
|
| 2630 |
+ |
|
| 2631 |
+ } |
|
| 2632 |
+ |
|
| 2633 |
+ } |
|
| 2634 |
+ |
|
| 2635 |
+ if(!blockSts) { //수신거부가 아니면 추가
|
|
| 2636 |
+ |
|
| 2637 |
+ MjonMsgVO tempVO = new MjonMsgVO(); |
|
| 2638 |
+ |
|
| 2639 |
+ /** |
|
| 2640 |
+ * Agent 추가시 셋팅하기 |
|
| 2641 |
+ * |
|
| 2642 |
+ * 최초 : 아이하트(01), 현대 퓨쳐넷(02), 아이앰오(03) |
|
| 2643 |
+ * 22.10.12 : 비즈뿌리오(04) 추가 |
|
| 2644 |
+ * 23.04.10 : 제이제이(05) 추가 |
|
| 2645 |
+ * 23.05.02 : 인비토 (07) 추가 |
|
| 2646 |
+ * 23.05.09 : 회원 전용 전송사 정보가 있으면 모든 문자를 전용 전송사로 발송처리함. |
|
| 2647 |
+ * */ |
|
| 2648 |
+ |
|
| 2649 |
+ if(hotlineAgentCode.equals("00")) {//전용 전송사가 사용 안함인 경우 분배 및 대표 전송사로 설정
|
|
| 2650 |
+ |
|
| 2651 |
+ if(iheartCnt > 0) {
|
|
| 2652 |
+ agentCode = "01"; |
|
| 2653 |
+ tempVO.setAgentCode(agentCode); |
|
| 2654 |
+ iheartCnt--; |
|
| 2655 |
+ }else if(hncCnt > 0) {
|
|
| 2656 |
+ agentCode = "02"; |
|
| 2657 |
+ tempVO.setAgentCode(agentCode); |
|
| 2658 |
+ hncCnt--; |
|
| 2659 |
+ }else if(imoCnt > 0) {
|
|
| 2660 |
+ agentCode = "03"; |
|
| 2661 |
+ tempVO.setAgentCode(agentCode); |
|
| 2662 |
+ imoCnt--; |
|
| 2663 |
+ }else if(bizCnt > 0) {
|
|
| 2664 |
+ agentCode = "04"; |
|
| 2665 |
+ tempVO.setAgentCode(agentCode); |
|
| 2666 |
+ bizCnt--; |
|
| 2667 |
+ }else if(jjCnt > 0) {
|
|
| 2668 |
+ agentCode = "05"; |
|
| 2669 |
+ tempVO.setAgentCode(agentCode); |
|
| 2670 |
+ jjCnt--; |
|
| 2671 |
+ }else if(ivtCnt > 0) {
|
|
| 2672 |
+ agentCode = "07"; |
|
| 2673 |
+ tempVO.setAgentCode(agentCode); |
|
| 2674 |
+ ivtCnt--; |
|
| 2675 |
+ }else {//전송사 Agent 대표 전송사로 지정한다.
|
|
| 2676 |
+ |
|
| 2677 |
+ agentCode = sendRateList.get(0).getRepAgent(); |
|
| 2678 |
+ tempVO.setAgentCode(agentCode); |
|
| 2679 |
+ } |
|
| 2680 |
+ |
|
| 2681 |
+ }else {//전용 전송사가 지정되어 있는 경우 전용 전송사로 지정
|
|
| 2682 |
+ |
|
| 2683 |
+ agentCode = hotlineAgentCode; |
|
| 2684 |
+ tempVO.setAgentCode(hotlineAgentCode); |
|
| 2685 |
+ } |
|
| 2686 |
+ //Agent 셋팅 끝 |
|
| 2687 |
+ |
|
| 2688 |
+ //tempVO.setMsgId(idgenMsgId.getNextStringId()); |
|
| 2689 |
+ |
|
| 2690 |
+ tempVO.setMsgId(startUserId); |
|
| 2691 |
+ |
|
| 2692 |
+ tempVO.setUserId(mjonMsgVO.getUserId()); |
|
| 2693 |
+ tempVO.setCallTo(phoneList[i]); |
|
| 2694 |
+ tempVO.setCallFrom(mjonMsgVO.getCallFrom()); |
|
| 2695 |
+ tempVO.setMsgType(mjonMsgVO.getMsgType()); |
|
| 2696 |
+ tempVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); |
|
| 2697 |
+ tempVO.setMsgCnt(mjonMsgVO.getMsgCnt()); |
|
| 2698 |
+ |
|
| 2699 |
+ //아이엠오 전송사 문자 타입 설정해 주기 |
|
| 2700 |
+ if(agentCode.equals("03")) {
|
|
| 2701 |
+ |
|
| 2702 |
+ // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 |
|
| 2703 |
+ if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자
|
|
| 2704 |
+ |
|
| 2705 |
+ mjonMsgVO.setNeoType("2");
|
|
| 2706 |
+ |
|
| 2707 |
+ }else{ // 그림포함 문자인경우
|
|
| 2708 |
+ |
|
| 2709 |
+ mjonMsgVO.setNeoType("4");
|
|
| 2710 |
+ |
|
| 2711 |
+ } |
|
| 2712 |
+ |
|
| 2713 |
+ } |
|
| 2714 |
+ |
|
| 2715 |
+ //문자내용 내용 - 치환 처리 |
|
| 2716 |
+ String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 |
|
| 2717 |
+ |
|
| 2718 |
+ //일괄변환문자 리스트에서 콤마(,)를 특수문자(§)로 변환해서 넘겨받기 때문에 치환 처리를 해준도록 한다. |
|
| 2719 |
+ smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); |
|
| 2720 |
+ /*if (smsTxt.indexOf("[*이름*]") > -1) {
|
|
| 2721 |
+ if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
|
|
| 2722 |
+ smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ",")));
|
|
| 2723 |
+ }else {
|
|
| 2724 |
+ smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", "");
|
|
| 2725 |
+ } |
|
| 2726 |
+ } |
|
| 2727 |
+ |
|
| 2728 |
+ if (smsTxt.indexOf("[*1*]") > -1) {
|
|
| 2729 |
+ if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) {
|
|
| 2730 |
+ smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ",")));
|
|
| 2731 |
+ }else {
|
|
| 2732 |
+ smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", "");
|
|
| 2733 |
+ } |
|
| 2734 |
+ } |
|
| 2735 |
+ |
|
| 2736 |
+ if (smsTxt.indexOf("[*2*]") > -1) {
|
|
| 2737 |
+ if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) {
|
|
| 2738 |
+ smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ",")));
|
|
| 2739 |
+ }else {
|
|
| 2740 |
+ smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", "");
|
|
| 2741 |
+ } |
|
| 2742 |
+ } |
|
| 2743 |
+ |
|
| 2744 |
+ if (smsTxt.indexOf("[*3*]") > -1) {
|
|
| 2745 |
+ if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) {
|
|
| 2746 |
+ smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ",")));
|
|
| 2747 |
+ }else {
|
|
| 2748 |
+ smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", "");
|
|
| 2749 |
+ } |
|
| 2750 |
+ } |
|
| 2751 |
+ |
|
| 2752 |
+ if (smsTxt.indexOf("[*4*]") > -1) {
|
|
| 2753 |
+ if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) {
|
|
| 2754 |
+ smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ",")));
|
|
| 2755 |
+ }else {
|
|
| 2756 |
+ smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", "");
|
|
| 2757 |
+ } |
|
| 2758 |
+ }*/ |
|
| 2759 |
+ |
|
| 2760 |
+ tempVO.setSmsTxt(smsTxt); |
|
| 2761 |
+ |
|
| 2762 |
+ //즉시 / 예약 전송 처리 |
|
| 2763 |
+ if(mjonMsgVO.getReserveYn().equals("N")) {//즉시 전송의 경우 현재 시간을 입력
|
|
| 2764 |
+ |
|
| 2765 |
+ if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문자가 있거나, 스미싱 의심 회원의 경우 30분 지연시간을 입력해 준다.
|
|
| 2766 |
+ |
|
| 2767 |
+ tempVO.setReqDate(mjonMsgVO.getReqDate());//상단에서 스팸문구가 있는겨우 30분 딜레이시간을 입력해 두었기 때문에 같은 데이터를 입력함. |
|
| 2768 |
+ |
|
| 2769 |
+ |
|
| 2770 |
+ }else {//일반 문자인 경우 현재시간을 입력해 준다.
|
|
| 2771 |
+ |
|
| 2772 |
+ Date now = new Date(); |
|
| 2773 |
+ SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
| 2774 |
+ tempVO.setReqDate(sdFormat.format(now)); |
|
| 2775 |
+ |
|
| 2776 |
+ } |
|
| 2777 |
+ |
|
| 2778 |
+ }else { // 예약 발송의 경우 예약 시간을 입력
|
|
| 2779 |
+ |
|
| 2780 |
+ //분할 발송을 체크 한 경우 |
|
| 2781 |
+ if(mjonMsgVO.getDivideChk() != null) {
|
|
| 2782 |
+ |
|
| 2783 |
+ //스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다. |
|
| 2784 |
+ //20230630 우영두 추가 |
|
| 2785 |
+ if(spamStatus.equals("Y") || smishingYn.equals("Y")) {
|
|
| 2786 |
+ |
|
| 2787 |
+ Date delayDate = transFormat.parse(dividDayList.get(i)); |
|
| 2788 |
+ |
|
| 2789 |
+ cal.setTime(delayDate); |
|
| 2790 |
+ cal.add(Calendar.MINUTE, 30); |
|
| 2791 |
+ delayTime = transFormat.format(cal.getTime()); |
|
| 2792 |
+ |
|
| 2793 |
+ tempVO.setReqDate(delayTime); //분할 문자 예약 시간 입력해주기 |
|
| 2794 |
+ |
|
| 2795 |
+ }else {
|
|
| 2796 |
+ |
|
| 2797 |
+ tempVO.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기 |
|
| 2798 |
+ |
|
| 2799 |
+ } |
|
| 2800 |
+ |
|
| 2801 |
+ |
|
| 2802 |
+ }else {//일반 예약 발송의 경우
|
|
| 2803 |
+ |
|
| 2804 |
+ if(spamStatus.equals("Y") || smishingYn.equals("Y")) {//스팸문구 혹은 스미싱 의심 회원의 경우 30분 딜레이 처리해준다.
|
|
| 2805 |
+ |
|
| 2806 |
+ Date delayDate = transFormat.parse(mjonMsgVO.getReqDate()); |
|
| 2807 |
+ |
|
| 2808 |
+ cal.setTime(delayDate); |
|
| 2809 |
+ cal.add(Calendar.MINUTE, 30); |
|
| 2810 |
+ delayTime = transFormat.format(cal.getTime()); |
|
| 2811 |
+ |
|
| 2812 |
+ tempVO.setReqDate(delayTime); |
|
| 2813 |
+ |
|
| 2814 |
+ }else {
|
|
| 2815 |
+ |
|
| 2816 |
+ tempVO.setReqDate(mjonMsgVO.getReqDate()); |
|
| 2817 |
+ |
|
| 2818 |
+ } |
|
| 2819 |
+ |
|
| 2820 |
+ } |
|
| 2821 |
+ |
|
| 2822 |
+ //딜레이 처리되었을 수 있어서 임시 데이터의 발송 시간을 업데이트 해준다. |
|
| 2823 |
+ //분할 발송일 경우 Loop을 돌기 때문에 마지막 시간이 reqDate에 들어가기 때문에 첫번째 데이터에서만 시간을 입력해 준다. |
|
| 2824 |
+ //mj_group_data 테이블의 reqdate 컬럼 값으로 셋팅 된다. |
|
| 2825 |
+ if(i==0) {
|
|
| 2826 |
+ frstDelayTime = tempVO.getReqDate(); |
|
| 2827 |
+ } |
|
| 2828 |
+ } |
|
| 2829 |
+ |
|
| 2830 |
+ if(!msgType.equals("4")) { // 장문 혹은 그림문자일 경우 추가
|
|
| 2831 |
+ |
|
| 2832 |
+ /** |
|
| 2833 |
+ * 장문 / 그림문자 일 경우 제목 처리 |
|
| 2834 |
+ * 만약 제목을 입력하지 않았을 경우 문자 내용의 텍스트 일부를 제목으로 사용 |
|
| 2835 |
+ * 내용 텍스트가 없는 경우는 어쩔수 없는 것으로 간주하여 Null로 처리한다. |
|
| 2836 |
+ * |
|
| 2837 |
+ * */ |
|
| 2838 |
+ String contents = tempVO.getSmsTxt(); //문자 내용 |
|
| 2839 |
+ if(StringUtil.isEmpty(mjonMsgVO.getMmsSubject()) || mjonMsgVO.getMmsSubject() == null) {// 제목 입력이 없는 경우
|
|
| 2840 |
+ |
|
| 2841 |
+ if(StringUtil.isNotEmpty(contents) && contents != null) {//문자내용이 있는 경우 처리
|
|
| 2842 |
+ |
|
| 2843 |
+ String[] split = contents.split("\n");
|
|
| 2844 |
+ |
|
| 2845 |
+ if(split.length > 0) {
|
|
| 2846 |
+ |
|
| 2847 |
+ String subject = ""; |
|
| 2848 |
+ String msgKind = mjonMsgVO.getMsgKind();//문자 타입(일반, 광고, 선거문자) |
|
| 2849 |
+ |
|
| 2850 |
+ //선거문자인 경우 첫 글내용이 "(선거운동정보)"로 되어있어서 그 다음줄의 내용을 제목으로 사용 |
|
| 2851 |
+ if(msgKind.equals("C")) {
|
|
| 2852 |
+ if(split.length > 1) {
|
|
| 2853 |
+ subject = split[1].trim(); |
|
| 2854 |
+ }else {
|
|
| 2855 |
+ subject = split[0].substring(0,20); |
|
| 2856 |
+ } |
|
| 2857 |
+ }else {
|
|
| 2858 |
+ subject = split[0].trim(); |
|
| 2859 |
+ } |
|
| 2860 |
+ |
|
| 2861 |
+ } |
|
| 2862 |
+ |
|
| 2863 |
+ } |
|
| 2864 |
+ |
|
| 2865 |
+ }else {// 제목 입력이 있는 경우 입력한 제목으로 셋팅
|
|
| 2866 |
+ tempVO.setMmsSubject(mjonMsgVO.getMmsSubject()); |
|
| 2867 |
+ } |
|
| 2868 |
+ |
|
| 2869 |
+ tempVO.setFileCnt(mjonMsgVO.getFileCnt()); |
|
| 2870 |
+ tempVO.setFileName1(mjonMsgVO.getFileName1()); |
|
| 2871 |
+ tempVO.setFileName2(mjonMsgVO.getFileName2()); |
|
| 2872 |
+ tempVO.setFileName3(mjonMsgVO.getFileName3()); |
|
| 2873 |
+ tempVO.setNeoType(mjonMsgVO.getNeoType()); |
|
| 2874 |
+ tempVO.setContSeq(mjonMsgVO.getContSeq()); |
|
| 2875 |
+ |
|
| 2876 |
+ } |
|
| 2877 |
+ |
|
| 2878 |
+ //아이하트 전송사의 LMS(장문) / MMS(그림문자) 전송시 컨텐츠 번호 받아오기 먼저 처리 |
|
| 2879 |
+ if(agentCode.equals("01") && msgType.equals("6")) {
|
|
| 2880 |
+ |
|
| 2881 |
+ // 아이하트 MMS Contents 테이블에 입력 후 컨텐츠 아이디 받아오기 |
|
| 2882 |
+ |
|
| 2883 |
+ //이미지가 있는경우 file_type, file_Cnt 값 셋팅 |
|
| 2884 |
+ int fileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); |
|
| 2885 |
+ String contents = mjonMsgVO.getSmsTxt(); |
|
| 2886 |
+ |
|
| 2887 |
+ if(fileCnt > 0) {
|
|
| 2888 |
+ tempVO.setFileType1("IMG"); //아이하트 그림문자 전송시 파일종류 이미지로 셋팅
|
|
| 2889 |
+ |
|
| 2890 |
+ //그림문자일 경우 이미지 갯수 + 1을 해줘야한다. (+1은 컨텐츠 내용을 의미한다.) |
|
| 2891 |
+ if(StringUtil.isNotEmpty(contents)) {
|
|
| 2892 |
+ fileCnt = fileCnt + 1; |
|
| 2893 |
+ } |
|
| 2894 |
+ tempVO.setFileCnt(Integer.toString(fileCnt)); |
|
| 2895 |
+ |
|
| 2896 |
+ }else {
|
|
| 2897 |
+ tempVO.setFileCnt("1");
|
|
| 2898 |
+ } |
|
| 2899 |
+ |
|
| 2900 |
+ contSeq = mjonMsgDataDAO.insertIHeartMmsMsgContentsInfo(tempVO); |
|
| 2901 |
+ mjonMsgVO.setContSeq(contSeq); |
|
| 2902 |
+ tempVO.setSmsTxt(smsTxt); |
|
| 2903 |
+ tempVO.setContSeq(contSeq); |
|
| 2904 |
+ |
|
| 2905 |
+ } |
|
| 2906 |
+ |
|
| 2907 |
+ //문자 내용 추가해 주기 |
|
| 2908 |
+ msgDataInfo.add(tempVO); |
|
| 2909 |
+ |
|
| 2910 |
+ }//수신거부 처리로직 끝 |
|
| 2911 |
+ |
|
| 2912 |
+ int instCnt = 0; |
|
| 2913 |
+ //지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌 |
|
| 2914 |
+ if(totCnt == callToCnt) {
|
|
| 2915 |
+ |
|
| 2916 |
+ if(msgDataInfo.size() > 0) {
|
|
| 2917 |
+ |
|
| 2918 |
+ //데이터 디비 입력해주기 |
|
| 2919 |
+ instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); |
|
| 2920 |
+ |
|
| 2921 |
+ } |
|
| 2922 |
+ |
|
| 2923 |
+ //총 디비 입력 건수 저장하기 |
|
| 2924 |
+ resultCnt = resultCnt + instCnt; |
|
| 2925 |
+ |
|
| 2926 |
+ }else {
|
|
| 2927 |
+ |
|
| 2928 |
+ //특정 건수 이상일 경우 분할해서 디비에 넣어준다. |
|
| 2929 |
+ if(cnt == limitCnt) {
|
|
| 2930 |
+ |
|
| 2931 |
+ if(msgDataInfo.size() > 0) {
|
|
| 2932 |
+ |
|
| 2933 |
+ //분할 최대건수가 되면 디비에 입력하기 |
|
| 2934 |
+ instCnt = mjonMsgDataDAO.insertMsgDataInfo(msgDataInfo, msgType, agentCode); |
|
| 2935 |
+ |
|
| 2936 |
+ } |
|
| 2937 |
+ |
|
| 2938 |
+ //총 디비 입력 건수 저장하기 |
|
| 2939 |
+ resultCnt = resultCnt + instCnt; |
|
| 2940 |
+ cnt = 0; |
|
| 2941 |
+ |
|
| 2942 |
+ //List 초기화 하기 |
|
| 2943 |
+ msgDataInfo.clear(); |
|
| 2944 |
+ |
|
| 2945 |
+ } |
|
| 2946 |
+ |
|
| 2947 |
+ } |
|
| 2948 |
+ |
|
| 2949 |
+ cnt++; |
|
| 2950 |
+ totCnt++; |
|
| 2951 |
+ |
|
| 2952 |
+ } |
|
| 2953 |
+ |
|
| 2954 |
+ /* |
|
| 2955 |
+ * 각 처리 건별로 캐시 차감 및 그룹 데이터 정보 업데이트 |
|
| 2956 |
+ * 1. 디비에 입력한 건수만큼 캐시 차감 및 회원 캐시 정보 업데이트 |
|
| 2957 |
+ * 2. 그룹데이터에 처리 건수 업데이트(총 발송건수 합산 정보 업데이트) |
|
| 2958 |
+ * |
|
| 2959 |
+ * */ |
|
| 2960 |
+ |
|
| 2961 |
+ //문자 발송 캐시 차감 해주기 |
|
| 2962 |
+ MjonPayVO mjonPayVO = new MjonPayVO(); |
|
| 2963 |
+ |
|
| 2964 |
+ //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. |
|
| 2965 |
+ if(resultCnt > 0) {
|
|
| 2966 |
+ |
|
| 2967 |
+ int totSendCnt = mjonMsgVO.getTotalCallCnt(); |
|
| 2968 |
+ Float eachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); |
|
| 2969 |
+ Float totPrice = eachPrice * resultCnt; |
|
| 2970 |
+ String strTotPrice = String.format("%.1f", totPrice);
|
|
| 2971 |
+ |
|
| 2972 |
+ mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅 |
|
| 2973 |
+ mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); |
|
| 2974 |
+ mjonPayVO.setUserId(mjonMsgVO.getUserId()); |
|
| 2975 |
+ mjonPayVO.setCash(-Float.parseFloat(strTotPrice)); |
|
| 2976 |
+ mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); |
|
| 2977 |
+ mjonPayVO.setMemo("SMS 문자 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송");
|
|
| 2978 |
+ mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); |
|
| 2979 |
+ |
|
| 2980 |
+ mjonPayService.insertCash(mjonPayVO); //캐시차감 |
|
| 2981 |
+ mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 |
|
| 2982 |
+ } |
|
| 2983 |
+ |
|
| 2984 |
+ //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. |
|
| 2985 |
+ if(resultCnt > 0) {
|
|
| 2986 |
+ |
|
| 2987 |
+ // 문자 전송 그룹 테이블에 정보 입력 |
|
| 2988 |
+ int groupCnt = resultCnt; |
|
| 2989 |
+ mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); |
|
| 2990 |
+ //mjonMsgService.insertGroupMsgData(mjonMsgVO); |
|
| 2991 |
+ int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO); |
|
| 2992 |
+ |
|
| 2993 |
+ //메세지 그룹 데이터가 없으면 추가 해주고 있으면 총메세지 건수를 합산해준다. |
|
| 2994 |
+ if(msgGroupDataCnt < 1) {
|
|
| 2995 |
+ mjonMsgVO.setAgentCode(agentCode);//전송사 코드 번호를 셋팅해 준다. |
|
| 2996 |
+ |
|
| 2997 |
+ //지연 유무 코드가 Null 인경우 체크 |
|
| 2998 |
+ String tmpDelayYn = mjonMsgVO.getDelayYn(); |
|
| 2999 |
+ if(tmpDelayYn == null) {
|
|
| 3000 |
+ mjonMsgVO.setDelayYn("N");
|
|
| 3001 |
+ } |
|
| 3002 |
+ |
|
| 3003 |
+ //예약 문자이고 30분 지연이 된 문자의 Mj_msg_group_data 테이블의 req_date 시간을 첫번째 문자의 지연된 시간으로 셋팅해준다. |
|
| 3004 |
+ if(mjonMsgVO.getReserveYn().equals("Y") && (spamStatus.equals("Y") || smishingYn.equals("Y"))) {
|
|
| 3005 |
+ |
|
| 3006 |
+ mjonMsgVO.setReqDate(frstDelayTime); |
|
| 3007 |
+ |
|
| 3008 |
+ } |
|
| 3009 |
+ mjonMsgDAO.insertGroupMsgData(mjonMsgVO); |
|
| 3010 |
+ |
|
| 3011 |
+ }else {
|
|
| 3012 |
+ mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); |
|
| 3013 |
+ } |
|
| 3014 |
+ |
|
| 3015 |
+ //이벤트 회원 남은 캐시 업데이트 |
|
| 3016 |
+ fnUpdateEventRemainCash(mjonPayVO); |
|
| 3017 |
+ |
|
| 3018 |
+ } |
|
| 3019 |
+ |
|
| 3020 |
+ // 성공 |
|
| 3021 |
+ returnVO.setSendMsgCnt(Integer.toString(resultCnt)); //발송 건수 저장 |
|
| 3022 |
+ returnVO.setSendMsgBlockCnt(Integer.toString(blockCnt)); //수신차단 건수 저장 |
|
| 3023 |
+ returnVO.setAgentCode(agentCode); |
|
| 3024 |
+ |
|
| 3025 |
+ } catch (Exception e) {
|
|
| 3026 |
+ // 실패 |
|
| 3027 |
+ returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장 |
|
| 3028 |
+ returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장 |
|
| 3029 |
+ returnVO.setAgentCode("01");
|
|
| 3030 |
+ |
|
| 3031 |
+ System.out.println("=========================================================================");
|
|
| 3032 |
+ System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfoBatch ERROR !!! : " + e);
|
|
| 3033 |
+ System.out.println("=========================================================================");
|
|
| 3034 |
+ return returnVO; |
|
| 3035 |
+ |
|
| 3036 |
+ } |
|
| 3037 |
+ |
|
| 3038 |
+ return returnVO; |
|
| 3039 |
+ |
|
| 3040 |
+ } |
|
| 3041 |
+ |
|
| 3042 |
+ |
|
| 3043 |
+ //대용량 문자 전송시 사용자 마지막 PK 값 조회하기 |
|
| 3044 |
+ @Override |
|
| 3045 |
+ public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{
|
|
| 3046 |
+ return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); |
|
| 3047 |
+ } |
|
| 3048 |
+ |
|
| 3049 |
+ |
|
| 2303 | 3050 |
} |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
... | ... | @@ -281,19 +281,20 @@ |
| 281 | 281 |
FROM MJ_ADDR a |
| 282 | 282 |
WHERE a.MBER_ID = #userId# |
| 283 | 283 |
|
| 284 |
- <iterate prepend="AND ADDR_GRP_ID IN " open="(" close=")" conjunction="," property="callToList">
|
|
| 284 |
+ <!-- <iterate prepend="AND ADDR_GRP_ID IN " open="(" close=")" conjunction="," property="callToList">
|
|
| 285 | 285 |
#callToList[]# |
| 286 |
- </iterate> |
|
| 286 |
+ </iterate> --> |
|
| 287 | 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> |
|
| 288 |
+ AND ADDR_GRP_ID = #addrGrpId# |
|
| 289 |
+ |
|
| 290 |
+ <isNotEmpty property="addrGrpNm"> |
|
| 291 |
+ <isEqual property="addrGrpNm" compareValue="group1"> |
|
| 292 |
+ AND a.BOOKMARK = 'N' |
|
| 293 |
+ </isEqual> |
|
| 294 |
+ <isEqual property="addrGrpNm" compareValue="bookmark"> |
|
| 295 |
+ AND a.BOOKMARK = 'Y' |
|
| 296 |
+ </isEqual> |
|
| 297 |
+ </isNotEmpty> |
|
| 297 | 298 |
|
| 298 | 299 |
AND a.DELETE_YN = 'N' |
| 299 | 300 |
|
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -7501,6 +7501,17 @@ |
| 7501 | 7501 |
USER_ID = #userId# |
| 7502 | 7502 |
AND MSG_GROUP_ID = #msgGroupId# |
| 7503 | 7503 |
</select> |
| 7504 |
- |
|
| 7504 |
+ |
|
| 7505 |
+ <select id="mjonMsgDAO.selectMsgUserLastIdgen" parameterClass="mjonMsgVO" resultClass="String"> |
|
| 7506 |
+ |
|
| 7507 |
+ SELECT MSG_ID |
|
| 7508 |
+ FROM MJ_MSG_DATA |
|
| 7509 |
+ WHERE USER_ID = #userId# |
|
| 7510 |
+ AND MSG_ID LIKE CONCAT('%', #searchKeyword#, '%')
|
|
| 7511 |
+ ORDER BY USERDATA DESC |
|
| 7512 |
+ LIMIT 1 |
|
| 7513 |
+ |
|
| 7514 |
+ </select> |
|
| 7515 |
+ |
|
| 7505 | 7516 |
</sqlMap> |
| 7506 | 7517 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/huge/MsgHGDataView.jsp
... | ... | @@ -998,6 +998,7 @@ |
| 998 | 998 |
|
| 999 | 999 |
var groupSts = false; |
| 1000 | 1000 |
var bookSts = false; |
| 1001 |
+ var myAddrSts = false; |
|
| 1001 | 1002 |
|
| 1002 | 1003 |
for(var i=0; i < selectedData.length; i++){
|
| 1003 | 1004 |
//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다. |
... | ... | @@ -1007,7 +1008,7 @@ |
| 1007 | 1008 |
return false; |
| 1008 | 1009 |
} |
| 1009 | 1010 |
|
| 1010 |
- if(addrGrpId == 'group1'){
|
|
| 1011 |
+ /* if(addrGrpId == 'group1'){
|
|
| 1011 | 1012 |
|
| 1012 | 1013 |
addrGrpId = '0'; |
| 1013 | 1014 |
groupSts = true; |
... | ... | @@ -1017,11 +1018,17 @@ |
| 1017 | 1018 |
addrGrpId = '0'; |
| 1018 | 1019 |
bookSts = true; |
| 1019 | 1020 |
|
| 1020 |
- } |
|
| 1021 |
+ }else{//사용자가 추가한 주소록 그룹
|
|
| 1022 |
+ |
|
| 1023 |
+ myAddrSts = true; |
|
| 1024 |
+ |
|
| 1025 |
+ } */ |
|
| 1021 | 1026 |
addrGrpList[i] = addrGrpId; |
| 1022 | 1027 |
} |
| 1023 | 1028 |
|
| 1024 |
- if(groupSts && bookSts){
|
|
| 1029 |
+ |
|
| 1030 |
+ //모든 그룹을 선택하거나 미지정그룹과 자주보내는 그룹 선택 또는 자주보내는 그룹과 사용자 생성 그룹 선택시 |
|
| 1031 |
+ /* if((groupSts && bookSts) || (bookSts && myAddrSts)){
|
|
| 1025 | 1032 |
|
| 1026 | 1033 |
$("#bookmarkYn").val("B");
|
| 1027 | 1034 |
|
... | ... | @@ -1029,7 +1036,7 @@ |
| 1029 | 1036 |
|
| 1030 | 1037 |
$("#bookmarkYn").val("Y");
|
| 1031 | 1038 |
|
| 1032 |
- } |
|
| 1039 |
+ } */ |
|
| 1033 | 1040 |
|
| 1034 | 1041 |
} |
| 1035 | 1042 |
|
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?