알림톡 예약관리 성능개선

This commit is contained in:
itn 2023-06-19 17:07:50 +09:00
parent d9b245ceeb
commit b409f3a2bb
2 changed files with 242 additions and 213 deletions

View File

@ -987,46 +987,71 @@
<!-- 전체 예약결과 조회 (그룹별)--> <!-- 전체 예약결과 조회 (그룹별)-->
<select id="KakaoSentDAO.selectReservKakaoSentList" parameterClass="kakaoSentVO" resultClass="kakaoSentVO"> <select id="KakaoSentDAO.selectReservKakaoSentList" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
SELECT SELECT
COUNT(M.USER_ID) OVER() AS totMsgCnt , M2.totMsgCnt ,
M.USER_ID AS userId , M2.userId ,
MSG_GROUP_ID AS msgGroupId , M2.msgGroupId ,
MSG_GROUP_CNT AS msgGroupCnt , M2.msgGroupCnt ,
SMS_TXT AS smsTxt , M2.smsTxt ,
M.SUBJECT AS subject , M2.subject ,
DATE_FORMAT(REGDATE, '%Y-%m-%d %T') AS regDate , M2.regDate ,
DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T') AS reqDate , M2.reqDate ,
DATE_FORMAT(RSLT_DATE, '%Y-%m-%d %T') AS rsltDate , M2.rsltDate ,
TIMESTAMPDIFF(MINUTE,DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) AS diffMin, M2.diffMin,
CALL_FROM AS callFrom , M2.callFrom ,
CALL_TO AS callTo , M2.callTo ,
IFNULL(ADDR_NM, '-') AS addrNm , M2.addrNm ,
TOT_PRICE AS totPrice , M2.totPrice ,
EACH_PRICE AS eachPrice , M2.eachPrice ,
CUR_STATE AS curState , M2.curState ,
RSLT_CODE AS rsltCode , M2.rsltCode ,
RSLT_CODE2 AS rsltCode2 , M2.rsltCode2 ,
IF((RSLT_CODE != '7000'),'1','0') AS orderByrsltCode , M2.orderByrsltCode ,
DEL_FLAG AS delFlag , M2.delFlag ,
M.MSG_TYPE AS msgType , M2.msgType ,
FILE_CNT AS fileCnt , M2.fileCnt ,
AGENT_CODE AS agentCode , M2.agentCode ,
RESERVE_YN AS reserveYn , M2.reserveYn ,
RESERVE_C_YN AS reserveCYn , M2.reserveCYn ,
CANCELDATE AS cancelDate , M2.cancelDate ,
msgTypeName AS msgTypeName , M2.msgTypeName ,
orderByCode AS orderByCode , M2.orderByCode ,
RESULT AS msgResult , M2.msgResult ,
successCount, ( SELECT COUNT(0)
waitCount, FROM MJ_MSG_DATA C
failCount, WHERE C.DEL_FLAG = 'N'
BIZ_UMID AS bizUmid, AND C.RESERVE_C_YN = 'N'
BL.CALL_STATUS AS callStatus, AND C.MSG_GROUP_ID = M2.msgGroupId
M.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn, AND C.RSLT_CODE = '7000'
) AS successCount ,
( SELECT COUNT(0)
FROM MJ_MSG_DATA C
WHERE C.DEL_FLAG = 'N'
AND C.RESERVE_C_YN = 'N'
AND C.MSG_GROUP_ID = M2.msgGroupId
AND (
C.RSLT_CODE IS NULL
AND C.SENT_DATE IS NULL
AND C.RSLT_DATE IS NULL
)
) AS waitCount ,
( SELECT COUNT(0)
FROM MJ_MSG_DATA C
WHERE C.DEL_FLAG = 'N'
AND C.RESERVE_C_YN = 'N'
AND C.MSG_GROUP_ID = M2.msgGroupId
AND (
C.RSLT_CODE != '7000'
AND C.RSLT_CODE IS NOT NULL
)
) AS failCount ,
M2.bizUmid,
M2.callStatus,
M2.bizKakaoResendYn,
( SELECT COUNT(0) ( SELECT COUNT(0)
FROM BIZ_LOG BL1, FROM BIZ_LOG BL1,
MJ_MSG_DATA MMD1 MJ_MSG_DATA MMD1
WHERE M.BIZ_KAKAO_RESEND_YN = 'Y' WHERE M2.bizKakaoResendYn = 'Y'
AND M.MSG_GROUP_ID = MMD1.MSG_GROUP_ID AND M2.msgGroupId = MMD1.MSG_GROUP_ID
AND MMD1.BIZ_UMID = BL1.CMID AND MMD1.BIZ_UMID = BL1.CMID
AND ( AND (
CASE CASE
@ -1038,8 +1063,8 @@
( SELECT COUNT(0) ( SELECT COUNT(0)
FROM BIZ_LOG BL1, FROM BIZ_LOG BL1,
MJ_MSG_DATA MMD1 MJ_MSG_DATA MMD1
WHERE M.BIZ_KAKAO_RESEND_YN = 'Y' WHERE M2.bizKakaoResendYn = 'Y'
AND M.MSG_GROUP_ID = MMD1.MSG_GROUP_ID AND M2.msgGroupId = MMD1.MSG_GROUP_ID
AND MMD1.BIZ_UMID = BL1.CMID AND MMD1.BIZ_UMID = BL1.CMID
AND ( AND (
CASE CASE
@ -1048,176 +1073,183 @@
ELSE 'F' ELSE 'F'
END ) = 'F' END ) = 'F'
) kakaoResendFailCount ) kakaoResendFailCount
FROM ( FROM (
SELECT MG.USER_ID , SELECT
MG.MSG_GROUP_ID , COUNT(M.USER_ID) OVER() AS totMsgCnt ,
MG.MSG_GROUP_CNT , M.USER_ID AS userId ,
MG.SMS_TXT , MSG_GROUP_ID AS msgGroupId ,
MG.SUBJECT , MSG_GROUP_CNT AS msgGroupCnt ,
MG.REGDATE , SMS_TXT AS smsTxt ,
MG.REQ_DATE , M.SUBJECT AS subject ,
MD.RSLT_DATE , DATE_FORMAT(REGDATE, '%Y-%m-%d %T') AS regDate ,
MG.CALL_FROM , DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T') AS reqDate ,
MG.TOT_PRICE , DATE_FORMAT(RSLT_DATE, '%Y-%m-%d %T') AS rsltDate ,
MG.EACH_PRICE , TIMESTAMPDIFF(MINUTE,DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) AS diffMin,
MG.DEL_FLAG , CALL_FROM AS callFrom ,
MG.MSG_TYPE , CALL_TO AS callTo ,
MG.FILE_CNT , IFNULL(ADDR_NM, '-') AS addrNm ,
MG.AGENT_CODE , TOT_PRICE AS totPrice ,
MG.RESERVE_YN , EACH_PRICE AS eachPrice ,
MG.RESERVE_C_YN , CUR_STATE AS curState ,
MG.CANCELDATE , RSLT_CODE AS rsltCode ,
MD.MSG_SEQ , RSLT_CODE2 AS rsltCode2 ,
MD.CALL_TO , IF((RSLT_CODE != '7000'),'1','0') AS orderByrsltCode ,
MD.CUR_STATE , DEL_FLAG AS delFlag ,
MD.RSLT_CODE , M.MSG_TYPE AS msgType ,
MD.RSLT_CODE2 , FILE_CNT AS fileCnt ,
CASE AGENT_CODE AS agentCode ,
WHEN MG.MSG_TYPE = '8' RESERVE_YN AS reserveYn ,
THEN '알림톡' RESERVE_C_YN AS reserveCYn ,
WHEN MG.MSG_TYPE = '9' CANCELDATE AS cancelDate ,
THEN '친구톡' msgTypeName AS msgTypeName ,
END msgTypeName , orderByCode AS orderByCode ,
CASE RESULT AS msgResult ,
WHEN MG.MSG_TYPE = '8' BIZ_UMID AS bizUmid,
THEN '1' BL.CALL_STATUS AS callStatus,
ELSE '2' M.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn
END orderByCode , ( FROM (
CASE SELECT MG.USER_ID ,
WHEN MD.RSLT_CODE = '7000' MG.MSG_GROUP_ID ,
THEN 'S' MG.MSG_GROUP_CNT ,
WHEN (MD.RSLT_CODE IS NULL AND MD.SENT_DATE IS NULL AND MD.RSLT_DATE IS NULL AND MD.RESERVE_C_YN = 'Y') MG.SMS_TXT ,
THEN 'C' MG.SUBJECT ,
WHEN (MD.RSLT_CODE IS NULL AND MD.SENT_DATE IS NULL AND MD.RSLT_DATE IS NULL) MG.REGDATE ,
THEN 'W' MG.REQ_DATE ,
ELSE 'F' MD.RSLT_DATE ,
END ) AS result , MG.CALL_FROM ,
( SELECT COUNT(0) MG.TOT_PRICE ,
FROM MJ_MSG_DATA C MG.EACH_PRICE ,
WHERE C.DEL_FLAG = 'N' MG.DEL_FLAG ,
AND C.RESERVE_C_YN = 'N' MG.MSG_TYPE ,
AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID MG.FILE_CNT ,
AND C.RSLT_CODE = '7000' MG.AGENT_CODE ,
) AS successCount , MG.RESERVE_YN ,
( SELECT COUNT(0) MG.RESERVE_C_YN ,
FROM MJ_MSG_DATA C MG.CANCELDATE ,
WHERE C.DEL_FLAG = 'N' MD.MSG_SEQ ,
AND C.RESERVE_C_YN = 'N' MD.CALL_TO ,
AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID MD.CUR_STATE ,
AND ( MD.RSLT_CODE ,
C.RSLT_CODE IS NULL MD.RSLT_CODE2 ,
AND C.SENT_DATE IS NULL CASE
AND C.RSLT_DATE IS NULL WHEN MG.MSG_TYPE = '8'
) THEN '알림톡'
) AS waitCount , WHEN MG.MSG_TYPE = '9'
( SELECT COUNT(0) THEN '친구톡'
FROM MJ_MSG_DATA C END msgTypeName ,
WHERE C.DEL_FLAG = 'N' CASE
AND C.RESERVE_C_YN = 'N' WHEN MG.MSG_TYPE = '8'
AND C.MSG_GROUP_ID = MG.MSG_GROUP_ID THEN '1'
AND ( ELSE '2'
C.RSLT_CODE != '7000' END orderByCode , (
AND C.RSLT_CODE IS NOT NULL CASE
) WHEN MD.RSLT_CODE = '7000'
) AS failCount , THEN 'S'
MSG_NOTICETALK_SENDER_KEY , WHEN (MD.RSLT_CODE IS NULL AND MD.SENT_DATE IS NULL AND MD.RSLT_DATE IS NULL AND MD.RESERVE_C_YN = 'Y')
MSG_NOTICETALK_TMP_KEY, THEN 'C'
MD.BIZ_UMID, WHEN (MD.RSLT_CODE IS NULL AND MD.SENT_DATE IS NULL AND MD.RSLT_DATE IS NULL)
MD.BIZ_KAKAO_RESEND_YN THEN 'W'
FROM MJ_MSG_DATA MD , ELSE 'F'
MJ_MSG_GROUP_DATA MG END ) AS result ,
WHERE MD.MSG_GROUP_ID = MG.MSG_GROUP_ID MSG_NOTICETALK_SENDER_KEY ,
AND IFNULL(MG.DEL_FLAG, 'N') = 'N' MSG_NOTICETALK_TMP_KEY,
AND MD.DEL_FLAG = 'N' MD.BIZ_UMID,
AND MG.USER_ID = #userId# MD.BIZ_KAKAO_RESEND_YN
AND MG.DEL_FLAG ='N' FROM MJ_MSG_DATA MD ,
AND MG.RESERVE_YN = 'Y' MJ_MSG_GROUP_DATA MG
<isNotEmpty property="reserveCYn"> WHERE MD.MSG_GROUP_ID = MG.MSG_GROUP_ID
AND MG.RESERVE_C_YN = #reserveCYn# AND IFNULL(MG.DEL_FLAG, 'N') = 'N'
AND MD.DEL_FLAG = 'N'
AND MG.USER_ID = #userId#
AND MG.DEL_FLAG ='N'
AND MG.RESERVE_YN = 'Y'
<isNotEmpty property="reserveCYn">
AND MG.RESERVE_C_YN = #reserveCYn#
</isNotEmpty>
)M
LEFT JOIN
(
SELECT
ADDR_PHONE_NO
, ADDR_NM
FROM
MJ_ADDR
WHERE 1=1
AND MBER_ID = #userId#
GROUP BY ADDR_PHONE_NO
)MA
ON M.CALL_TO = MA.ADDR_PHONE_NO
LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI
ON M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY
AND MKPI.DELETE_YN = 'N'
LEFT JOIN LETTNGNRLMBER LTM
ON M.USER_ID = LTM.MBER_ID
LEFT JOIN BIZ_LOG BL
ON M.BIZ_UMID = BL.CMID
WHERE 1=1
<isNotEmpty property="stateType">
<isEqual property="stateType" compareValue="all">
AND CUR_STATE IN ('0','1','2','3')
</isEqual>
<isEqual property="stateType" compareValue="ready">
AND CUR_STATE = '0'
AND RESERVE_C_YN = 'N'
</isEqual>
<isEqual property="stateType" compareValue="complete">
AND CUR_STATE IN ('2','3')
AND RESERVE_C_YN = 'N'
</isEqual>
<isEqual property="stateType" compareValue="fail">
AND RESERVE_C_YN = 'N'
AND RSLT_CODE != '7000'
</isEqual>
<isEqual property="stateType" compareValue="cancel">
AND RESERVE_C_YN = 'Y'
</isEqual>
</isNotEmpty>
<isNotEmpty property="tabType">
<isEqual property="tabType" compareValue="at">
AND M.MSG_TYPE = '8'
</isEqual>
<isEqual property="tabType" compareValue="ft">
AND M.MSG_TYPE = '9'
</isEqual>
<isEqual property="tabType" compareValue="all">
AND M.MSG_TYPE IN ('8','9')
</isEqual>
</isNotEmpty>
<isEmpty property="tabType">
AND M.MSG_TYPE IN ('8','9')
</isEmpty>
<isNotEmpty property="searchKeyword">
AND CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
</isNotEmpty>
<isNotEmpty property="startDate">
<![CDATA[
AND DATE_FORMAT(REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
<isNotEmpty property="endDate">
<![CDATA[
AND DATE_FORMAT(REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
GROUP BY MSG_GROUP_ID
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
<isEqual property="searchSortCnd" compareValue="curState">
, curState $searchSortOrd$
, orderByrsltCode
</isEqual>
<isNotEqual property="searchSortCnd" compareValue="curState">
,$searchSortCnd$
</isNotEqual>
</isNotEmpty> </isNotEmpty>
)M <isNotEmpty property="searchSortOrd">
LEFT JOIN $searchSortOrd$
(
SELECT
ADDR_PHONE_NO
, ADDR_NM
FROM
MJ_ADDR
WHERE 1=1
AND MBER_ID = #userId#
GROUP BY ADDR_PHONE_NO
)MA
ON M.CALL_TO = MA.ADDR_PHONE_NO
LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI
ON M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY
AND MKPI.DELETE_YN = 'N'
LEFT JOIN LETTNGNRLMBER LTM
ON M.USER_ID = LTM.MBER_ID
LEFT JOIN BIZ_LOG BL
ON M.BIZ_UMID = BL.CMID
WHERE 1=1
<isNotEmpty property="stateType">
<isEqual property="stateType" compareValue="all">
AND CUR_STATE IN ('0','1','2','3')
</isEqual>
<isEqual property="stateType" compareValue="ready">
AND CUR_STATE = '0'
AND RESERVE_C_YN = 'N'
</isEqual>
<isEqual property="stateType" compareValue="complete">
AND CUR_STATE IN ('2','3')
AND RESERVE_C_YN = 'N'
</isEqual>
<isEqual property="stateType" compareValue="fail">
AND RESERVE_C_YN = 'N'
AND RSLT_CODE != '7000'
</isEqual>
<isEqual property="stateType" compareValue="cancel">
AND RESERVE_C_YN = 'Y'
</isEqual>
</isNotEmpty> </isNotEmpty>
<isNotEmpty property="tabType"> LIMIT #recordCountPerPage# OFFSET #firstIndex#
<isEqual property="tabType" compareValue="at"> ) M2
AND M.MSG_TYPE = '8'
</isEqual>
<isEqual property="tabType" compareValue="ft">
AND M.MSG_TYPE = '9'
</isEqual>
<isEqual property="tabType" compareValue="all">
AND M.MSG_TYPE IN ('8','9')
</isEqual>
</isNotEmpty>
<isEmpty property="tabType">
AND M.MSG_TYPE IN ('8','9')
</isEmpty>
<isNotEmpty property="searchKeyword">
AND CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
</isNotEmpty>
<isNotEmpty property="startDate">
<![CDATA[
AND DATE_FORMAT(REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
<isNotEmpty property="endDate">
<![CDATA[
AND DATE_FORMAT(REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
GROUP BY MSG_GROUP_ID
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
<isEqual property="searchSortCnd" compareValue="curState">
, curState $searchSortOrd$
, orderByrsltCode
</isEqual>
<isNotEqual property="searchSortCnd" compareValue="curState">
,$searchSortCnd$
</isNotEqual>
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select> </select>
</sqlMap> </sqlMap>

View File

@ -71,10 +71,10 @@ $(document).ready(function(){
<table class="tType4"> <table class="tType4">
<colgroup> <colgroup>
<col style="width: 40px;"> <col style="width: 40px;">
<col style="width: 8%;">
<col style="width: 13%;">
<col style="width: 13%;">
<col style="width: 7%;"> <col style="width: 7%;">
<col style="width: 11.5%;">
<col style="width: 11.5%;">
<col style="width: 10%;">
<col style="width: 90px;"> <col style="width: 90px;">
<col style="width: 8%;"> <col style="width: 8%;">
<col style="width: 10%;"> <col style="width: 10%;">
@ -92,9 +92,6 @@ $(document).ready(function(){
<input type="checkbox" id="allCheck" name="allCheck"> <input type="checkbox" id="allCheck" name="allCheck">
</th> </th>
<th rowspan="2">발송상태 <th rowspan="2">발송상태
<div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_shipmentStatus">
</div>
</th> </th>
<th rowspan="2"> <th rowspan="2">
접수일자 접수일자