This commit is contained in:
hehihoho3@gmail.com 2024-11-07 11:20:27 +09:00
commit 42ff118484
8 changed files with 187 additions and 24 deletions

View File

@ -264,7 +264,13 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
return (List<MjonMsgVO>) list("MjonMsgDataDAO.selectMsgSentFailList");
}
@SuppressWarnings("unchecked")
public List<MjonMsgVO> selectMsgSentFailSchedulerList(MjonMsgVO mjonMsgVO)throws Exception{
return (List<MjonMsgVO>) list("MjonMsgDataDAO.selectMsgSentFailSchedulerList", mjonMsgVO);
}
@SuppressWarnings("unchecked")
public List<MjonMsgVO> selectMsgSentFailListOneByDay()throws Exception{

View File

@ -49,5 +49,7 @@ public interface SchdlrManageService {
//문자온 카카오톡 실패 건수 환불 배치
public void kakaoFailPayBack() throws Exception;
//문자온 문자전송 실패 건수 환불 배치
public void payBack(String type, int limitCout) throws Exception;
}

View File

@ -91,8 +91,8 @@ public class SchedulerUtil {
/*
* 2분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다.
* */
// Schdule Lock (2분동안)
@Scheduled(cron = "0 0/2 * * * ?")
// Schdule Lock (5분동안)
@Scheduled(cron = "0 0/5 * * * ?")
@SchedulerLock(name = "runScenarioOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
public void runScenarioOneTime() throws Exception {
@ -101,7 +101,10 @@ public class SchedulerUtil {
System.out.println("=============SchedulerUtil=====runScenarioOneTime =============>");
//문자 환불, 팩스 환불
PayBack("");
//PayBack("");
/*
// 문자 환불
schdlrManageService.msgFailPayBack();
@ -481,18 +484,35 @@ public class SchedulerUtil {
}else { //2분 마다는 7일을 대상으로 실행
//어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14
//schdlrManageService.msgFailPayBack();
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailList();
for(MjonMsgVO vo : msgFailList) {
try {
mjonMsgDataDAO.updateMsgSentFailPayBack(vo);
}catch(Exception ex) {
System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
System.out.println(vo.getUserId()+" : "+ vo.getMsgGroupId() +" : "+ vo.getUserData());
ex.printStackTrace();
}
}
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setRecordCountPerPage(500);
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO);
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간
int batchSize = 300;
int totalSize = msgFailList.size();
int endj =0;
for (int i = 0; i < totalSize; i += batchSize) {
int end = Math.min(i + batchSize, totalSize);
long beforeTime = System.currentTimeMillis(); // 코드 실행 시간
for(int j=endj; j < end; j++) {
System.out.println(j+" : "+ end);
try {
mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j));
}catch(Exception ex) {
System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData());
ex.printStackTrace();
}
}
endj = end;
long afterTime = System.currentTimeMillis(); // 코드 실행 시간
long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 1 =============> : " + secDiffTime +"");
}
long forAfterTime = System.currentTimeMillis(); // 코드 실행 시간
long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"");
}
System.out.println("==== faxFailPayBack ====");

View File

@ -20,7 +20,9 @@ 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.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.StVcVO;
import itn.let.mjo.payva.service.VacsAhstService;
@ -63,6 +65,9 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
@Value("#{globalSettings['Globals.HOMPAGE_URL']}")
private String HOMPAGE_URL;
@Resource(name="MjonMsgDataDAO")
private MjonMsgDataDAO mjonMsgDataDAO;
//문자온 카카오 알림톡 발송 서비스
@Resource(name = "kakaoAlimTalkService")
private KakaoAlimTalkService kakaoAlimTalkService;
@ -423,5 +428,45 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
kakaoAlimTalkService.selectKakaoAtSentRefundList();
}
@Override
public void payBack(String type, int limitCout) throws Exception {
// 문자 환불
if ("ONE".equals(type)) { //하루에 한번만 31일 대상으로 실행
msgFailPayBackOneByDay();
}else { //2분 마다는 7일을 대상으로 실행
MjonMsgVO mjonMsgVO = new MjonMsgVO();
mjonMsgVO.setRecordCountPerPage(limitCout);
List<MjonMsgVO> msgFailList = mjonMsgDataDAO.selectMsgSentFailSchedulerList(mjonMsgVO);
long forBeforeTime = System.currentTimeMillis(); // 코드 실행 시간
int batchSize = 300;
int totalSize = msgFailList.size();
int endj =0;
for (int i = 0; i < totalSize; i += batchSize) {
int end = Math.min(i + batchSize, totalSize);
long beforeTime = System.currentTimeMillis(); // 코드 실행 시간
for(int j=endj; j < end; j++) {
System.out.println(j+" : "+ end);
try {
mjonMsgDataDAO.updateMsgSentFailPayBack(msgFailList.get(j));
}catch(Exception ex) {
System.out.println("=============SchedulerUtil=====PayBack Catch =============>");
System.out.println(msgFailList.get(j).getUserId()+" : "+ msgFailList.get(j).getMsgGroupId() +" : "+ msgFailList.get(j).getUserData());
ex.printStackTrace();
}
}
endj = end;
long afterTime = System.currentTimeMillis(); // 코드 실행 시간
long secDiffTime = (afterTime - beforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 1 =============> : " + secDiffTime +"");
}
long forAfterTime = System.currentTimeMillis(); // 코드 실행 시간
long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산( 단위)
System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"");
}
}
}

View File

@ -36,6 +36,7 @@ import itn.let.lett.service.LetterService;
import itn.let.lett.service.LetterVO;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.schdlr.service.SchdlrManageService;
import itn.let.schdlr.service.SchedulerUtil;
import itn.let.uss.ion.cnt.service.CntManageVO;
import itn.let.uss.ion.cnt.service.EgovCntManageService;
@ -768,4 +769,41 @@ public class ContentController{
}
*/
// 전용계좌 스케줄러 실행
@RequestMapping(value= {"/web/main/payBackAutoChargeAjax.do"})
public ModelAndView payBackAutoChargeAjax(HttpServletRequest request,
ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
try {
String pageType = "";
if(request.getParameter("type") != null) {
pageType = request.getParameter("type");
}
int limitCout = 500;
if(request.getParameter("limitCout") != null) {
limitCout = Integer.parseInt(request.getParameter("limitCout"));
}
System.out.println("type : " + pageType);
System.out.println("limitCout : " + limitCout);
schdlrManageService.payBack(pageType, limitCout);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
}

View File

@ -4006,9 +4006,8 @@
WHERE SEARCH_WORD = #searchKeyword#
</update>
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
<select id="MjonMsgDataDAO.selectMsgSentFailList" resultClass="mjonMsgVO">
<select id="MjonMsgDataDAO.selectMsgSentFailList">
SELECT USER_ID AS userId,
MSG_GROUP_ID AS msgGroupId,
@ -4057,7 +4056,59 @@
THEN 'W'
ELSE 'F'
END) IN ('F')
</select>
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들 -->
<select id="MjonMsgDataDAO.selectMsgSentFailSchedulerList" resultClass="mjonMsgVO">
SELECT USER_ID AS userId,
MSG_GROUP_ID AS msgGroupId,
MSG_SEQ AS msgSeq,
USERDATA AS userData,
REFUND_YN AS refundYn,
RSLT_CODE AS rsltCode,
RSLT_CODE2 AS rsltCode2,
AGENT_CODE AS agentCode,
DATE_FORMAT(SENT_DATE,'%Y-%m-%d %T') AS sentDate,
DATE_FORMAT(RSLT_DATE,'%Y-%m-%d %T') AS rsltDate
FROM MJ_MSG_DATA MMD
INNER JOIN LETTNGNRLMBER MB
ON MMD.USER_ID = MB.MBER_ID
WHERE 1=1
AND MMD.SENT_DATE > date_add(now(), interval -7 day)
AND MMD.CUR_STATE = '3'
AND MMD.REFUND_YN = 'N'
AND MMD.RESERVE_C_YN = 'N'
AND MMD.MSG_TYPE IN ('4','6')
AND MMD.USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch')
AND
(CASE
WHEN MMD.AGENT_CODE = '01' AND ( MMD.RSLT_CODE = '100' AND (MMD.RSLT_CODE2 = '0'))
THEN 'S'
WHEN MMD.AGENT_CODE = '02' AND (MMD.RSLT_CODE = '0')
THEN 'S'
WHEN MMD.AGENT_CODE = '03' AND (MMD.RSLT_CODE = '100' OR MMD.RSLT_CODE = '101' OR MMD.RSLT_CODE = '110' OR MMD.RSLT_CODE = '800')
THEN 'S'
WHEN MMD.AGENT_CODE = '04' AND (MMD.RSLT_CODE = '4100' OR MMD.RSLT_CODE = '6600')
THEN 'S'
WHEN MMD.AGENT_CODE = '05' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN MMD.AGENT_CODE = '07' AND (MMD.RSLT_CODE = '6' OR MMD.RSLT_CODE = '1000')
THEN 'S'
WHEN MMD.AGENT_CODE = '08' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN MMD.AGENT_CODE = '09' AND (MMD.RSLT_CODE = '1000' OR MMD.RSLT_CODE = '1001')
THEN 'S'
WHEN (
MMD.RSLT_CODE IS NULL
AND MMD.RSLT_CODE2 IS NULL
AND MMD.SENT_DATE IS NULL
AND MMD.RSLT_DATE IS NULL
)
THEN 'W'
ELSE 'F'
END) IN ('F')
LIMIT #recordCountPerPage#
</select>
<!-- 문자발송 실패건에 대한 환불 대상 리스트 : 발송 완료되었고, 결과코드가 실패이고, 예약 취소가 아닌건들(하루에 한번은 31일 실행) -->

View File

@ -472,17 +472,18 @@
</div>
</div>
<ul class="clause_list">
<c:set var="clause_count" value="0" />
<c:forEach var="result" items="${termsList}" varStatus="status">
<!-- 광고성 정보 수신 제외한 약관 -->
<c:if test="${result.termsId ne 'TERMS_00000025' && result.termsId ne 'TERMS_00000026' && result.termsId ne 'TERMS_00000027' && result.termsId ne 'TERMS_00000028' && result.termsId ne 'TERMS_00000029'}" >
<c:if test="${status.index eq '0'}">
<c:if test="${clause_count eq '0'}">
<li class="list_open on">
</c:if>
<c:if test="${status.index ne '0'}">
<c:if test="${clause_count ne '0'}">
<li class="list_open">
</c:if>
<c:set var="clause_count" value="${clause_count + 1}"/>
<!--필수인지 체크 후 본인인증 화면 전 필수 약관들 체크했는지 확인 -->
<c:set var="necCheck" value="" />
<c:if test="${result.necYn eq 'Y' }">

View File

@ -62,8 +62,8 @@ $(document).ready(function() {
if(agreePrivatePopCk != null){//개인정보 및 이용약관 개정 팝업 노출, 3일안보기 쿠키 있으면 팝업 안모여준다.
// $(".agreePrivatePop").css("display","none");
// $(".agreePrivatePop").hide();
$(".agreePrivatePop").css("display","none");
$(".agreePrivatePop").hide();
}
if(evntPopCk != null && pointPopCk != null){//팝업 쿠키가 모두 있는 경우 안보여준다.