name 2023-08-01
Merge branch 'wyh'
@fc5dd8f21b172e9ad7336e6ef8509851cd3aa9bd
src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
@@ -167,6 +167,59 @@
 	
 	private String sendKind; //문자전송 타입(H:홈페이지, A:API)
 	
+	private int aSuccessCount;		// API 문자발송 성공건수
+	private int aSendCount;			// API 문자 발송건수
+	
+	private int totalSendCount;			// 전체 문자발송 건수
+	private int totalSuccessCount;		// 전체 문자발송 성공건수
+	
+	private int rateTotalSuccessCount;	// 전체 문자발송 성공율
+	private int rateSuccessCount;		// 홈페이지 전송 성공율
+	private int rateApiSuccessCount;	// API 전송 성공율
+	
+	
+	public int getRateSuccessCount() {
+		return rateSuccessCount;
+	}
+	public void setRateSuccessCount(int rateSuccessCount) {
+		this.rateSuccessCount = rateSuccessCount;
+	}
+	public int getRateApiSuccessCount() {
+		return rateApiSuccessCount;
+	}
+	public void setRateApiSuccessCount(int rateApiSuccessCount) {
+		this.rateApiSuccessCount = rateApiSuccessCount;
+	}
+	public int getTotalSendCount() {
+		return totalSendCount;
+	}
+	public void setTotalSendCount(int totalSendCount) {
+		this.totalSendCount = totalSendCount;
+	}
+	public int getTotalSuccessCount() {
+		return totalSuccessCount;
+	}
+	public void setTotalSuccessCount(int totalSuccessCount) {
+		this.totalSuccessCount = totalSuccessCount;
+	}
+	public int getRateTotalSuccessCount() {
+		return rateTotalSuccessCount;
+	}
+	public void setRateTotalSuccessCount(int rateTotalSuccessCount) {
+		this.rateTotalSuccessCount = rateTotalSuccessCount;
+	}
+	public int getaSuccessCount() {
+		return aSuccessCount;
+	}
+	public void setaSuccessCount(int aSuccessCount) {
+		this.aSuccessCount = aSuccessCount;
+	}
+	public int getaSendCount() {
+		return aSendCount;
+	}
+	public void setaSendCount(int aSendCount) {
+		this.aSendCount = aSendCount;
+	}
 	public String getSendKind() {
 		return sendKind;
 	}
src/main/java/itn/let/mjo/msg/web/MjonMsgController.java
--- src/main/java/itn/let/mjo/msg/web/MjonMsgController.java
+++ src/main/java/itn/let/mjo/msg/web/MjonMsgController.java
@@ -4412,7 +4412,7 @@
     		
     		if (resultList.size()>0) {
     			model.addAttribute("sttstDate", resultList.get(0).getRegistPnttm());
-    		}        	
+    		}
         }catch(Exception ex) {
         	ex.printStackTrace();
         }
src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
--- src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
@@ -70,6 +70,8 @@
 	
 	private int successCnt;	// 문자발송 성공건수
 	
+	private String sendKind;	//문자 전송 타입(H:홈페이지 A: API)
+	
 	private String msgKind;	//문자종류(일반:N, 광고:A , 선거:C, 관리자:S, 이벤트:E)
 	private String delayYn; //지연 문자 유무
 	private String delayCompleteYn; //지연문자 처리 완료 여부
@@ -420,6 +422,10 @@
 	public void setDelayCompleteYn(String delayCompleteYn) {
 		this.delayCompleteYn = delayCompleteYn;
 	}
-
-
+	public String getSendKind() {
+		return sendKind;
+	}
+	public void setSendKind(String sendKind) {
+		this.sendKind = sendKind;
+	}
 }
src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
--- src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
+++ src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
@@ -1788,10 +1788,10 @@
         paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonMsgVO)resultList.get(0)).getTotCnt() : 0);
 		model.addAttribute("paginationInfo", paginationInfo);
 		
-		String msgGroupSCntSum = "0";	//정상수신 총 건수 합계
-		String totSPriceSum = "0";	//정상수신 총 금액 합계
-		String msgGroupFWCntSum = "0";	//실패대기 총 건수 합계
-		String totFWPriceSum = "0";	//실패대기 총 금액 합계
+		String msgGroupSCntSum = "0";		//정상수신 총 건수 합계
+		String totSPriceSum = "0";			//정상수신 총 금액 합계
+		String msgGroupFWCntSum = "0";		//실패대기 총 건수 합계
+		String totFWPriceSum = "0";			//실패대기 총 금액 합계
 		
 		if(resultList.size() > 0) {
 			
@@ -1809,10 +1809,10 @@
 		
 		
 		//단문 건수 및 금액 변수 처리
-		String msgSmsGroupSCntSum = "0";	//정상수신 총 건수 합계
-		String totSmsSPriceSum = "0";	//정상수신 총 금액 합계
-		String msgSmsGroupFWCntSum = "0";	//실패대기 총 건수 합계
-		String totSmsFWPriceSum = "0";	//실패대기 총 금액 합계
+		String msgSmsGroupSCntSum = "0";		//정상수신 총 건수 합계
+		String totSmsSPriceSum = "0";			//정상수신 총 금액 합계
+		String msgSmsGroupFWCntSum = "0";		//실패대기 총 건수 합계
+		String totSmsFWPriceSum = "0";			//실패대기 총 금액 합계
 		
 		if(resultSmsList.size() > 0) {
 			
@@ -1830,10 +1830,10 @@
 		
 		
 		//장문 건수 및 금액 변수 처리
-		String msgLmsGroupSCntSum = "0";	//정상수신 총 건수 합계
-		String totLmsSPriceSum = "0";	//정상수신 총 금액 합계
-		String msgLmsGroupFWCntSum = "0";	//실패대기 총 건수 합계
-		String totLmsFWPriceSum = "0";	//실패대기 총 금액 합계
+		String msgLmsGroupSCntSum = "0";		//정상수신 총 건수 합계
+		String totLmsSPriceSum = "0";			//정상수신 총 금액 합계
+		String msgLmsGroupFWCntSum = "0";		//실패대기 총 건수 합계
+		String totLmsFWPriceSum = "0";			//실패대기 총 금액 합계
 		
 		if(resultLmsList.size() > 0) {
 			
@@ -1851,10 +1851,10 @@
 		
 		
 		//그림 건수 및 금액 변수 처리
-		String msgMmsGroupSCntSum = "0";	//정상수신 총 건수 합계
-		String totMmsSPriceSum = "0";	//정상수신 총 금액 합계
-		String msgMmsGroupFWCntSum = "0";	//실패대기 총 건수 합계
-		String totMmsFWPriceSum = "0";	//실패대기 총 금액 합계
+		String msgMmsGroupSCntSum = "0";		//정상수신 총 건수 합계
+		String totMmsSPriceSum = "0";			//정상수신 총 금액 합계
+		String msgMmsGroupFWCntSum = "0";		//실패대기 총 건수 합계
+		String totMmsFWPriceSum = "0";			//실패대기 총 금액 합계
 		
 		if(resultMmsList.size() > 0) {
 			
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
@@ -4451,6 +4451,7 @@
 			, msgGroupId
 			, callFrom
 			, callTo
+			, sendKind
 			, smsTxt
 			, fileCnt
 			, msgType
@@ -4475,50 +4476,84 @@
 			, smiId
 			, delayYn
 			, delayCompleteYn
- 			,(
-				SELECT
-					CONCAT(
-					(
-					  	IF(B.FILE_PATH1 IS NOT NULL, (SELECT
-	 	 	 	 			ATCH_FILE_ID
-	 	 	 	 		FROM LETTNFILEDETAIL 
-	 	 	 	 		WHERE CONCAT(STRE_FILE_NM, '.', FILE_EXTSN) = CONCAT(SUBSTRING_INDEX(B.FILE_PATH1, '/', -1))
-	 	 	 	 		LIMIT 1), '')
-	 	 	 	 	)
-	 	 	 	 	,'^',
-					(
-					  	IF(B.FILE_PATH2 IS NOT NULL, (SELECT
-	 	 	 	 			ATCH_FILE_ID
-	 	 	 	 		FROM LETTNFILEDETAIL 
-	 	 	 	 		WHERE CONCAT(STRE_FILE_NM, '.', FILE_EXTSN) = CONCAT(SUBSTRING_INDEX(B.FILE_PATH2, '/', -1))
-	 	 	 	 		LIMIT 1), '')
-	 	 	 	 	)
-	 	 	 	 	,'^',
-					(
-					  	IF(B.FILE_PATH3 IS NOT NULL, (SELECT
-	 	 	 	 			ATCH_FILE_ID
-	 	 	 	 		FROM LETTNFILEDETAIL 
-	 	 	 	 		WHERE CONCAT(STRE_FILE_NM, '.', FILE_EXTSN) = CONCAT(SUBSTRING_INDEX(B.FILE_PATH3, '/', -1))
-	 	 	 	 		LIMIT 1), '')
-	 	 	 	 	))	 	 	 		 	 	 	 	
-				FROM
-					MJ_MSG_DATA B
-				WHERE 
-					B.MSG_GROUP_ID = msgGroupId
-					LIMIT 1
-			) AS atchFiles				
+ 			,(SELECT
+				CONCAT(
+					(IF(B.FILE_PATH1 IS NOT NULL
+						, (SELECT
+								ATCH_FILE_ID
+							FROM
+								LETTNFILEDETAIL 
+							WHERE 1=1
+								AND CONCAT(STRE_FILE_NM, '.', FILE_EXTSN) = CONCAT(SUBSTRING_INDEX(B.FILE_PATH1, '/', -1))
+							LIMIT 1)
+						, '')
+					)
+					, '^'
+					, (IF(B.FILE_PATH2 IS NOT NULL
+						, (SELECT 
+								ATCH_FILE_ID
+							FROM
+								LETTNFILEDETAIL 
+							WHERE 1=1
+								AND CONCAT(STRE_FILE_NM, '.', FILE_EXTSN) = CONCAT(SUBSTRING_INDEX(B.FILE_PATH2, '/', -1))
+							LIMIT 1)
+						, '')
+					)
+					, '^'
+					, (IF(B.FILE_PATH3 IS NOT NULL
+						, (SELECT
+								ATCH_FILE_ID
+							FROM
+								LETTNFILEDETAIL
+							WHERE 1=1
+								AND CONCAT(STRE_FILE_NM, '.', FILE_EXTSN) = CONCAT(SUBSTRING_INDEX(B.FILE_PATH3, '/', -1))
+							LIMIT 1)
+						, '')
+					)
+				)
+			FROM
+				MJ_MSG_DATA B
+			WHERE 1=1
+				AND B.MSG_GROUP_ID = msgGroupId
+			LIMIT 1
+			) AS atchFiles
 		FROM
 			(SELECT
-				(SELECT	count(1) 
-					 FROM
-						(SELECT
-								(<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt,
-								MGD.MSG_GROUP_ID
-						FROM	MJ_MSG_GROUP_DATA MGD
+				(SELECT
+					count(1) 
+				FROM
+					(SELECT
+						(<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+						, MGD.MSG_GROUP_ID
+					FROM
+						MJ_MSG_GROUP_DATA MGD
 						LEFT JOIN MJ_MSG_DATA MD
 						ON	MD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
-						WHERE	MGD.USER_ID = #userId#
+					WHERE 1=1
+						AND MGD.USER_ID = #userId#
 						AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+						
+						<isNotEmpty property="sendKind">
+							<isEqual property="sendKind" compareValue="H">
+								AND MGD.SEND_KIND = 'H'
+							</isEqual>
+							<isEqual property="sendKind" compareValue="A">
+								AND MGD.SEND_KIND = 'A'
+							</isEqual>
+						</isNotEmpty>
+						
+						<isNotEmpty property="searchKeyword">
+							<isEqual prepend="AND" property="searchCondition" compareValue="">
+								( MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')  OR  MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%') )
+							</isEqual>
+							<isEqual prepend="AND" property="searchCondition" compareValue="1">
+								MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')
+							</isEqual>
+							<isEqual prepend="AND" property="searchCondition" compareValue="2">
+								MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%')
+							</isEqual>
+						</isNotEmpty>
+						
 						<isNotEmpty property="reserveType">
 							<isEqual property="reserveType" compareValue="D">
 								<![CDATA[ 
@@ -4533,20 +4568,24 @@
 								]]>
 							</isEqual>
 						</isNotEmpty>
-							) sub2
-						WHERE	sub2.resultCodeTxt = 'S'
-						AND		sub2.MSG_GROUP_ID = IN1.MSG_GROUP_ID
-					) AS msgGroupSCnt
+					) sub2
+				WHERE 1=1
+					AND sub2.resultCodeTxt = 'S'
+					AND sub2.MSG_GROUP_ID = IN1.MSG_GROUP_ID
+				) AS msgGroupSCnt
 				, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS totSPrice
-				, (SELECT	count(1) 
-					 FROM
+				, (SELECT
+						count(1)
+					FROM
 						(SELECT
-								(<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt,
-								MGD.MSG_GROUP_ID
-							FROM	MJ_MSG_GROUP_DATA MGD
+							(<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+							, MGD.MSG_GROUP_ID
+						FROM
+							MJ_MSG_GROUP_DATA MGD
 							LEFT JOIN MJ_MSG_DATA MD
-							ON	MD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
-							WHERE	MGD.USER_ID = #userId#
+							ON MD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
+						WHERE 1=1
+							AND MGD.USER_ID = #userId#
 							AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
 							<isNotEmpty property="reserveType">
 								<isEqual property="reserveType" compareValue="D">
@@ -4562,15 +4601,17 @@
 									]]>
 								</isEqual>
 							</isNotEmpty>
-							) sub2
-						WHERE	<![CDATA[ sub2.resultCodeTxt <> 'S' ]]>
-						AND		sub2.MSG_GROUP_ID = IN1.MSG_GROUP_ID
+						) sub2
+						WHERE 1=1
+							AND <![CDATA[ sub2.resultCodeTxt <> 'S' ]]>
+							AND sub2.MSG_GROUP_ID = IN1.MSG_GROUP_ID
 					) AS msgGroupFWCnt
 				, '0'								AS totFWPrice
 				, MSG_GROUP_ID						AS msgGroupId
 				, USER_ID							AS userId
 				, CALL_FROM							AS callFrom
 				, CALL_TO							AS callTo
+				, SEND_KIND							AS sendKind
 				, SMS_TXT							AS smsTxt
 				, FILE_CNT							AS fileCnt
 				, MSG_TYPE							AS msgType
@@ -4601,6 +4642,7 @@
 					, MGD.USER_ID
 					, MGD.CALL_FROM
 					, MD.CALL_TO
+					, MGD.SEND_KIND
 					, MGD.SMS_TXT
 					, MGD.FILE_CNT
 					, MD.MSG_TYPE
@@ -4657,6 +4699,26 @@
 					</isEqual>
 					AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
 					
+					<isNotEmpty property="sendKind">
+						<isEqual property="sendKind" compareValue="H">
+							AND MGD.SEND_KIND = 'H'
+						</isEqual>
+						<isEqual property="sendKind" compareValue="A">
+							AND MGD.SEND_KIND = 'A'
+						</isEqual>
+					</isNotEmpty>
+					
+					<isNotEmpty property="searchKeyword">
+						<isEqual prepend="AND" property="searchCondition" compareValue="">
+							( MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')  OR  MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%') )
+						</isEqual>
+						<isEqual prepend="AND" property="searchCondition" compareValue="1">
+							MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')
+						</isEqual>
+						<isEqual prepend="AND" property="searchCondition" compareValue="2">
+							MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%')
+						</isEqual>
+					</isNotEmpty>
 					<isNotEmpty property="reserveType">
 						<isEqual property="reserveType" compareValue="D">
 						<![CDATA[ 
@@ -4670,18 +4732,18 @@
 						AND MGD.RESERVE_YN = 'Y'
 						]]>
 						/**30분 지연이 아니거나 지연 처리가 완료된 건들 불러오기*/
-		                 AND
-	                         (
-	                                 (
-	                                         MGD.DELAY_YN          = 'N'
-	                                 AND     MGD.DELAY_COMPLETE_YN = 'N'
-	                                 )
-	                         OR
-	                                 (
-	                                         MGD.DELAY_YN          = 'Y'
-	                                 AND     MGD.DELAY_COMPLETE_YN = 'Y'
-	                                 )
-	                         )
+						AND
+						(
+							(
+								MGD.DELAY_YN = 'N'
+								AND MGD.DELAY_COMPLETE_YN = 'N'
+							)
+							OR
+							(
+								MGD.DELAY_YN = 'Y'
+								AND MGD.DELAY_COMPLETE_YN = 'Y'
+							)
+						)
 						</isEqual>
 					</isNotEmpty>
 					
@@ -4803,8 +4865,8 @@
 						ON MD.MSG_GROUP_ID = MGD.MSG_GROUP_ID
 					LEFT JOIN (SELECT CODE_NM  ,CODE , CODE_DC FROM LETTCCMMNDETAILCODE WHERE USE_AT  = 'Y' AND CODE_ID = 'ITN019' )B
 						ON MD.AGENT_CODE = B.CODE
-				WHERE
-					MGD.USER_ID = #userId#
+				WHERE 1=1
+					AND MGD.USER_ID = #userId#
 					AND MGD.MSG_TYPE IN (4, 6)
 					<isNotEmpty property="msgType">
 					AND MGD.MSG_TYPE = #msgType#
@@ -4816,6 +4878,28 @@
 					AND MGD.FILE_CNT = 0
 					</isEqual>
 					AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+					
+					<isNotEmpty property="sendKind">
+						<isEqual property="sendKind" compareValue="H">
+							AND MGD.SEND_KIND = 'H'
+						</isEqual>
+						<isEqual property="sendKind" compareValue="A">
+							AND MGD.SEND_KIND = 'A'
+						</isEqual>
+					</isNotEmpty>
+					
+					<isNotEmpty property="searchKeyword">
+						<isEqual prepend="AND" property="searchCondition" compareValue="">
+							( MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')  OR  MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%') )
+						</isEqual>
+						<isEqual prepend="AND" property="searchCondition" compareValue="1">
+							MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')
+						</isEqual>
+						<isEqual prepend="AND" property="searchCondition" compareValue="2">
+							MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%')
+						</isEqual>
+					</isNotEmpty>
+					
 					<isNotEmpty property="reserveType">
 						<isEqual property="reserveType" compareValue="D">
 						<![CDATA[ 
@@ -4924,6 +5008,27 @@
 					</isEqual>
 					AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
 					
+					<isNotEmpty property="sendKind">
+						<isEqual property="sendKind" compareValue="H">
+							AND MGD.SEND_KIND = 'H'
+						</isEqual>
+						<isEqual property="sendKind" compareValue="A">
+							AND MGD.SEND_KIND = 'A'
+						</isEqual>
+					</isNotEmpty>
+					
+					<isNotEmpty property="searchKeyword">
+						<isEqual prepend="AND" property="searchCondition" compareValue="">
+							( MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')  OR  MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%') )
+						</isEqual>
+						<isEqual prepend="AND" property="searchCondition" compareValue="1">
+							MD.CALL_FROM LIKE CONCAT('%' , #searchKeyword#, '%')
+						</isEqual>
+						<isEqual prepend="AND" property="searchCondition" compareValue="2">
+							MD.SMS_TXT LIKE CONCAT('%' , #searchKeyword#, '%')
+						</isEqual>
+					</isNotEmpty>
+					
 					<isNotEmpty property="reserveType">
 						<isEqual property="reserveType" compareValue="D">
 						<![CDATA[ 
@@ -5017,25 +5122,47 @@
 	<!-- 일별 문자발송 건수 -->
 	<select id="mjonMsgDAO.selectMsgDayChart_230125" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
 	
-		SELECT a.SEND_DATE	AS regDate
-			, a.send_cnt	AS	sendCount
-			, a.success_cnt	AS	successCount
-			, DATE_FORMAT(a.regist_pnttm, '%H:%i:%s')	AS	registPnttm
-			/*
-			, a.regist_pnttm	AS	registPnttm
-			*/
-			, COUNT(a.SEND_DATE) OVER()				AS totCnt			 /** 전체 건수 */
-		FROM mj_sttst_msg a
-		WHERE 1=1
-		   AND <![CDATA[ a.send_date <= DATE_FORMAT(NOW(), '%Y-%m-%d') ]]>
+		SELECT
+			a.SEND_DATE														AS regDate
+			, IFNULL(a.send_cnt, 0)											AS sendCount
+			, IFNULL(a.API_SEND_CNT, 0)										AS aSendCount
+			, IFNULL(a.send_cnt, 0) + IFNULL(a.API_SEND_CNT, 0)				AS totalSendCount
+			
+			, IFNULL(a.success_cnt, 0)										AS successCount
+			, IFNULL(a.API_SUCCESS_CNT, 0)									AS aSuccessCount
+			, IFNULL(a.success_cnt, 0) + IFNULL(a.API_SUCCESS_CNT, 0)		AS totalSuccessCount
 
-        <isNotEmpty property="ntceBgnde">
-	        AND <![CDATA[ a.send_date  >=   #ntceBgnde# ]]>
-		</isNotEmpty>
-        <isNotEmpty property="ntceEndde">
+			, IFNULL(ROUND(((IFNULL(a.success_cnt, 0) + IFNULL(a.API_SUCCESS_CNT, 0)) / (IFNULL(a.send_cnt, 0) + IFNULL(a.API_SEND_CNT, 0))) * 100), 0) AS rateTotalSuccessCount
+			, IFNULL(ROUND((a.success_cnt / a.send_cnt ) * 100), 0)			AS rateSuccessCount
+			, IFNULL(ROUND((a.API_SUCCESS_CNT / a.API_SEND_CNT ) * 100), 0) AS rateApiSuccessCount
+			
+			, DATE_FORMAT(a.regist_pnttm, '%H:%i:%s')						AS registPnttm
+			, COUNT(a.SEND_DATE) OVER()										AS totCnt			 /** 전체 건수 */
+		FROM
+			mj_sttst_msg a
+		WHERE 1=1
+			AND <![CDATA[ a.send_date <= DATE_FORMAT(NOW(), '%Y-%m-%d') ]]>
+
+			<isNotEmpty property="ntceBgnde">
+			AND <![CDATA[ a.send_date  >=   #ntceBgnde# ]]>
+			</isNotEmpty>
+			
+			<isNotEmpty property="ntceEndde">
 			AND <![CDATA[ a.send_date <= #ntceEndde# ]]>
-		</isNotEmpty>
-						   
+			</isNotEmpty>
+			
+			<isNotEmpty property="sendKind">
+				<isEqual property="sendKind" compareValue="H">
+					AND a.send_cnt != 0
+				</isEqual>
+				<isEqual property="sendKind" compareValue="A">
+					AND a.API_SEND_CNT != 0
+				</isEqual>
+			</isNotEmpty>
+			<isEmpty property="sendKind">
+				AND (a.send_cnt != 0 || a.API_SEND_CNT != 0)
+			</isEmpty>
+			
 		ORDER BY a.SEND_DATE DESC
 		LIMIT  #recordCountPerPage# OFFSET #firstIndex#
 	</select>
@@ -5085,16 +5212,29 @@
 	
 	<!-- 월별 문자발송 건수 -->
 	<select id="mjonMsgDAO.selectMsgMonthChart_230125" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
-		SELECT substring(a.send_date,1,7)	AS regDate
-			, sum(a.send_cnt)	AS	sendCount
-			, sum(a.success_cnt)	AS	successCount
+		SELECT
+			substring(a.send_date,1,7)													AS regDate
+			
+			, IFNULL(sum(a.send_cnt), 0)												AS sendCount
+			, IFNULL(sum(a.API_SEND_CNT), 0)											AS aSendCount
+			, IFNULL(sum(a.send_cnt), 0) + IFNULL(sum(a.API_SEND_CNT), 0)				AS totalSendCount
+			
+			, IFNULL(sum(a.success_cnt), 0)												AS successCount
+			, IFNULL(sum(a.API_SUCCESS_CNT), 0)											AS aSuccessCount
+			, IFNULL(sum(a.success_cnt), 0) + IFNULL(sum(a.API_SUCCESS_CNT), 0)			AS totalSuccessCount
+			
+			, IFNULL(ROUND((IFNULL(sum(a.success_cnt), 0) / IFNULL(sum(a.send_cnt), 0)) * 100), 0)			AS rateSuccessCount
+			, IFNULL(ROUND((IFNULL(sum(a.API_SUCCESS_CNT), 0) / IFNULL(sum(a.API_SEND_CNT), 0)) * 100), 0)	AS rateApiSuccessCount
+			, IFNULL(ROUND((IFNULL(sum(a.success_cnt), 0) + IFNULL(sum(a.API_SUCCESS_CNT), 0)) / (IFNULL(sum(a.send_cnt), 0) + IFNULL(sum(a.API_SEND_CNT), 0)) * 100), 0) AS rateTotalSuccessCount
+			
+			
 			, max(DATE_FORMAT(a.regist_pnttm, '%H:%i:%s'))	AS	registPnttm
-		FROM mj_sttst_msg a
+		FROM
+			mj_sttst_msg a
 		WHERE 1=1
 		   AND a.send_date like concat(#ntceBgnde#,'%')
 		   AND <![CDATA[ a.send_date <= DATE_FORMAT(NOW(), '%Y-%m-%d') ]]>
- 
-		group by substring(a.send_date,1,7)           
+		group by substring(a.send_date,1,7)
 		order by send_date desc
 
 	</select>	
src/main/resources/egovframework/sqlmap/let/sttst/MjonSttstData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/sttst/MjonSttstData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/sttst/MjonSttstData_SQL_mysql.xml
@@ -8,176 +8,251 @@
 	<typeAlias  alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/>
 	
 	<insert id="mjonSttst.insertMjSttstMsgBulk" parameterClass="mjonMsgVO">
-		INSERT	INTO   mj_sttst_msg
-		(send_date, send_cnt, success_cnt, regist_pnttm)
+		INSERT INTO MJ_STTST_MSG
+		(
+			send_date
+			, send_cnt
+			, success_cnt
+			, API_SEND_CNT
+			, API_SUCCESS_CNT
+			, regist_pnttm
+		)
 		
-		select aa.regDate
-			, aa.sendCount
-			, aa.successCount
+		SELECT
+			aa.regDate
+			, aa.hSendCount
+			, aa.hSuccessCount
+			, aa.aSendCount
+			, aa.aSuccessCount
 			, now()
-			
-		from (
-		        SELECT   
-		                 M2.regDate ,
-		                 SUM(M2.sendCount)    AS sendCount ,
-		                 SUM(M2.successCount) AS successCount
-		                 
-		        FROM     ( SELECT
-		                         M.REQ_DATE AS regDate
-		                         /*발송일*/
-		                         
-		                         , IFNULL(M.MSG_GROUP_CNT, 0) AS sendCount
-		                         /*발송건수*/
-		                         
-		                         , MSG_GROUP_ID
-		                          
-		                         ,
-		                         (SELECT COUNT(0)
-		                         FROM    MJ_MSG_DATA A
-		                         WHERE   A.USER_ID NOT IN ('hftest',
-		                                                   'itntest',
-		                                                   'imotest',
-		                                                   'itntestBatch')
-		                         AND     A.RESERVE_C_YN = 'N'
-		                         AND     A.MSG_GROUP_ID = M.MSG_GROUP_ID
-		                         AND     (CASE
-		                         			WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' AND (A.RSLT_CODE2 = '0'))
-		                         			THEN 'S'
-		                         			WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0')
-		                         			THEN 'S'
-		                         			WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800')
-		                         			THEN 'S'
-		                         			WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600')
-                                            THEN 'S'
-                                            WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
-                                            THEN 'S'
-                                            WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000')
-                                            THEN 'S'
-                                            WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
-                                            THEN 'S'
-                                            WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
-                                            THEN 'S'                                                                                        
-                                            WHEN (
-                                            	A.RSLT_CODE  IS NULL
-                                            	AND A.RSLT_CODE2 IS NULL
-                                            	AND A.SENT_DATE IS NULL
-                                            	AND A.RSLT_DATE IS NULL
-                                            )
-                                            THEN 'W'
-                                            ELSE 'F'
-									END ) = 'S'
-		                         )
-		                         AS successCount
-		                         /*성공건수*/
-		                         
-		                 FROM    ( SELECT  DATE_FORMAT(P.REQ_DATE, '%Y-%m-%d') AS REQ_DATE ,
-		                                  SUM(P.MSG_GROUP_CNT)                 AS MSG_GROUP_CNT ,
-		                                  P.MSG_GROUP_ID
-		                         FROM     MJ_MSG_GROUP_DATA P
-		                         WHERE    USER_ID NOT IN ('hftest',
-		                                                  'itntest',
-		                                                  'imotest',
-		                                                  'itntestBatch')
-		                         AND      P.RESERVE_C_YN                       = 'N'
-		                         AND  	  P.req_date > DATE_ADD(now(), interval -14 day)
-		                         GROUP BY P.MSG_GROUP_ID
-		                         )
-		                         M
-		                 )
-		                 M2
-		        GROUP BY M2.regDate
-		        )aa
-		on DUPLICATE KEY UPDATE
-		send_cnt=aa.sendCount
-		, success_cnt=aa.successCount
-		, regist_pnttm=now()
-       	
+		FROM(
+			SELECT
+				M2.regDate
+				, SUM(M2.hSendCount)		AS hSendCount
+				, SUM(M2.hSuccessCount)		AS hSuccessCount
+				, SUM(M2.aSendCount)		AS aSendCount
+				, SUM(M2.aSuccessCount)		AS aSuccessCount 
+				
+			FROM(
+				SELECT
+					M.REQ_DATE						AS regDate		/*발송일*/
+					, IFNULL(M.MSG_GROUP_CNT, 0)	AS sendCount	/*발송건수*/
+					, M.aSendCount									/*API 발송건수*/
+					, M.hSendCount									/*홈페이지 발송건수*/
+					, MSG_GROUP_ID 
+					, (SELECT
+							COUNT(0)
+						FROM
+							MJ_MSG_DATA A
+						WHERE 1=1
+							AND A.USER_ID NOT IN ('hftest','itntest','imotest','itntestBatch')
+							AND A.RESERVE_C_YN = 'N'
+							AND A.MSG_GROUP_ID = M.MSG_GROUP_ID
+							AND M.SEND_KIND = 'H'
+							AND (
+								CASE
+									WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' AND (A.RSLT_CODE2 = '0'))
+									THEN 'S'
+									WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN (A.RSLT_CODE  IS NULL AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL )
+									THEN 'W'
+									ELSE 'F'
+								END 
+								) = 'S'
+					)	AS hSuccessCount /*홈페이지 성공건수*/
+					, (SELECT
+							COUNT(0)
+						FROM
+							MJ_MSG_DATA A
+						WHERE 1=1
+							AND A.USER_ID NOT IN ('hftest','itntest','imotest','itntestBatch')
+							AND A.RESERVE_C_YN = 'N'
+							AND A.MSG_GROUP_ID = M.MSG_GROUP_ID
+							AND M.SEND_KIND = 'A'
+							AND (
+								CASE
+									WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' AND (A.RSLT_CODE2 = '0'))
+									THEN 'S'
+									WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN (A.RSLT_CODE  IS NULL AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL )
+									THEN 'W'
+									ELSE 'F'
+								END ) = 'S'
+					)	AS aSuccessCount /*API 성공건수*/
+				FROM(
+					SELECT
+						DATE_FORMAT(P.REQ_DATE, '%Y-%m-%d') AS REQ_DATE
+						, SUM(P.MSG_GROUP_CNT)				AS MSG_GROUP_CNT 
+						, P.MSG_GROUP_ID
+						, P.SEND_KIND
+						, IF(P.SEND_KIND = 'A', SUM(P.MSG_GROUP_CNT), 0) AS aSendCount
+						, IF(P.SEND_KIND = 'H', SUM(P.MSG_GROUP_CNT), 0) AS hSendCount
+					FROM
+						MJ_MSG_GROUP_DATA P
+					WHERE 1=1
+						AND USER_ID NOT IN ('hftest', 'itntest', 'imotest', 'itntestBatch')
+						AND P.RESERVE_C_YN = 'N'
+						AND P.req_date > DATE_ADD(now(), interval -14 day)
+					GROUP BY
+						P.MSG_GROUP_ID
+					)M
+				)M2
+				GROUP BY M2.regDate
+			)aa
+		ON DUPLICATE KEY UPDATE
+			send_cnt				=aa.hSendCount
+			, success_cnt			=aa.hSuccessCount
+			, API_SEND_CNT			=aa.aSendCount
+			, API_SUCCESS_CNT		=aa.aSuccessCount
+			, regist_pnttm			=now()
 	</insert>
 	
 	<insert id="mjonSttst.insertMjSttstMsgDayBulk" parameterClass="mjonMsgVO">
-		INSERT	INTO   mj_sttst_msg
-		(send_date, send_cnt, success_cnt, regist_pnttm)
+		INSERT	INTO   MJ_STTST_MSG
+		(
+			send_date
+			, send_cnt
+			, success_cnt
+			, API_SEND_CNT
+			, API_SUCCESS_CNT
+			, regist_pnttm
+		)
 		
-		select aa.regDate
-			, aa.sendCount
-			, aa.successCount
+		SELECT
+			aa.regDate
+			, aa.hSendCount
+			, aa.hSuccessCount
+			, aa.aSendCount
+			, aa.aSuccessCount
 			, now()
-			
-		from (
-		        SELECT   
-		                 M2.regDate ,
-		                 SUM(M2.sendCount)    AS sendCount ,
-		                 SUM(M2.successCount) AS successCount
-		                 
-		        FROM     ( SELECT
-		                         M.REQ_DATE AS regDate
-		                         /*발송일*/
-		                         
-		                         , IFNULL(M.MSG_GROUP_CNT, 0) AS sendCount
-		                         /*발송건수*/
-		                         
-		                         , MSG_GROUP_ID
-		                          
-		                         , (SELECT COUNT(0)
-		                         FROM    MJ_MSG_DATA A
-		                         WHERE   A.USER_ID NOT IN ('hftest',
-		                                                   'itntest',
-		                                                   'imotest',
-		                                                   'itntestBatch')
-		                         AND     A.RESERVE_C_YN = 'N'
-		                         AND     A.MSG_GROUP_ID = M.MSG_GROUP_ID
-		                         AND     (
-									CASE
-										WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' AND(A.RSLT_CODE2 = '0'))
-										THEN 'S' 
-										WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0')
-										THEN 'S'
-										WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800')
-										THEN 'S'
-										WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600')
-										THEN 'S'
-										WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
-										THEN 'S'
-										WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000')
-										THEN 'S'
-										WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
-										THEN 'S'
-										WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
-										THEN 'S'																				
-										WHEN (
-											A.RSLT_CODE  IS NULL
-											AND A.RSLT_CODE2 IS NULL
-											AND A.SENT_DATE  IS NULL
-											AND A.RSLT_DATE  IS NULL
-										)
-										THEN 'W'
-										ELSE 'F'
-									END ) = 'S'
-		                         )
-		                         AS successCount
-		                         /*성공건수*/
-		                         
-		                 FROM    ( SELECT  DATE_FORMAT(P.REQ_DATE, '%Y-%m-%d') AS REQ_DATE ,
-		                                  SUM(P.MSG_GROUP_CNT)                 AS MSG_GROUP_CNT ,
-		                                  P.MSG_GROUP_ID
-		                         FROM     MJ_MSG_GROUP_DATA P
-		                         WHERE    USER_ID NOT IN ('hftest',
-		                                                  'itntest',
-		                                                  'imotest',
-		                                                  'itntestBatch')
-		                         AND      P.RESERVE_C_YN                       = 'N'		                         
-		                         GROUP BY P.MSG_GROUP_ID
-		                         )
-		                         M
-		                 )
-		                 M2
-		        GROUP BY M2.regDate
-		        )aa
-		on DUPLICATE KEY UPDATE
-		send_cnt=aa.sendCount
-		, success_cnt=aa.successCount
-		, regist_pnttm=now()
-       	
+		FROM(
+			SELECT
+				M2.regDate
+				, SUM(M2.sendCount)    AS sendCount
+				, SUM(M2.successCount) AS successCount
+			FROM(
+				SELECT
+					M.REQ_DATE							AS regDate /*발송일*/
+					, IFNULL(M.MSG_GROUP_CNT, 0)		AS sendCount /*발송건수*/
+					, M.aSendCount									/*API 발송건수*/
+					, M.hSendCount									/*홈페이지 발송건수*/
+					, MSG_GROUP_ID
+					, (SELECT
+							COUNT(0)
+						FROM
+							MJ_MSG_DATA A
+						WHERE 1=1
+							AND A.USER_ID NOT IN ('hftest','itntest','imotest','itntestBatch')
+							AND A.RESERVE_C_YN = 'N'
+							AND A.MSG_GROUP_ID = M.MSG_GROUP_ID
+							AND M.SEND_KIND = 'H'
+							AND (
+								CASE
+									WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' AND (A.RSLT_CODE2 = '0'))
+									THEN 'S'
+									WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN (A.RSLT_CODE  IS NULL AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL )
+									THEN 'W'
+									ELSE 'F'
+								END 
+								) = 'S'
+					)	AS hSuccessCount /*홈페이지 성공건수*/
+					, (SELECT
+							COUNT(0)
+						FROM
+							MJ_MSG_DATA A
+						WHERE 1=1
+							AND A.USER_ID NOT IN ('hftest','itntest','imotest','itntestBatch')
+							AND A.RESERVE_C_YN = 'N'
+							AND A.MSG_GROUP_ID = M.MSG_GROUP_ID
+							AND M.SEND_KIND = 'A'
+							AND (
+								CASE
+									WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' AND (A.RSLT_CODE2 = '0'))
+									THEN 'S'
+									WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE = '100' OR A.RSLT_CODE = '101' OR A.RSLT_CODE = '110' OR A.RSLT_CODE = '800')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE = '4100' OR A.RSLT_CODE = '6600')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE = '6' OR A.RSLT_CODE = '1000')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE = '1000' OR A.RSLT_CODE = '1001')
+									THEN 'S'
+									WHEN (A.RSLT_CODE  IS NULL AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL )
+									THEN 'W'
+									ELSE 'F'
+								END ) = 'S'
+					)	AS aSuccessCount /*API 성공건수*/
+				FROM(
+					SELECT
+						DATE_FORMAT(P.REQ_DATE, '%Y-%m-%d') AS REQ_DATE
+						, SUM(P.MSG_GROUP_CNT)				AS MSG_GROUP_CNT
+						, P.MSG_GROUP_ID
+						, P.SEND_KIND
+						, IF(P.SEND_KIND = 'A', SUM(P.MSG_GROUP_CNT), 0) AS aSendCount
+						, IF(P.SEND_KIND = 'H', SUM(P.MSG_GROUP_CNT), 0) AS hSendCount
+					FROM
+						MJ_MSG_GROUP_DATA P
+					WHERE 1=1
+						AND USER_ID NOT IN ('hftest','itntest','imotest','itntestBatch')
+						AND P.RESERVE_C_YN = 'N'
+					GROUP BY
+						P.MSG_GROUP_ID
+					)M
+				)M2
+				GROUP BY M2.regDate
+			)aa
+		ON DUPLICATE KEY UPDATE
+			send_cnt				=aa.hSendCount
+			, success_cnt			=aa.hSuccessCount
+			, API_SEND_CNT			=aa.aSendCount
+			, API_SUCCESS_CNT		=aa.aSuccessCount
+			, regist_pnttm			=now()
 	</insert>
 	
 	<insert id="mjonSttst.insertMjSttstMsgRankBulk" parameterClass="mjonMsgVO">
src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
@@ -1331,6 +1331,7 @@
 					AND A.MSG_GROUP_ID = A.msgGroupId
 					AND (<include refid="MjonMsgSentDAO.selectAgentResultQuery_A"/>) = 'S'
 			) AS successCnt
+			, MGD.SEND_KIND	AS sendKind
 			, MGD.SMS_TXT	AS smsTxt
 			, userdata
 			, curState
@@ -1451,6 +1452,7 @@
 					AND A.MSG_GROUP_ID = A.msgGroupId
 					AND (<include refid="MjonMsgSentDAO.selectAgentResultQuery_A"/>) = 'S'
 			) AS successCnt
+			, MGD.SEND_KIND	AS sendKind
 			, MGD.SMS_TXT	AS smsTxt
 			, userdata
 			, curState
@@ -1574,6 +1576,7 @@
 					AND A.MSG_GROUP_ID = A.msgGroupId
 					AND (<include refid="MjonMsgSentDAO.selectAgentResultQuery_A"/>) = 'S'
 			) AS successCnt
+			, MGD.SEND_KIND	AS sendKind
 			, MGD.SMS_TXT	AS smsTxt
 			, userdata
 			, curState
src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp
--- src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp
+++ src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp
@@ -120,6 +120,10 @@
 	$('#ntceEnddeYYYMMDD').val('');
 	$('#ntceBgnde').val('');
 	$('#ntceEndde').val('');
+	
+	$('#searchKeyword').val('');
+	$('#sendKind').val('').prop("selected",true);
+	$('#searchCondition').val('').prop("selected",true);
 }
 
 
@@ -343,6 +347,7 @@
 				<table class="tbType1">
 					<colgroup>
 						<col style="width:5.00%">
+						<col style="width:5.00%">
 						<col style="width:5.50%">
 						<col style="width:7.00%">
 						<col style="width:7.50%">
@@ -361,6 +366,7 @@
 					</colgroup>
 					<thead>
 						<tr>
+							<th rowspan="2">방식</th>
 							<th colspan="4">단문</th>
 							<th colspan="4">장문</th>
 							<th colspan="4">그림문자</th>
@@ -387,51 +393,93 @@
 					</thead>
 					<tbody>
 						<tr>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgSmsGroupSCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSmsSPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgSmsGroupFWCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSmsFWPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgLmsGroupSCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totLmsSPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgLmsGroupFWCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totLmsFWPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgMmsGroupSCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totMmsSPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgMmsGroupFWCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totMmsFWPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgGroupSCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSPriceSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgGroupFWCntSum}" pattern="#,###" /></span></td>
-							<td><span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totFWPriceSum}" pattern="#,###" /></span></td>
+							<td>
+								전체
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold">
+									<fmt:formatNumber value="${msgSmsGroupSCntSum}" pattern="#,###" />
+								</span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSmsSPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgSmsGroupFWCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSmsFWPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgLmsGroupSCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totLmsSPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgLmsGroupFWCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totLmsFWPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgMmsGroupSCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totMmsSPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgMmsGroupFWCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totMmsFWPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgGroupSCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSPriceSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgGroupFWCntSum}" pattern="#,###" /></span>
+							</td>
+							<td>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totFWPriceSum}" pattern="#,###" /></span>
+							</td>
 						</tr>
 					</tbody>
 				</table>
 			</div>
 			
 			<div class="listSerch">
-				<select name="searchCondition" class="select" title="검색조건 선택">
+				
+				<select id="sendKind" name="sendKind" class="select" title="검색조건 선택">
+					<option value="" <c:if test="${searchVO.sendKind == ''}">selected="selected"</c:if>>발송방식 전체</option>
+					<option value="H" <c:if test="${searchVO.sendKind == 'H'}">selected="selected"</c:if>>WEB</option>
+					<option value="A" <c:if test="${searchVO.sendKind == 'A'}">selected="selected"</c:if>>API</option>
+				</select>
+				
+				<select id="searchCondition" name="searchCondition" class="select" title="검색조건 선택">
 					<option value="" <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>>발신번호/내용</option>
-					<%-- <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>사용자ID</option> --%>
-					<option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>>발신번호</option>
-					<option value="3" <c:if test="${searchVO.searchCondition == '3'}">selected="selected"</c:if>>전송내용</option>
+					<option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>발신번호</option>
+					<option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>>전송내용</option>
 				</select>
 				
 				<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="25" title="검색" maxlength="100" />
 				<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
 				
 				<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
-			    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
-			    <input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
-			    value="<c:out value="${searchVO.ntceBgnde}" />" >
-			   	 	<input type="button" class="calBtn">
-		    	</a>
-		    	&nbsp;&nbsp;~    	
-			    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
-				<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
-		    	value="<c:out value="${searchVO.ntceEndde}" />"
-		    	>
-			   	 	<input type="button" class="calBtn">
-		    	</a>
+				<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
+					<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
+					value="<c:out value="${searchVO.ntceBgnde}" />" >
+					<input type="button" class="calBtn">
+				</a>
+				&nbsp;&nbsp;~
+				<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
+					<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
+					value="<c:out value="${searchVO.ntceEndde}" />" >
+					<input type="button" class="calBtn">
+				</a>
 				<a href="#" style="margin-left: 17px;" onclick="init_date(); return false;">
 					<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
 				</a>		    
@@ -462,7 +510,7 @@
 						<col style="width: 6%">
 						<%-- <col style="width: 8%"> --%>
 						<%-- <col style="width: 6%"> --%>
-						<%--<col style="width: 6%">--%>
+						<col style="width: 6%">
 						<col style="width: 8%">
 						<col style="width: 7%">
 						<col style="width: 7%">
@@ -482,9 +530,7 @@
 							<th>예약</th>
 							<th>내용</th>
 							<th>타입</th>
-							<!-- <th>금액</th> -->
-							<!-- <th>발송결과</th> -->
-							<%--<th>전송사</th>--%>
+							<th>방식</th>
 							<th>스미싱의심</th>
 							<th>이용정지</th>
 							<th>발송처리</th>
@@ -495,24 +541,24 @@
 						<tr>
 							<td>
 								<c:if test="${searchVO.searchSortOrd eq 'desc' }">
-		                			<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
-			                	</c:if>
-			                	<c:if test="${searchVO.searchSortOrd eq 'asc' }">
+									<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
+								</c:if>
+								<c:if test="${searchVO.searchSortOrd eq 'asc' }">
 									<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>                   		
-			                	</c:if>
+								</c:if>
 							</td>
 							<td>
 								<c:out value="${result.callFrom}"/>
 							</td>
 							<td title="<c:out value="${result.regDate}"/>">
 								<fmt:parseDate value="${result.regDate}" var="regDateValue" pattern="yyyy-MM-dd HH:mm"/>
-								<fmt:formatDate value="${regDateValue}" pattern="MM-dd HH:mm"/>																						
+								<fmt:formatDate value="${regDateValue}" pattern="MM-dd HH:mm"/>
 							</td>
 							<td>
 								<c:choose>
 									<c:when test="${result.reserveCYn eq 'Y'}">
 										<c:out value="${result.cancelDate}"/>
-									</c:when>                                                
+									</c:when>
 									<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
 										<c:out value="${result.reqDate}"/>
 									</c:when>
@@ -525,21 +571,13 @@
 								</c:choose>
 							</td>
 							<td>
-								<%-- <c:choose>
-									<c:when test="${result.resultCodeTxt eq 'S'}">
-										<fmt:formatNumber value="${result.msgGroupSCnt}" pattern="#,###" />
-									</c:when>
-									<c:otherwise>
-										<fmt:formatNumber value="${result.msgGroupFWCnt}" pattern="#,###" />
-									</c:otherwise>
-								</c:choose> --%>
 								<fmt:formatNumber value="${result.msgGroupSCnt}" pattern="#,###" />/<fmt:formatNumber value="${result.msgGroupFWCnt}" pattern="#,###" />(<fmt:formatNumber value="${(result.msgGroupSCnt / (result.msgGroupSCnt + result.msgGroupFWCnt)) * 100}" pattern="#,###" />%)
 							</td>							
 							<td>
 								<c:choose>
 									<c:when test="${result.reserveCYn eq 'Y'}">
 										예약취소
-									</c:when>                                                
+									</c:when>
 									<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
 										예약
 									</c:when>
@@ -547,27 +585,7 @@
 										즉시
 									</c:otherwise>
 								</c:choose>
-
-							</td>							
-							<%--
-							<td class="msg_detail">
-									<button type="button" class="btnType btnType20" id="msgDetail" name="msgDetail" onclick="msgDetailView(this, '<c:out value="${result.msgGroupId}"/>', '${status.count}'); return false;">상세보기</button>
-								<div class="layer_msg_wrap">
-									<div class="layer_msg_detail">
-										<button type="button" onclick="msgDetailClose(this);"></button>
-										<div class="title">
-										<c:choose>
-											<c:when test="${result.msgType eq '4'}">단문</c:when>
-											<c:when test="${result.msgType eq '6' && result.fileCnt > 0}">그림(<c:out value="${result.fileCnt}"/>장)</c:when>
-											<c:otherwise>장문</c:otherwise>
-										</c:choose>
-										</div>
-										<div class="content msgSentDetailPopLoad${status.count}">
-										</div>
-									</div>
-								</div>
 							</td>
-							--%>
 							<td class="sms_detail left">
 								<c:choose>
 									<c:when test="${empty result.smsTxt}">
@@ -612,8 +630,7 @@
 										</div>
 									</c:otherwise>
 								</c:choose>
-							</td>							
-							
+							</td>
 							<td>
 								<c:choose>
 									<c:when test="${result.msgType eq '4'}">
@@ -627,30 +644,16 @@
 									</c:otherwise>
 								</c:choose>
 							</td>
-							<%-- <td>
+							<td>
 								<c:choose>
-									<c:when test="${result.resultCodeTxt eq 'S'}">
-										<fmt:formatNumber value="${result.totSPrice}" pattern="#,###" />
+									<c:when test="${result.sendKind eq 'A'}">
+										API
 									</c:when>
-									<c:otherwise>
-										<fmt:formatNumber value="${result.totFWPrice}" pattern="#,###" />
-									</c:otherwise>
+									<c:when test="${result.sendKind eq 'H'}">
+										홈페이지
+									</c:when>
 								</c:choose>
-							</td> --%>
-							<%-- <td>
-								<c:choose>
-									<c:when test="${result.resultCodeTxt eq 'S'}">
-										정상수신
-									</c:when>
-									<c:when test="${result.resultCodeTxt eq 'F'}">
-										수신오류
-									</c:when>
-									<c:otherwise>
-										결과대기
-									</c:otherwise>
-								</c:choose>
-							</td> --%>
-							<%--<td><c:out value="${result.agentCodeTxt}"/></td>--%>
+							</td>
 							<td>
 								<c:choose>
 									<c:when test="${result.delayYn eq 'Y'}">
@@ -702,7 +705,7 @@
 						</tr>
 						</c:forEach>
 						<c:if test="${empty resultList}">
-		         			<tr><td colspan="11"><spring:message code="common.nodata.msg" /></td></tr>
+		         			<tr><td colspan="12"><spring:message code="common.nodata.msg" /></td></tr>
 		         		</c:if>    
 					</tbody>
 				</table>
src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
--- src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
+++ src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
@@ -3721,6 +3721,7 @@
 								<colgroup>
 									<col style="width:5%;">
 									<col style="width:7%;">
+									<col style="width:7%;">
 									<col style="width:9%;">
 									<col style="width:13%;">
 									<col style="width:15%;">
@@ -3733,6 +3734,7 @@
 									<tr>
 										<th>번호</th>
 										<th>종류</th>
+										<th>방식</th>
 										<th>등록일시</th>
 										<th>전송일시</th>
 										<th>발신번호</th>
@@ -3747,7 +3749,9 @@
 										<c:when test="${not empty mjonMsgSentList}">
 											<c:forEach var="mjonMsgSentList" items="${mjonMsgSentList}" varStatus="status">
 												<tr>
-													<td><c:out value="${status.count}"/></td>
+													<td>
+														<c:out value="${status.count}"/>
+													</td>
 													<td>
 														<c:choose>
 															<c:when test="${mjonMsgSentList.msgType == '4'}">
@@ -3769,6 +3773,16 @@
 															<c:otherwise>
 																장문
 															</c:otherwise>
+														</c:choose>
+													</td>
+													<td>
+														<c:choose>
+															<c:when test="${mjonMsgSentList.sendKind == 'H'}">
+																WEB
+															</c:when>
+															<c:when test="${mjonMsgSentList.sendKind == 'A'}">
+																API
+															</c:when>
 														</c:choose>
 													</td>
 													<td>
@@ -3898,7 +3912,7 @@
 										</c:when>
 										<c:otherwise>
 											<tr>
-												<td colspan="9">문자 발송 내역이 없습니다.</td>
+												<td colspan="10">문자 발송 내역이 없습니다.</td>
 											</tr>
 										</c:otherwise>
 									</c:choose>
@@ -3916,6 +3930,7 @@
 								<colgroup>
 									<col style="width:5%;">
 									<col style="width:7%;">
+									<col style="width:7%;">
 									<col style="width:9%;">
 									<col style="width:13%;">
 									<col style="width:15%;">
@@ -3928,6 +3943,7 @@
 									<tr>
 										<th>번호</th>
 										<th>종류</th>
+										<th>방식</th>
 										<th>등록일시</th>
 										<th>요청일시</th>
 										<th>발신번호</th>
@@ -3964,6 +3980,16 @@
 															<c:otherwise>
 																장문
 															</c:otherwise>
+														</c:choose>
+													</td>
+													<td>
+														<c:choose>
+															<c:when test="${mjonMsgSentList.sendKind == 'H'}">
+																WEB
+															</c:when>
+															<c:when test="${mjonMsgSentList.sendKind == 'A'}">
+																API
+															</c:when>
 														</c:choose>
 													</td>
 													<td>
@@ -4094,7 +4120,7 @@
 										</c:when>
 										<c:otherwise>
 											<tr>
-												<td colspan="9">예약 문자 내역이 없습니다.</td>
+												<td colspan="10">예약 문자 내역이 없습니다.</td>
 											</tr>
 										</c:otherwise>
 									</c:choose>
@@ -4116,6 +4142,7 @@
 							<colgroup>
 								<col style="width:5%;">
 								<col style="width:7%;">
+								<col style="width:7%;">
 								<col style="width:13%;">
 								<col style="width:14%;">
 								<col style="width:15%;">
@@ -4128,6 +4155,7 @@
 								<tr>
 									<th><input type="checkbox" name="checkDelayAll" id="checkAll" onclick="fnCheckAll();" /><label for="checkAll"></label></th>
 									<th>종류</th>
+									<th>방식</th>
 									<th>등록일시</th>
 									<th>전송일시</th>
 									<th>발신번호</th>
@@ -4168,6 +4196,16 @@
 														<c:otherwise>
 															장문
 														</c:otherwise>
+													</c:choose>
+												</td>
+												<td>
+													<c:choose>
+														<c:when test="${mjonMsgDelaySentList.sendKind == 'H'}">
+															WEB
+														</c:when>
+														<c:when test="${mjonMsgDelaySentList.sendKind == 'A'}">
+															API
+														</c:when>
 													</c:choose>
 												</td>
 												<td>
@@ -4293,7 +4331,7 @@
 									</c:when>
 									<c:otherwise>
 										<tr>
-											<td colspan="9">문자 지연 내역이 없습니다.</td>
+											<td colspan="10">문자 지연 내역이 없습니다.</td>
 										</tr>
 									</c:otherwise>
 								</c:choose>
src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp
--- src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp
@@ -11,14 +11,34 @@
 	response.setDateHeader("Expires",0);   
 	if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); 
 %> 
-<!DOCTYPE html>
-<html lang="ko">
-<head>
 <title>일별 문자발송건수 통계</title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
 <script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
 <script type="text/javaScript" language="javascript">
+
+$( document ).ready(function(){
+	var selectSendKind = $("#sendKind option:selected").val();
+	
+	if(selectSendKind == "H"){
+		$('.all').css('display', 'none');
+		$('.api').css('display', 'none');
+		setThead(1);
+	}else if(selectSendKind == "A"){
+		$('.all').css('display', 'none');
+		$('.homePage').css('display', 'none');
+		setThead(1);
+	}else{
+		setThead(3);
+	}
+});
+
+function setThead(index){
+	$("#sendHead").attr('colspan',index);
+	$("#successHead").attr('colspan',index);
+	$("#rateHead").attr('colspan',index);
+}
+
 function fn_search(){
 	linkPage(1);
 }
@@ -48,6 +68,8 @@
 	$('#ntceEnddeYYYMMDD').val('');
 	$('#ntceBgnde').val('');
 	$('#ntceEndde').val('');
+	
+	$('#sendKind').val('').prop("selected",true);
 }
 
 //기간선택 select
@@ -89,11 +111,8 @@
     cursor: pointer;
 }
 </style>
-</head>
-<body>
 
 <compress:html>
-
 
 <form name="listForm" action="<c:url value='/uss/ion/msg/msgDayChart_230125.do'/>" method="post">
 	<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
@@ -111,6 +130,11 @@
 		
 		<div class="pageCont">
 			<div class="listSerch">
+				<select id="sendKind" name="sendKind" onchange="">
+					<option value=""<c:if test="${searchVO.sendKind eq ''}">selected="selected"</c:if>>발송방식 전체</option>
+					<option value="H"<c:if test="${searchVO.sendKind eq 'H'}">selected="selected"</c:if>>WEB</option>
+					<option value="A"<c:if test="${searchVO.sendKind eq 'A'}">selected="selected"</c:if>>API</option>
+				</select>
 				<select name="setCalMonth" onchange="fnSetCalMonth(this.value)">
 					<option value="0">전체</option>
 					<option value="1">1개월</option>
@@ -118,23 +142,21 @@
 					<option value="6">6개월</option>
 				</select>
 				<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
-			    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
-			    <input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
-			    value="<c:out value="${searchVO.ntceBgnde}" />" >
-			   	 	<input type="button" class="calBtn">
-		    	</a>
-				&nbsp;&nbsp;~    	
-			    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
-				<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
-		    	value="<c:out value="${searchVO.ntceEndde}" />"
-		    	>
-			   	 	<input type="button" class="calBtn">
-		    	</a>
+				<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
+					<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
+					value="<c:out value="${searchVO.ntceBgnde}" />" >
+					<input type="button" class="calBtn">
+				</a>
+				&nbsp;&nbsp;~
+				<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
+					<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
+					value="<c:out value="${searchVO.ntceEndde}" />" >
+					<input type="button" class="calBtn">
+				</a>
 				<a href="#" style="margin-left: 17px;" onclick="init_date(); return false;">
 					<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
 				</a>
 				<input type="button" class="btnType1" style="margin-left:10px;" value="검색" onclick="fn_search(); return false;">
-				
 			</div>
 			<div class="listTop">
 				<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건
@@ -154,31 +176,78 @@
 			<div class="tableWrap">
 				<table class="tbType1">
 					<colgroup>
-						<col style="width: auto;">
 						<col style="width: 25%">
-						<col style="width: 25%">
-						<col style="width: 25%">
+						<col style="width: 25%" class="all">
+						<col style="width: 25%" class="homePage">
+						<col style="width: 25%" class="api">
+						<col style="width: 25%" class="all">
+						<col style="width: 25%" class="homePage">
+						<col style="width: 25%" class="api">
+						<col style="width: 25%" class="all">
+						<col style="width: 25%" class="homePage">
+						<col style="width: 25%" class="api">
 					</colgroup>
 					<thead>
 						<tr>
-							<th>발송일</th>
-							<th>발송건수</th>
-							<th>성공건수</th>
-							<th>성공율</th>
+							<th rowspan="2" style="vertical-align: middle;">발송일</th>
+							<th id="sendHead">발송건수</th>
+							<th id="successHead">성공건수</th>
+							<th id="rateHead">성공율</th>
+						</tr>
+						<tr>
+							<th class="all">전체</th>
+							<th class="homePage">WEB</th>
+							<th class="api">API</th>
+							<th class="all">전체</th>
+							<th class="homePage">WEB</th>
+							<th class="api">API</th>
+							<th class="all">전체</th>
+							<th class="homePage">WEB</th>
+							<th class="api">API</th>
 						</tr>
 					</thead>
 					<tbody>
 						<c:forEach var="result" items="${resultList}" varStatus="status">
 						<tr>
-							<td><c:out value="${result.regDate}"/></td>
-							<td><fmt:formatNumber value="${result.sendCount}" pattern="#,###" /></td>
-							<td><fmt:formatNumber value="${result.successCount}" pattern="#,###" /></td>
-							<td><fmt:formatNumber value="${(result.successCount / result.sendCount) * 100}" pattern="#,###" />%</td>							
+							<td>
+								<c:out value="${result.regDate}"/>
+							</td>
+							<td class="all">
+								<fmt:formatNumber value="${result.totalSendCount}" pattern="#,###" />
+							</td>
+							<td class="homePage">
+								<fmt:formatNumber value="${result.sendCount}" pattern="#,###" />
+							</td>
+							<td class="api">
+								<fmt:formatNumber value="${result.aSendCount}" pattern="#,###" />
+							</td>
+							
+							<td class="all">
+								<fmt:formatNumber value="${result.totalSuccessCount}" pattern="#,###" />
+							</td>
+							<td class="homePage">
+								<fmt:formatNumber value="${result.successCount}" pattern="#,###" />
+							</td>
+							<td class="api">
+								<fmt:formatNumber value="${result.aSuccessCount}" pattern="#,###" />
+							</td>
+							
+							<td class="all">
+								<fmt:formatNumber value="${result.rateTotalSuccessCount}" pattern="#,###" />%
+							</td>
+							<td class="homePage">
+								<fmt:formatNumber value="${result.rateSuccessCount}" pattern="#,###" />%
+							</td>
+							<td class="api">
+								<fmt:formatNumber value="${result.rateApiSuccessCount}" pattern="#,###" />%
+							</td>
 						</tr>
 						</c:forEach>
 						<c:if test="${empty resultList}">
-		         			<tr><td colspan="4"><spring:message code="common.nodata.msg" /></td></tr>
-		         		</c:if>    
+						<tr>
+							<td colspan="10"><spring:message code="common.nodata.msg" /></td>
+						</tr>
+						</c:if>
 					</tbody>
 				</table>
 			</div>
@@ -186,16 +255,14 @@
 			</div>
 			<!-- 페이지 네비게이션 시작 -->
 			<c:if test="${!empty resultList}">
-		 		<div class="page">
-		    		<ul class="inline">
-		    			<ui:pagination paginationInfo = "${paginationInfo}"  type="image" jsFunction="linkPage" />
-		    		</ul>	
-		    	</div>  
-		  	</c:if>                      
-		    <!-- //페이지 네비게이션 끝 --> 
+			<div class="page">
+				<ul class="inline">
+					<ui:pagination paginationInfo = "${paginationInfo}"  type="image" jsFunction="linkPage" />
+				</ul>
+			</div>
+			</c:if>
+			<!-- //페이지 네비게이션 끝 --> 
 		</div>
 	</div>
 </form>
 </compress:html>
-</body>
-</html>
src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp
--- src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp
@@ -11,9 +11,6 @@
 	response.setDateHeader("Expires",0);   
 	if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); 
 %> 
-<!DOCTYPE html>
-<html lang="ko">
-<head>
 <title>월별 문자발송건수 통계</title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
@@ -30,20 +27,31 @@
 	}
 	/* $('#searchYear').find('option:contains("${searchVO.ntceBgnde}")').attr("selected",true); */
 	$('#searchYear').find('option[value="${searchVO.ntceBgnde}"]').attr("selected",true);
+	
+	
+	var selectSendKind = $("#sendKind option:selected").val();
+	
+	if(selectSendKind == "H"){
+		$('.all').css('display', 'none');
+		$('.api').css('display', 'none');
+		setThead(1);
+	}else if(selectSendKind == "A"){
+		$('.all').css('display', 'none');
+		$('.homePage').css('display', 'none');
+		setThead(1);
+	}else{
+		setThead(3);
+	}
 });
 	
-	
-	
-	function linkPage(){
+function setThead(index){
+	$("#sendHead").attr('colspan',index);
+	$("#successHead").attr('colspan',index);
+	$("#rateHead").attr('colspan',index);
+}
+
+function linkPage(){
 	var listForm = document.listForm ;
-	/* if( $('#ntceBgndeYYYMMDD').val() != '' && $('#ntceEnddeYYYMMDD').val() != '' ){
-		var iChkBeginDe = Number($('#ntceBgndeYYYMMDD').val().replaceAll("-", ""));
-		var iChkEndDe =  Number($('#ntceEnddeYYYMMDD').val().replaceAll("-", ""));
-		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
-			alert("검색 시작 일자는 종료 일자 보다 클 수 없습니다.");
-			return;
-		}
-	} */
 	$('#ntceBgnde').val($('#searchYear option:selected').val());
 	listForm.submit();
 }
@@ -63,8 +71,6 @@
     cursor: pointer;
 }
 </style>
-</head>
-<body>
 
 <compress:html>
 
@@ -84,60 +90,95 @@
 		
 		<div class="pageCont">
 			<div class="listSerch">
-				<%-- <input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
-			    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
-			    <input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
-			    value="<c:out value="${searchVO.ntceBgnde}" />" >
-			   	 	<input type="button" class="calBtn">
-		    	</a>
-				&nbsp;&nbsp;~    	
-			    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
-				<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
-		    	value="<c:out value="${searchVO.ntceEndde}" />"
-		    	>
-			   	 	<input type="button" class="calBtn">
-		    	</a>
-				<a href="#" style="margin-left: 17px;" onclick="init_date(); return false;">
-					<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
-				</a>
-				<input type="button" class="btnType1" style="margin-left:10px;" value="검색" onclick="fn_search(); return false;"> --%>
+				<select id="sendKind" name="sendKind" onchange="linkPage();">
+					<option value=""<c:if test="${searchVO.sendKind eq ''}">selected="selected"</c:if>>발송방식 전체</option>
+					<option value="H"<c:if test="${searchVO.sendKind eq 'H'}">selected="selected"</c:if>>WEB</option>
+					<option value="A"<c:if test="${searchVO.sendKind eq 'A'}">selected="selected"</c:if>>API</option>
+				</select>
 				<select id="searchYear" name="searchYear" onchange="linkPage();"></select>
-				<br/><br/>
-				<c:if test="${sttstDate ne '' and sttstDate ne null }">
-					(집계 일시 : ${sttstDate}(금일))
-				</c:if>								
 			</div>
-			<%-- <div class="listTop">
-				<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
-			</div> --%>
+			<div class="listTop">
+				<p class="tType5">
+					<c:if test="${sttstDate ne '' and sttstDate ne null }">
+						(집계 일시 : ${sttstDate}(금일))
+					</c:if>
+				</p>
+			</div>
 			<div class="tableWrap">
 				<table class="tbType1">
 					<colgroup>
-						<col style="width: auto;">
 						<col style="width: 25%">
-						<col style="width: 25%">
-						<col style="width: 25%">
+						<col style="width: 25%" class="all">
+						<col style="width: 25%" class="homePage">
+						<col style="width: 25%" class="api">
+						<col style="width: 25%" class="all">
+						<col style="width: 25%" class="homePage">
+						<col style="width: 25%" class="api">
+						<col style="width: 25%" class="all">
+						<col style="width: 25%" class="homePage">
+						<col style="width: 25%" class="api">
 					</colgroup>
 					<thead>
 						<tr>
-							<th>발송월</th>
-							<th>발송건수</th>
-							<th>성공건수</th>
-							<th>성공율</th>
+							<th rowspan="2" style="vertical-align: middle;">발송일</th>
+							<th id="sendHead">발송건수</th>
+							<th id="successHead">성공건수</th>
+							<th id="rateHead">성공율</th>
+						</tr>
+						<tr>
+							<th class="all">전체</th>
+							<th class="homePage">WEB</th>
+							<th class="api">API</th>
+							<th class="all">전체</th>
+							<th class="homePage">WEB</th>
+							<th class="api">API</th>
+							<th class="all">전체</th>
+							<th class="homePage">WEB</th>
+							<th class="api">API</th>
 						</tr>
 					</thead>
 					<tbody>
 						<c:forEach var="result" items="${resultList}" varStatus="status">
 						<tr>
-							<td><c:out value="${result.regDate}"/></td>
-							<td><fmt:formatNumber value="${result.sendCount}" pattern="#,###" /></td>
-							<td><fmt:formatNumber value="${result.successCount}" pattern="#,###" /></td>
-							<td><fmt:formatNumber value="${(result.successCount / result.sendCount) * 100}" pattern="#,###" />%</td>
+							<td>
+								<c:out value="${result.regDate}"/>
+							</td>
+							<td class="all">
+								<fmt:formatNumber value="${result.totalSendCount}" pattern="#,###" />
+							</td>
+							<td class="homePage">
+								<fmt:formatNumber value="${result.sendCount}" pattern="#,###" />
+							</td>
+							<td class="api">
+								<fmt:formatNumber value="${result.aSendCount}" pattern="#,###" />
+							</td>
+							
+							<td class="all">
+								<fmt:formatNumber value="${result.totalSuccessCount}" pattern="#,###" />
+							</td>
+							<td class="homePage">
+								<fmt:formatNumber value="${result.successCount}" pattern="#,###" />
+							</td>
+							<td class="api">
+								<fmt:formatNumber value="${result.aSuccessCount}" pattern="#,###" />
+							</td>
+							
+							<td class="all">
+								<fmt:formatNumber value="${result.rateTotalSuccessCount}" pattern="#,###" />%
+							</td>
+							<td class="homePage">
+								<fmt:formatNumber value="${result.rateSuccessCount}" pattern="#,###.##" />%
+							</td>
+							<td class="api">
+								<fmt:formatNumber value="${result.rateApiSuccessCount}" pattern="#,###" />%
+							</td>
 						</tr>
 						</c:forEach>
 						<c:if test="${empty resultList}">
-		         			<tr><td colspan="4"><spring:message code="common.nodata.msg" /></td></tr>
-		         		</c:if>    
+							<tr>
+								<td colspan="10"><spring:message code="common.nodata.msg" /></td>
+							</tr>
+						</c:if>
 					</tbody>
 				</table>
 			</div>
@@ -145,5 +186,3 @@
 	</div>
 </form>
 </compress:html>
-</body>
-</html>
Add a comment
List