요금 사용내역 신규 테스트 화면 개발

- 요금 사용내역 하단 리스트영역 신규 화면 추가
 - 성공/ 실패 건수에 대한 데이터가 나오도록 변경
 - 항목 정보 변경
This commit is contained in:
rosewiper 2023-12-26 09:16:04 +09:00
parent deef264c7e
commit fbd2a543f7
8 changed files with 1184 additions and 1 deletions

View File

@ -200,6 +200,11 @@ public class MjonMsgVO extends ComDefaultVO{
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 class MjonMsgVO extends ComDefaultVO{
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;
}
}

View File

@ -79,6 +79,8 @@ public interface MjonMsgDataService {
public List<MjonMsgVO> selectPayUserList(MjonMsgVO mjonMsgVO) throws Exception;
public List<MjonMsgVO> selectPayUserSWList(MjonMsgVO mjonMsgVO) throws Exception;
public List<MjonMsgVO> selectPayUserSumList(MjonMsgVO mjonMsgVO) throws Exception;
// 중계사 시스템 발송 문자 내용 입력

View File

@ -151,6 +151,11 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserList",mjonMsgVO);
}
@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);

View File

@ -1774,6 +1774,11 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
return mjonMsgDataDAO.selectPayUserList(mjonMsgVO);
}
@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);

View File

@ -2514,7 +2514,7 @@ public class MjonPayController {
return "/web/pay/PayUserWithKakaoList";
}
/**
* 요금사용내역
* 요금사용내역 하단 리스트 영역
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserListAjax.do"
@ -2557,6 +2557,129 @@ public class MjonPayController {
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

View File

@ -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

View File

@ -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>

View File

@ -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><!-- 결제관리 - 요금 사용내역 -->