등급제 신청기능 추가

This commit is contained in:
itn 2023-07-05 16:02:39 +09:00
parent 5530aa37c5
commit 1b6f5e22af
7 changed files with 294 additions and 15 deletions

View File

@ -14,12 +14,21 @@ public interface MberGrdService {
// 등급제 설정 목록
List<MberGrdVO> selectMberGrdSettingList(MberGrdVO mberGrdVO) throws Exception;
// 회원별 설정 상세
public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception;
// 등급제 설정 일괄변경
public int updateGrdSettingList(MberGrdVO mberGrdVO) throws Exception;
// 등급제 등급 목록
List<MberGrdVO> selectMberGrdList(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 상세
public MberGrdVO selectMberGrdDetail(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 누적결제액 상세
public MberGrdVO selectMberGrdAmtDetail(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 등록
public void insertMberGrd(MberGrdVO mberGrdVO) throws Exception;
@ -32,9 +41,15 @@ public interface MberGrdService {
// 회원별 등급 초기화
public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 적용
public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 진행여부
int selectMberGrdPrgCnt(String userId) throws Exception;
// 회원별 등급 저장여부
int selectMberGrdSaveCnt(String userId) throws Exception;
// 회원별 등급 히스토리 등록
public void insertMberGrdHist(MberGrdVO mberGrdVO) throws Exception ;

View File

@ -30,7 +30,7 @@ public class MberGrdVO {
private String mberId;
private String amt;
private String grdStartDate;
private String grd_endDate;
private String grdEndDate;
private String grdStatus;
private int mberGrdHistNo;
@ -184,11 +184,11 @@ public class MberGrdVO {
public void setGrdStartDate(String grdStartDate) {
this.grdStartDate = grdStartDate;
}
public String getGrd_endDate() {
return grd_endDate;
public String getGrdEndDate() {
return grdEndDate;
}
public void setGrd_endDate(String grd_endDate) {
this.grd_endDate = grd_endDate;
public void setGrdEndDate(String grd_endDate) {
this.grdEndDate = grd_endDate;
}
public String getGrdStatus() {
return grdStatus;

View File

@ -20,22 +20,39 @@ public class MberGrdDAO extends EgovAbstractDAO {
return (MberGrdVO) select("mberGrdDAO.selectMberSettingDetail", mberGrdVO);
}
// 등급제 설정 목록
@SuppressWarnings("unchecked")
public List<MberGrdVO> selectMberGrdSettingList(MberGrdVO mberGrdVO) throws Exception{
return (List<MberGrdVO>)list("mberGrdDAO.selectMberGrdSettingList", mberGrdVO);
}
// 회원별 설정 상세
public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception{
return (MberGrdVO) select("mberGrdDAO.selectMberGrdSettingDetail", mberGrdVO);
}
// 등급제 설정 일괄변경
public int updateGrdSetting(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateGrdSetting", mberGrdVO);
}
// 등급제 등급 목록
@SuppressWarnings("unchecked")
public List<MberGrdVO> selectMberGrdList(MberGrdVO mberGrdVO) throws Exception{
return (List<MberGrdVO>)list("mberGrdDAO.selectMberGrdList", mberGrdVO);
}
// 회원별 등급 상세
public MberGrdVO selectMberGrdDetail(MberGrdVO mberGrdVO) throws Exception{
return (MberGrdVO) select("mberGrdDAO.selectMberGrdDetail", mberGrdVO);
}
// 회원별 등급 누적결제액 상세
public MberGrdVO selectMberGrdAmtDetail(MberGrdVO mberGrdVO) throws Exception{
return (MberGrdVO) select("mberGrdDAO.selectMberGrdAmtDetail", mberGrdVO);
}
// 회원별 등급 등록
public void insertMberGrd(MberGrdVO mberGrdVO) throws Exception{
insert("mberGrdDAO.insertMberGrd", mberGrdVO);
@ -61,6 +78,11 @@ public class MberGrdDAO extends EgovAbstractDAO {
return (int) select("mberGrdDAO.selectMberGrdPrgCnt", userId);
}
// 회원별 등급 저장여부
public int selectMberGrdSaveCnt(String userId) throws Exception{
return (int) select("mberGrdDAO.selectMberGrdSaveCnt", userId);
}
// 회원별 등급 히스토리 등록
public void insertMberGrdHist(MberGrdVO mberGrdVO) throws Exception{

View File

@ -29,11 +29,18 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
}
// 등급제 설정 목록
@Override
public List<MberGrdVO> selectMberGrdSettingList(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdSettingList(mberGrdVO);
}
// 회원별 설정 상세
@Override
public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdSettingDetail(mberGrdVO);
}
// 등급제 설정 일괄변경
@Override
public int updateGrdSettingList(MberGrdVO mberGrdVO) throws Exception {
@ -56,6 +63,12 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
return updateCnt;
}
// 등급제 등급 목록
@Override
public List<MberGrdVO> selectMberGrdList(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdList(mberGrdVO);
}
// 회원별 등급 상세
@Override
@ -63,6 +76,12 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
return mberGrdDAO.selectMberGrdDetail(mberGrdVO);
}
// 회원별 등급 누적결제액 상세
@Override
public MberGrdVO selectMberGrdAmtDetail(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdAmtDetail(mberGrdVO);
}
// 회원별 등급 등록
@Override
public void insertMberGrd(MberGrdVO mberGrdVO) throws Exception {
@ -78,7 +97,16 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
// 회원별 등급 초기화
@Override
public int updateMberGrdAll(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.updateMberGrdAll(mberGrdVO);
int updateCnt = 0;
// Step 1. 등급제 시행 ON 일경우
MberGrdVO mberGrdVO1 = new MberGrdVO();
mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate()) {
updateCnt = mberGrdDAO.updateMberGrdAll(mberGrdVO);
}
return updateCnt;
}
// 회원별 등급 일괄변경
@ -87,12 +115,77 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
return mberGrdDAO.updateMberGrdEndAll(mberGrdVO);
}
// 회원별 등급 적용
@Override
public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception {
mberGrdVO.setRegId(mberGrdVO.getMberId());
mberGrdVO.setEditId(mberGrdVO.getMberId());
// Step 1. 등급제 시행 ON 일경우
MberGrdVO mberGrdVO1 = new MberGrdVO();
mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate()) {
mberGrdVO.setGrdDate(mberGrdVO1.getGrdDate());
// Step 2. 누적결제금액(이벤트금액 제외) 추출 등급 조회
MberGrdVO mberGrdVO2 = new MberGrdVO();
mberGrdVO2 = selectMberGrdAmtDetail(mberGrdVO);
if (null != mberGrdVO2) {
mberGrdVO.setTotAmt(mberGrdVO2.getTotAmt());
mberGrdVO.setGrdSetNo(mberGrdVO2.getGrdSetNo());
// Step 3. 등급제 설정값 조회
MberGrdVO mberGrdVO3 = new MberGrdVO();
mberGrdVO3 = selectMberGrdSettingDetail(mberGrdVO);
if (null != mberGrdVO3) {
mberGrdVO.setAmt("0");
mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
mberGrdVO.setShortPrice(mberGrdVO3.getShortPrice());
mberGrdVO.setLongPrice(mberGrdVO3.getLongPrice());
mberGrdVO.setPicturePrice(mberGrdVO3.getPicturePrice());
mberGrdVO.setPicture2Price(mberGrdVO3.getPicture2Price());
mberGrdVO.setPicture3Price(mberGrdVO3.getPicture3Price());
mberGrdVO.setGrdStartDate(mberGrdVO.getGrdDate() + " 00:00:00");
mberGrdVO.setGrdEndDate("9999:12:31 23:59:59");
mberGrdVO.setGrdStatus("Y");
// Step 4. 인서트 Or 업데이트
MberGrdVO mberGrdVO4 = new MberGrdVO();
mberGrdVO4 = selectMberGrdDetail(mberGrdVO);
if (null != mberGrdVO4) {
// 업데이트 => 현재 등급보다 낮거나 같으면 업데이트 처리
if (mberGrdVO4.getGrdSetNo() >= mberGrdVO.getGrdSetNo()) {
updateMberGrd(mberGrdVO);
// 회원별 등급 히스토리 인서트
insertMberGrdHist(mberGrdVO);
}
}
else {
// 인서트
insertMberGrd(mberGrdVO);
// 회원별 등급 히스토리 인서트
insertMberGrdHist(mberGrdVO);
}
}
}
}
}
// 회원별 등급 진행여부
@Override
public int selectMberGrdPrgCnt(String userId) throws Exception{
return mberGrdDAO.selectMberGrdPrgCnt(userId);
}
// 회원별 등급 저장여부
@Override
public int selectMberGrdSaveCnt(String userId) throws Exception{
return mberGrdDAO.selectMberGrdSaveCnt(userId);
}
// 회원별 등급 히스토리 등록
@Override

View File

@ -127,4 +127,39 @@ public class MberGrdController {
return modelAndView;
}
// 회원별 등급 적용 테스트
@RequestMapping(value = "/sym/grd/mberGrdSaveAjax.do")
public ModelAndView mberGrdSaveAjax(
@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
// 로그인VO에서 사용자 정보 가져오기
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String frstRegisterId = loginVO == null ? "" : loginVO.getId();
mberGrdVO.setEditId(frstRegisterId); // 최초등록자ID
try{
// 회원별 등급 적용
mberGrdVO.setMberId("nopay");
mberGrdService.mberGrdSaveByUser(mberGrdVO);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
}

View File

@ -17,7 +17,7 @@
<select id="mberGrdDAO.selectMberSettingDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
SELECT
GRD_NOTI AS grdNoti
, GRD_DATE AS grdDate
, DATE_FORMAT(GRD_DATE, '%Y-%m-%d' ) AS grdDate
FROM
MJ_MBER_SETTING
LIMIT 1
@ -44,6 +44,26 @@
ORDER BY A.GRD_SET_NO ASC
</select>
<!-- 등급제 설정 상세 -->
<select id="mberGrdDAO.selectMberGrdSettingDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
SELECT
A.GRD_SET_NO AS grdSetNo
, A.GRD_SET_NM AS grdSetNm
, FLOOR(A.STD_AMT) AS stdAmt
, FORMAT(FLOOR(A.STD_AMT),0) AS stdAmtComma
, 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.REG_ID AS regId
, A.REG_DATE AS regDate
, A.EDIT_ID AS editId
, A.EDIT_DATE AS editDate
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
@ -59,6 +79,39 @@
WHERE A.GRD_SET_NO = #grdSetNo#
</update>
<!-- 회원별 등급 목록 -->
<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
FROM
mj_mber_grd_info
WHERE 1=1
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<!-- 회원별 등급 상세 -->
<select id="mberGrdDAO.selectMberGrdDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
SELECT
@ -72,7 +125,7 @@
, AMT AS amt
, TOT_AMT AS totAmt
, GRD_START_DATE AS grdStartDate
, GRD_END_DATE AS grd_endDate
, GRD_END_DATE AS grdEndDate
, GRD_STATUS AS grdStatus
, REG_ID AS regId
, REG_DATE AS regDate
@ -84,6 +137,34 @@
MBER_ID = #mberId#
</select>
<!-- 회원별 등급 누적결제액 상세 -->
<select id="mberGrdDAO.selectMberGrdAmtDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
<![CDATA[
SELECT
M.USER_ID AS mberId
, M.AMT_SUM AS totAmt
, M.GRD_SET_NO AS grdSetNo
FROM (
SELECT
S.USER_ID
, SUM(S.AMT) AS AMT_SUM_ORIGIN
, (SUM(S.AMT) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0)) AS AMT_SUM
, (
SELECT MIN(GRD_SET_NO) FROM MJ_MBER_GRD_SETTING S1 WHERE S1.STD_AMT <= (SUM(S.AMT) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0))
) GRD_SET_NO
FROM MJ_PG S
LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS
ON S.USER_ID = SS.MBER_ID
AND SS.EVENT_START_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00')
WHERE S.PG_STATUS = '1'
AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00')
GROUP BY S.USER_ID
) M
WHERE M.GRD_SET_NO IS NOT NULL
AND M.USER_ID = #mberId#
]]>
</select>
<!-- 회원별 등급 등록 -->
<insert id="mberGrdDAO.insertMberGrd" parameterClass="mberGrdVO">
INSERT INTO mj_mber_grd_info
@ -117,7 +198,7 @@
, #amt#
, #totAmt#
, #grdStartDate#
, #grd_endDate#
, #grdEndDate#
, #grdStatus#
, #regId#
, NOW()
@ -136,12 +217,9 @@
, PICTURE_PRICE = #picturePrice#
, PICTURE2_PRICE = #picture2Price#
, PICTURE3_PRICE = #picture3Price#
, AMT = #amt#
, AMT = #amt#
, TOT_AMT = #totAmt#
, GRD_START_DATE = #grdStartDate#
, GRD_END_DATE = #grd_endDate#
, GRD_STATUS = #grdStatus#
, EDIT_ID = #editId#
, EDIT_ID = #editId#
, EDIT_DATE = NOW()
WHERE
MBER_ID = #mberId#
@ -216,7 +294,16 @@
AND NOW() BETWEEN GRD_START_DATE AND GRD_END_DATE
LIMIT 1
</select>
<!-- 회원별 등급 저장여부 -->
<select id="mberGrdDAO.selectMberGrdSaveCnt" parameterClass="String" resultClass="Integer">
SELECT
COUNT(0)
FROM MJ_MBER_GRD_INFO A
WHERE A.MBER_ID = #mberId#
LIMIT 1
</select>
<!-- 회원별 등급 히스토리 등록 -->
<insert id="mberGrdDAO.insertMberGrdHist" parameterClass="mberGrdVO">

View File

@ -84,6 +84,32 @@
}
}
// 등급제 적용 테스트
function setMberGrdSave() {
if(confirm("등급제 적용하시겠습니까?")) {
$.ajax({
type: "POST",
url: "/sym/grd/mberGrdSaveAjax.do",
data: {},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
alert("저장 완료했습니다.");
location.reload();
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
</script>
</head>
<body>
@ -172,6 +198,7 @@
<br />
<div class="btnWrap">
<input type="button" class="btnType2" value="모든 고객 등급 초기화" onclick="javascript:setMberGrdEndMassEdit(); return false;">
<input type="button" class="btnType2" value="등급제 적용테스트" onclick="javascript:setMberGrdSave(); return false;">
<input type="button" class="btnType1" value="취소" onclick="javascript:location.reload(); return false;">
<input type="button" class="btnType1" value="수정" onclick="javascript:setMberGrdSettingMassEdit(); return false;">
</div>