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 cc6d863e..775d4b61 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 @@ -296,6 +296,11 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { select("MjonMsgDataDAO.updateMsgSentFailPayBack", mjonMsgVO); } + public void updateMsgSentFailPayBackBatch(String msgFailListJson) { + + select("MjonMsgDataDAO.updateMsgSentFailPayBackBatch", msgFailListJson); + } + //현재 월 총 발송 건수 합계 구하기 public String selectMsgSentSumData(String userId) throws Exception{ return (String) select("MjonMsgDataDAO.selectMsgSentSumData", userId); diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index c4720030..cb857dda 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -3097,6 +3097,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M public void selectMsgSentFailListOneByDay()throws Exception{ List msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); + + System.out.println(" ++ msgFailList.size() : " + msgFailList.size()); for(MjonMsgVO vo : msgFailList) { diff --git a/src/main/java/itn/let/mjo/test/web/TestController.java b/src/main/java/itn/let/mjo/test/web/TestController.java index 9c30a56f..7beda0eb 100644 --- a/src/main/java/itn/let/mjo/test/web/TestController.java +++ b/src/main/java/itn/let/mjo/test/web/TestController.java @@ -55,6 +55,8 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.util.UriUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; @@ -84,6 +86,7 @@ import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; +import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; import itn.let.mjo.msgholiday.service.MsgHolidayService; import itn.let.mjo.msgholiday.service.MsgHolidayVO; @@ -232,7 +235,10 @@ public class TestController { private EgovUserManageService egovUserManageService; @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; + private MsgHolidayService msgHolidayService; + + @Resource(name="MjonMsgDataDAO") + private MjonMsgDataDAO mjonMsgDataDAO; private static final Logger logger = LoggerFactory.getLogger(TestController.class); @@ -3411,5 +3417,75 @@ public class TestController { } + @RequestMapping(value = "/web/mjon/test/refundTest.do") + public ResponseEntity refundTest( + @RequestParam String p_type, + HttpServletRequest request, + ModelMap model) throws Exception { + System.out.println(" p_type :: "+p_type); + + long startTime = System.nanoTime(); // 시작 시간 기록 + // 문자 환불 + if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행 + schdlrManageService.msgFailPayBackOneByDay(); + + }else { + // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. + //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 + //schdlrManageService.msgFailPayBack(); + + List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); + + // 리스트가 비어있는 경우 종료 + if (msgFailList == null || msgFailList.isEmpty()) { + System.out.println("No messages to process."); + return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "데이터 없음", "")); + } + + + long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 +// int count = 0; + System.out.println("== msgFailList =============> : "+ msgFailList.size()); +// for(MjonMsgVO vo : msgFailList) { +// System.out.println(count + " : "+ msgFailList.size()); + + try { + + // JSON 변환 + ObjectMapper objectMapper = new ObjectMapper(); + String msgFailListJson = objectMapper.writeValueAsString(msgFailList); + + System.out.println("JSON Data: " + msgFailListJson); + + + mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson); + +// mjonMsgDataDAO.updateMsgSentFailPayBack(vo); + }catch(Exception ex) { + ex.printStackTrace(); + } + +// count = count + 1; +// } + long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 + long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) + System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초"); + } + + long endTime = System.nanoTime(); // 종료 시간 기록 + long executionTimeInSeconds = (endTime - startTime) / 1_000_000_000; // 실행 시간 (초) + + // 분과 초로 변환 + long minutes = executionTimeInSeconds / 60; // 분 + long seconds = executionTimeInSeconds % 60; // 초 + + System.out.println("Execution time: " + minutes + " minutes " + seconds + " seconds"); + + +// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "", "")); + return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "테스트", "")); + + } + } diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index deebfdef..1a70d231 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -39,7 +39,7 @@ import net.javacrumbs.shedlock.core.SchedulerLock; import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; -@Profile({"!local", "!dev"}) +@Profile({"!local"}) @Service("SchedulerUtil") @EnableScheduling @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // Scheduler Lock 사용 가능 설정 (기본 30초동안 Lock) @@ -92,8 +92,8 @@ public class SchedulerUtil { * 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. * */ // Schdule Lock (10분동안) - @Scheduled(cron = "0 0/10 * * * ?") - @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) +// @Scheduled(cron = "0 0/10 * * * ?") +// @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runScenarioOneTime() throws Exception { // do something... @@ -121,8 +121,8 @@ public class SchedulerUtil { /* * 매일 5시20분에 31일전 데이터에서 환불 대상을 찾아서 환불 한다. * */ - @Scheduled(cron = "20 20 5 * * ?") - @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) +// @Scheduled(cron = "20 20 5 * * ?") +// @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runScenarioOneTimeOneByDay() throws Exception { // do something... 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 157d6970..2df9d3c7 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 @@ -4203,6 +4203,12 @@ + + + {call procMsgRefundBatch(#msgFailListJson#)} + + +