diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index e04effa8..0c304744 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -260,9 +260,9 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { //문자검색 전송 실패 리스트 불러오기 @SuppressWarnings("unchecked") - public List selectMsgSentFailList()throws Exception{ + public List selectMsgSentFailList(MjonMsgVO mjonMsgVO)throws Exception{ - return (List) list("MjonMsgDataDAO.selectMsgSentFailList"); + return (List) list("MjonMsgDataDAO.selectMsgSentFailList", mjonMsgVO); } @SuppressWarnings("unchecked") diff --git a/src/main/java/itn/let/schdlr/service/SchdlrManageService.java b/src/main/java/itn/let/schdlr/service/SchdlrManageService.java index fc5f707b..84bbbc05 100644 --- a/src/main/java/itn/let/schdlr/service/SchdlrManageService.java +++ b/src/main/java/itn/let/schdlr/service/SchdlrManageService.java @@ -49,5 +49,7 @@ public interface SchdlrManageService { //문자온 카카오톡 실패 건수 환불 배치 public void kakaoFailPayBack() throws Exception; - + + //문자온 문자전송 실패 건수 환불 배치 + public void payBack(String type, int limitCout) throws Exception; } diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index 4e981cec..2337da7d 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -91,8 +91,8 @@ public class SchedulerUtil { /* * 2분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. * */ - // Schdule Lock (2분동안) - @Scheduled(cron = "0 0/2 * * * ?") + // Schdule Lock (5분동안) + @Scheduled(cron = "0 0/5 * * * ?") @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runScenarioOneTime() throws Exception { @@ -102,8 +102,8 @@ public class SchedulerUtil { //문자 환불, 팩스 환불 - //임시 주석처리 - //PayBack(""); + + PayBack(""); /* // 문자 환불 @@ -484,18 +484,35 @@ public class SchedulerUtil { }else { //2분 마다는 7일을 대상으로 실행 //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 //schdlrManageService.msgFailPayBack(); - - List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); - - for(MjonMsgVO vo : msgFailList) { - try { - mjonMsgDataDAO.updateMsgSentFailPayBack(vo); - }catch(Exception ex) { - System.out.println("=============SchedulerUtil=====PayBack Catch =============>"); - System.out.println(vo.getUserId()+" : "+ vo.getMsgGroupId() +" : "+ vo.getUserData()); - ex.printStackTrace(); - } - } + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setRecordCountPerPage(1000); + List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(mjonMsgVO); + long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 + int batchSize = 300; + int totalSize = msgFailList.size(); + int endj =0; + for (int i = 0; i < totalSize; i += batchSize) { + int end = Math.min(i + batchSize, totalSize); + long beforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 + for(int j=endj; j < end; j++) { + System.out.println(j+" : "+ end); + try { + mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j)); + }catch(Exception ex) { + System.out.println("=============SchedulerUtil=====PayBack Catch =============>"); + System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData()); + ex.printStackTrace(); + } + } + endj = end; + + long afterTime = System.currentTimeMillis(); // 코드 실행 후 시간 + long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack for 1 =============> : " + secDiffTime +"초"); + } + long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 + long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초"); } System.out.println("==== faxFailPayBack ===="); diff --git a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java index 1cf03a14..26d4f67c 100644 --- a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java +++ b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java @@ -20,7 +20,9 @@ import itn.com.cmm.service.impl.FileManageDAO; import itn.let.fax.user.service.impl.FaxDAO; import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; import itn.let.mjo.mjocommon.MjonCommon; +import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataService; +import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.StVcVO; import itn.let.mjo.payva.service.VacsAhstService; @@ -63,6 +65,9 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements @Value("#{globalSettings['Globals.HOMPAGE_URL']}") private String HOMPAGE_URL; + @Resource(name="MjonMsgDataDAO") + private MjonMsgDataDAO mjonMsgDataDAO; + //문자온 카카오 알림톡 발송 서비스 @Resource(name = "kakaoAlimTalkService") private KakaoAlimTalkService kakaoAlimTalkService; @@ -423,5 +428,45 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements kakaoAlimTalkService.selectKakaoAtSentRefundList(); } - + + @Override + public void payBack(String type, int limitCout) throws Exception { + // 문자 환불 + if ("ONE".equals(type)) { //하루에 한번만 31일 대상으로 실행 + msgFailPayBackOneByDay(); + + }else { //2분 마다는 7일을 대상으로 실행 + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setRecordCountPerPage(limitCout); + + List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(mjonMsgVO); + long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 + int batchSize = 300; + int totalSize = msgFailList.size(); + int endj =0; + for (int i = 0; i < totalSize; i += batchSize) { + int end = Math.min(i + batchSize, totalSize); + long beforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 + for(int j=endj; j < end; j++) { + System.out.println(j+" : "+ end); + try { + mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j)); + }catch(Exception ex) { + System.out.println("=============SchedulerUtil=====PayBack Catch =============>"); + System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData()); + ex.printStackTrace(); + } + } + endj = end; + + long afterTime = System.currentTimeMillis(); // 코드 실행 후 시간 + long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack for 1 =============> : " + secDiffTime +"초"); + } + long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 + long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초"); + + } + } } diff --git a/src/main/java/itn/web/ContentController.java b/src/main/java/itn/web/ContentController.java index 0928ae14..3f6a97e6 100644 --- a/src/main/java/itn/web/ContentController.java +++ b/src/main/java/itn/web/ContentController.java @@ -36,6 +36,7 @@ import itn.let.lett.service.LetterService; import itn.let.lett.service.LetterVO; import itn.let.mjo.pay.service.MjonPayVO; import itn.let.schdlr.service.SchdlrManageService; +import itn.let.schdlr.service.SchedulerUtil; import itn.let.uss.ion.cnt.service.CntManageVO; import itn.let.uss.ion.cnt.service.EgovCntManageService; @@ -768,4 +769,41 @@ public class ContentController{ } */ + // 전용계좌 스케줄러 실행 + @RequestMapping(value= {"/web/main/payBackAutoChargeAjax.do"}) + public ModelAndView payBackAutoChargeAjax(HttpServletRequest request, + ModelMap model) throws Exception{ + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + boolean isSuccess = true; + String msg = ""; + + try { + String pageType = ""; + if(request.getParameter("type") != null) { + pageType = request.getParameter("type"); + } + + int limitCout = 1000; + if(request.getParameter("limitCout") != null) { + limitCout = Integer.parseInt(request.getParameter("limitCout")); + } + + System.out.println("type : " + pageType); + System.out.println("limitCout : " + limitCout); + + schdlrManageService.payBack(pageType, limitCout); + } + catch(Exception e) { + isSuccess = false; + msg = e.getMessage(); + } + + modelAndView.addObject("isSuccess", isSuccess); + modelAndView.addObject("msg", msg); + + return modelAndView; + } } diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 5a382ae1..fee9133c 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -3951,7 +3951,7 @@ THEN 'W' ELSE 'F' END) IN ('F') - + LIMIT #recordCountPerPage#