File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package itn.let.schdlr.service;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.GregorianCalendar;
import egovframework.rte.fdl.property.EgovPropertyService;
import itn.com.uss.olh.hpc.service.HackIpService;
import itn.com.utl.fcc.service.EgovDateUtil;
import itn.let.fax.admin.service.FaxAdmService;
import itn.let.fax.admin.service.FaxStatVO;
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO;
import itn.let.kakao.admin.statistics.service.KakaoStatisticsService;
import itn.let.mail.service.MailTemplateService;
import itn.let.mjo.msg.service.MjonMsgService;
import itn.let.mjo.msg.service.MjonMsgStatVO;
import itn.let.sts.com.StatsVO;
import itn.let.sts.cst.service.EgovConectStatsService;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.utl.user.service.MjonNoticeSendUtil;
import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.core.SchedulerLock;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
@Profile("!local")
@Service("SchedulerUtil")
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // Scheduler Lock 사용 가능 설정 (기본 30초동안 Lock)
public class SchedulerUtil {
@Resource(name = "SchdlrManageService")
private SchdlrManageService schdlrManageService;
@Resource (name = "MailTemplateService")
private MailTemplateService mailTemplateService;
@Resource (name = "userManageService")
private EgovUserManageService egovUserManageService;
@Resource(name = "hackIpService")
private HackIpService hackIpService;
@Resource(name = "mjonMsgService")
private MjonMsgService mjonMsgService;
@Resource(name = "KakaoStatisticsService")
private KakaoStatisticsService kakaoStatisticsService;
@Resource(name = "propertiesService")
protected EgovPropertyService propertyService;
@Resource(name = "conectStatsService")
private EgovConectStatsService conectStatsService;
/** 알림전송 Util */
@Resource(name = "mjonNoticeSendUtil")
private MjonNoticeSendUtil mjonNoticeSendUtil;
@Resource(name = "faxAdmService")
private FaxAdmService faxAdmService;
/** 설정값 가져오기 */
@Value("#{globalSettings['Globals.Env']}")
private String GlobalsEnv;
private static final String ONE_MIN = "PT1M"; // 1분동안 LOCK
/*
* 2분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
* */
// Schdule Lock (2분동안)
@Scheduled(cron = "0 0/2 * * * ?")
@SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runScenarioOneTime() throws Exception {
// do something...
try {
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
//문자 환불, 팩스 환불
PayBack("");
/*
// 문자 환불
schdlrManageService.msgFailPayBack();
* */
// do something...
}catch(Exception ex) {
ex.printStackTrace();
}
}
/*
* 매일 5시20분에 31일전 데이터에서 환불 대상을 찾아서 환불 한다.
* */
@Scheduled(cron = "20 20 5 * * ?")
@SchedulerLock(name = "runScenarioOneTimeOneByDay", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runScenarioOneTimeOneByDay() throws Exception {
// do something...
try {
System.out.println("=============EgovSysLogScheduling=====runScenarioOneTimeOneByDay =============>");
//문자 환불, 팩스 환불
PayBack("ONE");
/*
// 문자 환불
schdlrManageService.msgFailPayBack();
* */
}catch(Exception ex) {
ex.printStackTrace();
}
}
// Schdule Lock (2분동안)
//세틀뱅크 자동 충전 배치
@Scheduled(cron = "0 0/2 * * * ?")
@SchedulerLock(name = "runVacsChargeOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runVacsChargeOneTime() throws Exception {
System.out.println("=============EgovSysLogScheduling=====runVacsChargeOneTime =============>");
// do something...
try {
schdlrManageService.vacsAutoCharge();
}catch(Exception ex) {
ex.printStackTrace();
}
}
// 매일 오전 6시마다 실행 ex) 06:00
@Scheduled(cron = "0 0 6 * * *")
@SchedulerLock(name = "runMailSendMemberDormant", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runMailSendMemberDormant() throws Exception {
// 휴면회원 메일발송
//mailTemplateService.mailSendMemberDormant();
System.out.println("=============EgovSysLogScheduling=====runMailSendMemberDormant =============>");
try {
mailTemplateService.mailSendMemberDormant();
// do something...
}catch(Exception ex) {
ex.printStackTrace();
}
}
// 매달 1일 0시 10분 실행
// "0 10 0 1 * *"
// 매달 3일 6시 40분 실행
// "0 40 18 3 * *"
// 매일 오전 1시 1분 0초
// "0 1 1 * * *"
// @Scheduled(cron = "0 * * * * *") // 1분마다 실행(TEST)
@Scheduled(cron = "0 1 0 1 * *") // 매달 1일 0시 1분 실행
@SchedulerLock(name = "runUserCashByAutoCashUpdate", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runUserCashByAutoCashUpdate() throws Exception {
//System.out.println("AutoCash Start");
// 후불제회원 Cash충전
//egovUserManageService.updateUserCashByAutoCash();
//System.out.println("AutoCash End");
try {
System.out.println("AutoCash Start");
// 후불제회원 Cash충전
egovUserManageService.updateUserCashByAutoCash();
}catch(Exception ex) {
ex.printStackTrace();
}
}
// 트래픽 감시 스케줄러
// 매분마다 실행
@Scheduled(cron = "37 * * * * *")
@SchedulerLock(name = "highTrafficIgnoreIpInsert", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void highTrafficIgnoreIpInsert() throws Exception {
//5분 내 300회 이상 접속로그가 있는 경우 차단아이피 등록
//hackIpService.selectHighTrafficNotIgnoreIp();
try {
System.out.println("=============EgovSysLogScheduling=====highTrafficIgnoreIpInsert =============>");
//5분 내 300회 이상 접속로그가 있는 경우 차단아이피 등록
hackIpService.selectHighTrafficNotIgnoreIp();
// do something...
}catch(Exception ex) {
ex.printStackTrace();
}
}
// AGENT별 SMS LMS MMS 발송건수 , 카카오 알림톡 발송건수 통계 스케쥴러
// @Scheduled(cron = "0 */10 * * * *") //10분마다 실행(TEST)
@Scheduled(cron = "0 10 1 * * *") // 매일 새벽1시 10분 실행
// @Scheduled(cron = "0 */30 * * * *") // 30분마다 실행
@SchedulerLock(name = "insertAgentSmsCountStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void agentSmsCountStatInsert() throws Exception {
// agent별 sms lms mms 발송건수 통계 데이터 upsert
//System.out.println("insertAgentSmsCountStat scheduler RUN (YESTERDAY)");
// int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
//int minusDate =EgovDateUtil.dayMinusToInt("yyyyMMdd", 1);
// 전일 문자발송 건 통계 insert
//MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO();
//mjonMsgStatVO.setStatStartDate(minusDate);
//mjonMsgStatVO.setStatEndDate(minusDate);
//mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
try {
System.out.println("=============EgovSysLogScheduling=====insertAgentSmsCountStat scheduler RUN (YESTERDAY) =============>");
// int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
int minusDate =EgovDateUtil.dayMinusToInt("yyyyMMdd", 1);
int minusSevenDays =EgovDateUtil.dayMinusToInt("yyyyMMdd", 7);
MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO();
mjonMsgStatVO.setStatStartDate(minusSevenDays);
mjonMsgStatVO.setStatEndDate(minusDate);
// 전일 문자발송 건 통계 insert
mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
//================================================================
//================================================================
MjonKakaoAtStatVO kakaoAtStatVO = new MjonKakaoAtStatVO();
kakaoAtStatVO.setStatStartDate(minusSevenDays);
kakaoAtStatVO.setStatEndDate(minusDate);
// 전일 알림톡발송 건 통계 insert
kakaoStatisticsService.insertKakaoAtCountStat(kakaoAtStatVO);
//================================================================
//================================================================
FaxStatVO faxStatVO = new FaxStatVO();
faxStatVO.setStatStartDate(minusSevenDays);
faxStatVO.setStatEndDate(minusDate);
// 전일 알림톡발송 건 통계 insert
faxAdmService.insertFaxCountStat(faxStatVO);
// do something...
}catch(Exception ex) {
ex.printStackTrace();
}
}
// AGENT별 SMS LMS MMS 발송건수 통계 스케쥴러
// @Scheduled(cron = "0 */10 * * * *") //10분마다 실행(TEST)
// @Scheduled(cron = "0 0 1 * * *") // 매일 새벽1시 실행
@Scheduled(cron = "0 */30 * * * *") // 30분마다 실행
@SchedulerLock(name = "insertAgentSmsCountStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void agentSmsCountStatInsert2() throws Exception {
// agent별 sms lms mms 발송건수 통계 데이터 upsert
//System.out.println("insertAgentSmsCountStat scheduler RUN (EVERY 30 MINUTES)");
//int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
// int minusDate =EgovDateUtil.dayMinusToInt("yyyyMMdd", 1);
// 당일 문자발송 건 통계 insert
//MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO();
//mjonMsgStatVO.setStatStartDate(nowDate);
//mjonMsgStatVO.setStatEndDate(nowDate);
//mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
try {
System.out.println("=============EgovSysLogScheduling=====agentSmsCountStatInsert2 =============>");
int nowDate =EgovDateUtil.nowDateToInt("yyyyMMdd");
// int minusDate =EgovDateUtil.dayMinusToInt("yyyyMMdd", 1);
// 당일 문자발송 건 통계 insert
MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO();
mjonMsgStatVO.setStatStartDate(nowDate);
mjonMsgStatVO.setStatEndDate(nowDate);
mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
//================================================================
//================================================================
MjonKakaoAtStatVO kakaoAtStatVO = new MjonKakaoAtStatVO();
kakaoAtStatVO.setStatStartDate(nowDate);
kakaoAtStatVO.setStatEndDate(nowDate);
// 당일 알림톡발송 건 통계 insert
kakaoStatisticsService.insertKakaoAtCountStat(kakaoAtStatVO);
//================================================================
FaxStatVO faxStatVO = new FaxStatVO();
faxStatVO.setStatStartDate(nowDate);
faxStatVO.setStatEndDate(nowDate);
// 전일 알림톡발송 건 통계 insert
faxAdmService.insertFaxCountStat(faxStatVO);
// do something...
}catch(Exception ex) {
ex.printStackTrace();
}
}
// 대시보드 어제/오늘 접속현황 & 접속통계
@Scheduled(cron = "0 1 0 * * *") // 매일 새벽0시 1분 실행
@SchedulerLock(name = "insertDashBoardStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void dashBoardStatInsert() throws Exception {
try {
System.out.println("=============EgovSysLogScheduling=====dashBoardStatInsert =============>");
// 어제날짜
Calendar calendar = new GregorianCalendar();
SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
String yesterdayDate = SDF.format(calendar.getTime());
calendar.add(Calendar.DATE, -1);
yesterdayDate = SDF.format(calendar.getTime());
StatsVO yesterdayStatsVO = new StatsVO();
yesterdayStatsVO.setStatDate(yesterdayDate);
// 대시보드 인서트 Logic
conectStatsService.insertDashBoardStatLogic(yesterdayStatsVO);
// 대시보드 업데이트 Logic
conectStatsService.updateDashBoardStatLogic(yesterdayStatsVO);
// 오늘날짜
Date nowDate = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strNowDate = simpleDateFormat.format(nowDate);
StatsVO statsVO = new StatsVO();
statsVO.setStatDate(strNowDate);
// 대시보드 인서트 Logic
conectStatsService.insertDashBoardStatLogic(statsVO);
// 대시보드 업데이트 Logic
conectStatsService.updateDashBoardStatLogic(statsVO);
}catch(Exception ex) {
ex.printStackTrace();
}
}
// 대시보드 어제/오늘 접속현황 & 접속통계
@Scheduled(cron = "0 */30 * * * *") // 30분마다 실행
@SchedulerLock(name = "updateDashBoardStat", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void DashBoardStatUpdate() throws Exception {
try {
System.out.println("=============EgovSysLogScheduling=====DashBoardStatUpdate =============>");
// 오늘날짜
Date nowDate = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strNowDate = simpleDateFormat.format(nowDate);
StatsVO statsVO = new StatsVO();
statsVO.setStatDate(strNowDate);
// 대시보드 인서트 Logic
conectStatsService.insertDashBoardStatLogic(statsVO);
// 대시보드 업데이트 Logic
conectStatsService.updateDashBoardStatLogic(statsVO);
}catch(Exception ex) {
ex.printStackTrace();
}
}
// 이용약관 메일발송
@Scheduled(cron = "0 */10 * * * *") // 10분마다 실행
@SchedulerLock(name = "sendTermsEmail", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void TermsEmailSend() throws Exception {
try {
System.out.println("=============EgovSysLogScheduling=====TermsEmailSend =============>");
// 이용약관 회원 전체발송
mjonNoticeSendUtil.userAllTermsEmailSend();
}catch(Exception ex) {
ex.printStackTrace();
}
}
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
}
@Scheduled(cron = "20 * * * * ?")
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runKakaoOneTime() throws Exception {
// do something...
try {
System.out.println("=============SchedulerUtil=====runKakaoOneTime =============>");
schdlrManageService.kakaoFailPayBack();
}catch(Exception ex) {
ex.printStackTrace();
}
}
//환불 실행
private void PayBack(String p_type) throws Exception {
// 문자 환불
if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행
schdlrManageService.msgFailPayBackOneByDay();
}else { //2분 마다는 7일을 대상으로 실행
schdlrManageService.msgFailPayBack();
}
System.out.println("==== faxFailPayBack ====");
// 팩스 환불
schdlrManageService.faxFailPayBack();
}
}