--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
... | ... | @@ -296,6 +296,11 @@ |
| 296 | 296 |
select("MjonMsgDataDAO.updateMsgSentFailPayBack", mjonMsgVO);
|
| 297 | 297 |
} |
| 298 | 298 |
|
| 299 |
+ public void updateMsgSentFailPayBackBatch(String msgFailListJson) {
|
|
| 300 |
+ |
|
| 301 |
+ select("MjonMsgDataDAO.updateMsgSentFailPayBackBatch", msgFailListJson);
|
|
| 302 |
+ } |
|
| 303 |
+ |
|
| 299 | 304 |
//현재 월 총 발송 건수 합계 구하기 |
| 300 | 305 |
public String selectMsgSentSumData(String userId) throws Exception{
|
| 301 | 306 |
return (String) select("MjonMsgDataDAO.selectMsgSentSumData", userId);
|
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
... | ... | @@ -3097,6 +3097,8 @@ |
| 3097 | 3097 |
public void selectMsgSentFailListOneByDay()throws Exception{
|
| 3098 | 3098 |
|
| 3099 | 3099 |
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay(); |
| 3100 |
+ |
|
| 3101 |
+ System.out.println(" ++ msgFailList.size() : " + msgFailList.size());
|
|
| 3100 | 3102 |
|
| 3101 | 3103 |
for(MjonMsgVO vo : msgFailList) {
|
| 3102 | 3104 |
|
--- src/main/java/itn/let/mjo/test/web/TestController.java
+++ src/main/java/itn/let/mjo/test/web/TestController.java
... | ... | @@ -55,6 +55,8 @@ |
| 55 | 55 |
import org.springframework.web.servlet.mvc.support.RedirectAttributes; |
| 56 | 56 |
import org.springframework.web.util.UriUtils; |
| 57 | 57 |
|
| 58 |
+import com.fasterxml.jackson.databind.ObjectMapper; |
|
| 59 |
+ |
|
| 58 | 60 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 59 | 61 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 60 | 62 |
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; |
... | ... | @@ -84,6 +86,7 @@ |
| 84 | 86 |
import itn.let.mjo.msg.service.MjonMsgVO; |
| 85 | 87 |
import itn.let.mjo.msgdata.service.MjonMsgDataService; |
| 86 | 88 |
import itn.let.mjo.msgdata.service.MjonMsgReturnVO; |
| 89 |
+import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; |
|
| 87 | 90 |
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; |
| 88 | 91 |
import itn.let.mjo.msgholiday.service.MsgHolidayService; |
| 89 | 92 |
import itn.let.mjo.msgholiday.service.MsgHolidayVO; |
... | ... | @@ -232,7 +235,10 @@ |
| 232 | 235 |
private EgovUserManageService egovUserManageService; |
| 233 | 236 |
|
| 234 | 237 |
@Resource(name = "MsgHolidayService") |
| 235 |
- private MsgHolidayService msgHolidayService; |
|
| 238 |
+ private MsgHolidayService msgHolidayService; |
|
| 239 |
+ |
|
| 240 |
+ @Resource(name="MjonMsgDataDAO") |
|
| 241 |
+ private MjonMsgDataDAO mjonMsgDataDAO; |
|
| 236 | 242 |
|
| 237 | 243 |
private static final Logger logger = LoggerFactory.getLogger(TestController.class); |
| 238 | 244 |
|
... | ... | @@ -3411,5 +3417,75 @@ |
| 3411 | 3417 |
|
| 3412 | 3418 |
} |
| 3413 | 3419 |
|
| 3420 |
+ @RequestMapping(value = "/web/mjon/test/refundTest.do") |
|
| 3421 |
+ public ResponseEntity<StatusResponse> refundTest( |
|
| 3422 |
+ @RequestParam String p_type, |
|
| 3423 |
+ HttpServletRequest request, |
|
| 3424 |
+ ModelMap model) throws Exception {
|
|
| 3425 |
+ System.out.println(" p_type :: "+p_type);
|
|
| 3426 |
+ |
|
| 3427 |
+ long startTime = System.nanoTime(); // 시작 시간 기록 |
|
| 3428 |
+ // 문자 환불 |
|
| 3429 |
+ if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행
|
|
| 3430 |
+ schdlrManageService.msgFailPayBackOneByDay(); |
|
| 3431 |
+ |
|
| 3432 |
+ }else {
|
|
| 3433 |
+ // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. |
|
| 3434 |
+ //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 |
|
| 3435 |
+ //schdlrManageService.msgFailPayBack(); |
|
| 3436 |
+ |
|
| 3437 |
+ List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); |
|
| 3438 |
+ |
|
| 3439 |
+ // 리스트가 비어있는 경우 종료 |
|
| 3440 |
+ if (msgFailList == null || msgFailList.isEmpty()) {
|
|
| 3441 |
+ System.out.println("No messages to process.");
|
|
| 3442 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "데이터 없음", "")); |
|
| 3443 |
+ } |
|
| 3444 |
+ |
|
| 3445 |
+ |
|
| 3446 |
+ long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 |
|
| 3447 |
+// int count = 0; |
|
| 3448 |
+ System.out.println("== msgFailList =============> : "+ msgFailList.size());
|
|
| 3449 |
+// for(MjonMsgVO vo : msgFailList) {
|
|
| 3450 |
+// System.out.println(count + " : "+ msgFailList.size()); |
|
| 3451 |
+ |
|
| 3452 |
+ try {
|
|
| 3453 |
+ |
|
| 3454 |
+ // JSON 변환 |
|
| 3455 |
+ ObjectMapper objectMapper = new ObjectMapper(); |
|
| 3456 |
+ String msgFailListJson = objectMapper.writeValueAsString(msgFailList); |
|
| 3457 |
+ |
|
| 3458 |
+ System.out.println("JSON Data: " + msgFailListJson);
|
|
| 3459 |
+ |
|
| 3460 |
+ |
|
| 3461 |
+ mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson); |
|
| 3462 |
+ |
|
| 3463 |
+// mjonMsgDataDAO.updateMsgSentFailPayBack(vo); |
|
| 3464 |
+ }catch(Exception ex) {
|
|
| 3465 |
+ ex.printStackTrace(); |
|
| 3466 |
+ } |
|
| 3467 |
+ |
|
| 3468 |
+// count = count + 1; |
|
| 3469 |
+// } |
|
| 3470 |
+ long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 |
|
| 3471 |
+ long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) |
|
| 3472 |
+ System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초");
|
|
| 3473 |
+ } |
|
| 3474 |
+ |
|
| 3475 |
+ long endTime = System.nanoTime(); // 종료 시간 기록 |
|
| 3476 |
+ long executionTimeInSeconds = (endTime - startTime) / 1_000_000_000; // 실행 시간 (초) |
|
| 3477 |
+ |
|
| 3478 |
+ // 분과 초로 변환 |
|
| 3479 |
+ long minutes = executionTimeInSeconds / 60; // 분 |
|
| 3480 |
+ long seconds = executionTimeInSeconds % 60; // 초 |
|
| 3481 |
+ |
|
| 3482 |
+ System.out.println("Execution time: " + minutes + " minutes " + seconds + " seconds");
|
|
| 3483 |
+ |
|
| 3484 |
+ |
|
| 3485 |
+// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "", "")); |
|
| 3486 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "테스트", "")); |
|
| 3487 |
+ |
|
| 3488 |
+ } |
|
| 3489 |
+ |
|
| 3414 | 3490 |
|
| 3415 | 3491 |
} |
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
... | ... | @@ -39,7 +39,7 @@ |
| 39 | 39 |
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; |
| 40 | 40 |
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; |
| 41 | 41 |
|
| 42 |
-@Profile({"!local", "!dev"})
|
|
| 42 |
+@Profile({"!local"})
|
|
| 43 | 43 |
@Service("SchedulerUtil")
|
| 44 | 44 |
@EnableScheduling |
| 45 | 45 |
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // Scheduler Lock 사용 가능 설정 (기본 30초동안 Lock) |
... | ... | @@ -92,8 +92,8 @@ |
| 92 | 92 |
* 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. |
| 93 | 93 |
* */ |
| 94 | 94 |
// Schdule Lock (10분동안) |
| 95 |
- @Scheduled(cron = "0 0/10 * * * ?") |
|
| 96 |
- @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
|
| 95 |
+// @Scheduled(cron = "0 0/10 * * * ?") |
|
| 96 |
+// @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
|
| 97 | 97 |
public void runScenarioOneTime() throws Exception {
|
| 98 | 98 |
|
| 99 | 99 |
// do something... |
... | ... | @@ -121,8 +121,8 @@ |
| 121 | 121 |
/* |
| 122 | 122 |
* 매일 5시20분에 31일전 데이터에서 환불 대상을 찾아서 환불 한다. |
| 123 | 123 |
* */ |
| 124 |
- @Scheduled(cron = "20 20 5 * * ?") |
|
| 125 |
- @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
|
| 124 |
+// @Scheduled(cron = "20 20 5 * * ?") |
|
| 125 |
+// @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) |
|
| 126 | 126 |
public void runScenarioOneTimeOneByDay() throws Exception {
|
| 127 | 127 |
|
| 128 | 128 |
// do something... |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -4203,6 +4203,12 @@ |
| 4203 | 4203 |
|
| 4204 | 4204 |
</procedure> |
| 4205 | 4205 |
|
| 4206 |
+ <procedure id="MjonMsgDataDAO.updateMsgSentFailPayBackBatch" parameterClass="string"> |
|
| 4207 |
+ |
|
| 4208 |
+ {call procMsgRefundBatch(#msgFailListJson#)}
|
|
| 4209 |
+ |
|
| 4210 |
+ </procedure> |
|
| 4211 |
+ |
|
| 4206 | 4212 |
<select id="mjonMsgDAO.selectMsgResultCodeAllList" parameterClass="mjonMsgResultCodeVO" resultClass="mjonMsgResultCodeVO"> |
| 4207 | 4213 |
|
| 4208 | 4214 |
SELECT RESULT_ID AS resultId, |
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?