등급제 내역 추가

This commit is contained in:
itn 2023-07-06 12:46:55 +09:00
parent 0c6647ea53
commit b347d9d019
7 changed files with 383 additions and 28 deletions

View File

@ -53,4 +53,11 @@ public interface MberGrdService {
// 회원별 등급 히스토리 등록
public void insertMberGrdHist(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 히스토리 목록 => 등급제 시행일이후 목록(사용자화면용)
List<MberGrdVO> selectMberGrdHistByGrdDateList(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 히스토리 목록
List<MberGrdVO> selectMberGrdHistList(MberGrdVO mberGrdVO) throws Exception;
}

View File

@ -2,7 +2,9 @@ package itn.let.sym.grd.service;
import java.util.List;
public class MberGrdVO {
import itn.let.uss.umt.service.UserDefaultVO;
public class MberGrdVO extends UserDefaultVO {
private int grdSetNo; // 등급설정번호
private String grdSetNm; // 등급설정명
@ -28,10 +30,12 @@ public class MberGrdVO {
private List<String> picture3Prices;
private String mberId;
private String mberNm;
private String amt;
private String grdStartDate;
private String grdEndDate;
private String grdStatus;
private String grdStatusNm;
private int mberGrdHistNo;
private String grdNoti; // 회원등급제 시행 여부
@ -172,6 +176,12 @@ public class MberGrdVO {
public void setMberId(String mberId) {
this.mberId = mberId;
}
public String getMberNm() {
return mberNm;
}
public void setMberNm(String mberNm) {
this.mberNm = mberNm;
}
public String getAmt() {
return amt;
}
@ -196,6 +206,12 @@ public class MberGrdVO {
public void setGrdStatus(String grdStatus) {
this.grdStatus = grdStatus;
}
public String getGrdStatusNm() {
return grdStatusNm;
}
public void setGrdStatusNm(String grdStatusNm) {
this.grdStatusNm = grdStatusNm;
}
public int getMberGrdHistNo() {
return mberGrdHistNo;
}

View File

@ -88,4 +88,17 @@ public class MberGrdDAO extends EgovAbstractDAO {
public void insertMberGrdHist(MberGrdVO mberGrdVO) throws Exception{
insert("mberGrdDAO.insertMberGrdHist", mberGrdVO);
}
// 회원별 등급 히스토리 목록 => 등급제 시행일이후 목록(사용자화면용)
@SuppressWarnings("unchecked")
public List<MberGrdVO> selectMberGrdHistByGrdDateList(MberGrdVO mberGrdVO) throws Exception{
return (List<MberGrdVO>)list("mberGrdDAO.selectMberGrdHistByGrdDateList", mberGrdVO);
}
// 회원별 등급 히스토리 목록
@SuppressWarnings("unchecked")
public List<MberGrdVO> selectMberGrdHistList(MberGrdVO mberGrdVO) throws Exception{
return (List<MberGrdVO>)list("mberGrdDAO.selectMberGrdHistList", mberGrdVO);
}
}

View File

@ -200,4 +200,17 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
public void insertMberGrdHist(MberGrdVO mberGrdVO) throws Exception {
mberGrdDAO.insertMberGrdHist(mberGrdVO);
}
// 회원별 등급 히스토리 목록 => 등급제 시행일이후 목록(사용자화면용)
@Override
public List<MberGrdVO> selectMberGrdHistByGrdDateList(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdHistByGrdDateList(mberGrdVO);
}
// 회원별 등급 히스토리 목록
@Override
public List<MberGrdVO> selectMberGrdHistList(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdHistList(mberGrdVO);
}
}

View File

@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.LoginVO;
import itn.let.sym.grd.service.MberGrdService;
import itn.let.sym.grd.service.MberGrdVO;
@ -161,5 +162,38 @@ public class MberGrdController {
return modelAndView;
}
/**
* 회원별 등급제 목록 화면
*
* @param mberGrdVO
* @param model
* @return
* @throws Exception
*/
@RequestMapping("/sym/grd/selectMberGrdList.do")
public String selectMetaTagList(@ModelAttribute("searchVO") MberGrdVO mberGrdVO, ModelMap model) throws Exception{
/** paging */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mberGrdVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mberGrdVO.getPageUnit());
paginationInfo.setPageSize(mberGrdVO.getPageSize());
mberGrdVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mberGrdVO.setLastIndex(paginationInfo.getLastRecordIndex());
mberGrdVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(mberGrdVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mberGrdVO.setSearchSortCnd("regDate");
mberGrdVO.setSearchSortOrd("desc");
}
List<MberGrdVO> resultList = mberGrdService.selectMberGrdList(mberGrdVO);
model.addAttribute("resultList", resultList);
paginationInfo.setTotalRecordCount( resultList.size()> 0 ? resultList.get(0).getTotCnt() : 0);
model.addAttribute("paginationInfo", paginationInfo);
return "/sym/grd/mberGrdList";
}
}

View File

@ -40,7 +40,7 @@
, A.REG_DATE AS regDate
, A.EDIT_ID AS editId
, A.EDIT_DATE AS editDate
FROM mj_mber_grd_setting A
FROM MJ_MBER_GRD_SETTING A
ORDER BY A.GRD_SET_NO ASC
</select>
@ -60,13 +60,13 @@
, A.REG_DATE AS regDate
, A.EDIT_ID AS editId
, A.EDIT_DATE AS editDate
FROM mj_mber_grd_setting A
FROM MJ_MBER_GRD_SETTING A
WHERE A.GRD_SET_NO = #grdSetNo#
</select>
<!-- 등급제 설정 일괄변경 일괄변경 -->
<update id="mberGrdDAO.updateGrdSetting" parameterClass="mberGrdVO">
UPDATE mj_mber_grd_setting A
UPDATE MJ_MBER_GRD_SETTING A
SET
A.STD_AMT = #stdAmt#
, A.SHORT_PRICE = #shortPrice#
@ -82,26 +82,51 @@
<!-- 회원별 등급 목록 -->
<select id="mberGrdDAO.selectMberGrdList" parameterClass="mberGrdVO" resultClass="mberGrdVO">
SELECT
COUNT(MBER_ID) OVER() AS totCnt
, MBER_ID AS mberId
, GRD_SET_NO AS grdSetNo
, SHORT_PRICE AS shortPrice
, LONG_PRICE AS longPrice
, PICTURE_PRICE AS picturePrice
, PICTURE2_PRICE AS picture2Price
, PICTURE3_PRICE AS picture3Price
, AMT AS amt
, TOT_AMT AS totAmt
, GRD_START_DATE AS grdStartDate
, GRD_END_DATE AS grdEndDate
, GRD_STATUS AS grdStatus
, REG_ID AS regId
, REG_DATE AS regDate
, EDIT_ID AS editId
, EDIT_DATE AS editDate
COUNT(A.MBER_ID) OVER() AS totCnt
, A.MBER_ID AS mberId
, C.MBER_NM AS mberNm
, A.GRD_SET_NO AS grdSetNo
, B.GRD_SET_NM AS grdSetNm
, A.SHORT_PRICE AS shortPrice
, A.LONG_PRICE AS longPrice
, A.PICTURE_PRICE AS picturePrice
, A.PICTURE2_PRICE AS picture2Price
, A.PICTURE3_PRICE AS picture3Price
, A.AMT AS amt
, A.TOT_AMT AS totAmt
, DATE_FORMAT(A.GRD_DATE, '%Y-%m-%d') AS grdDate
, DATE_FORMAT(A.GRD_START_DATE, '%Y-%m-%d %H:%i') AS grdStartDate
, DATE_FORMAT(A.GRD_END_DATE, '%Y-%m-%d %H:%i') AS grdEndDate
, A.GRD_STATUS AS grdStatus
, CASE
WHEN A.GRD_STATUS = 'Y'
THEN '진행중'
WHEN A.GRD_STATUS = 'N'
THEN '미진행'
WHEN A.GRD_STATUS = 'E'
THEN '종료'
ELSE ''
END AS grdStatusNm
, A.REG_ID AS regId
, DATE_FORMAT(A.REG_DATE, '%Y-%m-%d %H:%i') AS regDate
, A.EDIT_ID AS editId
, DATE_FORMAT(A.EDIT_DATE, '%Y-%m-%d %H:%i') AS editDate
FROM
mj_mber_grd_info
MJ_MBER_GRD_INFO A
INNER JOIN MJ_MBER_GRD_SETTING B
ON A.GRD_SET_NO = B.GRD_SET_NO
INNER JOIN LETTNGNRLMBER C
ON A.MBER_ID = C.MBER_ID
WHERE 1=1
AND C.MBER_STTUS = 'Y'
<isNotEmpty property="searchKeyword">
<isEqual prepend="AND" property="searchCondition" compareValue="">
A.MBER_ID = #searchKeyword#
</isEqual>
<isEqual prepend="AND" property="searchCondition" compareValue="1">
A.MBER_ID = #searchKeyword#
</isEqual>
</isNotEmpty>
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
@ -132,7 +157,7 @@
, EDIT_ID AS editId
, EDIT_DATE AS editDate
FROM
mj_mber_grd_info
MJ_MBER_GRD_INFO
WHERE
MBER_ID = #mberId#
</select>
@ -167,7 +192,7 @@
<!-- 회원별 등급 등록 -->
<insert id="mberGrdDAO.insertMberGrd" parameterClass="mberGrdVO">
INSERT INTO mj_mber_grd_info
INSERT INTO MJ_MBER_GRD_INFO
(
MBER_ID
, GRD_SET_NO
@ -211,7 +236,7 @@
<!-- 회원별 등급 수정 -->
<update id="mberGrdDAO.updateMberGrd" parameterClass="mberGrdVO">
UPDATE mj_mber_grd_info SET
UPDATE MJ_MBER_GRD_INFO SET
MBER_ID = #mberId#
, GRD_SET_NO = #grdSetNo#
, SHORT_PRICE = #shortPrice#
@ -277,7 +302,7 @@
<!-- 회원별 등급 초기화 -->
<update id="mberGrdDAO.updateMberGrdEndAll" parameterClass="mberGrdVO">
UPDATE mj_mber_grd_info SET
UPDATE MJ_MBER_GRD_INFO SET
GRD_END_DATE = NOW()
, GRD_STATUS = 'E'
, EDIT_ID = #editId#
@ -309,7 +334,7 @@
<!-- 회원별 등급 히스토리 등록 -->
<insert id="mberGrdDAO.insertMberGrdHist" parameterClass="mberGrdVO">
INSERT INTO mj_mber_grd_hist
INSERT INTO MJ_MBER_GRD_HIST
(
MBER_ID
, GRD_SET_NO
@ -345,4 +370,64 @@
)
</insert>
<!-- 회원별 등급 히스토리 목록 => 등급제 시행일이후 목록(사용자화면용) -->
<select id="mberGrdDAO.selectMberGrdHistByGrdDateList" parameterClass="mberGrdVO" resultClass="mberGrdVO">
SELECT
COUNT(MBER_ID) OVER() AS totCnt
, A.MBER_ID AS mberId
, A.GRD_SET_NO AS grdSetNo
, A.SHORT_PRICE AS shortPrice
, A.LONG_PRICE AS longPrice
, A.PICTURE_PRICE AS picturePrice
, A.PICTURE2_PRICE AS picture2Price
, A.PICTURE3_PRICE AS picture3Price
, A.AMT AS amt
, A.TOT_AMT AS totAmt
, A.GRD_DATE AS grdDate
, A.REG_ID AS regId
, A.REG_DATE AS regDate
, A.EDIT_ID AS editId
, A.EDIT_DATE AS editDate
FROM MJ_MBER_GRD_HIST A
WHERE 1=1
AND A.MBER_ID = #mberId#
AND A.GRD_DATE >= (SELECT S.GRD_DATE FROM MJ_MBER_GRD_INFO S WHERE S.MBER_ID = #mberId#)
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<!-- 회원별 등급 히스토리 목록 -->
<select id="mberGrdDAO.selectMberGrdHistList" parameterClass="mberGrdVO" resultClass="mberGrdVO">
SELECT
COUNT(MBER_ID) OVER() AS totCnt
, A.MBER_ID AS mberId
, A.GRD_SET_NO AS grdSetNo
, A.SHORT_PRICE AS shortPrice
, A.LONG_PRICE AS longPrice
, A.PICTURE_PRICE AS picturePrice
, A.PICTURE2_PRICE AS picture2Price
, A.PICTURE3_PRICE AS picture3Price
, A.AMT AS amt
, A.TOT_AMT AS totAmt
, A.GRD_DATE AS grdDate
, A.REG_ID AS regId
, A.REG_DATE AS regDate
, A.EDIT_ID AS editId
, A.EDIT_DATE AS editDate
FROM MJ_MBER_GRD_HIST A
WHERE 1=1
AND A.MBER_ID = #mberId#
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
</sqlMap>

View File

@ -0,0 +1,187 @@
<%--
Class Name : webTitleList.jsp
Description : webTitleList 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2009.02.01 lee.m.j 최초 생성
2011.08.31 JJY 경량환경 버전 생성
author : 공통서비스 개발팀 lee.m.j
since : 2009.02.01
--%>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="itn.com.cmm.LoginVO"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="ko">
<title>등급제 내역</title>
<script type="text/javaScript" language="javascript" defer="defer">
function fn_search(){
linkPage(1);
}
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.action = "<c:url value='/sym/grd/selectMberGrdList.do'/>";
listForm.submit();
}
function fnSelectMber(mberId) {
document.modiForm2.mberId.value = mberId;
window.open("about:blank", 'popupSelectMber', 'width=900, height=1800, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
document.modiForm2.action = "<c:url value='/uss/umt/user/EgovGnrlselectedUserView.do'/>";
document.modiForm2.target = "popupSelectMber";
document.modiForm2.submit();
}
</script>
</head>
<body>
<noscript>자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
<form name="listForm" action="<c:url value='/sym/grd/selectMberGrdList.do'/>" method="post">
<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
<input type="hidden" name="metaTagNo" >
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">등급제 내역</h2>
<p class="tType6 c_999999"></p>
</div>
<div class="pageCont">
<div class="listSerch">
<select id="searchCondition" name="searchCondition">
<option value="" <c:if test="${empty searchVO.searchCondition}">selected="selected"</c:if>>전체</option>
<option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>아이디</option>
</select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="25" title="검색" maxlength="100" />
<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
</div>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div class="rightWrap">
<!-- <input type="button" class="printBtn" > -->
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
</select>
</div>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: 8%">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 10%;">
<col style="width: 10%">
<col style="width: 12%">
<col style="width: 12%">
<col style="width: 12%">
<col style="width: 12%">
<col style="width: 6%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>아이디<input type="button" class="sortBtn sort" id="sort_mberId"></th>
<th>이름<input type="button" class="sortBtn sort" id="sort_mberNm"></th>
<th>등급<input type="button" class="sortBtn sort" id="sort_grdSetNo"></th>
<th>누적결제액<input type="button" class="sortBtn sort" id="sort_totAmt"></th>
<th>시행일<input type="button" class="sortBtn sort" id="sort_grdDate"></th>
<th>시작일<input type="button" class="sortBtn sort" id="sort_grdStartDate"></th>
<th>종료일 <input type="button" class="sortBtn sort" id="sort_grdEndDate"></th>
<th>등록일 <input type="button" class="sortBtn sort" id="sort_regDate"></th>
<th>상태<input type="button" class="sortBtn sort" id="sort_grdStatusNm"></th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>
<c:if test="${searchVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${searchVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td nowrap="nowrap">
<a href="#" onclick="javascript:fnSelectMber('<c:out value="${result.mberId}"/>'); return false;">
<c:out value="${result.mberId}"/>
</a>
</td>
<td nowrap="nowrap">
<c:out value="${result.mberNm}"/>
</td>
<td nowrap="nowrap">
<c:out value="${result.grdSetNm}"/>(<c:out value="${result.grdSetNo}"/>)
</td>
<td nowrap="nowrap" class="right">
<fmt:formatNumber value="${result.totAmt}" pattern="#,###" />
</td>
<td nowrap="nowrap">
<c:out value="${result.grdDate}"/>
</td>
<td nowrap="nowrap">
<c:out value="${result.grdStartDate}"/>
</td>
<td nowrap="nowrap">
<c:out value="${result.grdEndDate}"/>
</td>
<td nowrap="nowrap">
<c:out value="${result.regDate}"/>
</td>
<td nowrap="nowrap">
<c:out value="${result.grdStatusNm}"/>
</td>
</tr>
</c:forEach>
</tbody>
<c:if test="${empty resultList}">
<tr><td colspan="7"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</table>
</div>
<div class="btnWrap">
</div>
<c:if test="${!empty resultList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
</div>
</div>
</form>
<form name="modiForm2" id="modiForm2" method="post">
<input name="mberId" type="hidden" />
</form>
<form name="searchForm" method="get" action="<c:url value='/sym/grd/selectMberGrdList.do'/>">
<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
<input name="searchCondition" type="hidden" />
<input name="searchKeyword" type="hidden" />
</form>
</body>
</html>