name 2023-08-02
문자예약 페이지 API / WEB 전송방식 조회
@23b4d250d61fcfbb6a2135651afd01c7f447fa86
src/main/java/itn/let/mjo/msg/service/MjonMsgService.java
--- src/main/java/itn/let/mjo/msg/service/MjonMsgService.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgService.java
@@ -224,4 +224,8 @@
 	
 	//문자 발송 횟수
 	List<MjonMsgVO> selectMsgSendTotCnt(MjonMsgVO mjonMsgVO) throws Exception;
+	
+	
+	MjonMsgVO selectApiSttstList(MjonMsgVO mjonMsgVO) throws Exception;
+	
 }
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
@@ -177,7 +177,95 @@
 	private int rateSuccessCount;		// 홈페이지 전송 성공율
 	private int rateApiSuccessCount;	// API 전송 성공율
 	
+	private int smsGroupSCntSum;		// sms 성공(건)
+	private int smsTotSPriceSum;		// sms 성공(금액)
+	private int smsGroupFWCntSum;		// sms 실패대기(건)
+	private int smsTotFWPriceSum;		// sms 실패대기(금액)
 	
+	private int lmsGroupSCntSum;		// lms 성공(건)
+	private int lmsTotSPriceSum;		// lms 성공(금액)
+	private int lmsGroupFWCntSum;		// lms 실패대기(건)
+	private int lmsTotFWPriceSum;		// lms 실패대기(금액)
+	
+	private int mmsGroupSCntSum;		// mms 성공(건)
+	private int mmsTotSPriceSum;		// mms 성공(금액)
+	private int mmsGroupFWCntSum;		// mms 실패대기(건)
+	private int mmsTotFWPriceSum;		// mms 실패대기(금액)
+	
+	
+	
+	public int getSmsGroupSCntSum() {
+		return smsGroupSCntSum;
+	}
+	public void setSmsGroupSCntSum(int smsGroupSCntSum) {
+		this.smsGroupSCntSum = smsGroupSCntSum;
+	}
+	public int getSmsTotSPriceSum() {
+		return smsTotSPriceSum;
+	}
+	public void setSmsTotSPriceSum(int smsTotSPriceSum) {
+		this.smsTotSPriceSum = smsTotSPriceSum;
+	}
+	public int getSmsGroupFWCntSum() {
+		return smsGroupFWCntSum;
+	}
+	public void setSmsGroupFWCntSum(int smsGroupFWCntSum) {
+		this.smsGroupFWCntSum = smsGroupFWCntSum;
+	}
+	public int getSmsTotFWPriceSum() {
+		return smsTotFWPriceSum;
+	}
+	public void setSmsTotFWPriceSum(int smsTotFWPriceSum) {
+		this.smsTotFWPriceSum = smsTotFWPriceSum;
+	}
+	public int getLmsGroupSCntSum() {
+		return lmsGroupSCntSum;
+	}
+	public void setLmsGroupSCntSum(int lmsGroupSCntSum) {
+		this.lmsGroupSCntSum = lmsGroupSCntSum;
+	}
+	public int getLmsTotSPriceSum() {
+		return lmsTotSPriceSum;
+	}
+	public void setLmsTotSPriceSum(int lmsTotSPriceSum) {
+		this.lmsTotSPriceSum = lmsTotSPriceSum;
+	}
+	public int getLmsGroupFWCntSum() {
+		return lmsGroupFWCntSum;
+	}
+	public void setLmsGroupFWCntSum(int lmsGroupFWCntSum) {
+		this.lmsGroupFWCntSum = lmsGroupFWCntSum;
+	}
+	public int getLmsTotFWPriceSum() {
+		return lmsTotFWPriceSum;
+	}
+	public void setLmsTotFWPriceSum(int lmsTotFWPriceSum) {
+		this.lmsTotFWPriceSum = lmsTotFWPriceSum;
+	}
+	public int getMmsGroupSCntSum() {
+		return mmsGroupSCntSum;
+	}
+	public void setMmsGroupSCntSum(int mmsGroupSCntSum) {
+		this.mmsGroupSCntSum = mmsGroupSCntSum;
+	}
+	public int getMmsTotSPriceSum() {
+		return mmsTotSPriceSum;
+	}
+	public void setMmsTotSPriceSum(int mmsTotSPriceSum) {
+		this.mmsTotSPriceSum = mmsTotSPriceSum;
+	}
+	public int getMmsGroupFWCntSum() {
+		return mmsGroupFWCntSum;
+	}
+	public void setMmsGroupFWCntSum(int mmsGroupFWCntSum) {
+		this.mmsGroupFWCntSum = mmsGroupFWCntSum;
+	}
+	public int getMmsTotFWPriceSum() {
+		return mmsTotFWPriceSum;
+	}
+	public void setMmsTotFWPriceSum(int mmsTotFWPriceSum) {
+		this.mmsTotFWPriceSum = mmsTotFWPriceSum;
+	}
 	public int getRateSuccessCount() {
 		return rateSuccessCount;
 	}
src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java
--- src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java
+++ src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java
@@ -495,4 +495,8 @@
 		return (List<MjonMsgVO>) list("mjonMsgDAO.selectMsgSendTotCnt", mjonMsgVO);
 	}
 	
+	public MjonMsgVO selectApiSttstList(MjonMsgVO mjonMsgVO) throws Exception{
+		return (MjonMsgVO)select("mjonMsgDAO.selectApiSttstList", mjonMsgVO);
+	}
+	
 }
src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java
--- src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java
+++ src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java
@@ -1147,4 +1147,9 @@
 		
 		return resultSts;
 	}
+
+	@Override
+	public MjonMsgVO selectApiSttstList(MjonMsgVO mjonMsgVO) throws Exception {
+		return mjonMsgDAO.selectApiSttstList(mjonMsgVO);
+	}
 }
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
@@ -1743,50 +1743,39 @@
 		//searchVO 원본 문자 타입 및 파일 갯수 저장해 놓기
 		String msgType = searchVO.getMsgType();
 		String fileCnt = searchVO.getFileCnt();
+		String sendKind = searchVO.getSendKind();
 		
 		//전체 리스트 불러오기
 		List<MjonMsgVO> resultList = new ArrayList<MjonMsgVO>();
 		searchVO.setMsgType("");
 		//resultList = mjonMsgService.selectUserMsgDataListByMbrId(searchVO);
 		resultList = mjonMsgService.selectUserMsgDataListByMbrId2(searchVO);
-        model.addAttribute("resultList", resultList);
-        model.addAttribute("mberSttus", mberSttus); //이용자 상태값 전달
+		model.addAttribute("resultList", resultList);
+		model.addAttribute("mberSttus", mberSttus); //이용자 상태값 전달
 
-        //종합 리스트 정보 불러오기
-        
-        //단문  리스트 정보 불러오기
-        List<MjonMsgVO> resultSmsList = new ArrayList<MjonMsgVO>();
-        searchVO.setMsgType("4");
-        searchVO.setFileCnt("");
-        resultSmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
-        model.addAttribute("resultSmsList", resultSmsList);
-        
-        //장문 리스트 정보 불러오기
-        List<MjonMsgVO> resultLmsList = new ArrayList<MjonMsgVO>();
-        searchVO.setMsgType("6");
-        searchVO.setFileCnt("");
-        resultLmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
-        model.addAttribute("resultLmsList", resultLmsList);
-        
-        //그림 리스트 정보 불러오기
-        List<MjonMsgVO> resultMmsList = new ArrayList<MjonMsgVO>();
-        searchVO.setMsgType("6");
-        searchVO.setFileCnt("0");
-        resultMmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
-        model.addAttribute("resultMmsList", resultMmsList);
-        
-        //searchVO 데이터 원복 시키기
-        searchVO.setMsgType(msgType);
-        searchVO.setFileCnt(fileCnt);
-        
-        //문자발송 실패 결과 코드정보 리스트 불러오기
-        MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO();
-        List<MjonMsgResultCodeVO> resultMsgCodeList = mjonMsgService.selectMsgResultCodeAllList(mjonMsgResultCodeVO);
-        
-        model.addAttribute("resultMsgCodeList", resultMsgCodeList);
-        
-        paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonMsgVO)resultList.get(0)).getTotCnt() : 0);
-		model.addAttribute("paginationInfo", paginationInfo);
+		//종합 리스트 정보 불러오기
+		
+		//단문  리스트 정보 불러오기
+		/*List<MjonMsgVO> resultSmsList = new ArrayList<MjonMsgVO>();
+		searchVO.setMsgType("4");
+		searchVO.setFileCnt("");
+		resultSmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
+		model.addAttribute("resultSmsList", resultSmsList);
+		
+		//장문 리스트 정보 불러오기
+		List<MjonMsgVO> resultLmsList = new ArrayList<MjonMsgVO>();
+		searchVO.setMsgType("6");
+		searchVO.setFileCnt("");
+		resultLmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
+		model.addAttribute("resultLmsList", resultLmsList);
+		
+		//그림 리스트 정보 불러오기
+		List<MjonMsgVO> resultMmsList = new ArrayList<MjonMsgVO>();
+		searchVO.setMsgType("6");
+		searchVO.setFileCnt("0");
+		resultMmsList = mjonMsgService.selectUserMsgDataTotInfoListByMbrId(searchVO);
+		model.addAttribute("resultMmsList", resultMmsList);
+		
 		
 		String msgGroupSCntSum = "0";		//정상수신 총 건수 합계
 		String totSPriceSum = "0";			//정상수신 총 금액 합계
@@ -1869,11 +1858,45 @@
 		model.addAttribute("totMmsSPriceSum", totMmsSPriceSum);
 		model.addAttribute("msgMmsGroupFWCntSum", msgMmsGroupFWCntSum);
 		model.addAttribute("totMmsFWPriceSum", totMmsFWPriceSum);
+		*/
 		
+		List<MjonMsgVO> sendSttstList =  new ArrayList<MjonMsgVO>();
+		
+		searchVO.setSendKind("");
+		MjonMsgVO allSttstInfo = mjonMsgService.selectApiSttstList(searchVO);
+		allSttstInfo.setSendKind("");
+		
+		searchVO.setSendKind("H");
+		MjonMsgVO hompageSttstInfo = mjonMsgService.selectApiSttstList(searchVO);
+		hompageSttstInfo.setSendKind("H");
+		
+		searchVO.setSendKind("A");
+		MjonMsgVO apiSttstInfo = mjonMsgService.selectApiSttstList(searchVO);
+		apiSttstInfo.setSendKind("A");
+		
+		sendSttstList.add(allSttstInfo);
+		sendSttstList.add(hompageSttstInfo);
+		sendSttstList.add(apiSttstInfo);
+		model.addAttribute("sendSttstList", sendSttstList);
+		
+		//searchVO 데이터 원복 시키기
+		searchVO.setMsgType(msgType);
+		searchVO.setFileCnt(fileCnt);
+		searchVO.setSendKind(sendKind);
+		
+		
+		//문자발송 실패 결과 코드정보 리스트 불러오기
+		MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO();
+		List<MjonMsgResultCodeVO> resultMsgCodeList = mjonMsgService.selectMsgResultCodeAllList(mjonMsgResultCodeVO);
+		
+		model.addAttribute("resultMsgCodeList", resultMsgCodeList);
+		
+		paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonMsgVO)resultList.get(0)).getTotCnt() : 0);
+		model.addAttribute("paginationInfo", paginationInfo);
 		
 		return "cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop";
 	}
-	
+
 	/**
 	* @Method Name : EgovGnrlselectedUserKakaoDataListAjax
 	* @작성일 : 2023. 3. 6.
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
@@ -271,6 +271,7 @@
 			, M.userNm
 			, M.adminSmsNoticeYn
 			, M.callFrom
+			, M.sendKind
 			, M.smsTxt
 			, M.subject
 			, M.msgType
@@ -387,6 +388,7 @@
 				, LMB.MBER_NM								AS userNm
 				, LMB.ADMIN_SMS_NOTICE_YN					AS adminSmsNoticeYn
 				, A.CALL_FROM								AS callFrom
+				, A.SEND_KIND								AS sendKind
 				, A.SMS_TXT									AS smsTxt
 				, A.SUBJECT									AS subject
 				, A.MSG_TYPE								AS msgType
@@ -432,16 +434,24 @@
 				) D ON A.MSG_TYPE = D.CODE			/** 메세지타입 */
 	 		WHERE 1 = 1
 	 		AND A.MSG_TYPE IN (4, 6)
+	 		<isNotEmpty property="sendKind">
+				<isEqual property="sendKind" compareValue="H">
+					AND A.SEND_KIND = 'H'
+				</isEqual>
+				<isEqual property="sendKind" compareValue="A">
+					AND A.SEND_KIND = 'A'
+				</isEqual>
+			</isNotEmpty>
 	 		<isNotEmpty property="searchKeyword">
 				<isEqual property="searchCondition" compareValue="" >
-	 		    	AND ( 
-	 		    	    USER_ID LIKE CONCAT ('%', #searchKeyword#,'%') OR 
-	 		    		A.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%') OR
-	 		        	SMS_TXT LIKE CONCAT ('%', #searchKeyword#,'%') 
-	 		        )
-		 	    </isEqual>
-		 	    
-		 	    <isEqual property="searchCondition" compareValue="1">
+					AND (
+						USER_ID LIKE CONCAT ('%', #searchKeyword#,'%')
+						OR A.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
+						OR SMS_TXT LIKE CONCAT ('%', #searchKeyword#,'%') 
+					)
+				</isEqual>
+				
+				<isEqual property="searchCondition" compareValue="1">
 					AND A.USER_ID LIKE CONCAT('%', #searchKeyword#, '%')
 				</isEqual>
 				
@@ -484,9 +494,9 @@
 				AND RESERVE_C_YN = #reserveCYn#
 			</isNotEmpty>
 			
-	        <isNotEmpty property="searchAdminSmsNoticeYn">
-	 			AND ADMIN_SMS_NOTICE_YN = #searchAdminSmsNoticeYn#
-			</isNotEmpty>			
+			<isNotEmpty property="searchAdminSmsNoticeYn">
+				AND ADMIN_SMS_NOTICE_YN = #searchAdminSmsNoticeYn#
+			</isNotEmpty>
 			
 			<isNotEmpty property="searchCampaignYn">
 				AND MSG_KIND = 'C'
@@ -6825,5 +6835,420 @@
 			AND MSG_GROUP_ID = #msgGroupId#
 	</update>
 	
+	<select id="mjonMsgDAO.selectApiSttstList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
+		SELECT
+			IFNULL(COUNT(msgGroupId), 0)						AS totCnt				/** 전체 건수 */
+			, IFNULL(SUM(smsGroupSCnt), 0)						AS smsGroupSCntSum		/** 발송 성공 전체 건수 */
+			, IFNULL(FLOOR(SUM(smsTotSPrice)), 0)				AS smsTotSPriceSum		/** 성공 발송금액 합계 소수점 이하 버림*/
+			, IFNULL(SUM(smsGroupFWCnt), 0)						AS smsGroupFWCntSum		/** 발송 실패대기 전체 건수 */
+			, IFNULL(FLOOR(SUM(smsTotFWPrice)), 0)				AS smsTotFWPriceSum		/** 실패대기 발송금액 합계 소수점 이하 버림*/
+			, IFNULL(SUM(lmsGroupSCnt), 0)						AS lmsGroupSCntSum		/** 발송 성공 전체 건수 */
+			, IFNULL(FLOOR(SUM(lmsTotSPrice)), 0)				AS lmsTotSPriceSum		/** 성공 발송금액 합계 소수점 이하 버림*/
+			, IFNULL(SUM(lmsGroupFWCnt), 0)						AS lmsGroupFWCntSum		/** 발송 실패대기 전체 건수 */
+			, IFNULL(FLOOR(SUM(lmsTotFWPrice)), 0)				AS lmsTotFWPriceSum		/** 실패대기 발송금액 합계 소수점 이하 버림*/
+			, IFNULL(SUM(mmsGroupSCnt), 0)						AS mmsGroupSCntSum		/** 발송 성공 전체 건수 */
+			, IFNULL(FLOOR(SUM(mmsTotSPrice)), 0)				AS mmsTotSPriceSum		/** 성공 발송금액 합계 소수점 이하 버림*/
+			, IFNULL(SUM(mmsGroupFWCnt), 0)						AS mmsGroupFWCntSum		/** 발송 실패대기 전체 건수 */
+			, IFNULL(FLOOR(SUM(mmsTotFWPrice)), 0)				AS mmsTotFWPriceSum		/** 실패대기 발송금액 합계 소수점 이하 버림*/
+		FROM
+		(SELECT
+			COUNT(MSG_GROUP_ID)					AS smsGroupSCnt
+			, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS smsTotSPrice
+			, '0'								AS smsGroupFWCnt
+			, '0'								AS smsTotFWPrice
+			, '0'								AS lmsGroupSCnt
+			, '0'								AS lmsTotSPrice
+			, '0'								AS lmsGroupFWCnt
+			, '0'								AS lmsTotFWPrice
+			, '0'								AS mmsGroupSCnt
+			, '0'								AS mmsTotSPrice
+			, '0'								AS mmsGroupFWCnt
+			, '0'								AS mmsTotFWPrice
+			, MSG_GROUP_ID						AS msgGroupId
+			, MSG_TYPE							AS msgType
+			, resultCodeTxt
+		FROM
+			(SELECT
+				MGD.MSG_GROUP_ID
+				, MD.MSG_TYPE
+				, MGD.EACH_PRICE
+				, (<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+			FROM
+				MJ_MSG_GROUP_DATA MGD
+				LEFT JOIN MJ_MSG_DATA MD
+					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 1=1
+				AND MGD.USER_ID = #userId#
+				AND MGD.MSG_TYPE IN (4,6)
+				AND MGD.MSG_TYPE = '4'
+				AND MGD.FILE_CNT = 0
+				<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>
+				AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+				<isNotEmpty property="reserveType">
+					<isEqual property="reserveType" compareValue="D">
+						<![CDATA[ 
+						AND MGD.REQ_DATE <= now()
+						AND MGD.RESERVE_C_YN = 'N'
+						]]>
+					</isEqual>
+					<isEqual property="reserveType" compareValue="R">
+						<![CDATA[ 
+						AND MGD.REQ_DATE > now()
+						AND MGD.RESERVE_YN = 'Y'
+						]]>
+					</isEqual>
+				</isNotEmpty>
+			)IN1
+		WHERE 1=1
+			<![CDATA[ AND IN1.resultCodeTxt = 'S' ]]>
+		GROUP BY MSG_GROUP_ID
+
+		UNION
+
+		/*실패 건 조회*/
+		SELECT
+			'0'									AS smsGroupSCnt
+			, '0'								AS smsTotSPrice
+			, COUNT(MSG_GROUP_ID)				AS smsGroupFWCnt
+			, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS smsTotFWPrice
+			, '0'								AS lmsGroupSCnt
+			, '0'								AS lmsTotSPrice
+			, '0'								AS lmsGroupFWCnt
+			, '0'								AS lmsTotFWPrice
+			, '0'								AS mmsGroupSCnt
+			, '0'								AS mmsTotSPrice
+			, '0'								AS mmsGroupFWCnt
+			, '0'								AS mmsTotFWPrice
+			, MSG_GROUP_ID						AS msgGroupId
+			, MSG_TYPE							AS msgType
+			, resultCodeTxt
+		FROM
+			(SELECT
+				MGD.MSG_GROUP_ID
+				,MD.MSG_TYPE
+				, MGD.EACH_PRICE 
+				, (<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+			FROM
+				MJ_MSG_GROUP_DATA MGD
+				LEFT JOIN MJ_MSG_DATA MD
+					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
+				LEFT OUTER JOIN MJ_SPAM_MEMBER_INFO MSI
+					ON MGD.MSG_GROUP_ID = MSI.MSG_GROUP_ID
+			WHERE 1=1
+				AND MGD.USER_ID = #userId#
+				AND MGD.MSG_TYPE IN (4,6)
+				AND MGD.MSG_TYPE = '4'
+				AND MGD.FILE_CNT = 0
+				<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>
+				AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+				<isNotEmpty property="reserveType">
+					<isEqual property="reserveType" compareValue="D">
+						<![CDATA[ 
+						AND MGD.REQ_DATE <= now()
+						AND MGD.RESERVE_C_YN = 'N'
+						]]>
+					</isEqual>
+					<isEqual property="reserveType" compareValue="R">
+						<![CDATA[ 
+						AND MGD.REQ_DATE > now()
+						AND MGD.RESERVE_YN = 'Y'
+						]]>
+					</isEqual>
+				</isNotEmpty>
+			)IN1
+		WHERE 1=1
+			<![CDATA[ AND IN1.resultCodeTxt <> 'S' ]]>
+		GROUP BY MSG_GROUP_ID
+
+		UNION
+
+		SELECT
+			'0'									AS smsGroupSCnt
+			, '0'								AS smsTotSPrice
+			, '0'								AS smsGroupFWCnt
+			, '0'								AS smsTotFWPrice
+			
+			, COUNT(MSG_GROUP_ID)				AS lmsGroupSCnt
+			, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS lmsTotSPrice
+			, '0'								AS lmsGroupFWCnt
+			, '0'								AS lmsTotFWPrice
+			
+			, '0'								AS mmsGroupSCnt
+			, '0'								AS mmsTotSPrice
+			, '0'								AS mmsGroupFWCnt
+			, '0'								AS mmsTotFWPrice
+			
+			, MSG_GROUP_ID						AS msgGroupId
+			, MSG_TYPE							AS msgType
+			, resultCodeTxt
+		FROM
+			(SELECT
+				MGD.MSG_GROUP_ID
+				, MD.MSG_TYPE
+				, MGD.EACH_PRICE
+				, (<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+			FROM
+				MJ_MSG_GROUP_DATA MGD
+				LEFT JOIN MJ_MSG_DATA MD
+					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 1=1
+				AND MGD.USER_ID = #userId#
+				AND MGD.MSG_TYPE IN (4,6)
+				AND MGD.MSG_TYPE = '6'
+				AND MGD.FILE_CNT = 0
+				<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>
+				AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+				<isNotEmpty property="reserveType">
+					<isEqual property="reserveType" compareValue="D">
+						<![CDATA[ 
+						AND MGD.REQ_DATE <= now()
+						AND MGD.RESERVE_C_YN = 'N'
+						]]>
+					</isEqual>
+					<isEqual property="reserveType" compareValue="R">
+						<![CDATA[ 
+						AND MGD.REQ_DATE > now()
+						AND MGD.RESERVE_YN = 'Y'
+						]]>
+					</isEqual>
+				</isNotEmpty>
+			)IN1
+		WHERE 1=1
+			<![CDATA[ AND IN1.resultCodeTxt = 'S' ]]>
+		GROUP BY MSG_GROUP_ID
+
+		UNION
+
+		/*실패 건 조회*/
+		SELECT
+			'0'									AS smsGroupSCnt
+			, '0'								AS smsTotSPrice
+			, '0'								AS smsGroupFWCnt
+			, '0'								AS smsTotFWPrice
+			
+			, '0'								AS lmsGroupSCnt
+			, '0'								AS lmsTotSPrice
+			, COUNT(MSG_GROUP_ID)				AS lmsGroupFWCnt
+			, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS lmsTotFWPrice
+			
+			, '0'								AS mmsGroupSCnt
+			, '0'								AS mmsTotSPrice
+			, '0'								AS mmsGroupFWCnt
+			, '0'								AS mmsTotFWPrice
+			
+			, MSG_GROUP_ID						AS msgGroupId
+			, MSG_TYPE							AS msgType
+			, resultCodeTxt
+		FROM
+			(SELECT
+				MGD.MSG_GROUP_ID
+				, MD.MSG_TYPE
+				, MGD.EACH_PRICE
+				, (<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+			FROM
+				MJ_MSG_GROUP_DATA MGD
+				LEFT JOIN MJ_MSG_DATA MD
+					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
+				LEFT OUTER JOIN MJ_SPAM_MEMBER_INFO MSI
+					ON MGD.MSG_GROUP_ID = MSI.MSG_GROUP_ID
+			WHERE 1=1
+				AND MGD.USER_ID = #userId#
+				AND MGD.MSG_TYPE IN (4,6)
+				AND MGD.MSG_TYPE = '6'
+				AND MGD.FILE_CNT = 0
+				<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>
+				AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+				<isNotEmpty property="reserveType">
+					<isEqual property="reserveType" compareValue="D">
+						<![CDATA[ 
+						AND MGD.REQ_DATE <= now()
+						AND MGD.RESERVE_C_YN = 'N'
+						]]>
+					</isEqual>
+					<isEqual property="reserveType" compareValue="R">
+						<![CDATA[ 
+						AND MGD.REQ_DATE > now()
+						AND MGD.RESERVE_YN = 'Y'
+						]]>
+					</isEqual>
+				</isNotEmpty>
+			)IN1
+		WHERE 1=1
+			<![CDATA[ AND IN1.resultCodeTxt <> 'S' ]]>
+		GROUP BY MSG_GROUP_ID
+		
+		UNION
+		
+		SELECT
+			'0'									AS smsGroupSCnt
+			, '0'								AS smsTotSPrice
+			, '0'								AS smsGroupFWCnt
+			, '0'								AS smsTotFWPrice
+			
+			, '0'								AS lmsGroupSCnt
+			, '0'								AS lmsTotSPrice
+			, '0'								AS lmsGroupFWCnt
+			, '0'								AS lmsTotFWPrice
+			
+			, COUNT(MSG_GROUP_ID)				AS mmsGroupSCnt
+			, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS mmsTotSPrice
+			, '0'								AS mmsGroupFWCnt
+			, '0'								AS mmsTotFWPrice
+			
+			, MSG_GROUP_ID						AS msgGroupId
+			, MSG_TYPE							AS msgType
+			, resultCodeTxt
+		FROM
+			(SELECT
+				MGD.MSG_GROUP_ID
+				, MD.MSG_TYPE
+				, MGD.EACH_PRICE
+				, (<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+			FROM
+				MJ_MSG_GROUP_DATA MGD
+				LEFT JOIN MJ_MSG_DATA MD
+					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 1=1
+				AND MGD.USER_ID = #userId#
+				AND MGD.MSG_TYPE IN (4,6)
+				AND MGD.MSG_TYPE = '6'
+				AND MGD.FILE_CNT > 0
+				<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>
+				AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+				<isNotEmpty property="reserveType">
+					<isEqual property="reserveType" compareValue="D">
+						<![CDATA[ 
+						AND MGD.REQ_DATE <= now()
+						AND MGD.RESERVE_C_YN = 'N'
+						]]>
+					</isEqual>
+					<isEqual property="reserveType" compareValue="R">
+						<![CDATA[ 
+						AND MGD.REQ_DATE > now()
+						AND MGD.RESERVE_YN = 'Y'
+						]]>
+					</isEqual>
+				</isNotEmpty>
+			)IN1
+		WHERE 1=1
+			<![CDATA[ AND IN1.resultCodeTxt = 'S' ]]>
+		GROUP BY MSG_GROUP_ID
+		
+		UNION
+	
+		/*실패 건 조회*/
+		SELECT
+			'0'									AS smsGroupSCnt
+			, '0'								AS smsTotSPrice
+			, '0'								AS smsGroupFWCnt
+			, '0'								AS smsTotFWPrice
+			
+			, '0'								AS lmsGroupSCnt
+			, '0'								AS lmsTotSPrice
+			, '0'								AS lmsGroupFWCnt
+			, '0'								AS lmsTotFWPrice
+			
+			, '0'								AS mmsGroupSCnt
+			, '0'								AS mmsTotSPrice
+			, COUNT(MSG_GROUP_ID)				AS mmsGroupFWCnt
+			, COUNT(MSG_GROUP_ID) * EACH_PRICE	AS mmsTotFWPrice
+			
+			, MSG_GROUP_ID						AS msgGroupId
+			, MSG_TYPE							AS msgType
+			,resultCodeTxt
+		FROM
+			(SELECT
+				MGD.MSG_GROUP_ID
+				, MD.MSG_TYPE
+				, MGD.EACH_PRICE 
+				, (<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS resultCodeTxt
+			FROM
+				MJ_MSG_GROUP_DATA MGD
+				LEFT JOIN MJ_MSG_DATA MD
+					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
+				LEFT OUTER JOIN MJ_SPAM_MEMBER_INFO MSI
+					ON MGD.MSG_GROUP_ID = MSI.MSG_GROUP_ID
+			WHERE 1=1
+				AND MGD.USER_ID = #userId#
+				AND MGD.MSG_TYPE IN (4, 6)
+				AND MGD.MSG_TYPE = '6'
+				AND MGD.FILE_CNT > 0
+				<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>
+				AND DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+				<isNotEmpty property="reserveType">
+					<isEqual property="reserveType" compareValue="D">
+						<![CDATA[ 
+						AND MGD.REQ_DATE <= now()
+						AND MGD.RESERVE_C_YN = 'N'
+						]]>
+					</isEqual>
+					<isEqual property="reserveType" compareValue="R">
+						<![CDATA[ 
+						AND MGD.REQ_DATE > now()
+						AND MGD.RESERVE_YN = 'Y'
+						]]>
+					</isEqual>
+				</isNotEmpty>
+			)IN1
+			WHERE 1=1
+				<![CDATA[ AND IN1.resultCodeTxt <> 'S' ]]>
+			GROUP BY MSG_GROUP_ID
+		)FN1
+		ORDER BY msgGroupId DESC
+	</select>
 </sqlMap>
 
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
@@ -392,61 +392,71 @@
 						</tr>
 					</thead>
 					<tbody>
+						<c:forEach var="sendSttstInfo" items="${sendSttstList}" varStatus="status">
 						<tr>
 							<td>
-								전체
+								<c:choose>
+									<c:when test="${sendSttstInfo.sendKind eq 'A'}">
+										API
+									</c:when>
+									<c:when test="${sendSttstInfo.sendKind eq 'H'}">
+										WEB
+									</c:when>
+									<c:otherwise>
+										전체
+									</c:otherwise>
+								</c:choose>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold">
-									<fmt:formatNumber value="${msgSmsGroupSCntSum}" pattern="#,###" />
-								</span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsGroupSCntSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSmsSPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgSmsGroupFWCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsGroupFWCntSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSmsFWPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsTotFWPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgLmsGroupSCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.lmsGroupSCntSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totLmsSPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.lmsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgLmsGroupFWCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.lmsGroupFWCntSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totLmsFWPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.lmsTotFWPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgMmsGroupSCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.mmsGroupSCntSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totMmsSPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.mmsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgMmsGroupFWCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.mmsGroupFWCntSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totMmsFWPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.mmsTotFWPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgGroupSCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totSPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${msgGroupFWCntSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 							<td>
-								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${totFWPriceSum}" pattern="#,###" /></span>
+								<span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${sendSttstInfo.smsTotSPriceSum}" pattern="#,###" /></span>
 							</td>
 						</tr>
+						</c:forEach>
 					</tbody>
 				</table>
 			</div>
@@ -650,7 +660,7 @@
 										API
 									</c:when>
 									<c:when test="${result.sendKind eq 'H'}">
-										홈페이지
+										WEB
 									</c:when>
 								</c:choose>
 							</td>
src/main/webapp/WEB-INF/jsp/uss/ion/msg/ReserveNumberList.jsp
--- src/main/webapp/WEB-INF/jsp/uss/ion/msg/ReserveNumberList.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/msg/ReserveNumberList.jsp
@@ -360,7 +360,11 @@
 					<option value="Y" <c:if test="${searchVO.searchAdminSmsNoticeYn == 'Y'}">selected="selected"</c:if>>온(On)</option>
 					<option value="N" <c:if test="${searchVO.searchAdminSmsNoticeYn == 'N'}">selected="selected"</c:if>>오프(Off)</option>
 				</select>	            					
-					
+				<select id="sendKind" name="sendKind" onchange="fn_search();">
+					<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>
 				<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="15" title="검색" maxlength="100" />
 				<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
 			</div>
@@ -389,7 +393,7 @@
 						<col style="width: 5%">
 						<col style="width: 13%">
 						<col style="width: 7%">
-						<col style="width: 10%">						
+						<col style="width: 10%">
 						<col style="width: 10%">
 						<col style="width: 14%">
 						<col style="width: *%">
@@ -410,6 +414,7 @@
 							<th>요청시간<input type="button" class="sort sortBtn" id="sort_reqDate"></th>
 							<th>내용<input type="button" class="sort sortBtn" id="sort_smsTxt"></th>
 							<th>타입<input type="button" class="sort sortBtn" id="sort_msgTypeTxt"></th>
+							<th>방식<input type="button" class="sort sortBtn" id="sort_sendKind"></th>
 							<!-- <th>예약상태<input type="button" class="sort sortBtn" id="sort_conectMthdTxt"></th> -->
 							<!-- 
 							<th>취소일자<input type="button" class="sort sortBtn" id="sort_agentCodeTxt"></th>
@@ -529,6 +534,16 @@
 									</c:otherwise>
 								</c:choose>																							
 							</td>
+							<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
+								<c:choose>
+									<c:when test="${result.sendKind eq 'A'}">
+										API
+									</c:when>
+									<c:when test="${result.sendKind eq 'H'}">
+										WEB
+									</c:when>
+								</c:choose>
+							</td>
 							<%-- <td>
 								<c:choose>
 									<c:when test="${result.reserveCYn == 'Y'}">
Add a comment
List