rosewiper 2023-12-26
요금 사용내역 신규 테스트 화면 개발 - 요금 사용내역 하단 리스트영역 신규 화면 추가 - 성공/ 실패 건수에 대한 데이터가 나오도록 변경 - 항목 정보 변경
 - 요금 사용내역 하단 리스트영역 신규 화면 추가
 - 성공/ 실패 건수에 대한 데이터가 나오도록 변경
 - 항목 정보 변경
@fbd2a543f7976487ac810405c1105e3765b49bde
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
@@ -200,6 +200,11 @@
 	
 	private String searchDelayMsgYn;
 
+	private int succSendCnt;
+	private int failSendCnt;
+	private double succSendPrice;
+	private double failSendPrice;
+	
 	public String getSearchDelayMsgYn() {
 		return searchDelayMsgYn;
 	}
@@ -1595,4 +1600,28 @@
 	public void setFtSendCount(int ftSendCount) {
 		this.ftSendCount = ftSendCount;
 	}
+	public int getSuccSendCnt() {
+		return succSendCnt;
+	}
+	public void setSuccSendCnt(int succSendCnt) {
+		this.succSendCnt = succSendCnt;
+	}
+	public int getFailSendCnt() {
+		return failSendCnt;
+	}
+	public void setFailSendCnt(int failSendCnt) {
+		this.failSendCnt = failSendCnt;
+	}
+	public double getSuccSendPrice() {
+		return succSendPrice;
+	}
+	public void setSuccSendPrice(double succSendPrice) {
+		this.succSendPrice = succSendPrice;
+	}
+	public double getFailSendPrice() {
+		return failSendPrice;
+	}
+	public void setFailSendPrice(double failSendPrice) {
+		this.failSendPrice = failSendPrice;
+	}
 }
src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
--- src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
+++ src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
@@ -79,6 +79,8 @@
 	
 	public List<MjonMsgVO> selectPayUserList(MjonMsgVO mjonMsgVO) throws Exception; 
 	
+	public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception;
+	
 	public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception;
 	
 	// 중계사 시스템 발송 문자 내용 입력
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
@@ -152,6 +152,11 @@
 	}
 	
 	@SuppressWarnings("unchecked")
+	public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception{
+		return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserSWList",mjonMsgVO);
+	}
+	
+	@SuppressWarnings("unchecked")
 	public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception{
 		return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserSumList",mjonMsgVO);
 	}
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
@@ -1775,6 +1775,11 @@
 	}
 	
 	@Override
+	public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception {
+		return mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO);
+	}
+	
+	@Override
 	public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception {
 		return mjonMsgDataDAO.selectPayUserSumList(mjonMsgVO);
 	}
src/main/java/itn/let/mjo/pay/web/MjonPayController.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayController.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayController.java
@@ -2514,7 +2514,7 @@
 		return "/web/pay/PayUserWithKakaoList";
 	}    
     /**
-	 * 요금사용내역
+	 * 요금사용내역 하단 리스트 영역
 	 * @param mjonMsgVO
 	 * @param model
 	 * @return	"/web/member/pay/PayUserListAjax.do"
@@ -2557,6 +2557,129 @@
 		return "/web/pay/PayUserListAjax";
 	}
     
+    
+    
+    
+	/**
+	 * 요금사용내역 신규 화면
+	 * 2023.12.22 우영두 
+	 * @param mjonMsgVO
+	 * @param model
+	 * @return	"/web/member/pay/PayUserSWList.do"
+	 * @throws Exception
+	 */
+    @RequestMapping(value= {"/web/member/pay/PayUserSWList.do"})
+	public String PayUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO,
+			MjonPayVO mjonPayVO,
+			MberManageVO mberManageVO, RedirectAttributes redirectAttributes,
+			HttpServletRequest request,
+			ModelMap model) throws Exception{
+		
+		/*LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		
+		if(loginVO == null) {
+			//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
+			return "redirect:/web/user/login/login.do";
+		}    	
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		mjonMsgVO.setUserId(userId);
+		
+		{ // 충전캐시
+			String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId); 
+			model.addAttribute("sumPayMoney", sumPayMoney);
+		}
+		
+		{ // 충전포인트
+			String sumPoint = mjonPayService.selectSumPoint(userId); 
+			model.addAttribute("sumPoint", sumPoint);
+		}
+				
+		{ // 총 사용금액
+			mjonPayVO.setUserId(userId);
+			List<MjonPayVO>  usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO);	
+			model.addAttribute("usedCashTotList", usedCashTotList);
+		}
+		{ // 사용가능한 금액
+			mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
+			model.addAttribute("mberManageVO", mberManageVO);
+		}
+		
+		{ // 발송건수
+			mjonMsgVO.setReserveYn("N");
+			List<MjonMsgVO>  sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
+			model.addAttribute("sendTotList", sendTotList);
+		}
+		
+		{ // 예약건수
+			mjonMsgVO.setReserveYn("Y");
+			List<MjonMsgVO>  reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
+			model.addAttribute("reservToList", reservToList);
+		}
+		
+		{
+			MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
+			if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기
+				mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
+				if(mjonCandidateVO != null) {
+					mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()));
+					mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()));
+				}
+			}
+			model.addAttribute("mjonCandidateVO", mjonCandidateVO);
+		}
+		return "/web/pay/PayUserSWList";
+	}
+    
+    
+    /**
+	 * 요금사용내역 하단 리스트 영역 신규 화면
+	 * 2023.12.22 우영두
+	 * @param mjonMsgVO
+	 * @param model
+	 * @return	"/web/member/pay/PayUserSWListAjax.do"
+	 * @throws Exception
+	 */
+    @RequestMapping(value= {"/web/member/pay/PayUserSWListAjax.do"})
+	public String PayUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
+			HttpServletRequest request,
+			ModelMap model) throws Exception{
+		
+		LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		mjonMsgVO.setUserId(userId);
+		
+		if(mjonMsgVO.getPageUnit() != 10) {
+			mjonMsgVO.setPageUnit(mjonMsgVO.getPageUnit());
+		}
+		
+		/** pageing */
+		PaginationInfo paginationInfo = new PaginationInfo();
+		paginationInfo.setCurrentPageNo(mjonMsgVO.getPageIndex());
+		paginationInfo.setRecordCountPerPage(mjonMsgVO.getPageUnit());
+		paginationInfo.setPageSize(mjonMsgVO.getPageSize());
+
+		mjonMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+		mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex());
+		mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); 
+		
+		if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
+			mjonMsgVO.setSearchSortCnd("regDate");
+			mjonMsgVO.setSearchSortOrd("desc");
+		}
+		
+		
+		List<MjonMsgVO> payUserSWList =  mjonMsgDataService.selectPayUserSWList(mjonMsgVO);
+		
+		paginationInfo.setTotalRecordCount(payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0);
+		model.addAttribute("paginationInfo", paginationInfo);
+		model.addAttribute("payUserSWList", payUserSWList);
+		
+		return "/web/pay/PayUserSWListAjax";
+	}
+    
+    
+    
     /**
      * 요금사용내역 - 카카오 테스트용
      * @param mjonMsgVO
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
@@ -3135,6 +3135,194 @@
 		LIMIT #recordCountPerPage# OFFSET #firstIndex#
 	</select>
 	
+		<!-- 사용자 요금 사용내역 리스트 -->
+	<select id="mjonMsgDAO.selectPayUserSWList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
+		SELECT
+		COUNT(pay.totCnt) OVER()    AS totCnt
+		, pay.regDate                                                   AS regDate 
+		, pay.sendCount                                                 AS sendCount 
+		, pay.succSendCnt          										AS succSendCnt
+        , pay.failSendCnt          										AS failSendCnt
+        , pay.succSendPrice        										AS succSendPrice
+        , pay.failSendPrice        										AS failSendPrice
+		, pay.smsTxt                                                    AS smsTxt 
+		, pay.subject                                                   AS subject 
+		, pay.msgTypeTxt                                                AS msgTypeTxt 
+		, pay.fileCnt                                                   AS fileCnt 
+		, pay.befCash                                                   AS befCash 
+		, pay.befPoint                                                  AS befPoint 
+		, pay.totPrice                     			 					AS totPrice 
+		, pay.thisPoint													AS thisPoint 
+		, pay.msgGroupId                                                AS msgGroupId 
+		, pay.totalPrice                                                AS totalPrice 
+		, pay.eachPrice                                                 AS eachPrice 
+		, pay.sentDate                                                  AS sentDate 
+		, pay.fileName1                                                 AS fileName1 
+		, pay.fileName2                                                 AS fileName2
+		, pay.fileName3                                                 AS fileName3
+		, pay.orderByCode                                               AS orderByCode
+		, pay.msgId                                                     AS msgId
+	FROM
+	(
+		SELECT
+			COUNT(M.regDate) OVER()		AS totCnt
+			, M.regDate			AS regDate
+			, M.sendCount		AS sendCount
+			, SUM(IF(RESULT = 'W' OR RESULT = 'S', 1, 0 ))                AS succSendCnt
+            , SUM(IF(RESULT = 'F', 1, 0 ))                                AS failSendCnt
+            , SUM(IF(RESULT = 'W' OR RESULT = 'S', 1, 0 )) * M.eachPrice  AS succSendPrice
+            , SUM(IF(RESULT = 'F', 1, 0 ))                 * M.eachPrice  AS failSendPrice
+			, M.smsTxt			AS smsTxt
+			, M.subject			AS subject
+			, M.msgTypeTxt		AS msgTypeTxt
+			, M.msgKind			AS msgKind
+			, M.fileCnt			AS fileCnt
+			, M.befCash			AS befCash
+			, M.befPoint		AS befPoint  
+			, ROUND((M.eachPrice * M.sendCount), 2)	AS totPrice
+			, (M.befCash - ROUND((M.eachPrice * M.sendCount), 2))	AS thisPoint
+			, M.msgGroupId		AS msgGroupId
+			, M.totalPrice		AS totalPrice
+			, M.eachPrice		AS eachPrice 
+			, M.sentDate		AS sentDate  
+			, M.fileName1		AS fileName1 
+			, M.fileName2		AS fileName2 
+			, M.fileName3		AS fileName3 
+			, M.orderByCode		AS orderByCode
+			, M.msgId			AS msgId
+		FROM
+			(SELECT
+				 DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i' )	AS regDate
+				, B.MSG_GROUP_CNT						AS sendCount
+				, B.SMS_TXT								AS smsTxt
+				, B.SUBJECT								AS subject
+				, B.MSG_TYPE							AS msgTypeTxt
+				, B.MSG_KIND							AS msgKind
+				, B.FILE_CNT							AS fileCnt
+				, B.BEF_CASH							AS befCash
+				, B.BEF_POINT							AS befPoint
+				, B.TOT_PRICE							AS totPrice
+				, B.MSG_GROUP_ID						AS msgGroupId
+				, B.TOT_PRICE							AS totalPrice
+				, B.EACH_PRICE							AS eachPrice
+				, A.SENT_DATE							AS sentDate
+				, A.FILE_PATH1							AS fileName1
+				, A.FILE_PATH2							AS fileName2
+				, A.FILE_PATH3							AS fileName3
+				, A.MSG_ID								AS msgId
+				, A.REQ_DATE 							AS reqDate
+				, CASE
+					WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
+					THEN '3'
+					WHEN B.MSG_TYPE = '6' AND B.FILE_CNT = 0
+					THEN '2'
+					ELSE '1'
+				END orderByCode
+				, (
+					<include refid="MjonMsgSentDAO.selectAgentWithKakaoResultQuery_A"/>
+				) AS RESULT
+			<include refid="MjonMsgSentDAO.selectJoinQuery"/>
+				AND A.USER_ID	= #userId#
+				AND B.USER_ID	= #userId#
+				AND B.RESERVE_C_YN = 'N'
+			ORDER BY 1=1
+				, msgGroupId DESC
+				, sentDate DESC
+				, msg_id DESC
+			)M
+		WHERE 1=1 
+			AND RESULT IN ('W', 'S', 'F')
+		GROUP BY M.msgGroupId
+		
+		UNION
+		
+		SELECT
+			COUNT(1) OVER ()                                AS totCnt 
+			, DATE_FORMAT(pf.ReqDate, '%Y-%m-%d %H:%i' )	AS regDate
+			, mjf.FAX_GROUP_CNT                             AS sendCount
+			, SentEA                                        AS succSendCnt
+            , SentEA  * mjf.EACH_PRICE                      AS succSendPrice
+            , ErrorEA                                       AS failSendCnt
+            , ErrorEA * mjf.EACH_PRICE                      AS failSendPrice
+			, ""					                        AS smsTxt 
+			, mjf.SUBJECT                                   AS subject 
+			, "fax"                                         AS msgTypeTxt
+			, ""											AS msgKind 
+			, mjf.FAX_PAGE_CNT                              AS fileCnt 
+			, mjf.BEF_CASH									AS befCash 
+			, mjf.BEF_POINT									AS befPoint 
+			, ROUND((mjf.EACH_PRICE * mjf.FAX_PAGE_CNT * mjf.FAX_GROUP_CNT), 2)                  AS totPrice 
+			, (mjf.BEF_CASH - ROUND((mjf.EACH_PRICE * mjf.FAX_PAGE_CNT * mjf.FAX_GROUP_CNT), 2))		  AS thisPoint
+			, mjf.FAX_GROUP_ID                                                AS msgGroupId
+			, mjf.TOT_PRICE                                                   AS totalPrice
+			, mjf.EACH_PRICE                                                  AS eachPrice
+			, pf.SendDate                                                     AS sentDate
+			, ""                                                              AS fileName1
+			, ""                                                              AS fileName2
+			, ""                                                              AS fileName3
+			, ""                                            				  AS orderByCode
+			, pf.SEQ                                                          AS msgId
+		FROM
+			pgi_faxtran pf
+			LEFT JOIN mj_fax_group_data mjf
+			ON pf.seq = mjf.PGI_FAXTRAN_SEQ
+			LEFT JOIN mj_fax_convert_mng mjc
+			ON mjf.CONVERT_MNG_SEQ         = mjc.CONVERT_MNG_SEQ
+		WHERE 1 = 1
+			AND pf.SentEA > 0
+			AND mjf.USER_ID = #userId#
+			
+	) AS pay
+	WHERE 1=1
+		
+		<isNotEmpty property="pageType">
+			<isEqual property="pageType" compareValue="sms">
+				AND		pay.msgTypeTxt  = '4' 
+			</isEqual>
+			<isEqual property="pageType" compareValue="lms">
+				AND		pay.msgTypeTxt  = '6' 
+				AND		pay.fileCnt = 0
+			</isEqual>
+			<isEqual property="pageType" compareValue="mms">
+				AND		pay.msgTypeTxt  = '6'
+				AND		pay.fileCnt != 0
+			</isEqual>
+			<isEqual property="pageType" compareValue="cam">
+				AND		pay.msgKind  = 'C' 
+			</isEqual>
+			<isEqual property="pageType" compareValue="at">
+				AND		pay.msgTypeTxt  = '8' 
+			</isEqual>
+			<isEqual property="pageType" compareValue="ft">
+				AND		pay.msgTypeTxt  = '9'
+			</isEqual>
+			<isEqual property="pageType" compareValue="fax">
+				AND		pay.msgTypeTxt  = 'fax'
+			</isEqual>
+		</isNotEmpty>
+		<isNotEmpty property="startDate">
+			<![CDATA[ 
+				AND DATE_FORMAT(pay.regDate, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
+			]]>
+		</isNotEmpty>
+		<isNotEmpty property="endDate">
+			<![CDATA[
+				AND	DATE_FORMAT(pay.regDate, '%Y-%m-%d')  <=  DATE_FORMAT(#endDate#, '%Y-%m-%d')
+			]]>
+		</isNotEmpty>
+		
+		
+		ORDER BY 1=1
+			<isNotEmpty property="searchSortCnd">
+				,$searchSortCnd$
+			</isNotEmpty>
+			<isNotEmpty property="searchSortOrd">
+				$searchSortOrd$
+			</isNotEmpty>
+		LIMIT #recordCountPerPage# OFFSET #firstIndex#
+	</select>
+	
+	
 	<!-- 사용자 요금 사용내역 Sum 리스트 -->
 	<select id="mjonMsgDAO.selectPayUserSumList_bak" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">	
 		SELECT 
 
src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp
@@ -0,0 +1,399 @@
+<%--
+  Class Name : SendNumberList.jsp
+  Description : 발신번호 리스트 조회 페이지
+  Modification Information
+
+      수정일         수정자                   수정내용
+    -------    --------    ---------------------------
+    2021.03.31    신명섭          최초 생성
+
+    Copyright (C) 2009 by ITN  All right reserved.
+--%>
+<%@ page contentType="text/html; charset=utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+
+<script>
+var thisYearStart = "";
+var thisYearEnd = "";
+var lastfulstday = "";
+var lastfuledday = "";
+var thisfulstlday = "";
+var thisfuledtlday = "";
+$(document).ready(function(){
+	payUserListAjax(1);
+	var date = new Date() ;
+	//이전달 첫날/마지막날 조회
+	if(date.getMonth()+1 == 1){
+		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
+		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
+	}else{
+		lastfulstday = date.getFullYear() + "/" ; 
+		lastfulstday += date.getMonth() < 10  ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
+		lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ;
+		lastfulstday += "/01" ;
+	}
+	
+	//당월 첫날/마지막날 조회
+	thisfulstlday = date.getFullYear() + "/" ;
+	thisfulstlday += date.getMonth()+1 < 10  ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ;
+	thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+"";
+	thisfulstlday += "/01" ;
+	
+	thisYearStart = date.getFullYear() + "/01/01" ;
+	thisYearEnd = date.getFullYear() + "/12/31" ;
+	
+});
+
+// 기간 요일 지정
+function setCalVal(val,targetObj){
+	$('input[name='+targetObj+']').val(val) ;
+}
+
+// 요금사용내역 리스트
+function payUserListAjax(pageNo){
+	document.listForm.pageIndex.value = pageNo;
+	var sendData= $(document.listForm).serializeArray();
+	$("#payUserListLoad").load("/web/member/pay/PayUserSWListAjax.do", sendData ,function(response, status, xhr){
+	});
+}
+
+function payUserTab(obj, pageType){
+	
+	var $tab = $(obj).closest("li");
+	$tab.addClass("active");
+	$tab.find("button").attr("title", "선택됨");
+	$tab.siblings("li.tab").removeClass("active");
+	$tab.siblings("li.tab").find("button").removeAttr("title");
+	
+	$("#pageType").val(pageType);
+	payUserListAjax(1);
+}
+
+/* 윈도우팝업 열기 */
+function infoPop(pageUrl){
+	document.infoPopForm.pageType.value = pageUrl;
+	document.infoPopForm.action = "/web/pop/infoPop.do";
+	document.infoPopForm.method = "post"; 
+	window.open("about:blank", 'infoPop', 'width=790, height=250, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	document.infoPopForm.target = "infoPop";
+	document.infoPopForm.submit();
+}
+
+//상세보기 버튼 실행
+function fnRevDetailPop(msgGroupId, fileCnt){
+	
+	document.resPopForm.msgGroupId.value = msgGroupId;
+	var sendData =  $(document.resPopForm).serializeArray();
+	
+	$("#resvMsgDetailPopLoad").load("/web/member/pay/selectPayUserMsgDetailDataAjax.do", sendData ,function(response, status, xhr){
+	});
+	
+}
+
+//상세보기 버튼 실행
+function fnRevDetailPop02(msgGroupId){
+	document.resPopForm.msgGroupId.value = msgGroupId;
+	var sendData =  $(document.resPopForm).serializeArray();
+	
+		// 전송건별
+	$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
+		// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
+		popupTab($('#atBtn'),'1');
+		$('#kakaoClick').trigger('click');
+	});		
+	
+}
+
+//상세보기 버튼 실행
+function fnRevDetailPop03(msgGroupId){
+	document.faxPopForm.faxGroupId.value = msgGroupId;
+	var sendData =  $(document.faxPopForm).serializeArray();
+		// 전송건별
+	$("#faxSentDetailPopLoad").load("/web/mjon/fax/faxSendListAjax.do", sendData ,function(response, status, xhr){
+		// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
+//		popupTab($('#atBtn'),'1');
+		$('#faxClick').trigger('click');
+	});
+}
+</script>
+<!-- 문자내용 팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com adr_layer rev_popup01" tabindex="0" data-tooltip-con="rev_popup01" 
+		data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;">
+		<div class="popup_heading">
+			<p>문자내용</p>
+			<button type="button" class="tooltip-close" data-focus="rev_popup01-close">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in" id="resvMsgDetailPopLoad">
+			<div class="popup_btn_wrap2" style="justify-content: center;">
+			    <button type="button" class="tooltip-close" data-focus="rev_popup01-close" data-focus-next="rev_popup01">닫기</button>                      
+			</div>
+		</div>
+	</div>
+</div>
+<!--// 문자내용 팝업 -->
+
+<!-- 카카오 알림톡 팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com adr_layer kakao_rev_popup rev_popup02" tabindex="0" data-tooltip-con="rev_popup02"
+		data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 440px;">
+		<div class="popup_heading">
+			<p>카카오 내용</p>
+			<button type="button" class="tooltip-close" data-focus="rev_popup02-close">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in">
+			
+			<!-- 팝업 상세내용 노출  -->
+			<div id="msgSentDetailPopLoad" >
+			</div>
+			<div class="popup_btn_wrap2" style="justify-content: center;">
+				<button type="button" class="tooltip-close" data-focus="rev_popup02-close"
+					data-focus-next="rev_popup02">닫기</button>
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //카카오 알림톡 팝업 -->
+
+<!-- 펙스 팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com adr_layer fax_rev_popup rev_popup03" tabindex="0" data-tooltip-con="rev_popup03"
+		data-focus="rev_popup03" data-focus-prev="rev_popup03-close" style="width: 800px;">
+		<div class="popup_heading">
+			<p>펙스 내용</p>
+			<button type="button" class="tooltip-close" data-focus="rev_popup03-close">
+				<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기">
+			</button>
+		</div>
+		<div class="layer_in">
+			
+			<!-- 팝업 상세내용 노출  -->
+			<div id="faxSentDetailPopLoad" >
+			</div>
+		</div>
+	</div>
+</div>
+<!-- //펙스 팝업 -->
+
+<div class="inner">
+	<!-- send top -->
+	<div class="send_top">
+		<!-- tab button -->
+		<ul class="tabType4">
+			<li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li>
+			<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayView.do'">결제하기</button></li>
+			<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
+			<li class="tab active"><button type="button">요금 사용내역</button></li>
+			<!-- 현금영수증 자동발행 주석 -->
+			<!-- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">계산서/현금영수증 발행 등록</button></li> -->
+			<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>
+		</ul>
+		<!-- 결제관리 - 요금 사용내역 -->
+		<div class="serv_content current" id="tab5_4">
+			<div class="heading">
+				<h2>요금 사용내역</h2>
+				<button type="button" class="button info" onclick="infoPop('PayUserList');">사용안내</button>
+			</div>
+			<div class="hisroy_price">
+				<div class="hisroy_price_in">
+					<p>
+						<i></i>충전금액
+					</p>
+					
+					<div class="clearfix">
+						<p>캐시</p>
+						<p>
+							<span>
+								<c:choose>
+									<c:when test="${not empty sumPayMoney}">
+										<fmt:formatNumber value="${sumPayMoney}" pattern="#,###.#"/>
+									</c:when>
+									<c:otherwise>
+										<fmt:formatNumber value="0" pattern="#,###.#"/>
+									</c:otherwise>
+								</c:choose>
+							</span>원
+						</p>
+					</div>
+					<div class="clearfix">
+						<p>포인트</p>
+						<p>
+							<span>
+								<c:choose>
+									<c:when test="${not empty sumPoint}">
+										<fmt:formatNumber value="${sumPoint}" pattern="#,###.#"/>
+									</c:when>
+									<c:otherwise>
+										<fmt:formatNumber value="0" pattern="#,###.#"/>
+									</c:otherwise>
+								</c:choose>
+							</span>원
+						</p>
+					</div>
+				</div>
+				<div class="hisroy_price_in">
+					<p>
+						<i></i>사용금액
+					</p>
+					<c:forEach var="result" items="${usedCashTotList}" varStatus="status">
+						<div class="clearfix">
+							<p>
+								<c:if test="${result.divFlag eq 'CASH' }">
+									캐시
+								</c:if>
+								<c:if test="${result.divFlag eq 'POINT' }">
+									포인트
+								</c:if>
+							</p>
+							<p>
+								<span>
+									<fmt:formatNumber value="${result.totalPrice}" pattern="#,###.#"/>
+								</span>원
+							</p>
+						</div>
+					</c:forEach>
+				</div>
+				<div class="hisroy_price_in">
+					<p>
+						<i></i>잔액
+					</p>
+					<div class="clearfix">
+						<p>캐시</p>
+						<p>
+							<span>
+								<fmt:formatNumber value="${mberManageVO.userMoney}" pattern="" />
+							</span>원
+						</p>
+					</div>
+					<div class="clearfix">
+						<p>포인트</p>
+						<p>
+							<span>
+								<fmt:formatNumber value="${mberManageVO.userPoint}" pattern="" />
+							</span>원
+						</p>
+					</div>
+				</div>
+			</div>
+			<div class="history_details">
+				<p class="tType1_title"><img src="/publish/images/content/history_details_title.png" alt=""> 발송내역</p>
+				<div class="details_wrap">
+					<table>
+						<colgroup>
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+							<col style="width: calc(100% / 5);">
+						</colgroup>
+						<thead>
+							<tr>
+								<th>구분</th>
+								<th>문자</th>
+								<th>알림톡</th>
+								<th>팩스</th>
+								<th>계</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr>
+								<td>발송건(매)수</td>
+								<c:set var="sandSum" value="0"/>
+								<c:forEach var="sendToInfo" items="${sendTotList}" varStatus="status">
+								<td>
+									<fmt:formatNumber value="${sendToInfo.totCnt}" pattern="" />
+									<c:if test="${sendToInfo.msgType eq 'fax' && sendToInfo.fileCnt ne '0'}">
+										(<c:out value="${sendToInfo.fileCnt }"/>)
+									</c:if>
+								</td>
+								<c:set var="sandSum" value="${sandSum + sendToInfo.totCnt}"/>
+								</c:forEach>
+								<td>
+									<fmt:formatNumber value="${sandSum}" pattern="" />
+								</td>
+							</tr>
+							<tr>
+								<td>예약건수</td>
+								<c:set var="reservSum" value="0"/>
+								<c:forEach var="reservToInfo" items="${reservToList}" varStatus="status">
+								<td>
+									<fmt:formatNumber value="${reservToInfo.totCnt}" pattern="" />
+									<c:if test="${reservToInfo.msgType eq 'fax' && reservToInfo.fileCnt ne '0'}">
+										(<c:out value="${reservToInfo.fileCnt }"/>)
+									</c:if>
+								</td>
+								<c:set var="reservSum" value="${reservSum + reservToInfo.totCnt}"/>
+								</c:forEach>
+								<td>
+									<fmt:formatNumber value="${reservSum}" pattern="" />
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<form id="listForm" name="listForm" method="post">
+				<input type="hidden" id="pageType" name="pageType"  value="<c:out value='${searchVO.pageType}'/>"/>
+				<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>"/>
+				<div class="excel_middle">
+					<div class="select_btnWrap clearfix">
+						<div class="btn_left">
+							<span class="cal_label">기간선택</span>
+							<div class="calendar_wrap">
+								<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="" data-datecontrol="true">
+								<span class="dateEtc">~</span>
+								<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="" data-datecontrol="true">
+							</div>
+							<button type="button" onclick="setCalVal(thisYearStart,'startDate');setCalVal( thisYearEnd,'endDate'); return false;"  class="btnType btnType19">이번년도</button>
+							<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;"  class="btnType btnType19">전월</button>
+							<button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;"  class="btnType btnType19">당월</button>
+							<button type="button" class="btnType6" onclick="payUserListAjax(1); return false;">조회</button>
+							<span class="reqTxt4">
+								<span class="vMiddle">*</span> 조회기간의 사용내역만 보여집니다.
+							</span>
+						</div>
+						<div></div>
+					</div>
+				</div>
+				<div class="list_tab_wrap2 type2">
+					<!-- tab button -->
+					<ul class="list_tab">
+						<li class="tab active"><button type="button" onclick="payUserTab(this,'');">전체</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'sms');">단문</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'lms');">장문</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'mms');">그림</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'cam');">선거</button></li>
+						<li class="tab"><button type="button" onclick="payUserTab(this,'at');">알림톡</button></li>
+<!-- 						<li class="tab"><button type="button" onclick="payUserTab(this,'ft');">친구톡</button></li> -->
+						<li class="tab"><button type="button" onclick="payUserTab(this,'fax');">팩스</button></li>
+					</ul>
+					<!--// tab button -->
+				</div>
+				<div id="payUserListLoad">
+				
+				</div>
+			</form>
+			<!-- 결제관리 - 요금 사용내역 -->
+		</div>
+	</div>
+	<!--// send top -->
+</div>
+<form name="infoPopForm" id="infoPopForm" method="post">
+	<input type="hidden" name="pageType" id="pageType" value=""/> 
+</form>
+<form id="resPopForm" name="resPopForm" method="post">
+	<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
+	<input type="hidden" id="fileCnt" name="fileCnt" value=""/>
+</form>
+<form id="faxPopForm" name="faxPopForm" method="post">
+	<input type="hidden" id="faxGroupId" name="faxGroupId" value=""/>
+</form>
 
src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp
@@ -0,0 +1,432 @@
+<%--
+  Class Name : SendNumberList.jsp
+  Description : 발신번호 리스트 조회 페이지
+  Modification Information
+
+      수정일         수정자                   수정내용
+    -------    --------    ---------------------------
+    2021.03.31    신명섭          최초 생성
+
+    Copyright (C) 2009 by ITN  All right reserved.
+--%>
+<%@ page contentType="text/html; charset=utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+
+<script src="/publish/js/content.js"></script>
+<script>
+$(document).ready(function(){
+	/* 목록 정렬 항목 아이콘 표시 */ 
+	var searchSortCnd = $("[name='searchSortCnd']").val();
+	var searchSortOrd = $("[name='searchSortOrd']").val();
+	if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd  != undefined && searchSortOrd  != undefined) {
+		var $sort_div = $("#sort_"+ searchSortCnd);
+		var sortClass = 'sortBtn' ;
+		if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
+		$sort_div.replaceClass('sortBtn' , sortClass) ;
+		$sort_div.attr("sortOrd", searchSortOrd);
+	};
+	
+	// 정렬 항목 이벤트
+	$(".sort").click(function(e) {
+		listSortOrd(this);
+	});
+	
+	//목록 정렬 항목 클릭
+	function listSortOrd(obj){
+		var sortOrd = $(obj).attr("sortOrd");
+		var sortCnd = $(obj).attr("id");
+		 
+		$("[name='searchSortCnd']").val(sortCnd.substring(5)); // 구분자 제거
+		if (sortOrd == "desc") $("[name='searchSortOrd']").val("asc");
+		else $("[name='searchSortOrd']").val("desc");
+		payUserListAjax('1');  //각 JSP마다 다를때 메소드 정의해 줘야됨
+	};
+	
+	//프린트 워커 마크
+	/* $('.print_btn').click(function(e){
+		if(!confirm("프린트 하시겠습니까?")){
+			return false;
+		}
+		var printPopup ; 
+		printPopup= window.open("/tempPayPrint.html","print_open","width=760,height=750,top=0,left=0,noresizable,toolbar=no,status=no,scrollbars=yes,directory=n");
+	}); */
+	
+	// PDF 다운버튼
+	$('.pdf_btn').click(function(e){
+		if(!confirm("PDF저장 하시겠습니까?")){
+			return false;
+		}
+	});
+	
+	//엑셀 다운버튼
+	$('.excel_btn').click(function(e){
+		if(!confirm("엑셀 다운로드를 하시겠습니까?")){
+			return false;
+		}
+		
+		var frm = document.listForm;
+		frm.method = "post"; 
+		frm.action = "/web/member/pay/PayUserListExcelDownload.do";
+		frm.submit(); 
+	});
+});
+
+
+/* 사용내역서 클릭 시 내역서 새창 팝업 오픈  */
+function fnShowPrintPopup() {
+    //만들려는 팝업의 크기
+    var url = "";
+    var popup_wid = '830';
+    var popup_ht = '800';
+    var popup_left = (window.screen.width/2)-(popup_wid/2);
+    var popup_top =(window.screen.height/2)-(popup_ht/2);
+    
+    if($('input[name=publish]').is(':checked')){
+    	if($('input[name=publish]:checked').val() == 'statement'){
+    		url = "printMsgStatementAjax.do";
+    	}else{
+    		url = "printMsgUsageDetailsAjax.do";
+    	}
+    }else{
+    	alert('거래명세서, 사용내역서중\n발급 받으시려는 항목을 체크 후 눌러주세요.');
+    	return;
+    }
+    
+	//날자 체크
+	if(($('#startDate').val() != '' && $('#endDate').val() == '') || ($('#startDate').val() == '' && $('#endDate').val() != '')){
+		alert("기간설정을 정상적으로 선택해 주세요.");
+		return;
+	}
+	
+	if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
+		var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
+		var iChkEndDe =  Number($('#endDate').val().replaceAll("/", ""));
+		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+			alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
+			return;
+		}
+	}
+  
+	document.listForm.action = url;
+	document.listForm.method = "post"; 
+	window.open("about:blank", 'printPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top + ', fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	document.listForm.target = "printPop";
+	document.listForm.submit();
+}
+
+/* 사용내역서 클릭 시 내역서 새창 팝업 오픈  */
+function fnShowPrintPopup_OLD() { 
+    //만들려는 팝업의 크기
+    var popup_wid = '830';
+    var popup_ht = '800';
+
+    var popup_left = (window.screen.width/2)-(popup_wid/2);
+    var popup_top =(window.screen.height/2)-(popup_ht/2);
+    
+    if($('input[name=publish]').is(':checked')){
+    	if($('input[name=publish]:checked').val() == 'statement'){
+    		window.open('printMsgStatementAjax.do', 'reservMsgPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+    	}else{
+    		window.open('printMsgUsageDetailsAjax.do', 'reservMsgPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+    	}
+    }else{
+    	alert('거래명세서, 사용내역서중\n발급 받으시려는 항목을 체크 후 눌러주세요.');
+    }
+}
+
+function fnPayUserPrintPopup(){
+	
+	//날자 체크
+	if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
+		var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
+		var iChkEndDe =  Number($('#endDate').val().replaceAll("/", ""));
+		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+			alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
+			return;
+		}
+	}
+	
+	//만들려는 팝업의 크기
+	var popup_wid = '840';
+	var popup_ht = '900';
+
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	$("#listForm").attr("target","msgSentPrint");
+	window.open('', 'msgSentPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+	$("#listForm").attr({"action":"/web/member/pay/PrintPayUserListAjax.do", "method":"post"}).submit();
+}
+
+//환불요청 내역 프린트 출력 팝업
+function fnShowPdfPrintPopup(){
+	
+	//날자 체크
+	if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
+		var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
+		var iChkEndDe =  Number($('#endDate').val().replaceAll("/", ""));
+		if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+			alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
+			return;
+		}
+	}
+	
+	//만들려는 팝업의 크기
+	var popup_wid = '840';
+	var popup_ht = '900';
+
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	$("#listForm").attr("target","msgSentPdfPrint");
+	window.open('', 'msgSentPdfPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top +',scrollbars=1');
+	$("#listForm").attr({"action":"/web/member/pay/PayPdfListPopUpAjax.do", "method":"post"}).submit();
+}
+
+//체크박스 전체선택/해제
+/* $(document).on("click", "#chkAll", function(e) {
+    var isChecked = $(this).is(":checked");
+    $("input[name=eachChk]:checkbox").prop("checked", isChecked);
+}); */
+
+</script>
+<input type="button" id="faxClick" data-tooltip="rev_popup03" style="display:none;"/>
+<input type="button" id="kakaoClick" data-tooltip="rev_popup02" style="display:none;"/>
+<div class="pay_cont current" id="listTab2_1">
+	<input type="hidden" id="searchSortCnd" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
+	<input type="hidden" id="searchSortOrd" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
+	<div class="list_info">
+		<p>총 <span>${paginationInfo.totalRecordCount}</span>건</p>
+		<div>
+			<button type="button" class="print_btn" onclick="javascript:fnPayUserPrintPopup();">
+				<i class="print_img"></i>인쇄하기
+			</button>
+			<button type="button" class="pdf_btn" onclick="javascript:fnShowPdfPrintPopup();">
+				<i class="pdf_img"></i>PDF저장
+			</button>
+			<button type="button" class="excel_btn">
+				<i class="downroad"></i>엑셀 다운로드
+			</button>
+		</div>
+	</div>
+	<div class="tb_wrap">
+		<table class="tType4">
+			<colgroup>
+				<%-- <col style="width: 5%;"> --%>
+				<col style="width: *%;">
+				<col style="width: 9%;">
+				<col style="width: 9%;">
+				<col style="width: 9%;">
+				<col style="width: 20%;">
+				<col style="width: 20%;">
+				<%-- <col style="width: 10%;">
+				<col style="width: 10%;">
+				<col style="width: 10%;">
+				<col style="width: 10%;"> --%>
+			</colgroup>
+			<thead>
+				<tr>
+					<%-- <th rowspan="2">
+						<label for="" class="label">전체 선택</label>
+						<input type="checkbox" id="chkAll">
+					</th> --%>
+					<th rowspan="2">
+						발송일시
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_regDate">
+						</div>
+					</th>
+					<th rowspan="2">
+						문자유형
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_orderByCode">
+						</div>
+					</th>
+					<th rowspan="2">내용</th>
+					<th rowspan="2">발송건수<br/> 성공 / 실패</th>
+					<!-- <th colspan="2">충전</th>
+					<th colspan="2">사용</th>
+					<th colspan="2">잔액</th> -->
+					<th>사용</th>
+					<th>반환(실패)</th>
+					<!-- <th colspan="2">잔액</th> -->
+				</tr>
+				<tr>
+					<th>캐시</th>
+					<!-- <th>포인트</th> -->
+					<th>캐시</th>
+					<!-- <th>포인트</th> -->
+					<!-- <th>충전금</th>
+					<th>포인트</th> -->
+				</tr>
+			</thead>
+			<tbody>
+				<c:choose>
+					<c:when test="${not empty payUserSWList}">
+						<c:forEach var="payUserInfo" items="${payUserSWList}" varStatus="status">
+							<tr>
+								<%-- <td>
+									<label for="" class="label">선택</label>
+									<input type="checkbox" name="eachChk">
+								</td> --%>
+								<td>
+									<p><c:out value="${payUserInfo.regDate}"/></p>
+								</td>
+								<td>
+									<c:choose>
+										<c:when test="${payUserInfo.msgTypeTxt eq '6' && payUserInfo.fileCnt eq 0 }">
+											<p>장문</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '6' && payUserInfo.fileCnt ne 0 }">
+											<p>그림</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '8'}">
+											<p>알림톡</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '9'}">
+											<p>친구톡</p>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq 'fax'}">
+											<p>팩스</p>
+										</c:when>
+										<c:otherwise>
+											<p>단문</p>
+										</c:otherwise>
+									</c:choose>
+								</td>
+								<td>
+									<p>
+										<c:choose>
+										<c:when test="${payUserInfo.msgTypeTxt eq '8'}">
+											<button class="btnType btnType20" onClick="javascript:fnRevDetailPop02('${payUserInfo.msgGroupId}'); return false;">상세보기</button>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq '9'}">
+											<button class="btnType btnType20" onClick="javascript:fnRevDetailPop02('${payUserInfo.msgGroupId}'); return false;">상세보기</button>
+										</c:when>
+										<c:when test="${payUserInfo.msgTypeTxt eq 'fax'}">
+											<button class="btnType btnType20" onClick="javascript:fnRevDetailPop03('${payUserInfo.msgGroupId}'); return false;">상세보기</button>
+										</c:when>
+										<c:otherwise>
+											<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${payUserInfo.msgGroupId}','${payUserInfo.fileCnt}'); return false;">상세보기</button>
+										</c:otherwise>
+									</c:choose>
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_002c9a">
+										
+										<c:out value="${payUserInfo.succSendCnt}"/>
+										<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
+											(<c:out value="${payUserInfo.fileCnt}"/>매)
+										</c:if>
+										/ <c:out value="${payUserInfo.failSendCnt}"/>
+										<%-- <c:out value="${payUserInfo.sendCount}"/>
+										<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
+										(<c:out value="${payUserInfo.fileCnt}"/>)
+										</c:if> --%>
+									</p>
+								</td>
+								<td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.succSendPrice}" var="succCash" />
+										<c:out value="${succCash}"/>
+									</p>
+								</td>
+								<%-- <td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
+										<c:out value="${befPoint}"/>																											
+									</p>
+								</td> --%>
+								<td>
+									<p class="fwRg c_002c9a">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.failSendPrice}" var="failPrice" />
+										<c:out value="${failPrice}"/>
+									</p>
+								</td>
+								<!-- <td>
+									<p class="fwRg c_002c9a">
+										0
+									</p>
+								</td> -->
+								<%-- <td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befCash}" var="befCash" />
+										<c:out value="${befCash}"/>
+									</p>
+								</td>
+								<td>
+									<p>
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
+										<c:out value="${befPoint}"/>																											
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_002c9a">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.totPrice}" var="totPrice" />
+										<c:out value="${totPrice}"/>
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_002c9a">
+										0
+									</p>
+								</td> --%>
+								<%-- <td>
+									<p class="fwRg c_222">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.thisPoint}" var="thisPoint" />
+										<c:out value="${thisPoint}"/>
+									</p>
+								</td>
+								<td>
+									<p class="fwRg c_222">
+										<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
+										<c:out value="${befPoint}"/>																		
+									</p>
+								</td> --%>
+							</tr>
+						</c:forEach>
+					</c:when>
+					<c:otherwise>
+						<tr>
+							<td colspan="8">
+								검색 결과가 없습니다.
+							</td>
+						</tr>
+					</c:otherwise>
+				</c:choose>
+			</tbody>
+		</table>
+	</div>
+	<div class="publish_btn clearfix">
+		<div>
+			<input type="radio" name="publish" id="publish1" value="statement">
+			<label for="publish1">거래명세서</label>
+			<input type="radio" name="publish" id="publish2" value="details">
+			<label for="publish2">사용내역서</label>
+		</div>
+		<div>
+			<c:choose>		
+				<c:when test="${not empty payUserSWList}">
+					<button type="button" class="btnType" onclick="fnShowPrintPopup(); return false;">발행하기</button>
+				</c:when>
+				<c:otherwise>
+					<button type="button" class="btnType" onclick="alert('거래명세서, 사용내역서 발행할 요금사용내역이 없습니다.');">발행하기</button>
+				</c:otherwise>
+			</c:choose>		
+		</div>
+	</div>
+	
+	<!-- pagination -->
+	<c:if test="${!empty payUserSWList}">
+		<ul class="pagination">
+			<ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="payUserListAjax" />
+		</ul>
+	</c:if>
+	<!-- pagination -->
+</div><!-- 결제관리 - 요금 사용내역 -->
Add a comment
List