itn 2023-06-19
알림톡 예약관리 성능개선
@b409f3a2bbedcce901e5c1876e8738501ad233b3
src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
@@ -987,46 +987,71 @@
 	<!-- 전체 예약결과 조회  (그룹별)-->
 	<select id="KakaoSentDAO.selectReservKakaoSentList" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
 		SELECT
-			COUNT(M.USER_ID) OVER()               AS totMsgCnt ,
-			M.USER_ID                             AS userId ,
-			MSG_GROUP_ID                          AS msgGroupId ,
-			MSG_GROUP_CNT                         AS msgGroupCnt ,
-			SMS_TXT                               AS smsTxt ,
-			M.SUBJECT                             AS subject ,
-			DATE_FORMAT(REGDATE, '%Y-%m-%d %T')   AS regDate ,
-			DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T')  AS reqDate ,
-			DATE_FORMAT(RSLT_DATE, '%Y-%m-%d %T') AS rsltDate ,
-			TIMESTAMPDIFF(MINUTE,DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) AS diffMin,
-			CALL_FROM                             AS callFrom ,
-			CALL_TO                               AS callTo ,
-			IFNULL(ADDR_NM, '-')                  AS addrNm ,
-			TOT_PRICE                             AS totPrice ,
-			EACH_PRICE                            AS eachPrice ,
-			CUR_STATE                             AS curState ,
-			RSLT_CODE                             AS rsltCode ,
-			RSLT_CODE2                            AS rsltCode2 ,
-			IF((RSLT_CODE != '7000'),'1','0')     AS orderByrsltCode ,
-			DEL_FLAG                              AS delFlag ,
-			M.MSG_TYPE                            AS msgType ,
-			FILE_CNT                              AS fileCnt ,
-			AGENT_CODE                            AS agentCode ,
-			RESERVE_YN                            AS reserveYn ,
-			RESERVE_C_YN                          AS reserveCYn ,
-			CANCELDATE                            AS cancelDate ,
-			msgTypeName                           AS msgTypeName ,
-			orderByCode                           AS orderByCode ,
-			RESULT                                AS msgResult ,
-			successCount,
-			waitCount,
-			failCount,
-			BIZ_UMID                              AS bizUmid,
-			BL.CALL_STATUS                        AS callStatus,
-			M.BIZ_KAKAO_RESEND_YN                 AS bizKakaoResendYn,
+			M2.totMsgCnt ,
+			M2.userId ,
+			M2.msgGroupId ,
+			M2.msgGroupCnt ,
+			M2.smsTxt ,
+			M2.subject ,
+			M2.regDate ,
+			M2.reqDate ,
+			M2.rsltDate ,
+			M2.diffMin,
+			M2.callFrom ,
+			M2.callTo ,
+			M2.addrNm ,
+			M2.totPrice ,
+			M2.eachPrice ,
+			M2.curState ,
+			M2.rsltCode ,
+			M2.rsltCode2 ,
+			M2.orderByrsltCode ,
+			M2.delFlag ,
+			M2.msgType ,
+			M2.fileCnt ,
+			M2.agentCode ,
+			M2.reserveYn ,
+			M2.reserveCYn ,
+			M2.cancelDate ,
+			M2.msgTypeName ,
+			M2.orderByCode ,
+			M2.msgResult ,
+			( 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'
+			)	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)
 			FROM    BIZ_LOG BL1,
 			 MJ_MSG_DATA MMD1
-			WHERE   M.BIZ_KAKAO_RESEND_YN = 'Y'
-			AND     M.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+			WHERE   M2.bizKakaoResendYn = 'Y'
+			AND     M2.msgGroupId        = MMD1.MSG_GROUP_ID
 			AND     MMD1.BIZ_UMID         = BL1.CMID
 			AND     (
 					 CASE
@@ -1038,8 +1063,8 @@
 			( SELECT COUNT(0)
 			FROM    BIZ_LOG BL1,
 			 MJ_MSG_DATA MMD1
-			WHERE   M.BIZ_KAKAO_RESEND_YN = 'Y'
-			AND     M.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+			WHERE   M2.bizKakaoResendYn = 'Y'
+			AND     M2.msgGroupId        = MMD1.MSG_GROUP_ID
 			AND     MMD1.BIZ_UMID         = BL1.CMID
 			AND     (
 					 CASE
@@ -1048,176 +1073,183 @@
 						 ELSE 'F'
 					 END ) = 'F'
 			) kakaoResendFailCount
-		FROM ( 
-				SELECT MG.USER_ID ,
-				MG.MSG_GROUP_ID ,
-				MG.MSG_GROUP_CNT ,
-				MG.SMS_TXT ,
-				MG.SUBJECT ,
-				MG.REGDATE ,
-				MG.REQ_DATE ,
-				MD.RSLT_DATE ,
-				MG.CALL_FROM ,
-				MG.TOT_PRICE ,
-				MG.EACH_PRICE ,
-				MG.DEL_FLAG ,
-				MG.MSG_TYPE ,
-				MG.FILE_CNT ,
-				MG.AGENT_CODE ,
-				MG.RESERVE_YN ,
-				MG.RESERVE_C_YN ,
-				MG.CANCELDATE ,
-				MD.MSG_SEQ ,
-				MD.CALL_TO ,
-				MD.CUR_STATE ,
-				MD.RSLT_CODE ,
-				MD.RSLT_CODE2 ,
-				CASE
-					 WHEN MG.MSG_TYPE = '8'
-					 THEN '알림톡'
-					 WHEN MG.MSG_TYPE = '9'
-					 THEN '친구톡'
-				END msgTypeName ,
-				CASE
-					WHEN MG.MSG_TYPE = '8'
-					THEN '1'
-					ELSE '2'
-				END orderByCode , (
-				CASE
-					WHEN MD.RSLT_CODE = '7000'
-					THEN 'S'
-					WHEN (MD.RSLT_CODE IS NULL    AND     MD.SENT_DATE IS NULL   AND     MD.RSLT_DATE IS NULL   AND     MD.RESERVE_C_YN = 'Y')
-					THEN 'C'
-					WHEN (MD.RSLT_CODE IS NULL    AND     MD.SENT_DATE IS NULL   AND     MD.RSLT_DATE IS NULL)
-					THEN 'W'
-					ELSE 'F'
-				END ) AS result ,
-				( SELECT COUNT(0) 
-					FROM    MJ_MSG_DATA C
-					WHERE   C.DEL_FLAG     = 'N'
-					AND     C.RESERVE_C_YN = 'N'
-					AND     C.MSG_GROUP_ID = MG.MSG_GROUP_ID
-					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 = MG.MSG_GROUP_ID
-					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 = MG.MSG_GROUP_ID
-					AND     ( 
-								C.RSLT_CODE != '7000'
-								AND C.RSLT_CODE IS NOT NULL
-							)
-				)	AS failCount ,
-				MSG_NOTICETALK_SENDER_KEY ,
-				MSG_NOTICETALK_TMP_KEY,
-				MD.BIZ_UMID,
-				MD.BIZ_KAKAO_RESEND_YN
-			FROM    MJ_MSG_DATA MD ,
-					MJ_MSG_GROUP_DATA MG
-			WHERE	MD.MSG_GROUP_ID = MG.MSG_GROUP_ID
-				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#
+		FROM (
+			SELECT
+				COUNT(M.USER_ID) OVER()               AS totMsgCnt ,
+				M.USER_ID                             AS userId ,
+				MSG_GROUP_ID                          AS msgGroupId ,
+				MSG_GROUP_CNT                         AS msgGroupCnt ,
+				SMS_TXT                               AS smsTxt ,
+				M.SUBJECT                             AS subject ,
+				DATE_FORMAT(REGDATE, '%Y-%m-%d %T')   AS regDate ,
+				DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T')  AS reqDate ,
+				DATE_FORMAT(RSLT_DATE, '%Y-%m-%d %T') AS rsltDate ,
+				TIMESTAMPDIFF(MINUTE,DATE_FORMAT(REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) AS diffMin,
+				CALL_FROM                             AS callFrom ,
+				CALL_TO                               AS callTo ,
+				IFNULL(ADDR_NM, '-')                  AS addrNm ,
+				TOT_PRICE                             AS totPrice ,
+				EACH_PRICE                            AS eachPrice ,
+				CUR_STATE                             AS curState ,
+				RSLT_CODE                             AS rsltCode ,
+				RSLT_CODE2                            AS rsltCode2 ,
+				IF((RSLT_CODE != '7000'),'1','0')     AS orderByrsltCode ,
+				DEL_FLAG                              AS delFlag ,
+				M.MSG_TYPE                            AS msgType ,
+				FILE_CNT                              AS fileCnt ,
+				AGENT_CODE                            AS agentCode ,
+				RESERVE_YN                            AS reserveYn ,
+				RESERVE_C_YN                          AS reserveCYn ,
+				CANCELDATE                            AS cancelDate ,
+				msgTypeName                           AS msgTypeName ,
+				orderByCode                           AS orderByCode ,
+				RESULT                                AS msgResult ,
+				BIZ_UMID                              AS bizUmid,
+				BL.CALL_STATUS                        AS callStatus,
+				M.BIZ_KAKAO_RESEND_YN                 AS bizKakaoResendYn
+			FROM ( 
+					SELECT MG.USER_ID ,
+					MG.MSG_GROUP_ID ,
+					MG.MSG_GROUP_CNT ,
+					MG.SMS_TXT ,
+					MG.SUBJECT ,
+					MG.REGDATE ,
+					MG.REQ_DATE ,
+					MD.RSLT_DATE ,
+					MG.CALL_FROM ,
+					MG.TOT_PRICE ,
+					MG.EACH_PRICE ,
+					MG.DEL_FLAG ,
+					MG.MSG_TYPE ,
+					MG.FILE_CNT ,
+					MG.AGENT_CODE ,
+					MG.RESERVE_YN ,
+					MG.RESERVE_C_YN ,
+					MG.CANCELDATE ,
+					MD.MSG_SEQ ,
+					MD.CALL_TO ,
+					MD.CUR_STATE ,
+					MD.RSLT_CODE ,
+					MD.RSLT_CODE2 ,
+					CASE
+						 WHEN MG.MSG_TYPE = '8'
+						 THEN '알림톡'
+						 WHEN MG.MSG_TYPE = '9'
+						 THEN '친구톡'
+					END msgTypeName ,
+					CASE
+						WHEN MG.MSG_TYPE = '8'
+						THEN '1'
+						ELSE '2'
+					END orderByCode , (
+					CASE
+						WHEN MD.RSLT_CODE = '7000'
+						THEN 'S'
+						WHEN (MD.RSLT_CODE IS NULL    AND     MD.SENT_DATE IS NULL   AND     MD.RSLT_DATE IS NULL   AND     MD.RESERVE_C_YN = 'Y')
+						THEN 'C'
+						WHEN (MD.RSLT_CODE IS NULL    AND     MD.SENT_DATE IS NULL   AND     MD.RSLT_DATE IS NULL)
+						THEN 'W'
+						ELSE 'F'
+					END ) AS result ,
+					MSG_NOTICETALK_SENDER_KEY ,
+					MSG_NOTICETALK_TMP_KEY,
+					MD.BIZ_UMID,
+					MD.BIZ_KAKAO_RESEND_YN
+				FROM    MJ_MSG_DATA MD ,
+						MJ_MSG_GROUP_DATA MG
+				WHERE	MD.MSG_GROUP_ID = MG.MSG_GROUP_ID
+					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>
-			)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 property="searchSortOrd">
+				$searchSortOrd$
 			</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 property="searchSortOrd">
-			$searchSortOrd$
-		</isNotEmpty>
-		LIMIT  #recordCountPerPage# OFFSET #firstIndex#	
+			LIMIT  #recordCountPerPage# OFFSET #firstIndex#	
+		) M2
 	</select>
 	
 </sqlMap>
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoAllListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoAllListAjax.jsp
@@ -71,10 +71,10 @@
 		<table class="tType4">
 			<colgroup>
 				<col style="width: 40px;">
+				<col style="width: 8%;">
+				<col style="width: 13%;">
+				<col style="width: 13%;">
 				<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: 8%;">
 				<col style="width: 10%;">
@@ -92,9 +92,6 @@
 						<input type="checkbox" id="allCheck" name="allCheck">
 					</th>
 					<th rowspan="2">발송상태
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_shipmentStatus">
-						</div>
 					</th>
 					<th rowspan="2">
 						접수일자
Add a comment
List