이호영 이호영 2024-11-07
Merge branch 'master' of http://hylee@vcs.iten.co.kr:9999/hylee/mjon_git into advc
@42ff118484c99222a9d54bddf529d1cd46ad67db
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
@@ -264,7 +264,13 @@
 
 		return (List<MjonMsgVO>) list("MjonMsgDataDAO.selectMsgSentFailList");
 	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonMsgVO> selectMsgSentFailSchedulerList(MjonMsgVO mjonMsgVO)throws Exception{
 
+		return (List<MjonMsgVO>) list("MjonMsgDataDAO.selectMsgSentFailSchedulerList", mjonMsgVO);
+	}
+	
 	@SuppressWarnings("unchecked")
 	public List<MjonMsgVO> selectMsgSentFailListOneByDay()throws Exception{
 
src/main/java/itn/let/schdlr/service/SchdlrManageService.java
--- src/main/java/itn/let/schdlr/service/SchdlrManageService.java
+++ src/main/java/itn/let/schdlr/service/SchdlrManageService.java
@@ -49,5 +49,7 @@
 	
 	//문자온 카카오톡 실패 건수 환불 배치
 	public void kakaoFailPayBack() throws Exception;
-		
+	
+	//문자온 문자전송 실패 건수 환불 배치
+	public void payBack(String type, int limitCout) throws Exception;
 }
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
@@ -91,8 +91,8 @@
 	/*
 	 * 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 {
 		
@@ -101,7 +101,10 @@
 			System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
 			
 			//문자 환불, 팩스 환불
-			PayBack("");
+			
+			
+			//PayBack("");
+			
 			/*
 			// 문자 환불
 			schdlrManageService.msgFailPayBack();	
@@ -481,18 +484,35 @@
 		}else {	//2분 마다는 7일을 대상으로 실행
 			//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴	-	2024-03-14
 			//schdlrManageService.msgFailPayBack();
-			
-			List<MjonMsgVO> 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(500);
+			List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(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 ====");
src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
--- src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
+++ src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
@@ -20,7 +20,9 @@
 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;
@@ -62,6 +64,9 @@
 
 	@Value("#{globalSettings['Globals.HOMPAGE_URL']}")
 	private String HOMPAGE_URL;
+	
+	@Resource(name="MjonMsgDataDAO")
+	private MjonMsgDataDAO mjonMsgDataDAO;
 	
 	//문자온 카카오 알림톡 발송 서비스
 	@Resource(name = "kakaoAlimTalkService")
@@ -423,5 +428,45 @@
 		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<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(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 +"초");
+			
+		}
+	}
 }
src/main/java/itn/web/ContentController.java
--- src/main/java/itn/web/ContentController.java
+++ src/main/java/itn/web/ContentController.java
@@ -36,6 +36,7 @@
 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 @@
 	} 	
 	*/
 	
+	// 전용계좌 스케줄러 실행
+	@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 = 500; 
+			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;
+	}
 }
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
@@ -4006,9 +4006,8 @@
 		WHERE SEARCH_WORD = #searchKeyword#
 	
 	</update>
-	
 	<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
-	<select id="MjonMsgDataDAO.selectMsgSentFailList" resultClass="mjonMsgVO">
+	<select id="MjonMsgDataDAO.selectMsgSentFailList">
 		
 		SELECT USER_ID                              AS userId,
 		         MSG_GROUP_ID                         AS msgGroupId,
@@ -4057,7 +4056,59 @@
 				THEN 'W'
 				ELSE 'F'
 			END) IN ('F')
+	</select>
 	
+	<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
+	<select id="MjonMsgDataDAO.selectMsgSentFailSchedulerList" resultClass="mjonMsgVO">
+		
+		SELECT USER_ID                              AS userId,
+		         MSG_GROUP_ID                         AS msgGroupId,
+		         MSG_SEQ                              AS msgSeq,
+		         USERDATA                             AS userData,
+		         REFUND_YN                            AS refundYn,
+		         RSLT_CODE                            AS rsltCode,
+		         RSLT_CODE2                           AS rsltCode2,
+		         AGENT_CODE                           AS agentCode,
+		         DATE_FORMAT(SENT_DATE,'%Y-%m-%d %T') AS sentDate,
+		         DATE_FORMAT(RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
+		  FROM   MJ_MSG_DATA MMD
+		         INNER JOIN LETTNGNRLMBER MB
+		         ON     MMD.USER_ID = MB.MBER_ID
+		  WHERE  1=1	  
+		  AND	 MMD.SENT_DATE > date_add(now(), interval -7 day)
+		  AND	 MMD.CUR_STATE          = '3'
+		  AND    MMD.REFUND_YN          = 'N'
+		  AND    MMD.RESERVE_C_YN       = 'N'
+		  AND    MMD.MSG_TYPE IN ('4','6')
+		  AND 	 MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch')
+		  AND
+			(CASE
+				WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '02' AND (MMD.RSLT_CODE = '0')
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '03' AND (MMD.RSLT_CODE = '100' OR MMD.RSLT_CODE = '101' OR MMD.RSLT_CODE = '110' OR MMD.RSLT_CODE = '800')
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '04' AND (MMD.RSLT_CODE = '4100' OR MMD.RSLT_CODE = '6600')
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '05' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '07' AND (MMD.RSLT_CODE = '6' OR MMD.RSLT_CODE = '1000')
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '08' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
+				THEN 'S'
+				WHEN MMD.AGENT_CODE = '09' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
+				THEN 'S'
+				WHEN (
+					MMD.RSLT_CODE IS NULL
+					AND MMD.RSLT_CODE2	IS NULL
+					AND MMD.SENT_DATE 	IS NULL
+					AND MMD.RSLT_DATE	IS NULL
+				)
+				THEN 'W'
+				ELSE 'F'
+			END) IN ('F')
+		LIMIT  #recordCountPerPage# 
 	</select>
 	
 	<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들(하루에 한번은 31일 실행) -->
src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp
--- src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp
+++ src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp
@@ -472,17 +472,18 @@
                             </div>
                         </div>
                         <ul class="clause_list">
+                        	<c:set var="clause_count" value="0" />
                         	<c:forEach var="result" items="${termsList}" varStatus="status">
                         	
                         		<!-- 광고성 정보 수신 제외한 약관 -->
                         		<c:if test="${result.termsId ne 'TERMS_00000025' && result.termsId ne 'TERMS_00000026' && result.termsId ne 'TERMS_00000027' && result.termsId ne 'TERMS_00000028' && result.termsId ne 'TERMS_00000029'}" >
-	                        		<c:if test="${status.index eq '0'}">
+	                        		<c:if test="${clause_count eq '0'}">
 	                        		<li class="list_open on">
 	                        		</c:if>
-	                        		<c:if test="${status.index ne '0'}">
+	                        		<c:if test="${clause_count ne '0'}">
 	                        		<li class="list_open">
 	                        		</c:if>
-		                        	
+		                        	<c:set var="clause_count" value="${clause_count + 1}"/>
 		                        	<!--필수인지 체크 후 본인인증 화면 전 필수 약관들 체크했는지 확인  -->
 		                        	<c:set var="necCheck" value="" />
 		                        	<c:if test="${result.necYn eq 'Y' }">
src/main/webapp/WEB-INF/jsp/web/main/mainPage.jsp
--- src/main/webapp/WEB-INF/jsp/web/main/mainPage.jsp
+++ src/main/webapp/WEB-INF/jsp/web/main/mainPage.jsp
@@ -62,8 +62,8 @@
 	
 	
 	if(agreePrivatePopCk != null){//개인정보 및 이용약관 개정 팝업 노출, 3일안보기 쿠키 있으면 팝업 안모여준다.
-	//	$(".agreePrivatePop").css("display","none");
-	//	$(".agreePrivatePop").hide();
+		$(".agreePrivatePop").css("display","none");
+		$(".agreePrivatePop").hide();
 	}
 	
 	if(evntPopCk != null && pointPopCk != null){//팝업 쿠키가 모두 있는 경우 안보여준다.
Add a comment
List