이호영 이호영 2024-12-12
팩스 환불 로직 개선
@2ac147144c0686b8835f265f62da21fc5a022dc7
 
src/main/java/itn/let/mjo/msg/service/RefundDTO.java (added)
+++ src/main/java/itn/let/mjo/msg/service/RefundDTO.java
@@ -0,0 +1,20 @@
+package itn.let.mjo.msg.service;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class RefundDTO {
+	private String userId;
+	private String msgGroupId;
+	private int userData;
+	private String 	eachPrice ;	// 전송문자 개별가격
+
+	public RefundDTO(String userId, String msgGroupId, int userData, String eachPrice) {
+		this.userId = userId;
+		this.msgGroupId = msgGroupId;
+		this.userData = userData;
+		this.eachPrice = eachPrice;
+	}
+}
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
This diff is too big to display.
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
@@ -17,6 +17,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.imageio.ImageIO;
@@ -84,6 +85,7 @@
 import itn.let.mjo.mjocommon.MjonHolidayApi;
 import itn.let.mjo.msg.service.MjonMsgService;
 import itn.let.mjo.msg.service.MjonMsgVO;
+import itn.let.mjo.msg.service.RefundDTO;
 import itn.let.mjo.msgdata.service.MjonMsgDataService;
 import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
 import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
@@ -3433,8 +3435,14 @@
 			// 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
 			//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴	-	2024-03-14
 			//schdlrManageService.msgFailPayBack();
-			
+
+			long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간
 			List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList();
+			
+
+			long forAfterTime1 = System.currentTimeMillis(); // 코드 실행 후 시간
+			long forSecDiffTime1 = (forAfterTime1 - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위)
+			System.out.println("==PayBack list =============> 수량 : "+msgFailList.size()+"  =====  "  + forSecDiffTime1 +"초");
 			
 			// 리스트가 비어있는 경우 종료
 			if (msgFailList == null || msgFailList.isEmpty()) {
@@ -3443,29 +3451,22 @@
 			}
 			
 			
-			long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간
-//			int count = 0;
 			System.out.println("==  msgFailList  =============>  : "+ msgFailList.size());
-//			for(MjonMsgVO vo : msgFailList) {
-//				System.out.println(count + " : "+ msgFailList.size());
+			try {
+		           // 필요한 필드만 DTO로 매핑
+	            List<RefundDTO> dtoList = msgFailList.stream()
+	                .map(msg -> new RefundDTO(msg.getUserId(), msg.getMsgGroupId(), Integer.parseInt(msg.getUserData()), msg.getEachPrice()))
+	                .collect(Collectors.toList());
+				// JSON 변환
+				ObjectMapper objectMapper = new ObjectMapper();
+				String msgFailListJson = objectMapper.writeValueAsString(dtoList);
+
+				mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson);
 				
-				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();
-				}
+			}catch(Exception ex) {
+				ex.printStackTrace();
+			}
 				
-//				count = count + 1;
 //			}
 			long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간
 			long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위)
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
@@ -52,4 +52,6 @@
 	
 	//문자온 문자전송 실패 건수 환불 배치
 	public void payBack(String type, int limitCout) throws Exception;
+
+	public void payBack_advc(String p_type) 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
@@ -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...
@@ -119,10 +119,10 @@
 	}
 	
 	/*
-	 * 매일 5시20분에 31일전 데이터에서 환불 대상을 찾아서 환불 한다.
+	 * 매일 5시20분 20초에 31일전 데이터에서 환불 대상을 찾아서 환불 한다.
 	 * */
-//	@Scheduled(cron = "20 20 5 * * ?")
-//	@SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
+	@Scheduled(cron = "20 25 5 * * ?")
+	@SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
 	public void runScenarioOneTimeOneByDay() throws Exception {
 		
 		// do something...
@@ -477,10 +477,14 @@
 	
 	//환불 실행
 	private void PayBack(String p_type) throws Exception {
+		
+		
 		// 문자 환불
+		schdlrManageService.payBack_advc(p_type);
+		
+		/*
 		if ("ONE".equals(p_type)) {	//하루에 한번만 31일 대상으로 실행
 			schdlrManageService.msgFailPayBackOneByDay();	
-			
 		}else {	
 			// 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
 			//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴	-	2024-03-14
@@ -489,10 +493,8 @@
 			List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList();
 			
 			long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간
-			int count = 0;
 			System.out.println("==  msgFailList  =============>  : "+ msgFailList.size());
 			for(MjonMsgVO vo : msgFailList) {
-				System.out.println(count + " : "+ msgFailList.size());
 				
 				try {
 					mjonMsgDataDAO.updateMsgSentFailPayBack(vo);
@@ -502,15 +504,16 @@
 					ex.printStackTrace();
 				}
 				
-				count = count + 1;
 			}
 			long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간
 			long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위)
 			System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+"  =====  "  + forSecDiffTime +"초");
 		}
 			
+		*/
 		System.out.println("==== faxFailPayBack ====");
 		// 팩스 환불
-		schdlrManageService.faxFailPayBack();	
+		schdlrManageService.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
@@ -1,8 +1,10 @@
 package itn.let.schdlr.service.impl;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
@@ -10,7 +12,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import egovframework.rte.fdl.idgnr.EgovIdGnrService;
@@ -19,8 +25,10 @@
 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.mail.service.StatusResponse;
 import itn.let.mjo.mjocommon.MjonCommon;
 import itn.let.mjo.msg.service.MjonMsgVO;
+import itn.let.mjo.msg.service.RefundDTO;
 import itn.let.mjo.msgdata.service.MjonMsgDataService;
 import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
 import itn.let.mjo.pay.service.MjonPayService;
@@ -40,21 +48,21 @@
 
 	@Resource(name = "egovItsmSchdlrGnrService")
 	private EgovIdGnrService idgenSchdlrId;
-	
+
 	@Resource(name = "egovItsmSchdlrConfigGnrService")
 	private EgovIdGnrService idgenSchCfgId;
-	
+
 	@Resource(name = "egovItsmSchdlrShareIdGnrService")
 	private EgovIdGnrService idgenSchdlrShareId;
-	
-	@Resource(name="SchdlrManageDAO")
+
+	@Resource(name = "SchdlrManageDAO")
 	private SchdlrManageDAO schdlrManageDAO;
-	
+
 	@Resource(name = "FileManageDAO")
 	private FileManageDAO fileMngDAO;
 
-	@Resource(name="EgovFileMngService")
-    private EgovFileMngService fileMngService;
+	@Resource(name = "EgovFileMngService")
+	private EgovFileMngService fileMngService;
 
 	@Resource(name = "egovMultiPartEmail")
 	private EgovMultiPartEmail egovMultiPartEmail;
@@ -64,48 +72,48 @@
 
 	@Value("#{globalSettings['Globals.HOMPAGE_URL']}")
 	private String HOMPAGE_URL;
-	
-	@Resource(name="MjonMsgDataDAO")
+
+	@Resource(name = "MjonMsgDataDAO")
 	private MjonMsgDataDAO mjonMsgDataDAO;
-	
-	//문자온 카카오 알림톡 발송 서비스
+
+	// 문자온 카카오 알림톡 발송 서비스
 	@Resource(name = "kakaoAlimTalkService")
 	private KakaoAlimTalkService kakaoAlimTalkService;
-	
-	//문자온 문자 발송 서비스
-	@Resource(name = "MjonMsgDataService")
-    private MjonMsgDataService mjonMsgDataService;
-	
-	//세틀뱅크 입금전문 서비스
-	@Resource(name = "vacsAhstService")
-    private VacsAhstService vacsAhstService;
-	
-	//문자온 결제 서비스
-	@Resource(name = "mjonPayService")
-    private MjonPayService mjonPayService;
 
-    /** userManageService */
+	// 문자온 문자 발송 서비스
+	@Resource(name = "MjonMsgDataService")
+	private MjonMsgDataService mjonMsgDataService;
+
+	// 세틀뱅크 입금전문 서비스
+	@Resource(name = "vacsAhstService")
+	private VacsAhstService vacsAhstService;
+
+	// 문자온 결제 서비스
+	@Resource(name = "mjonPayService")
+	private MjonPayService mjonPayService;
+
+	/** userManageService */
 	@Resource(name = "userManageService")
 	private EgovUserManageService userManageService;
-	
-	/** 사이트 설정 */ 
+
+	/** 사이트 설정 */
 	@Resource(name = "egovSiteManagerService")
-	EgovSiteManagerService egovSiteManagerService;	
-	
+	EgovSiteManagerService egovSiteManagerService;
+
 	/** 알림전송 Util */
 	@Resource(name = "mjonNoticeSendUtil")
-	private MjonNoticeSendUtil mjonNoticeSendUtil;    
-	
-	@Resource(name="MjonCommon")
+	private MjonNoticeSendUtil mjonNoticeSendUtil;
+
+	@Resource(name = "MjonCommon")
 	private MjonCommon mjonCommon;
-	
+
 	@Resource(name = "faxDAO")
 	public FaxDAO faxDao;
-	
+
 	private static final Logger LOGGER = LoggerFactory.getLogger(SchdlrManageServiceImpl.class);
-	
+
 	// 스케줄달력 목록(월별)
-	public List<SchdlrVO> selectSchdlrList(SchdlrVO schdlrVO)  throws Exception {
+	public List<SchdlrVO> selectSchdlrList(SchdlrVO schdlrVO) throws Exception {
 		return schdlrManageDAO.selectSchdlrList(schdlrVO);
 	}
 
@@ -113,12 +121,12 @@
 	public void schdlrInsert(SchdlrVO schdlrVO) throws Exception {
 		schdlrVO.setSchdlrId(idgenSchdlrId.getNextStringId()); // 신규 키
 		schdlrManageDAO.schdlrInsert(schdlrVO); // 등록
-		
-		if(schdlrVO.getSchdlrUserId() != null && schdlrVO.getSchdlrUserId().length() != 0) {
+
+		if (schdlrVO.getSchdlrUserId() != null && schdlrVO.getSchdlrUserId().length() != 0) {
 			String userId[] = schdlrVO.getSchdlrUserId().split(",");
 			String userName[] = schdlrVO.getSchdlrUserName().split(",");
-			
-			for(int i=0; i <userId.length; i++ ) {
+
+			for (int i = 0; i < userId.length; i++) {
 //				System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@   userID    : "+userId[i]);
 //				System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@   userName    : "+userName[i]);
 				schdlrVO.setSchdlrUserId(userId[i]);
@@ -128,22 +136,22 @@
 			}
 		}
 	}
-	
+
 	// 스케줄 수정
 	public void schdlrUpdate(SchdlrVO schdlrVO) throws Exception {
 		schdlrManageDAO.schdlrUpdate(schdlrVO);
-		
-		if(!("").equals(schdlrVO.getSchdlrUserId())) {
+
+		if (!("").equals(schdlrVO.getSchdlrUserId())) {
 			String userId[] = schdlrVO.getSchdlrUserId().split(",");
 			String userName[] = schdlrVO.getSchdlrUserName().split(",");
-			
+
 			int schdlrShareCount = schdlrManageDAO.selectSchdlrShareCount(schdlrVO);
-			
-			if(schdlrShareCount != 0) {
+
+			if (schdlrShareCount != 0) {
 				schdlrManageDAO.deleteSchdlrShare(schdlrVO.getSchdlrId());
 			}
-			
-			for(int i=0; i <userId.length; i++ ) {
+
+			for (int i = 0; i < userId.length; i++) {
 //				System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@   userID    : "+userId[i]);
 //				System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@   userName    : "+userName[i]);
 				schdlrVO.setSchdlrUserId(userId[i]);
@@ -153,38 +161,37 @@
 			}
 		}
 	}
-	
+
 	// 일정 상세 조회
 	public SchdlrVO selectSchdlrDetail(SchdlrVO schdlrVO) throws Exception {
 		return schdlrManageDAO.selectSchdlrDetail(schdlrVO);
 	}
-	
+
 	@Override
 	public List<SchdlrVO> selectSchdlrShare(SchdlrVO schdlrVO) throws Exception {
 		return schdlrManageDAO.selectSchdlrShare(schdlrVO);
 	}
-	
 
 	// 일정 목록 조회
-	public List<SchdlrVO> selectSchList(SchdlrVO schdlrVO)  throws Exception {
+	public List<SchdlrVO> selectSchList(SchdlrVO schdlrVO) throws Exception {
 		return schdlrManageDAO.selectSchList(schdlrVO);
 	}
-	
+
 	// 환경설정 등록
 	public void insertSchConfig(SchdlrVO schdlrVO) throws Exception {
 		schdlrVO.setSchdlrCfgId(idgenSchCfgId.getNextStringId()); // 신규 키
 		schdlrManageDAO.insertSchConfig(schdlrVO); // 등록
 	}
-	
+
 	// 환경설정 수정
 	public void updateSchConfig(SchdlrVO schdlrVO) throws Exception {
 		schdlrManageDAO.updateSchConfig(schdlrVO);
 	}
-	
+
 	// 환경설정 상세 조회
 	public SchdlrVO selectSchConfigDetail(SchdlrVO schdlrVO) throws Exception {
 		SchdlrVO result = schdlrManageDAO.selectSchConfigDetail(schdlrVO);
-		
+
 		if (result == null) { // 첫 조회시 기본값 등록
 			result = new SchdlrVO();
 			result.setSchdlrCfgId(idgenSchCfgId.getNextStringId());
@@ -197,163 +204,174 @@
 			result.setSchdlrColorPerCd("03");
 			schdlrManageDAO.insertSchConfig(result);
 		}
-		
+
 		return result;
 	}
-	
+
 	// 일정 알림 메일 전송
 	public void schMailSend(String bgnDateTime) throws Exception {
 		List<SchdlrVO> mailList = schdlrManageDAO.selectMailSendList(bgnDateTime);
-		
+
 		for (SchdlrVO vo : mailList) {
-			if (("").equals(vo.getEmailAdres())) continue;
-			
+			if (("").equals(vo.getEmailAdres()))
+				continue;
+
 			boolean result = sendMail(vo);
 			LOGGER.debug("send succ update:", result);
-			
-			if (result) schdlrManageDAO.updateMailSend(vo);
+
+			if (result)
+				schdlrManageDAO.updateMailSend(vo);
 		}
 	}
-	
 
 	/**
 	 * 일정 알림 메일 전송
+	 * 
 	 * @param SchdlrVO schdlrVO
 	 * @return boolean
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	private boolean sendMail(SchdlrVO schdlrVO) throws Exception {
 		boolean result = false;
 		try {
-			String mailSj = "["+schdlrVO.getSchdlrTitle()+"] N-CMS 스케줄러 일정 메일 알림입니다.";
+			String mailSj = "[" + schdlrVO.getSchdlrTitle() + "] N-CMS 스케줄러 일정 메일 알림입니다.";
 			String alram = "";
-			
+
 //			// 알림설정 표시
 //			if (Pattern.matches("^[0-9]*$", schdlrVO.getSchdlrAlarmCnd())) {
 //				alram = schdlrVO.getSchdlrAlarmCnd() + " 분전";
 //			} else if (schdlrVO.getSchdlrAlarmCnd().equals("etc")) {
 //				alram = schdlrVO.getSchdlrAlarmDatetime();
 //			}
-			switch(schdlrVO.getSchdlrAlarmCnd()) {
-				case "0" : alram = "정시"; break;
-				case "10" : alram = "십분 전"; break;
-				case "30" : alram = "삼십분 전"; break;
-				case "60" : alram = "한시간 전"; break;
-				case "etc" : alram = schdlrVO.getSchdlrAlarmDatetime(); break;
+			switch (schdlrVO.getSchdlrAlarmCnd()) {
+			case "0":
+				alram = "정시";
+				break;
+			case "10":
+				alram = "십분 전";
+				break;
+			case "30":
+				alram = "삼십분 전";
+				break;
+			case "60":
+				alram = "한시간 전";
+				break;
+			case "etc":
+				alram = schdlrVO.getSchdlrAlarmDatetime();
+				break;
 			}
-			
-			String mailContent = Jsoup.parse(new File(MAIL_CONTENT_PATH + "/direct/mail_template/sch_alrm_cont.html"), "UTF-8").toString();
+
+			String mailContent = Jsoup
+					.parse(new File(MAIL_CONTENT_PATH + "/direct/mail_template/sch_alrm_cont.html"), "UTF-8")
+					.toString();
 			mailContent = mailContent.replace("#일정명", schdlrVO.getSchdlrTitle());
-			mailContent = mailContent.replace("#일시", schdlrVO.getSchdlrBgnDatetime() + " ~ " + schdlrVO.getSchdlrEndDatetime());
+			mailContent = mailContent.replace("#일시",
+					schdlrVO.getSchdlrBgnDatetime() + " ~ " + schdlrVO.getSchdlrEndDatetime());
 			mailContent = mailContent.replace("#장소", schdlrVO.getSchdlrPlace());
 			mailContent = mailContent.replace("#내용", schdlrVO.getSchdlrCn().replaceAll("(\r\n|\r|\n|\n\r)", "<br>"));
 			mailContent = mailContent.replace("#알림설정", alram);
-			
+
 			String resultMsg = egovMultiPartEmail.send(schdlrVO.getEmailAdres(), mailSj, "", mailContent);
 //			egovMultiPartEmail.send(mailAddres, mailSj", mgs); // Simple Text Mail method
-			
+
 			result = true;
 			LOGGER.debug("mail send resultMsg: ", resultMsg);
 		} catch (Exception ex) {
 			LOGGER.error("Sending Mail Exception : {} [unknown Exception]", ex.getCause());
-			//LOGGER.error(ex.getMessage());
+			// LOGGER.error(ex.getMessage());
 		}
-		
+
 		return result;
 	}
-	
-	
+
 	// 메인화면 > 전체일정
-	public List<SchdlrVO> selectMainSchList(SchdlrVO schdlrVO)  throws Exception {
+	public List<SchdlrVO> selectMainSchList(SchdlrVO schdlrVO) throws Exception {
 		return schdlrManageDAO.selectMainSchList(schdlrVO);
 	}
-	
-	//문자온 문자발송 실패 건수 환불 배치(1주 대상)
-	public void msgFailPayBack() throws Exception{
-		
+
+	// 문자온 문자발송 실패 건수 환불 배치(1주 대상)
+	public void msgFailPayBack() throws Exception {
+
 		Date now = new Date();
 		System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(1weeks)" + now);
 		/*
-		 * 문자발송 실패 건수 확인 및 캐시 환불 처리 
-		 * */
+		 * 문자발송 실패 건수 확인 및 캐시 환불 처리
+		 */
 		mjonMsgDataService.selectMsgSentFailList();
-		
+
 		/*
 		 * 세틀뱅크 입금 확인 및 캐시 충전 배치 프로세스
-		 * */
-		/*VacsAhstVO vacsAhstVO = new VacsAhstVO();
-		List<VacsAhstVO> resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO);
-	
-		if(resultBeforCashList != null) {
-			
-			for(VacsAhstVO temp : resultBeforCashList) {
-				
-				StVcVO stvcVO = new StVcVO();
-				
-				stvcVO.setOrgCd(temp.getOrgCd());
-				stvcVO.setBankCd(temp.getBankCd());
-				stvcVO.setIacctNo(temp.getIacctNo());
-				stvcVO.setTrNo(temp.getTrNo());
-				stvcVO.setTrIl(temp.getTrIl());
-				stvcVO.setTrAmt(temp.getTrAmt());
-				stvcVO.setIacctNm(temp.getIacctNm());
-				stvcVO.setMberId(temp.getMberId());
-				
-				//세틀뱅크 입금 내역 자동 충전하기
-				mjonPayService.insertVcCharge(stvcVO);
-				
-				//세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기
-				vacsAhstService.updateVacsAhstCashComplete(temp);
-				
-			}
-			
-		}*/
-				
+		 */
+		/*
+		 * VacsAhstVO vacsAhstVO = new VacsAhstVO(); List<VacsAhstVO>
+		 * resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO);
+		 * 
+		 * if(resultBeforCashList != null) {
+		 * 
+		 * for(VacsAhstVO temp : resultBeforCashList) {
+		 * 
+		 * StVcVO stvcVO = new StVcVO();
+		 * 
+		 * stvcVO.setOrgCd(temp.getOrgCd()); stvcVO.setBankCd(temp.getBankCd());
+		 * stvcVO.setIacctNo(temp.getIacctNo()); stvcVO.setTrNo(temp.getTrNo());
+		 * stvcVO.setTrIl(temp.getTrIl()); stvcVO.setTrAmt(temp.getTrAmt());
+		 * stvcVO.setIacctNm(temp.getIacctNm()); stvcVO.setMberId(temp.getMberId());
+		 * 
+		 * //세틀뱅크 입금 내역 자동 충전하기 mjonPayService.insertVcCharge(stvcVO);
+		 * 
+		 * //세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기
+		 * vacsAhstService.updateVacsAhstCashComplete(temp);
+		 * 
+		 * }
+		 * 
+		 * }
+		 */
+
 	}
-	
-	//문자온 문자발송 실패 건수 환불 배치(31일)
-	public void msgFailPayBackOneByDay() throws Exception{
-		
+
+	// 문자온 문자발송 실패 건수 환불 배치(31일)
+	public void msgFailPayBackOneByDay() throws Exception {
+
 		Date now = new Date();
 		System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(31days)" + now);
 		/*
-		 * 문자발송 실패 건수 확인 및 캐시 환불 처리 
-		 * */
-		mjonMsgDataService.selectMsgSentFailListOneByDay();		
-				
+		 * 문자발송 실패 건수 확인 및 캐시 환불 처리
+		 */
+//		mjonMsgDataService.selectMsgSentFailListOneByDay();
+
 	}
-	
+
 	// 팩스 발송 실패 건수 환불 배치
-	public void faxFailPayBack() throws Exception{
-		
+	public void faxFailPayBack() throws Exception {
+
 		System.out.println("팩스 실패 건수 환불 스케줄러 실행!!!" + new Date());
-		
+
 //		  팩스 발송 실패 건수 확인 및 캐시 환불 처리 
 		faxDao.selectFaxSentFailList();
 	}
-	
-	//전용계좌 자동 충전 배치
-	public void vacsAutoCharge() throws Exception{
-		
+
+	// 전용계좌 자동 충전 배치
+	public void vacsAutoCharge() throws Exception {
+
 		Date now = new Date();
 		System.out.println("문자온 전용계좌  자동 충전 스케줄러 실행 !!!" + now);
 		/*
-		 * 문자발송 실패 건수 확인 및 캐시 환불 처리 
-		 * */
-		//mjonMsgDataService.selectMsgSentFailList();
-		
+		 * 문자발송 실패 건수 확인 및 캐시 환불 처리
+		 */
+		// mjonMsgDataService.selectMsgSentFailList();
+
 		/*
 		 * 세틀뱅크 입금 확인 및 캐시 충전 배치 프로세스
-		 * */
+		 */
 		VacsAhstVO vacsAhstVO = new VacsAhstVO();
 		List<VacsAhstVO> resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO);
-	
-		if(resultBeforCashList != null) {
-			
-			for(VacsAhstVO temp : resultBeforCashList) {
-				
+
+		if (resultBeforCashList != null) {
+
+			for (VacsAhstVO temp : resultBeforCashList) {
+
 				StVcVO stvcVO = new StVcVO();
-				
+
 				stvcVO.setOrgCd(temp.getOrgCd());
 				stvcVO.setBankCd(temp.getBankCd());
 				stvcVO.setIacctNo(temp.getIacctNo());
@@ -362,115 +380,180 @@
 				stvcVO.setTrAmt(temp.getTrAmt());
 				stvcVO.setIacctNm(temp.getIacctNm());
 				stvcVO.setMberId(temp.getMberId());
-				
-				//세틀뱅크 입금 내역 자동 충전하기
+
+				// 세틀뱅크 입금 내역 자동 충전하기
 				mjonPayService.insertVcCharge(stvcVO);
-				
-				//세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기
+
+				// 세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기
 				vacsAhstService.updateVacsAhstCashComplete(temp);
-				
+
 				try {
 					String Userid = temp.getMberId();
 					String mberNm = "";
-					
-		    		// 대상 : 휴대폰결제, 즉시이체, 전용계좌
-		    		// Step 1. 스미싱의심 지정 여부
-		    		JoinSettingVO joinSettingVO = new JoinSettingVO();
-		    		joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
-		    		if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) {
-			    		// Step 1. 개인회원 여부 체크
-		    			int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid);
-			    		if (isPersnalMemberCnt == 1) {
-			    			// Step 2. 첫결제 여부 체크
-			    			int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid);
-			    			if (isFirstPayCnt == 1) {
-					    		// SMS 체크
-					    		if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
-					    			// 스미싱의심 SMS 알림전송
-					    			mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/전용계좌 첫결제", Userid, mberNm);    		
-					    		}    								    		
-			    				
-			    				// SLACK 체크
-					    		if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {    		
-						    		// Slack 메시지 발송(단순본문)
-						    		String msg = "[문자온] 스미싱의심/전용계좌 첫결제 - " + mberNm +"("+ Userid + ")";
-						    		mjonCommon.sendSimpleSlackMsg(msg);    		
-					    		}
-					    		
-					    		// 스미싱 의심회원으로 변경
-					    		UserManageVO userManageVO = new UserManageVO();
-					    		userManageVO.setSmishingYn("Y");
-					    		userManageVO.setMberId(Userid);
-					    		userManageService.updateOneUserSmishingYnNotAlert(userManageVO);				    				
-			    			}
-			    		}
-		    		}	
 
-		    	}
-		    	catch (Exception e) {
+					// 대상 : 휴대폰결제, 즉시이체, 전용계좌
+					// Step 1. 스미싱의심 지정 여부
+					JoinSettingVO joinSettingVO = new JoinSettingVO();
+					joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
+					if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) {
+						// Step 1. 개인회원 여부 체크
+						int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid);
+						if (isPersnalMemberCnt == 1) {
+							// Step 2. 첫결제 여부 체크
+							int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid);
+							if (isFirstPayCnt == 1) {
+								// SMS 체크
+								if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
+									// 스미싱의심 SMS 알림전송
+									mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/전용계좌 첫결제", Userid, mberNm);
+								}
+
+								// SLACK 체크
+								if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
+									// Slack 메시지 발송(단순본문)
+									String msg = "[문자온] 스미싱의심/전용계좌 첫결제 - " + mberNm + "(" + Userid + ")";
+									mjonCommon.sendSimpleSlackMsg(msg);
+								}
+
+								// 스미싱 의심회원으로 변경
+								UserManageVO userManageVO = new UserManageVO();
+								userManageVO.setSmishingYn("Y");
+								userManageVO.setMberId(Userid);
+								userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
+							}
+						}
+					}
+
+				} catch (Exception e) {
 					System.out.println("#############################################################");
 					System.out.println("전용계좌 슬랙알림 & 스미싱의심 처리 Error");
 					System.out.println("전용계좌 TrNo : " + temp.getTrNo());
-					System.out.println("전용계좌 e.getMessage() : " + e.getMessage());		    		
-		    	}
-			
-				
+					System.out.println("전용계좌 e.getMessage() : " + e.getMessage());
+				}
+
 			}
-			
+
 		}
-				
+
 	}
 
-	
-	//카카오 환불 처리 리스트
+	// 카카오 환불 처리 리스트
 	public void kakaoFailPayBack() throws Exception {
-		
-		//카카오 알림톡 환불 처리
+
+		// 카카오 알림톡 환불 처리
 		kakaoAlimTalkService.selectKakaoAtSentRefundList();
-		
-		//카카오 친구톡 환불 처리
+
+		// 카카오 친구톡 환불 처리
 		kakaoAlimTalkService.selectKakaoFtSentRefundList();
-		
+
 	}
 
 	@Override
 	public void payBack(String type, int limitCout) throws Exception {
 		// 문자 환불
-		if ("ONE".equals(type)) {	//하루에 한번만 31일 대상으로 실행
-			msgFailPayBackOneByDay();	
-			
-		}else {	//2분 마다는 7일을 대상으로 실행
+		if ("ONE".equals(type)) { // 하루에 한번만 31일 대상으로 실행
+			msgFailPayBackOneByDay();
+
+		} else { // 2분 마다는 7일을 대상으로 실행
 			MjonMsgVO mjonMsgVO = new MjonMsgVO();
 			mjonMsgVO.setRecordCountPerPage(limitCout);
-			
-			List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO); 
+
+			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 {
+			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) {
+					} catch (Exception ex) {
 						System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
-						System.out.println(msgFailList.get(j).getUserId()+"  :   "+ msgFailList.get(j).getMsgGroupId() +" :  "+ msgFailList.get(j).getUserData());
+						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 +"초");
-	        }
+				}
+				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 +"초");
-			
+			long forSecDiffTime = (forAfterTime - forBeforeTime) / 1000; // 코드 실행 전후 시간 차이 계산(초 단위)
+			System.out.println(
+					"==PayBack for 2 =============> 수량 : " + msgFailList.size() + "  =====  " + forSecDiffTime + "초");
+
 		}
 	}
+
+	/**
+	 * @methodName : refundTest
+	 * @author : 이호영
+	 * @date : 2024.12.12
+	 * @description : 환불 데이터
+	 * @param p_type
+	 * @param request
+	 * @param model
+	 * @return
+	 * @throws Exception
+	 */
+	@Override
+	public void payBack_advc(String p_type) throws Exception {
+		List<MjonMsgVO> msgFailList = new ArrayList<>();
+
+		msgFailList = getMsgFailList(p_type);
+
+		// 리스트가 비어있는 경우 종료
+		if (msgFailList == null || msgFailList.isEmpty()) {
+			System.out.println("No payBack messages empty.");
+		}
+
+		try {
+			// 필요한 필드만 DTO로 매핑
+			List<RefundDTO> dtoList = msgFailList.stream().map(msg -> new RefundDTO(msg.getUserId(),
+					msg.getMsgGroupId(), Integer.parseInt(msg.getUserData()), msg.getEachPrice()))
+					.collect(Collectors.toList());
+			// JSON 변환
+			ObjectMapper objectMapper = new ObjectMapper();
+			String msgFailListJson = objectMapper.writeValueAsString(dtoList);
+
+			mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson);
+
+		} catch (Exception ex) {
+			ex.printStackTrace();
+		}
+
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * @methodName : getMsgFailList
+	 * @author : 이호영
+	 * @date : 2024.12.12
+	 * @description : 파라미터에 따라 환불 데이터 가져오기
+	 * @param p_type
+	 * @return
+	 * @throws Exception
+	 */
+	private List<MjonMsgVO> getMsgFailList(String p_type) throws Exception {
+		List<MjonMsgVO> msgFailList = new ArrayList<>();
+		// 문자 환불
+		if ("ONE".equals(p_type)) { // 하루에 한번만 31일 대상으로 실행
+
+			msgFailList = mjonMsgDataDAO.selectMsgSentFailListOneByDay();
+		} else {
+			// 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
+			// schdlrManageService.msgFailPayBack();
+
+			msgFailList = mjonMsgDataDAO.selectMsgSentFailList();
+		}
+
+		return msgFailList;
+	}
 }
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
@@ -4040,28 +4040,38 @@
 	</update>
 	<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
 	<select id="MjonMsgDataDAO.selectMsgSentFailList" resultClass="mjonMsgVO">
+	/*MjonMsgDataDAO.selectMsgSentFailList*/
 		
-		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
+			
+	SELECT MMD.USER_ID                              AS userId
+		, MMD.MSG_GROUP_ID                         AS msgGroupId
+		, MMD.MSG_SEQ                              AS msgSeq
+		, MMD.USERDATA                             AS userData
+		, MMD.REFUND_YN                            AS refundYn
+		, MMD.RSLT_CODE                            AS rsltCode
+		, MMD.RSLT_CODE2                           AS rsltCode2
+		, MMD.AGENT_CODE                           AS agentCode
+		, DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate
+		, DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
+		, MGD.EACH_PRICE				            AS eachPrice
+	FROM   MJ_MSG_DATA MMD
+		INNER JOIN LETTNGNRLMBER MB
+		ON     MMD.USER_ID = MB.MBER_ID
+		LEFT JOIN MJ_MSG_GROUP_DATA MGD
+		ON     MMD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
+		LEFT JOIN MJ_CASH MC
+		ON     MC.ORDER_ID = MMD.USERDATA
+		AND    MC.USER_ID = MMD.USER_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 	 MGD.EACH_PRICE != 0
+		AND    MC.ORDER_ID IS NULL
+		AND
 			(CASE
 				WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
 				THEN 'S'
@@ -4088,6 +4098,9 @@
 				THEN 'W'
 				ELSE 'F'
 			END) IN ('F')
+   		ORDER BY MMD.USER_ID
+		LIMIT 10000
+
 	</select>
 	
 	<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
@@ -4145,54 +4158,65 @@
 	
 	<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들(하루에 한번은 31일 실행) -->
 	<select id="MjonMsgDataDAO.selectMsgSentFailListOneByDay" 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 -40 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
+		/*MjonMsgDataDAO.selectMsgSentFailListOneByDay*/
+			
+		SELECT MMD.USER_ID                              AS userId
+			, MMD.MSG_GROUP_ID                         AS msgGroupId
+			, MMD.MSG_SEQ                              AS msgSeq
+			, MMD.USERDATA                             AS userData
+			, MMD.REFUND_YN                            AS refundYn
+			, MMD.RSLT_CODE                            AS rsltCode
+			, MMD.RSLT_CODE2                           AS rsltCode2
+			, MMD.AGENT_CODE                           AS agentCode
+			, DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate
+			, DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
+			, MGD.EACH_PRICE				            AS eachPrice
+		FROM   MJ_MSG_DATA MMD
+			INNER JOIN LETTNGNRLMBER MB
+			ON     MMD.USER_ID = MB.MBER_ID
+			LEFT JOIN MJ_MSG_GROUP_DATA MGD
+			ON     MMD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
+			LEFT JOIN MJ_CASH MC
+			ON     MC.ORDER_ID = MMD.USERDATA
+			AND    MC.USER_ID = MMD.USER_ID
+		WHERE  1=1	  
+			AND	 MMD.SENT_DATE > date_add(now(), interval -40 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 	 MGD.EACH_PRICE != 0
+			AND    MC.ORDER_ID IS NULL
+			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')
+		ORDER BY MMD.USER_ID
+		LIMIT 10000
 	
 	</select>
 		
src/main/webapp/js/MJUtill.js
--- src/main/webapp/js/MJUtill.js
+++ src/main/webapp/js/MJUtill.js
@@ -55,12 +55,12 @@
 	
 	위 번호로 시작하는 팩스 번호만 허용함.
  */
-function checkFaxNum(str) {
-	str = removeDash(str);
-	var subNum = str.substring(0,3);
-	var regExp = /^(02|0[3-6][1-4]|030|050|060|070|080|1\d{2})$/;
-	return regExp.test(subNum);
-}
+	function checkFaxNum(str) {
+	    str = removeDash(str);
+	    var subNum = str.substring(0,3);
+	    var regExp = /^(02|03[1-3]|04[1-4]|05[1-5]|06[1-4]|030|050|060|070|080|1\d{2})$/;
+	    return regExp.test(subNum);
+	}
 
 /*
  * 일반전화 유효성 체크
Add a comment
List