팩스 환불 로직 개선

This commit is contained in:
hehihoho3@gmail.com 2024-12-12 19:11:28 +09:00
parent 187f11057e
commit 2ac147144c
8 changed files with 2523 additions and 2581 deletions

View File

@ -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;
}
}

View File

@ -17,6 +17,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@ -84,6 +85,7 @@ import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.mjocommon.MjonHolidayApi; import itn.let.mjo.mjocommon.MjonHolidayApi;
import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgVO; 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.MjonMsgDataService;
import itn.let.mjo.msgdata.service.MjonMsgReturnVO; import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
@ -3433,9 +3435,15 @@ public class TestController {
// 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14
//schdlrManageService.msgFailPayBack(); //schdlrManageService.msgFailPayBack();
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); 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()) { if (msgFailList == null || msgFailList.isEmpty()) {
System.out.println("No messages to process."); System.out.println("No messages to process.");
@ -3443,29 +3451,22 @@ public class TestController {
} }
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간
// int count = 0;
System.out.println("== msgFailList =============> : "+ msgFailList.size()); System.out.println("== msgFailList =============> : "+ msgFailList.size());
// for(MjonMsgVO vo : msgFailList) { try {
// System.out.println(count + " : "+ msgFailList.size()); // 필요한 필드만 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 { }catch(Exception ex) {
ex.printStackTrace();
// 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 forAfterTime = System.currentTimeMillis(); // 코드 실행 시간
long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위) long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위)

View File

@ -52,4 +52,6 @@ public interface SchdlrManageService {
//문자온 문자전송 실패 건수 환불 배치 //문자온 문자전송 실패 건수 환불 배치
public void payBack(String type, int limitCout) throws Exception; public void payBack(String type, int limitCout) throws Exception;
public void payBack_advc(String p_type) throws Exception;
} }

View File

@ -92,8 +92,8 @@ public class SchedulerUtil {
* 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. * 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
* */ * */
// Schdule Lock (10분동안) // Schdule Lock (10분동안)
// @Scheduled(cron = "0 0/10 * * * ?") @Scheduled(cron = "0 0/10 * * * ?")
// @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) @SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runScenarioOneTime() throws Exception { public void runScenarioOneTime() throws Exception {
// do something... // do something...
@ -119,10 +119,10 @@ public class SchedulerUtil {
} }
/* /*
* 매일 5시20분 31일전 데이터에서 환불 대상을 찾아서 환불 한다. * 매일 5시20분 20초 31일전 데이터에서 환불 대상을 찾아서 환불 한다.
* */ * */
// @Scheduled(cron = "20 20 5 * * ?") @Scheduled(cron = "20 25 5 * * ?")
// @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) @SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runScenarioOneTimeOneByDay() throws Exception { public void runScenarioOneTimeOneByDay() throws Exception {
// do something... // do something...
@ -477,10 +477,14 @@ public class SchedulerUtil {
//환불 실행 //환불 실행
private void PayBack(String p_type) throws Exception { private void PayBack(String p_type) throws Exception {
// 문자 환불 // 문자 환불
schdlrManageService.payBack_advc(p_type);
/*
if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행 if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행
schdlrManageService.msgFailPayBackOneByDay(); schdlrManageService.msgFailPayBackOneByDay();
}else { }else {
// 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14
@ -489,10 +493,8 @@ public class SchedulerUtil {
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList();
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간 long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간
int count = 0;
System.out.println("== msgFailList =============> : "+ msgFailList.size()); System.out.println("== msgFailList =============> : "+ msgFailList.size());
for(MjonMsgVO vo : msgFailList) { for(MjonMsgVO vo : msgFailList) {
System.out.println(count + " : "+ msgFailList.size());
try { try {
mjonMsgDataDAO.updateMsgSentFailPayBack(vo); mjonMsgDataDAO.updateMsgSentFailPayBack(vo);
@ -502,15 +504,16 @@ public class SchedulerUtil {
ex.printStackTrace(); ex.printStackTrace();
} }
count = count + 1;
} }
long forAfterTime = System.currentTimeMillis(); // 코드 실행 시간 long forAfterTime = System.currentTimeMillis(); // 코드 실행 시간
long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위) long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +""); System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"");
} }
*/
System.out.println("==== faxFailPayBack ===="); System.out.println("==== faxFailPayBack ====");
// 팩스 환불 // 팩스 환불
schdlrManageService.faxFailPayBack(); schdlrManageService.faxFailPayBack();
} }
} }

View File

@ -1,8 +1,10 @@
package itn.let.schdlr.service.impl; package itn.let.schdlr.service.impl;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -10,8 +12,12 @@ import org.jsoup.Jsoup;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.ObjectMapper;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.EgovMultiPartEmail; import itn.com.cmm.EgovMultiPartEmail;
@ -19,8 +25,10 @@ import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.impl.FileManageDAO; import itn.com.cmm.service.impl.FileManageDAO;
import itn.let.fax.user.service.impl.FaxDAO; import itn.let.fax.user.service.impl.FaxDAO;
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjonMsgVO; 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.MjonMsgDataService;
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayService;
@ -40,21 +48,21 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
@Resource(name = "egovItsmSchdlrGnrService") @Resource(name = "egovItsmSchdlrGnrService")
private EgovIdGnrService idgenSchdlrId; private EgovIdGnrService idgenSchdlrId;
@Resource(name = "egovItsmSchdlrConfigGnrService") @Resource(name = "egovItsmSchdlrConfigGnrService")
private EgovIdGnrService idgenSchCfgId; private EgovIdGnrService idgenSchCfgId;
@Resource(name = "egovItsmSchdlrShareIdGnrService") @Resource(name = "egovItsmSchdlrShareIdGnrService")
private EgovIdGnrService idgenSchdlrShareId; private EgovIdGnrService idgenSchdlrShareId;
@Resource(name="SchdlrManageDAO") @Resource(name = "SchdlrManageDAO")
private SchdlrManageDAO schdlrManageDAO; private SchdlrManageDAO schdlrManageDAO;
@Resource(name = "FileManageDAO") @Resource(name = "FileManageDAO")
private FileManageDAO fileMngDAO; private FileManageDAO fileMngDAO;
@Resource(name="EgovFileMngService") @Resource(name = "EgovFileMngService")
private EgovFileMngService fileMngService; private EgovFileMngService fileMngService;
@Resource(name = "egovMultiPartEmail") @Resource(name = "egovMultiPartEmail")
private EgovMultiPartEmail egovMultiPartEmail; private EgovMultiPartEmail egovMultiPartEmail;
@ -64,48 +72,48 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
@Value("#{globalSettings['Globals.HOMPAGE_URL']}") @Value("#{globalSettings['Globals.HOMPAGE_URL']}")
private String HOMPAGE_URL; private String HOMPAGE_URL;
@Resource(name="MjonMsgDataDAO") @Resource(name = "MjonMsgDataDAO")
private MjonMsgDataDAO mjonMsgDataDAO; private MjonMsgDataDAO mjonMsgDataDAO;
//문자온 카카오 알림톡 발송 서비스 // 문자온 카카오 알림톡 발송 서비스
@Resource(name = "kakaoAlimTalkService") @Resource(name = "kakaoAlimTalkService")
private KakaoAlimTalkService 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") @Resource(name = "userManageService")
private EgovUserManageService userManageService; private EgovUserManageService userManageService;
/** 사이트 설정 */ /** 사이트 설정 */
@Resource(name = "egovSiteManagerService") @Resource(name = "egovSiteManagerService")
EgovSiteManagerService egovSiteManagerService; EgovSiteManagerService egovSiteManagerService;
/** 알림전송 Util */ /** 알림전송 Util */
@Resource(name = "mjonNoticeSendUtil") @Resource(name = "mjonNoticeSendUtil")
private MjonNoticeSendUtil mjonNoticeSendUtil; private MjonNoticeSendUtil mjonNoticeSendUtil;
@Resource(name="MjonCommon") @Resource(name = "MjonCommon")
private MjonCommon mjonCommon; private MjonCommon mjonCommon;
@Resource(name = "faxDAO") @Resource(name = "faxDAO")
public FaxDAO faxDao; public FaxDAO faxDao;
private static final Logger LOGGER = LoggerFactory.getLogger(SchdlrManageServiceImpl.class); 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); return schdlrManageDAO.selectSchdlrList(schdlrVO);
} }
@ -113,12 +121,12 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
public void schdlrInsert(SchdlrVO schdlrVO) throws Exception { public void schdlrInsert(SchdlrVO schdlrVO) throws Exception {
schdlrVO.setSchdlrId(idgenSchdlrId.getNextStringId()); // 신규 schdlrVO.setSchdlrId(idgenSchdlrId.getNextStringId()); // 신규
schdlrManageDAO.schdlrInsert(schdlrVO); // 등록 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 userId[] = schdlrVO.getSchdlrUserId().split(",");
String userName[] = schdlrVO.getSchdlrUserName().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("@@@@@@@@@@@@@@@@@@@@@@@@@@@ userID : "+userId[i]);
// System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@ userName : "+userName[i]); // System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@ userName : "+userName[i]);
schdlrVO.setSchdlrUserId(userId[i]); schdlrVO.setSchdlrUserId(userId[i]);
@ -128,22 +136,22 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
} }
} }
} }
// 스케줄 수정 // 스케줄 수정
public void schdlrUpdate(SchdlrVO schdlrVO) throws Exception { public void schdlrUpdate(SchdlrVO schdlrVO) throws Exception {
schdlrManageDAO.schdlrUpdate(schdlrVO); schdlrManageDAO.schdlrUpdate(schdlrVO);
if(!("").equals(schdlrVO.getSchdlrUserId())) { if (!("").equals(schdlrVO.getSchdlrUserId())) {
String userId[] = schdlrVO.getSchdlrUserId().split(","); String userId[] = schdlrVO.getSchdlrUserId().split(",");
String userName[] = schdlrVO.getSchdlrUserName().split(","); String userName[] = schdlrVO.getSchdlrUserName().split(",");
int schdlrShareCount = schdlrManageDAO.selectSchdlrShareCount(schdlrVO); int schdlrShareCount = schdlrManageDAO.selectSchdlrShareCount(schdlrVO);
if(schdlrShareCount != 0) { if (schdlrShareCount != 0) {
schdlrManageDAO.deleteSchdlrShare(schdlrVO.getSchdlrId()); 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("@@@@@@@@@@@@@@@@@@@@@@@@@@@ userID : "+userId[i]);
// System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@ userName : "+userName[i]); // System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@ userName : "+userName[i]);
schdlrVO.setSchdlrUserId(userId[i]); schdlrVO.setSchdlrUserId(userId[i]);
@ -153,38 +161,37 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
} }
} }
} }
// 일정 상세 조회 // 일정 상세 조회
public SchdlrVO selectSchdlrDetail(SchdlrVO schdlrVO) throws Exception { public SchdlrVO selectSchdlrDetail(SchdlrVO schdlrVO) throws Exception {
return schdlrManageDAO.selectSchdlrDetail(schdlrVO); return schdlrManageDAO.selectSchdlrDetail(schdlrVO);
} }
@Override @Override
public List<SchdlrVO> selectSchdlrShare(SchdlrVO schdlrVO) throws Exception { public List<SchdlrVO> selectSchdlrShare(SchdlrVO schdlrVO) throws Exception {
return schdlrManageDAO.selectSchdlrShare(schdlrVO); return schdlrManageDAO.selectSchdlrShare(schdlrVO);
} }
// 일정 목록 조회 // 일정 목록 조회
public List<SchdlrVO> selectSchList(SchdlrVO schdlrVO) throws Exception { public List<SchdlrVO> selectSchList(SchdlrVO schdlrVO) throws Exception {
return schdlrManageDAO.selectSchList(schdlrVO); return schdlrManageDAO.selectSchList(schdlrVO);
} }
// 환경설정 등록 // 환경설정 등록
public void insertSchConfig(SchdlrVO schdlrVO) throws Exception { public void insertSchConfig(SchdlrVO schdlrVO) throws Exception {
schdlrVO.setSchdlrCfgId(idgenSchCfgId.getNextStringId()); // 신규 schdlrVO.setSchdlrCfgId(idgenSchCfgId.getNextStringId()); // 신규
schdlrManageDAO.insertSchConfig(schdlrVO); // 등록 schdlrManageDAO.insertSchConfig(schdlrVO); // 등록
} }
// 환경설정 수정 // 환경설정 수정
public void updateSchConfig(SchdlrVO schdlrVO) throws Exception { public void updateSchConfig(SchdlrVO schdlrVO) throws Exception {
schdlrManageDAO.updateSchConfig(schdlrVO); schdlrManageDAO.updateSchConfig(schdlrVO);
} }
// 환경설정 상세 조회 // 환경설정 상세 조회
public SchdlrVO selectSchConfigDetail(SchdlrVO schdlrVO) throws Exception { public SchdlrVO selectSchConfigDetail(SchdlrVO schdlrVO) throws Exception {
SchdlrVO result = schdlrManageDAO.selectSchConfigDetail(schdlrVO); SchdlrVO result = schdlrManageDAO.selectSchConfigDetail(schdlrVO);
if (result == null) { // 조회시 기본값 등록 if (result == null) { // 조회시 기본값 등록
result = new SchdlrVO(); result = new SchdlrVO();
result.setSchdlrCfgId(idgenSchCfgId.getNextStringId()); result.setSchdlrCfgId(idgenSchCfgId.getNextStringId());
@ -197,163 +204,174 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
result.setSchdlrColorPerCd("03"); result.setSchdlrColorPerCd("03");
schdlrManageDAO.insertSchConfig(result); schdlrManageDAO.insertSchConfig(result);
} }
return result; return result;
} }
// 일정 알림 메일 전송 // 일정 알림 메일 전송
public void schMailSend(String bgnDateTime) throws Exception { public void schMailSend(String bgnDateTime) throws Exception {
List<SchdlrVO> mailList = schdlrManageDAO.selectMailSendList(bgnDateTime); List<SchdlrVO> mailList = schdlrManageDAO.selectMailSendList(bgnDateTime);
for (SchdlrVO vo : mailList) { for (SchdlrVO vo : mailList) {
if (("").equals(vo.getEmailAdres())) continue; if (("").equals(vo.getEmailAdres()))
continue;
boolean result = sendMail(vo); boolean result = sendMail(vo);
LOGGER.debug("send succ update:", result); LOGGER.debug("send succ update:", result);
if (result) schdlrManageDAO.updateMailSend(vo); if (result)
schdlrManageDAO.updateMailSend(vo);
} }
} }
/** /**
* 일정 알림 메일 전송 * 일정 알림 메일 전송
*
* @param SchdlrVO schdlrVO * @param SchdlrVO schdlrVO
* @return boolean * @return boolean
* @throws Exception * @throws Exception
*/ */
private boolean sendMail(SchdlrVO schdlrVO) throws Exception { private boolean sendMail(SchdlrVO schdlrVO) throws Exception {
boolean result = false; boolean result = false;
try { try {
String mailSj = "["+schdlrVO.getSchdlrTitle()+"] N-CMS 스케줄러 일정 메일 알림입니다."; String mailSj = "[" + schdlrVO.getSchdlrTitle() + "] N-CMS 스케줄러 일정 메일 알림입니다.";
String alram = ""; String alram = "";
// // 알림설정 표시 // // 알림설정 표시
// if (Pattern.matches("^[0-9]*$", schdlrVO.getSchdlrAlarmCnd())) { // if (Pattern.matches("^[0-9]*$", schdlrVO.getSchdlrAlarmCnd())) {
// alram = schdlrVO.getSchdlrAlarmCnd() + " 분전"; // alram = schdlrVO.getSchdlrAlarmCnd() + " 분전";
// } else if (schdlrVO.getSchdlrAlarmCnd().equals("etc")) { // } else if (schdlrVO.getSchdlrAlarmCnd().equals("etc")) {
// alram = schdlrVO.getSchdlrAlarmDatetime(); // alram = schdlrVO.getSchdlrAlarmDatetime();
// } // }
switch(schdlrVO.getSchdlrAlarmCnd()) { switch (schdlrVO.getSchdlrAlarmCnd()) {
case "0" : alram = "정시"; break; case "0":
case "10" : alram = "십분 전"; break; alram = "정시";
case "30" : alram = "삼십분 전"; break; break;
case "60" : alram = "한시간 전"; break; case "10":
case "etc" : alram = schdlrVO.getSchdlrAlarmDatetime(); break; 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.getSchdlrTitle());
mailContent = mailContent.replace("#일시", schdlrVO.getSchdlrBgnDatetime() + " ~ " + schdlrVO.getSchdlrEndDatetime()); mailContent = mailContent.replace("#일시",
schdlrVO.getSchdlrBgnDatetime() + " ~ " + schdlrVO.getSchdlrEndDatetime());
mailContent = mailContent.replace("#장소", schdlrVO.getSchdlrPlace()); mailContent = mailContent.replace("#장소", schdlrVO.getSchdlrPlace());
mailContent = mailContent.replace("#내용", schdlrVO.getSchdlrCn().replaceAll("(\r\n|\r|\n|\n\r)", "<br>")); mailContent = mailContent.replace("#내용", schdlrVO.getSchdlrCn().replaceAll("(\r\n|\r|\n|\n\r)", "<br>"));
mailContent = mailContent.replace("#알림설정", alram); mailContent = mailContent.replace("#알림설정", alram);
String resultMsg = egovMultiPartEmail.send(schdlrVO.getEmailAdres(), mailSj, "", mailContent); String resultMsg = egovMultiPartEmail.send(schdlrVO.getEmailAdres(), mailSj, "", mailContent);
// egovMultiPartEmail.send(mailAddres, mailSj", mgs); // Simple Text Mail method // egovMultiPartEmail.send(mailAddres, mailSj", mgs); // Simple Text Mail method
result = true; result = true;
LOGGER.debug("mail send resultMsg: ", resultMsg); LOGGER.debug("mail send resultMsg: ", resultMsg);
} catch (Exception ex) { } catch (Exception ex) {
LOGGER.error("Sending Mail Exception : {} [unknown Exception]", ex.getCause()); LOGGER.error("Sending Mail Exception : {} [unknown Exception]", ex.getCause());
//LOGGER.error(ex.getMessage()); // LOGGER.error(ex.getMessage());
} }
return result; return result;
} }
// 메인화면 > 전체일정 // 메인화면 > 전체일정
public List<SchdlrVO> selectMainSchList(SchdlrVO schdlrVO) throws Exception { public List<SchdlrVO> selectMainSchList(SchdlrVO schdlrVO) throws Exception {
return schdlrManageDAO.selectMainSchList(schdlrVO); return schdlrManageDAO.selectMainSchList(schdlrVO);
} }
//문자온 문자발송 실패 건수 환불 배치(1주 대상) // 문자온 문자발송 실패 건수 환불 배치(1주 대상)
public void msgFailPayBack() throws Exception{ public void msgFailPayBack() throws Exception {
Date now = new Date(); Date now = new Date();
System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(1weeks)" + now); System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(1weeks)" + now);
/* /*
* 문자발송 실패 건수 확인 캐시 환불 처리 * 문자발송 실패 건수 확인 캐시 환불 처리
* */ */
mjonMsgDataService.selectMsgSentFailList(); mjonMsgDataService.selectMsgSentFailList();
/* /*
* 세틀뱅크 입금 확인 캐시 충전 배치 프로세스 * 세틀뱅크 입금 확인 캐시 충전 배치 프로세스
* */ */
/*VacsAhstVO vacsAhstVO = new VacsAhstVO(); /*
List<VacsAhstVO> resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO); * VacsAhstVO vacsAhstVO = new VacsAhstVO(); List<VacsAhstVO>
* resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO);
if(resultBeforCashList != null) { *
* if(resultBeforCashList != null) {
for(VacsAhstVO temp : resultBeforCashList) { *
* for(VacsAhstVO temp : resultBeforCashList) {
StVcVO stvcVO = new StVcVO(); *
* StVcVO stvcVO = new StVcVO();
stvcVO.setOrgCd(temp.getOrgCd()); *
stvcVO.setBankCd(temp.getBankCd()); * stvcVO.setOrgCd(temp.getOrgCd()); stvcVO.setBankCd(temp.getBankCd());
stvcVO.setIacctNo(temp.getIacctNo()); * stvcVO.setIacctNo(temp.getIacctNo()); stvcVO.setTrNo(temp.getTrNo());
stvcVO.setTrNo(temp.getTrNo()); * stvcVO.setTrIl(temp.getTrIl()); stvcVO.setTrAmt(temp.getTrAmt());
stvcVO.setTrIl(temp.getTrIl()); * stvcVO.setIacctNm(temp.getIacctNm()); stvcVO.setMberId(temp.getMberId());
stvcVO.setTrAmt(temp.getTrAmt()); *
stvcVO.setIacctNm(temp.getIacctNm()); * //세틀뱅크 입금 내역 자동 충전하기 mjonPayService.insertVcCharge(stvcVO);
stvcVO.setMberId(temp.getMberId()); *
* //세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기
//세틀뱅크 입금 내역 자동 충전하기 * vacsAhstService.updateVacsAhstCashComplete(temp);
mjonPayService.insertVcCharge(stvcVO); *
* }
//세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기 *
vacsAhstService.updateVacsAhstCashComplete(temp); * }
*/
}
}*/
} }
//문자온 문자발송 실패 건수 환불 배치(31일) // 문자온 문자발송 실패 건수 환불 배치(31일)
public void msgFailPayBackOneByDay() throws Exception{ public void msgFailPayBackOneByDay() throws Exception {
Date now = new Date(); Date now = new Date();
System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(31days)" + now); System.out.println("문자온 실패 건수 환불 스케줄러 실행!!!(31days)" + now);
/* /*
* 문자발송 실패 건수 확인 캐시 환불 처리 * 문자발송 실패 건수 확인 캐시 환불 처리
* */ */
mjonMsgDataService.selectMsgSentFailListOneByDay(); // mjonMsgDataService.selectMsgSentFailListOneByDay();
} }
// 팩스 발송 실패 건수 환불 배치 // 팩스 발송 실패 건수 환불 배치
public void faxFailPayBack() throws Exception{ public void faxFailPayBack() throws Exception {
System.out.println("팩스 실패 건수 환불 스케줄러 실행!!!" + new Date()); System.out.println("팩스 실패 건수 환불 스케줄러 실행!!!" + new Date());
// 팩스 발송 실패 건수 확인 캐시 환불 처리 // 팩스 발송 실패 건수 확인 캐시 환불 처리
faxDao.selectFaxSentFailList(); faxDao.selectFaxSentFailList();
} }
//전용계좌 자동 충전 배치 // 전용계좌 자동 충전 배치
public void vacsAutoCharge() throws Exception{ public void vacsAutoCharge() throws Exception {
Date now = new Date(); Date now = new Date();
System.out.println("문자온 전용계좌 자동 충전 스케줄러 실행 !!!" + now); System.out.println("문자온 전용계좌 자동 충전 스케줄러 실행 !!!" + now);
/* /*
* 문자발송 실패 건수 확인 캐시 환불 처리 * 문자발송 실패 건수 확인 캐시 환불 처리
* */ */
//mjonMsgDataService.selectMsgSentFailList(); // mjonMsgDataService.selectMsgSentFailList();
/* /*
* 세틀뱅크 입금 확인 캐시 충전 배치 프로세스 * 세틀뱅크 입금 확인 캐시 충전 배치 프로세스
* */ */
VacsAhstVO vacsAhstVO = new VacsAhstVO(); VacsAhstVO vacsAhstVO = new VacsAhstVO();
List<VacsAhstVO> resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO); List<VacsAhstVO> resultBeforCashList = vacsAhstService.selectBeforCashList(vacsAhstVO);
if(resultBeforCashList != null) { if (resultBeforCashList != null) {
for(VacsAhstVO temp : resultBeforCashList) { for (VacsAhstVO temp : resultBeforCashList) {
StVcVO stvcVO = new StVcVO(); StVcVO stvcVO = new StVcVO();
stvcVO.setOrgCd(temp.getOrgCd()); stvcVO.setOrgCd(temp.getOrgCd());
stvcVO.setBankCd(temp.getBankCd()); stvcVO.setBankCd(temp.getBankCd());
stvcVO.setIacctNo(temp.getIacctNo()); stvcVO.setIacctNo(temp.getIacctNo());
@ -362,115 +380,180 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
stvcVO.setTrAmt(temp.getTrAmt()); stvcVO.setTrAmt(temp.getTrAmt());
stvcVO.setIacctNm(temp.getIacctNm()); stvcVO.setIacctNm(temp.getIacctNm());
stvcVO.setMberId(temp.getMberId()); stvcVO.setMberId(temp.getMberId());
//세틀뱅크 입금 내역 자동 충전하기 // 세틀뱅크 입금 내역 자동 충전하기
mjonPayService.insertVcCharge(stvcVO); mjonPayService.insertVcCharge(stvcVO);
//세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기 // 세틀뱅크 입금 내역 원장에 처리 완료 내용 입력해 주기
vacsAhstService.updateVacsAhstCashComplete(temp); vacsAhstService.updateVacsAhstCashComplete(temp);
try { try {
String Userid = temp.getMberId(); String Userid = temp.getMberId();
String mberNm = ""; 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("#############################################################");
System.out.println("전용계좌 슬랙알림 & 스미싱의심 처리 Error"); System.out.println("전용계좌 슬랙알림 & 스미싱의심 처리 Error");
System.out.println("전용계좌 TrNo : " + temp.getTrNo()); 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 { public void kakaoFailPayBack() throws Exception {
//카카오 알림톡 환불 처리 // 카카오 알림톡 환불 처리
kakaoAlimTalkService.selectKakaoAtSentRefundList(); kakaoAlimTalkService.selectKakaoAtSentRefundList();
//카카오 친구톡 환불 처리 // 카카오 친구톡 환불 처리
kakaoAlimTalkService.selectKakaoFtSentRefundList(); kakaoAlimTalkService.selectKakaoFtSentRefundList();
} }
@Override @Override
public void payBack(String type, int limitCout) throws Exception { public void payBack(String type, int limitCout) throws Exception {
// 문자 환불 // 문자 환불
if ("ONE".equals(type)) { //하루에 한번만 31일 대상으로 실행 if ("ONE".equals(type)) { // 하루에 한번만 31일 대상으로 실행
msgFailPayBackOneByDay(); msgFailPayBackOneByDay();
}else { //2분 마다는 7일을 대상으로 실행 } else { // 2분 마다는 7일을 대상으로 실행
MjonMsgVO mjonMsgVO = new MjonMsgVO(); MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setRecordCountPerPage(limitCout); mjonMsgVO.setRecordCountPerPage(limitCout);
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO); List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO);
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간 long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간
int batchSize = 300; int batchSize = 300;
int totalSize = msgFailList.size(); int totalSize = msgFailList.size();
int endj =0; int endj = 0;
for (int i = 0; i < totalSize; i += batchSize) { for (int i = 0; i < totalSize; i += batchSize) {
int end = Math.min(i + batchSize, totalSize); int end = Math.min(i + batchSize, totalSize);
long beforeTime = System.currentTimeMillis(); // 코드 실행 시간 long beforeTime = System.currentTimeMillis(); // 코드 실행 시간
for(int j=endj; j < end; j++) { for (int j = endj; j < end; j++) {
System.out.println(j+" : "+ end); System.out.println(j + " : " + end);
try { try {
mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j)); mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j));
}catch(Exception ex) { } catch (Exception ex) {
System.out.println("=============SchedulerUtil=====PayBack Catch =============>"); 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(); ex.printStackTrace();
} }
} }
endj = end; endj = end;
long afterTime = System.currentTimeMillis(); // 코드 실행 시간 long afterTime = System.currentTimeMillis(); // 코드 실행 시간
long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위) long secDiffTime = (afterTime - beforeTime) / 1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 1 =============> : " + secDiffTime +""); System.out.println("==PayBack for 1 =============> : " + secDiffTime + "");
} }
long forAfterTime = System.currentTimeMillis(); // 코드 실행 시간 long forAfterTime = System.currentTimeMillis(); // 코드 실행 시간
long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위) long forSecDiffTime = (forAfterTime - forBeforeTime) / 1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +""); 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;
}
} }

View File

@ -4040,28 +4040,38 @@
</update> </update>
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 --> <!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
<select id="MjonMsgDataDAO.selectMsgSentFailList" resultClass="mjonMsgVO"> <select id="MjonMsgDataDAO.selectMsgSentFailList" resultClass="mjonMsgVO">
/*MjonMsgDataDAO.selectMsgSentFailList*/
SELECT USER_ID AS userId,
MSG_GROUP_ID AS msgGroupId, SELECT MMD.USER_ID AS userId
MSG_SEQ AS msgSeq, , MMD.MSG_GROUP_ID AS msgGroupId
USERDATA AS userData, , MMD.MSG_SEQ AS msgSeq
REFUND_YN AS refundYn, , MMD.USERDATA AS userData
RSLT_CODE AS rsltCode, , MMD.REFUND_YN AS refundYn
RSLT_CODE2 AS rsltCode2, , MMD.RSLT_CODE AS rsltCode
AGENT_CODE AS agentCode, , MMD.RSLT_CODE2 AS rsltCode2
DATE_FORMAT(SENT_DATE,'%Y-%m-%d %T') AS sentDate, , MMD.AGENT_CODE AS agentCode
DATE_FORMAT(RSLT_DATE,'%Y-%m-%d %T') AS rsltDate , DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate
FROM MJ_MSG_DATA MMD , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
INNER JOIN LETTNGNRLMBER MB , MGD.EACH_PRICE AS eachPrice
ON MMD.USER_ID = MB.MBER_ID FROM MJ_MSG_DATA MMD
WHERE 1=1 INNER JOIN LETTNGNRLMBER MB
AND MMD.SENT_DATE > date_add(now(), interval -7 day) ON MMD.USER_ID = MB.MBER_ID
AND MMD.CUR_STATE = '3' LEFT JOIN MJ_MSG_GROUP_DATA MGD
AND MMD.REFUND_YN = 'N' ON MMD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
AND MMD.RESERVE_C_YN = 'N' LEFT JOIN MJ_CASH MC
AND MMD.MSG_TYPE IN ('4','6') ON MC.ORDER_ID = MMD.USERDATA
AND MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch') AND MC.USER_ID = MMD.USER_ID
AND 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 (CASE
WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0')) WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
THEN 'S' THEN 'S'
@ -4088,6 +4098,9 @@
THEN 'W' THEN 'W'
ELSE 'F' ELSE 'F'
END) IN ('F') END) IN ('F')
ORDER BY MMD.USER_ID
LIMIT 10000
</select> </select>
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 --> <!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
@ -4145,54 +4158,65 @@
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들(하루에 한번은 31일 실행) --> <!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들(하루에 한번은 31일 실행) -->
<select id="MjonMsgDataDAO.selectMsgSentFailListOneByDay" resultClass="mjonMsgVO"> <select id="MjonMsgDataDAO.selectMsgSentFailListOneByDay" resultClass="mjonMsgVO">
/*MjonMsgDataDAO.selectMsgSentFailListOneByDay*/
SELECT USER_ID AS userId,
MSG_GROUP_ID AS msgGroupId, SELECT MMD.USER_ID AS userId
MSG_SEQ AS msgSeq, , MMD.MSG_GROUP_ID AS msgGroupId
USERDATA AS userData, , MMD.MSG_SEQ AS msgSeq
REFUND_YN AS refundYn, , MMD.USERDATA AS userData
RSLT_CODE AS rsltCode, , MMD.REFUND_YN AS refundYn
RSLT_CODE2 AS rsltCode2, , MMD.RSLT_CODE AS rsltCode
AGENT_CODE AS agentCode, , MMD.RSLT_CODE2 AS rsltCode2
DATE_FORMAT(SENT_DATE,'%Y-%m-%d %T') AS sentDate, , MMD.AGENT_CODE AS agentCode
DATE_FORMAT(RSLT_DATE,'%Y-%m-%d %T') AS rsltDate , DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T') AS sentDate
FROM MJ_MSG_DATA MMD , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
INNER JOIN LETTNGNRLMBER MB , MGD.EACH_PRICE AS eachPrice
ON MMD.USER_ID = MB.MBER_ID FROM MJ_MSG_DATA MMD
WHERE 1=1 INNER JOIN LETTNGNRLMBER MB
AND MMD.SENT_DATE > date_add(now(), interval -40 day) ON MMD.USER_ID = MB.MBER_ID
AND MMD.CUR_STATE = '3' LEFT JOIN MJ_MSG_GROUP_DATA MGD
AND MMD.REFUND_YN = 'N' ON MMD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
AND MMD.RESERVE_C_YN = 'N' LEFT JOIN MJ_CASH MC
AND MMD.MSG_TYPE IN ('4','6') ON MC.ORDER_ID = MMD.USERDATA
AND MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch') AND MC.USER_ID = MMD.USER_ID
AND WHERE 1=1
(CASE AND MMD.SENT_DATE > date_add(now(), interval -40 day)
WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0')) AND MMD.CUR_STATE = '3'
THEN 'S' AND MMD.REFUND_YN = 'N'
WHEN MMD.AGENT_CODE = '02' AND (MMD.RSLT_CODE = '0') AND MMD.RESERVE_C_YN = 'N'
THEN 'S' AND MMD.MSG_TYPE IN ('4','6')
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') AND MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch')
THEN 'S' AND MGD.EACH_PRICE != 0
WHEN MMD.AGENT_CODE = '04' AND (MMD.RSLT_CODE = '4100' OR MMD.RSLT_CODE = '6600') AND MC.ORDER_ID IS NULL
THEN 'S' AND
WHEN MMD.AGENT_CODE = '05' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001') (CASE
THEN 'S' WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
WHEN MMD.AGENT_CODE = '07' AND (MMD.RSLT_CODE = '6' OR MMD.RSLT_CODE = '1000') THEN 'S'
THEN 'S' WHEN MMD.AGENT_CODE = '02' AND (MMD.RSLT_CODE = '0')
WHEN MMD.AGENT_CODE = '08' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001') THEN 'S'
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')
WHEN MMD.AGENT_CODE = '09' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001') THEN 'S'
THEN 'S' WHEN MMD.AGENT_CODE = '04' AND (MMD.RSLT_CODE = '4100' OR MMD.RSLT_CODE = '6600')
WHEN ( THEN 'S'
MMD.RSLT_CODE IS NULL WHEN MMD.AGENT_CODE = '05' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
AND MMD.RSLT_CODE2 IS NULL THEN 'S'
AND MMD.SENT_DATE IS NULL WHEN MMD.AGENT_CODE = '07' AND (MMD.RSLT_CODE = '6' OR MMD.RSLT_CODE = '1000')
AND MMD.RSLT_DATE IS NULL 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' THEN 'W'
ELSE 'F' ELSE 'F'
END) IN ('F') END) IN ('F')
ORDER BY MMD.USER_ID
LIMIT 10000
</select> </select>

View File

@ -55,12 +55,12 @@ function checkOnlyHpNum(str) {
번호로 시작하는 팩스 번호만 허용함. 번호로 시작하는 팩스 번호만 허용함.
*/ */
function checkFaxNum(str) { function checkFaxNum(str) {
str = removeDash(str); str = removeDash(str);
var subNum = str.substring(0,3); var subNum = str.substring(0,3);
var regExp = /^(02|0[3-6][1-4]|030|050|060|070|080|1\d{2})$/; 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); return regExp.test(subNum);
} }
/* /*
* 일반전화 유효성 체크 * 일반전화 유효성 체크