등급제 환불관련 로직 추가

This commit is contained in:
itn 2023-07-19 16:20:59 +09:00
parent 3eefe93afb
commit aadc3c1420
7 changed files with 417 additions and 78 deletions

View File

@ -46,12 +46,21 @@ public interface MberGrdService {
// 회원별 등급 일괄변경 // 회원별 등급 일괄변경
public int updateMberGrdAll(MberGrdVO mberGrdVO) throws Exception; public int updateMberGrdAll(MberGrdVO mberGrdVO) throws Exception;
// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
public int updateMberGrdAfterRefund(MberGrdVO mberGrdVO) throws Exception;
// 문자할인, B선라인 대상자 초기화 // 문자할인, B선라인 대상자 초기화
public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception; public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception;
// 회원 등급 초기화 // 전체회원 등급 초기화
public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception; public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception;
// 회원 등급제 종료
public int updateMberGrdEndByUser(MberGrdVO mberGrdVO) throws Exception;
// 회원 등급제 복원
public int updateMberGrdRestoreByUser(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 적용 // 회원별 등급 적용
public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception; public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception;

View File

@ -73,16 +73,31 @@ public class MberGrdDAO extends EgovAbstractDAO {
return update("mberGrdDAO.updateMberGrdAll", mberGrdVO); return update("mberGrdDAO.updateMberGrdAll", mberGrdVO);
} }
// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
public int updateMberGrdAfterRefund(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateMberGrdAfterRefund", mberGrdVO);
}
// 문자할인, B선라인 대상자 초기화 // 문자할인, B선라인 대상자 초기화
public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception { public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateMberGrdEndBySale", mberGrdVO); return update("mberGrdDAO.updateMberGrdEndBySale", mberGrdVO);
} }
// 회원 등급 초기화 // 전체회원 등급 초기화
public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception { public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateMberGrdEndAll", mberGrdVO); return update("mberGrdDAO.updateMberGrdEndAll", mberGrdVO);
} }
// 회원 등급제 종료
public int updateMberGrdEndByUser(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateMberGrdEndByUser", mberGrdVO);
}
// 회원 등급제 복원
public int updateMberGrdRestoreByUser(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateMberGrdRestoreByUser", mberGrdVO);
}
// 회원별 등급 진행여부 // 회원별 등급 진행여부
public int selectMberGrdPrgCnt(String mberId) throws Exception{ public int selectMberGrdPrgCnt(String mberId) throws Exception{
return (int) select("mberGrdDAO.selectMberGrdPrgCnt", mberId); return (int) select("mberGrdDAO.selectMberGrdPrgCnt", mberId);

View File

@ -167,16 +167,34 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
return updateCnt1 + updateCnt2; return updateCnt1 + updateCnt2;
} }
// 회원별 등급 초기화 // 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
@Override
public int updateMberGrdAfterRefund(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.updateMberGrdAfterRefund(mberGrdVO);
}
// 문자할인, B선라인 대상자 초기화
@Override
public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.updateMberGrdEndBySale(mberGrdVO);
}
// 전체회원 등급 초기화
@Override @Override
public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception { public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.updateMberGrdEndAll(mberGrdVO); return mberGrdDAO.updateMberGrdEndAll(mberGrdVO);
} }
// 문자할인, B선라인 대상자 초기화 // 회원 등급제 종료
@Override @Override
public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception { public int updateMberGrdEndByUser(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.updateMberGrdEndBySale(mberGrdVO); return mberGrdDAO.updateMberGrdEndByUser(mberGrdVO);
}
// 회원 등급제 복원
@Override
public int updateMberGrdRestoreByUser(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.updateMberGrdRestoreByUser(mberGrdVO);
} }
// 회원별 등급 적용 // 회원별 등급 적용
@ -217,7 +235,7 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
MberGrdVO mberGrdVO4 = new MberGrdVO(); MberGrdVO mberGrdVO4 = new MberGrdVO();
mberGrdVO4 = selectMberGrdSettingDetail(mberGrdVO); mberGrdVO4 = selectMberGrdSettingDetail(mberGrdVO);
if (null != mberGrdVO4) { if (null != mberGrdVO4) {
mberGrdVO.setAmt("0"); mberGrdVO.setAmt(mberGrdVO.getAmt());
mberGrdVO.setTotAmt(mberGrdVO.getTotAmt()); mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
mberGrdVO.setShortPrice(mberGrdVO4.getShortPrice()); mberGrdVO.setShortPrice(mberGrdVO4.getShortPrice());
mberGrdVO.setLongPrice(mberGrdVO4.getLongPrice()); mberGrdVO.setLongPrice(mberGrdVO4.getLongPrice());
@ -233,8 +251,8 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
MberGrdVO mberGrdVO5 = new MberGrdVO(); MberGrdVO mberGrdVO5 = new MberGrdVO();
mberGrdVO5 = selectMberGrdDetail(mberGrdVO); mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
if (null != mberGrdVO5) { if (null != mberGrdVO5) {
// 업데이트 => 현재 등급보다 낮거나 같으면 업데이트 처리 // 업데이트 => 기존등급보다 상위등급 대상만 업데이트
if (mberGrdVO5.getGrdSetNo() >= mberGrdVO.getGrdSetNo()) { if (mberGrdVO5.getGrdSetNo() > mberGrdVO.getGrdSetNo()) {
updateMberGrd(mberGrdVO); updateMberGrd(mberGrdVO);
// 회원별 등급 히스토리 인서트 // 회원별 등급 히스토리 인서트

View File

@ -147,8 +147,7 @@ public class MberGrdMngController {
try{ try{
// 회원별 등급 적용 // 회원별 등급 적용
mberGrdVO.setAmt("0"); // 결제금액 mberGrdVO.setAmt("0");
mberGrdVO.setMberId("nopay"); // 결제자
mberGrdService.mberGrdSaveByUser(mberGrdVO); mberGrdService.mberGrdSaveByUser(mberGrdVO);
} }
@ -235,6 +234,108 @@ public class MberGrdMngController {
modelAndView.addObject("msg", msg); modelAndView.addObject("msg", msg);
return modelAndView; return modelAndView;
} }
// 회원 등급제 종료
@RequestMapping(value = "/sym/grd/mberGrdEndByUserAjax.do")
public ModelAndView mberGrdEndByUserAjax(
@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{
// 회원 등급제 종료
mberGrdService.updateMberGrdEndByUser(mberGrdVO);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
// 회원 등급제 복원
@RequestMapping(value = "/sym/grd/mberGrdRestoreByUserAjax.do")
public ModelAndView mberGrdRestoreByUserAjax(
@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{
// 회원 등급제 복원
mberGrdService.updateMberGrdRestoreByUser(mberGrdVO);
// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
mberGrdService.updateMberGrdAfterRefund(mberGrdVO);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
// 회원 등급제 갱신
@RequestMapping(value = "/sym/grd/mberGrdUpdateByUserAjax.do")
public ModelAndView mberGrdUpdateByUserAjax(
@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{
// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
mberGrdService.updateMberGrdAfterRefund(mberGrdVO);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
return modelAndView;
}
} }

View File

@ -108,14 +108,14 @@
, DATE_FORMAT(A.GRD_END_DATE, '%Y-%m-%d') AS grdEndDate , DATE_FORMAT(A.GRD_END_DATE, '%Y-%m-%d') AS grdEndDate
, A.GRD_STATUS AS grdStatus , A.GRD_STATUS AS grdStatus
, CASE , CASE
WHEN E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d') WHEN A.GRD_STATUS = 'E'
THEN '종료'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN (A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE) AND (E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d'))
THEN '대기' THEN '대기'
WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
THEN '진행' THEN '진행'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN A.GRD_STATUS = 'E'
THEN '종료'
ELSE '종료' ELSE '종료'
END AS grdStatusNm END AS grdStatusNm
, A.REG_ID AS regId , A.REG_ID AS regId
@ -143,40 +143,40 @@
<isNotEmpty property="searchGrdStatus"> <isNotEmpty property="searchGrdStatus">
<isEqual property="searchGrdStatus" compareValue="Y"> <isEqual property="searchGrdStatus" compareValue="Y">
AND (CASE AND (CASE
WHEN E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d') WHEN A.GRD_STATUS = 'E'
THEN '종료'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN (A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE) AND (E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d'))
THEN '대기' THEN '대기'
WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
THEN '진행' THEN '진행'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN A.GRD_STATUS = 'E'
THEN '종료'
ELSE '종료' ELSE '종료'
END) = '진행' END) = '진행'
</isEqual> </isEqual>
<isEqual property="searchGrdStatus" compareValue="N"> <isEqual property="searchGrdStatus" compareValue="N">
AND (CASE AND (CASE
WHEN E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d') WHEN A.GRD_STATUS = 'E'
THEN '종료'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN (A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE) AND (E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d'))
THEN '대기' THEN '대기'
WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
THEN '진행' THEN '진행'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN A.GRD_STATUS = 'E'
THEN '종료'
ELSE '종료' ELSE '종료'
END) = '대기' END) = '대기'
</isEqual> </isEqual>
<isEqual property="searchGrdStatus" compareValue="E"> <isEqual property="searchGrdStatus" compareValue="E">
AND (CASE AND (CASE
WHEN E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d') WHEN A.GRD_STATUS = 'E'
THEN '종료'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN (A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE) AND (E.EVENT_STATUS = 'Y' AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(E.EVENT_START_DATE, '%Y-%m-%d') AND DATE_FORMAT(E.EVENT_END_DATE, '%Y-%m-%d'))
THEN '대기' THEN '대기'
WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE WHEN A.GRD_STATUS = 'Y' AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
THEN '진행' THEN '진행'
WHEN A.GRD_STATUS = 'N'
THEN '대기'
WHEN A.GRD_STATUS = 'E'
THEN '종료'
ELSE '종료' ELSE '종료'
END) = '종료' END) = '종료'
</isEqual> </isEqual>
@ -295,26 +295,33 @@
<![CDATA[ <![CDATA[
SELECT SELECT
M.USER_ID AS mberId M.USER_ID AS mberId
, M.AMT_SUM_ORIGIN AS amtSumOrigin
, M.REFUND_SUM AS refundSum
, M.AMT_SUM AS totAmt , M.AMT_SUM AS totAmt
, M.GRD_SET_NO AS grdSetNo , M.GRD_SET_NO AS grdSetNo
FROM ( FROM (
SELECT SELECT
S.USER_ID S.USER_ID
, SUM(S.AMT) AS AMT_SUM_ORIGIN , 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 , IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) AS REFUND_SUM
, (SUM(S.AMT) - IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0)) AS AMT_SUM
, ( , (
SELECT MIN(S1.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)) SELECT MIN(S1.GRD_SET_NO) FROM MJ_MBER_GRD_SETTING S1 WHERE S1.STD_AMT <= (SUM(S.AMT) - IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0))
) GRD_SET_NO ) GRD_SET_NO
FROM MJ_PG S FROM MJ_PG S
LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS
ON S.USER_ID = SS.MBER_ID ON S.USER_ID = SS.MBER_ID
LEFT OUTER JOIN MJ_REFUND R
ON S.USER_ID = R.MBER_ID
AND R.REFUND_STATUS = '3'
AND R.REFUND_DIVISION = '1'
WHERE S.PG_STATUS = '1' WHERE S.PG_STATUS = '1'
AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00') AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00')
GROUP BY S.USER_ID GROUP BY S.USER_ID
) M ) M
WHERE M.GRD_SET_NO IS NOT NULL WHERE M.GRD_SET_NO IS NOT NULL
AND M.AMT_SUM > 0 AND M.AMT_SUM > 0
AND M.USER_ID = #mberId# AND M.USER_ID = #mberId#
]]> ]]>
</select> </select>
@ -380,7 +387,11 @@
MBER_ID = #mberId# MBER_ID = #mberId#
</update> </update>
<!-- 회원별 등급 일괄변경 --> <!--
회원별 등급 일괄변경
=> 기존등급보다 상위등급 대상만 업데이트 됨.
=> 기존등급과 같거나 좋지않은 경우 제외됨.
-->
<update id="mberGrdDAO.updateMberGrdAll" parameterClass="mberGrdVO"> <update id="mberGrdDAO.updateMberGrdAll" parameterClass="mberGrdVO">
<![CDATA[ <![CDATA[
UPDATE MJ_MBER_GRD_INFO A UPDATE MJ_MBER_GRD_INFO A
@ -388,19 +399,25 @@
SELECT SELECT
M.USER_ID M.USER_ID
, M.AMT_SUM_ORIGIN , M.AMT_SUM_ORIGIN
, M.REFUND_SUM
, M.AMT_SUM , M.AMT_SUM
, M.GRD_SET_NO , M.GRD_SET_NO
FROM ( FROM (
SELECT SELECT
S.USER_ID S.USER_ID
, SUM(S.AMT) AS AMT_SUM_ORIGIN , 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 , IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) AS REFUND_SUM
, (SUM(S.AMT) - IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0)) AS AMT_SUM
, ( , (
SELECT MIN(S1.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)) SELECT MIN(S1.GRD_SET_NO) FROM MJ_MBER_GRD_SETTING S1 WHERE S1.STD_AMT <= (SUM(S.AMT) - IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0))
) GRD_SET_NO ) GRD_SET_NO
FROM MJ_PG S FROM MJ_PG S
LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS
ON S.USER_ID = SS.MBER_ID ON S.USER_ID = SS.MBER_ID
LEFT OUTER JOIN MJ_REFUND R
ON S.USER_ID = R.MBER_ID
AND R.REFUND_STATUS = '3'
AND R.REFUND_DIVISION = '1'
WHERE S.PG_STATUS = '1' WHERE S.PG_STATUS = '1'
AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00') AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00')
GROUP BY S.USER_ID GROUP BY S.USER_ID
@ -428,6 +445,64 @@
]]> ]]>
</update> </update>
<!--
회원 등급 변경(환불후)
=> 기존등급 상관없이 업데이트 됨.
-->
<update id="mberGrdDAO.updateMberGrdAfterRefund" parameterClass="mberGrdVO">
<![CDATA[
UPDATE MJ_MBER_GRD_INFO A
INNER JOIN (
SELECT
M.USER_ID
, M.AMT_SUM_ORIGIN
, M.REFUND_SUM
, M.AMT_SUM
, M.GRD_SET_NO
FROM (
SELECT
S.USER_ID
, SUM(S.AMT) AS AMT_SUM_ORIGIN
, IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) AS REFUND_SUM
, (SUM(S.AMT) - IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0)) AS AMT_SUM
, (
SELECT MIN(S1.GRD_SET_NO) FROM MJ_MBER_GRD_SETTING S1 WHERE S1.STD_AMT <= (SUM(S.AMT) - IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) - 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
LEFT OUTER JOIN MJ_REFUND R
ON S.USER_ID = R.MBER_ID
AND R.REFUND_STATUS = '3'
AND R.REFUND_DIVISION = '1'
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.AMT_SUM > 0
) B
ON A.MBER_ID = B.USER_ID
INNER JOIN MJ_MBER_GRD_SETTING C
ON C.GRD_SET_NO = B.GRD_SET_NO
SET
A.GRD_SET_NO = C.GRD_SET_NO
, A.SHORT_PRICE = C.SHORT_PRICE
, A.LONG_PRICE = C.LONG_PRICE
, A.PICTURE_PRICE = C.PICTURE_PRICE
, A.PICTURE2_PRICE = C.PICTURE2_PRICE
, A.PICTURE3_PRICE = C.PICTURE3_PRICE
, A.TOT_AMT = B.AMT_SUM
, A.GRD_DATE = CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00')
, A.EDIT_ID = #editId#
, A.EDIT_DATE = NOW()
WHERE B.GRD_SET_NO IS NOT NULL
AND A.MBER_ID = #mberId#
AND A.GRD_STATUS = 'Y'
AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
]]>
</update>
<!-- 문자할인, B선라인 대상자 초기화 --> <!-- 문자할인, B선라인 대상자 초기화 -->
<update id="mberGrdDAO.updateMberGrdEndBySale" parameterClass="mberGrdVO"> <update id="mberGrdDAO.updateMberGrdEndBySale" parameterClass="mberGrdVO">
<![CDATA[ <![CDATA[
@ -467,7 +542,7 @@
]]> ]]>
</update> </update>
<!-- 회원 등급 초기화 --> <!-- 전체회원 등급 초기화 -->
<update id="mberGrdDAO.updateMberGrdEndAll" parameterClass="mberGrdVO"> <update id="mberGrdDAO.updateMberGrdEndAll" parameterClass="mberGrdVO">
UPDATE MJ_MBER_GRD_INFO SET UPDATE MJ_MBER_GRD_INFO SET
GRD_END_DATE = NOW() GRD_END_DATE = NOW()
@ -478,6 +553,31 @@
GRD_STATUS != 'E' GRD_STATUS != 'E'
</update> </update>
<!-- 회원 등급제 종료 -->
<update id="mberGrdDAO.updateMberGrdEndByUser" parameterClass="mberGrdVO">
UPDATE MJ_MBER_GRD_INFO SET
GRD_END_DATE = NOW()
, GRD_STATUS = 'E'
, EDIT_ID = #editId#
, EDIT_DATE = NOW()
WHERE
GRD_STATUS != 'E'
AND MBER_ID = #mberId#
</update>
<!-- 회원 등급제 복원 -->
<update id="mberGrdDAO.updateMberGrdRestoreByUser" parameterClass="mberGrdVO">
UPDATE MJ_MBER_GRD_INFO SET
GRD_END_DATE = NOW()
, GRD_STATUS = 'Y'
, GRD_END_DATE = '9999-12-31 23:59:59'
, EDIT_ID = #editId#
, EDIT_DATE = NOW()
WHERE
GRD_STATUS != 'Y'
AND MBER_ID = #mberId#
</update>
<!-- 회원별 등급 진행여부 --> <!-- 회원별 등급 진행여부 -->
<select id="mberGrdDAO.selectMberGrdPrgCnt" parameterClass="String" resultClass="Integer"> <select id="mberGrdDAO.selectMberGrdPrgCnt" parameterClass="String" resultClass="Integer">
SELECT SELECT

View File

@ -24,6 +24,7 @@
<meta http-equiv="Content-Language" content="ko"> <meta http-equiv="Content-Language" content="ko">
<title>등급제 내역</title> <title>등급제 내역</title>
<script type="text/javaScript" language="javascript" defer="defer"> <script type="text/javaScript" language="javascript" defer="defer">
$( document ).ready(function(){ $( document ).ready(function(){
// change 함수 // change 함수
$("#searchGrdStatus").change(function(e){ $("#searchGrdStatus").change(function(e){
@ -37,8 +38,8 @@ function fn_search(){
} }
function linkPage(pageNo){ function linkPage(pageNo){
var listForm = document.listForm ; var listForm = document.listForm;
listForm.pageIndex.value = pageNo ; listForm.pageIndex.value = pageNo;
listForm.action = "<c:url value='/sym/grd/selectMberGrdList.do'/>"; listForm.action = "<c:url value='/sym/grd/selectMberGrdList.do'/>";
listForm.submit(); listForm.submit();
} }
@ -80,6 +81,109 @@ function getMberGrdChk(mberId) {
} }
}); });
} }
// 회원 등급제 종료
function setMberGrdEndByUser(mberId) {
if(confirm("등급제 종료하시겠습니까?")) {
$.ajax({
type: "POST",
url: "/sym/grd/mberGrdEndByUserAjax.do",
data: {"mberId" : mberId},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
linkPage(document.listForm.pageIndex.value);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
// 회원 등급제 복원
function setMberGrdRestoreByUser(mberId, grdDate) {
if(confirm("등급제 복원하시겠습니까?\n등급 다시 계산합니다.")) {
$.ajax({
type: "POST",
url: "/sym/grd/mberGrdRestoreByUserAjax.do",
data: {"mberId" : mberId, "grdDate" : grdDate},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
linkPage(document.listForm.pageIndex.value);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
//회원 등급제 갱신
function setMberGrdUpdateByUser(mberId, grdDate) {
if(confirm("등급제 갱신하시겠습니까?\n등급 다시 계산합니다.")) {
$.ajax({
type: "POST",
url: "/sym/grd/mberGrdUpdateByUserAjax.do",
data: {"mberId" : mberId, "grdDate" : grdDate},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
linkPage(document.listForm.pageIndex.value);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
// 등급제 추가
function setMberGrdSave() {
var mberId = $("input[name='mberId']").val();
if (mberId == "") {
alert("아이디를 입력해주세요.");
return false;
}
if(confirm("해당 아이디 등급제 추가하시겠습니까?")) {
$.ajax({
type: "POST",
url: "/sym/grd/mberGrdSaveAjax.do",
data: {"mberId" : mberId},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
linkPage(document.listForm.pageIndex.value);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
</script> </script>
</head> </head>
<body> <body>
@ -117,7 +221,7 @@ function getMberGrdChk(mberId) {
<div class="listTop"> <div class="listTop">
<p class="tType5"> <p class="tType5">
총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건 총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건
&nbsp;&nbsp;&nbsp; * 누적결제액은 문자할인이벤트 대상 결제금액을 제외한 합계금액입니다. &nbsp;&nbsp;&nbsp; * 누적결제액은 할인이벤트 결제금액, 환불금액을 제외한 합계금액입니다.
</p> </p>
<div class="rightWrap"> <div class="rightWrap">
<!-- <input type="button" class="printBtn" > --> <!-- <input type="button" class="printBtn" > -->
@ -131,16 +235,18 @@ function getMberGrdChk(mberId) {
<div class="tableWrap"> <div class="tableWrap">
<table class="tbType1"> <table class="tbType1">
<colgroup> <colgroup>
<col style="width: 8%"> <col style="width: 5%">
<col style="width: auto;"> <col style="width: auto;">
<col style="width: 10%;"> <col style="width: 8%;">
<col style="width: 10%;"> <col style="width: 8%;">
<col style="width: 10%"> <col style="width: 10%">
<col style="width: 9%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 12%"> <col style="width: 12%">
<col style="width: 12%"> <col style="width: 12%">
<col style="width: 12%"> <col style="width: 5%">
<col style="width: 12%"> <col style="width: 8%">
<col style="width: 6%">
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
@ -153,7 +259,9 @@ function getMberGrdChk(mberId) {
<th>시작일<input type="button" class="sortBtn sort" id="sort_grdStartDate"></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_grdEndDate"></th>
<th>등록일 <input type="button" class="sortBtn sort" id="sort_regDate"></th> <th>등록일 <input type="button" class="sortBtn sort" id="sort_regDate"></th>
<th>수정일 <input type="button" class="sortBtn sort" id="sort_editDate"></th>
<th>상태<input type="button" class="sortBtn sort" id="sort_grdStatusNm"></th> <th>상태<input type="button" class="sortBtn sort" id="sort_grdStatusNm"></th>
<th>관리</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -179,7 +287,7 @@ function getMberGrdChk(mberId) {
<c:out value="${result.grdSetNm}"/>(<c:out value="${result.grdSetNo}"/>) <c:out value="${result.grdSetNm}"/>(<c:out value="${result.grdSetNo}"/>)
</td> </td>
<td nowrap="nowrap" class="right"> <td nowrap="nowrap" class="right">
<fmt:formatNumber value="${result.totAmt}" pattern="#,###" /> <fmt:formatNumber value="${result.totAmt}" pattern="#,###" />&nbsp;&nbsp;
</td> </td>
<td nowrap="nowrap"> <td nowrap="nowrap">
<c:out value="${result.grdDate}"/> <c:out value="${result.grdDate}"/>
@ -193,9 +301,23 @@ function getMberGrdChk(mberId) {
<td nowrap="nowrap"> <td nowrap="nowrap">
<c:out value="${result.regDate}"/> <c:out value="${result.regDate}"/>
</td> </td>
<td nowrap="nowrap">
<c:out value="${result.editDate}"/>
</td>
<td nowrap="nowrap"> <td nowrap="nowrap">
<c:out value="${result.grdStatusNm}"/> <c:out value="${result.grdStatusNm}"/>
</td> </td>
<td nowrap="nowrap">
<c:choose>
<c:when test="${result.grdStatusNm eq '종료'}">
<input type="button" class="btnType2" onclick="setMberGrdRestoreByUser('${result.mberId}','${result.grdDate}')" value="복원">
</c:when>
<c:otherwise>
<input type="button" class="btnType2" onclick="setMberGrdUpdateByUser('${result.mberId}','${result.grdDate}')" value="갱신">
<input type="button" class="btnType1" onclick="setMberGrdEndByUser('${result.mberId}')" value="종료">
</c:otherwise>
</c:choose>
</td>
</tr> </tr>
</c:forEach> </c:forEach>
</tbody> </tbody>
@ -205,7 +327,8 @@ function getMberGrdChk(mberId) {
</table> </table>
</div> </div>
<div class="btnWrap"> <div class="btnWrap">
<input type="text" name="mberId" value="" style="height: 50px; width: 120px;" />
<input type="button" class="btnType2" value="등급제 적용테스트" onclick="javascript:setMberGrdSave(); return false;">
</div> </div>
<c:if test="${!empty resultList}"> <c:if test="${!empty resultList}">

View File

@ -84,32 +84,6 @@
} }
} }
// 등급제 적용 테스트
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> </script>
</head> </head>
<body> <body>
@ -198,7 +172,6 @@
<br /> <br />
<div class="btnWrap"> <div class="btnWrap">
<input type="button" class="btnType2" value="모든 고객 등급 초기화" onclick="javascript:setMberGrdEndMassEdit(); return false;"> <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:location.reload(); return false;">
<input type="button" class="btnType1" value="수정" onclick="javascript:setMberGrdSettingMassEdit(); return false;"> <input type="button" class="btnType1" value="수정" onclick="javascript:setMberGrdSettingMassEdit(); return false;">
</div> </div>