이호영 이호영 2024-12-11
환불관련 작업중
@187f11057e738a17cf8e57fa757f65bfb56ce0ec
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
--- 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 @@
 		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);
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
--- 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 @@
     public void selectMsgSentFailListOneByDay()throws Exception{
 
         List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay();
+        
+        System.out.println(" ++ msgFailList.size() : " + msgFailList.size());
 
         for(MjonMsgVO vo : msgFailList) {
 
src/main/java/itn/let/mjo/test/web/TestController.java
--- src/main/java/itn/let/mjo/test/web/TestController.java
+++ src/main/java/itn/let/mjo/test/web/TestController.java
@@ -55,6 +55,8 @@
 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.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 @@
 	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 @@
 		
 	}
 	
+	@RequestMapping(value = "/web/mjon/test/refundTest.do")
+	public ResponseEntity<StatusResponse> 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<MjonMsgVO> 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, "테스트", ""));
+		
+	}
+	
 
 }
src/main/java/itn/let/schdlr/service/SchedulerUtil.java
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
@@ -39,7 +39,7 @@
 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 @@
 	 * 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 @@
 	/*
 	 * 매일 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...
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
--- 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 @@
 	
 	</procedure>
 	
+	<procedure id="MjonMsgDataDAO.updateMsgSentFailPayBackBatch" parameterClass="string">
+	
+		{call procMsgRefundBatch(#msgFailListJson#)}
+	
+	</procedure>
+	
 	<select id="mjonMsgDAO.selectMsgResultCodeAllList" parameterClass="mjonMsgResultCodeVO" resultClass="mjonMsgResultCodeVO">
 	
 		SELECT   RESULT_ID                                    AS resultId,
Add a comment
List