환불 스케줄러 변경
@7e2b27f67367379e8363224633b62ad34462f1aa
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
... | ... | @@ -260,9 +260,9 @@ |
| 260 | 260 |
|
| 261 | 261 |
//문자검색 전송 실패 리스트 불러오기 |
| 262 | 262 |
@SuppressWarnings("unchecked")
|
| 263 |
- public List<MjonMsgVO> selectMsgSentFailList()throws Exception{
|
|
| 263 |
+ public List<MjonMsgVO> selectMsgSentFailList(MjonMsgVO mjonMsgVO)throws Exception{
|
|
| 264 | 264 |
|
| 265 |
- return (List<MjonMsgVO>) list("MjonMsgDataDAO.selectMsgSentFailList");
|
|
| 265 |
+ return (List<MjonMsgVO>) list("MjonMsgDataDAO.selectMsgSentFailList", mjonMsgVO);
|
|
| 266 | 266 |
} |
| 267 | 267 |
|
| 268 | 268 |
@SuppressWarnings("unchecked")
|
--- src/main/java/itn/let/schdlr/service/SchdlrManageService.java
+++ src/main/java/itn/let/schdlr/service/SchdlrManageService.java
... | ... | @@ -49,5 +49,7 @@ |
| 49 | 49 |
|
| 50 | 50 |
//문자온 카카오톡 실패 건수 환불 배치 |
| 51 | 51 |
public void kakaoFailPayBack() throws Exception; |
| 52 |
- |
|
| 52 |
+ |
|
| 53 |
+ //문자온 문자전송 실패 건수 환불 배치 |
|
| 54 |
+ public void payBack(String type, int limitCout) throws Exception; |
|
| 53 | 55 |
} |
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
... | ... | @@ -91,8 +91,8 @@ |
| 91 | 91 |
/* |
| 92 | 92 |
* 2분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. |
| 93 | 93 |
* */ |
| 94 |
- // Schdule Lock (2분동안) |
|
| 95 |
- @Scheduled(cron = "0 0/2 * * * ?") |
|
| 94 |
+ // Schdule Lock (5분동안) |
|
| 95 |
+ @Scheduled(cron = "0 0/5 * * * ?") |
|
| 96 | 96 |
@SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
| 97 | 97 |
public void runScenarioOneTime() throws Exception {
|
| 98 | 98 |
|
... | ... | @@ -102,8 +102,8 @@ |
| 102 | 102 |
|
| 103 | 103 |
//문자 환불, 팩스 환불 |
| 104 | 104 |
|
| 105 |
- //임시 주석처리 |
|
| 106 |
- //PayBack("");
|
|
| 105 |
+ |
|
| 106 |
+ PayBack("");
|
|
| 107 | 107 |
|
| 108 | 108 |
/* |
| 109 | 109 |
// 문자 환불 |
... | ... | @@ -484,18 +484,35 @@ |
| 484 | 484 |
}else { //2분 마다는 7일을 대상으로 실행
|
| 485 | 485 |
//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 |
| 486 | 486 |
//schdlrManageService.msgFailPayBack(); |
| 487 |
- |
|
| 488 |
- List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); |
|
| 489 |
- |
|
| 490 |
- for(MjonMsgVO vo : msgFailList) {
|
|
| 491 |
- try {
|
|
| 492 |
- mjonMsgDataDAO.updateMsgSentFailPayBack(vo); |
|
| 493 |
- }catch(Exception ex) {
|
|
| 494 |
- System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
|
|
| 495 |
- System.out.println(vo.getUserId()+" : "+ vo.getMsgGroupId() +" : "+ vo.getUserData()); |
|
| 496 |
- ex.printStackTrace(); |
|
| 497 |
- } |
|
| 498 |
- } |
|
| 487 |
+ MjonMsgVO mjonMsgVO = new MjonMsgVO(); |
|
| 488 |
+ mjonMsgVO.setRecordCountPerPage(1000); |
|
| 489 |
+ List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList(mjonMsgVO); |
|
| 490 |
+ long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 |
|
| 491 |
+ int batchSize = 300; |
|
| 492 |
+ int totalSize = msgFailList.size(); |
|
| 493 |
+ int endj =0; |
|
| 494 |
+ for (int i = 0; i < totalSize; i += batchSize) {
|
|
| 495 |
+ int end = Math.min(i + batchSize, totalSize); |
|
| 496 |
+ long beforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 |
|
| 497 |
+ for(int j=endj; j < end; j++) {
|
|
| 498 |
+ System.out.println(j+" : "+ end); |
|
| 499 |
+ try {
|
|
| 500 |
+ mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j)); |
|
| 501 |
+ }catch(Exception ex) {
|
|
| 502 |
+ System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
|
|
| 503 |
+ System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData()); |
|
| 504 |
+ ex.printStackTrace(); |
|
| 505 |
+ } |
|
| 506 |
+ } |
|
| 507 |
+ endj = end; |
|
| 508 |
+ |
|
| 509 |
+ long afterTime = System.currentTimeMillis(); // 코드 실행 후 시간 |
|
| 510 |
+ long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) |
|
| 511 |
+ System.out.println("==PayBack for 1 =============> : " + secDiffTime +"초");
|
|
| 512 |
+ } |
|
| 513 |
+ long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 |
|
| 514 |
+ long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) |
|
| 515 |
+ System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초");
|
|
| 499 | 516 |
} |
| 500 | 517 |
|
| 501 | 518 |
System.out.println("==== faxFailPayBack ====");
|
--- src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
+++ src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
... | ... | @@ -20,7 +20,9 @@ |
| 20 | 20 |
import itn.let.fax.user.service.impl.FaxDAO; |
| 21 | 21 |
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; |
| 22 | 22 |
import itn.let.mjo.mjocommon.MjonCommon; |
| 23 |
+import itn.let.mjo.msg.service.MjonMsgVO; |
|
| 23 | 24 |
import itn.let.mjo.msgdata.service.MjonMsgDataService; |
| 25 |
+import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; |
|
| 24 | 26 |
import itn.let.mjo.pay.service.MjonPayService; |
| 25 | 27 |
import itn.let.mjo.pay.service.StVcVO; |
| 26 | 28 |
import itn.let.mjo.payva.service.VacsAhstService; |
... | ... | @@ -62,6 +64,9 @@ |
| 62 | 64 |
|
| 63 | 65 |
@Value("#{globalSettings['Globals.HOMPAGE_URL']}")
|
| 64 | 66 |
private String HOMPAGE_URL; |
| 67 |
+ |
|
| 68 |
+ @Resource(name="MjonMsgDataDAO") |
|
| 69 |
+ private MjonMsgDataDAO mjonMsgDataDAO; |
|
| 65 | 70 |
|
| 66 | 71 |
//문자온 카카오 알림톡 발송 서비스 |
| 67 | 72 |
@Resource(name = "kakaoAlimTalkService") |
... | ... | @@ -423,5 +428,45 @@ |
| 423 | 428 |
kakaoAlimTalkService.selectKakaoAtSentRefundList(); |
| 424 | 429 |
|
| 425 | 430 |
} |
| 426 |
- |
|
| 431 |
+ |
|
| 432 |
+ @Override |
|
| 433 |
+ public void payBack(String type, int limitCout) throws Exception {
|
|
| 434 |
+ // 문자 환불 |
|
| 435 |
+ if ("ONE".equals(type)) { //하루에 한번만 31일 대상으로 실행
|
|
| 436 |
+ msgFailPayBackOneByDay(); |
|
| 437 |
+ |
|
| 438 |
+ }else { //2분 마다는 7일을 대상으로 실행
|
|
| 439 |
+ MjonMsgVO mjonMsgVO = new MjonMsgVO(); |
|
| 440 |
+ mjonMsgVO.setRecordCountPerPage(limitCout); |
|
| 441 |
+ |
|
| 442 |
+ List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList(mjonMsgVO); |
|
| 443 |
+ long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 |
|
| 444 |
+ int batchSize = 300; |
|
| 445 |
+ int totalSize = msgFailList.size(); |
|
| 446 |
+ int endj =0; |
|
| 447 |
+ for (int i = 0; i < totalSize; i += batchSize) {
|
|
| 448 |
+ int end = Math.min(i + batchSize, totalSize); |
|
| 449 |
+ long beforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 |
|
| 450 |
+ for(int j=endj; j < end; j++) {
|
|
| 451 |
+ System.out.println(j+" : "+ end); |
|
| 452 |
+ try {
|
|
| 453 |
+ mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j)); |
|
| 454 |
+ }catch(Exception ex) {
|
|
| 455 |
+ System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
|
|
| 456 |
+ System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData()); |
|
| 457 |
+ ex.printStackTrace(); |
|
| 458 |
+ } |
|
| 459 |
+ } |
|
| 460 |
+ endj = end; |
|
| 461 |
+ |
|
| 462 |
+ long afterTime = System.currentTimeMillis(); // 코드 실행 후 시간 |
|
| 463 |
+ long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) |
|
| 464 |
+ System.out.println("==PayBack for 1 =============> : " + secDiffTime +"초");
|
|
| 465 |
+ } |
|
| 466 |
+ long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 |
|
| 467 |
+ long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) |
|
| 468 |
+ System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초");
|
|
| 469 |
+ |
|
| 470 |
+ } |
|
| 471 |
+ } |
|
| 427 | 472 |
} |
--- src/main/java/itn/web/ContentController.java
+++ src/main/java/itn/web/ContentController.java
... | ... | @@ -36,6 +36,7 @@ |
| 36 | 36 |
import itn.let.lett.service.LetterVO; |
| 37 | 37 |
import itn.let.mjo.pay.service.MjonPayVO; |
| 38 | 38 |
import itn.let.schdlr.service.SchdlrManageService; |
| 39 |
+import itn.let.schdlr.service.SchedulerUtil; |
|
| 39 | 40 |
import itn.let.uss.ion.cnt.service.CntManageVO; |
| 40 | 41 |
import itn.let.uss.ion.cnt.service.EgovCntManageService; |
| 41 | 42 |
|
... | ... | @@ -768,4 +769,41 @@ |
| 768 | 769 |
} |
| 769 | 770 |
*/ |
| 770 | 771 |
|
| 772 |
+ // 전용계좌 스케줄러 실행 |
|
| 773 |
+ @RequestMapping(value= {"/web/main/payBackAutoChargeAjax.do"})
|
|
| 774 |
+ public ModelAndView payBackAutoChargeAjax(HttpServletRequest request, |
|
| 775 |
+ ModelMap model) throws Exception{
|
|
| 776 |
+ |
|
| 777 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 778 |
+ modelAndView.setViewName("jsonView");
|
|
| 779 |
+ |
|
| 780 |
+ boolean isSuccess = true; |
|
| 781 |
+ String msg = ""; |
|
| 782 |
+ |
|
| 783 |
+ try {
|
|
| 784 |
+ String pageType = ""; |
|
| 785 |
+ if(request.getParameter("type") != null) {
|
|
| 786 |
+ pageType = request.getParameter("type");
|
|
| 787 |
+ } |
|
| 788 |
+ |
|
| 789 |
+ int limitCout = 1000; |
|
| 790 |
+ if(request.getParameter("limitCout") != null) {
|
|
| 791 |
+ limitCout = Integer.parseInt(request.getParameter("limitCout"));
|
|
| 792 |
+ } |
|
| 793 |
+ |
|
| 794 |
+ System.out.println("type : " + pageType);
|
|
| 795 |
+ System.out.println("limitCout : " + limitCout);
|
|
| 796 |
+ |
|
| 797 |
+ schdlrManageService.payBack(pageType, limitCout); |
|
| 798 |
+ } |
|
| 799 |
+ catch(Exception e) {
|
|
| 800 |
+ isSuccess = false; |
|
| 801 |
+ msg = e.getMessage(); |
|
| 802 |
+ } |
|
| 803 |
+ |
|
| 804 |
+ modelAndView.addObject("isSuccess", isSuccess);
|
|
| 805 |
+ modelAndView.addObject("msg", msg);
|
|
| 806 |
+ |
|
| 807 |
+ return modelAndView; |
|
| 808 |
+ } |
|
| 771 | 809 |
} |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -3951,7 +3951,7 @@ |
| 3951 | 3951 |
THEN 'W' |
| 3952 | 3952 |
ELSE 'F' |
| 3953 | 3953 |
END) IN ('F')
|
| 3954 |
- |
|
| 3954 |
+ LIMIT #recordCountPerPage# |
|
| 3955 | 3955 |
</select> |
| 3956 | 3956 |
|
| 3957 | 3957 |
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들(하루에 한번은 31일 실행) --> |
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?