등급제 대상 여부 업데이트 로직 수정

This commit is contained in:
itn 2023-08-22 17:24:42 +09:00
parent 121cf811c5
commit 04694652d4
6 changed files with 271 additions and 23 deletions

View File

@ -28,6 +28,9 @@ public interface MberGrdService {
// 회원별 설정 상세
public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception;
// 회원별 설정 상세(White)
public MberGrdVO selectMberGrdSettingDetailWhite(MberGrdVO mberGrdVO) throws Exception;
// 등급제 설정 일괄변경
public int updateGrdSettingList(MberGrdVO mberGrdVO) throws Exception;
@ -55,6 +58,9 @@ public interface MberGrdService {
// 회원별 등급 등록 All => 기존대상자 제외
public void insertMberGrdAllByExist(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 등록 By MberId
public void insertMberGrdByMberId(MberGrdVO mberGrdVO) throws Exception;
// 회원별 등급 히스토리 등록 All
public void insertMberGrdHistAll(MberGrdVO mberGrdVO) throws Exception;

View File

@ -37,6 +37,11 @@ public class MberGrdDAO extends EgovAbstractDAO {
return (MberGrdVO) select("mberGrdDAO.selectMberGrdSettingDetail", mberGrdVO);
}
// 회원별 설정 상세(White)
public MberGrdVO selectMberGrdSettingDetailWhite(MberGrdVO mberGrdVO) throws Exception{
return (MberGrdVO) select("mberGrdDAO.selectMberGrdSettingDetailWhite", mberGrdVO);
}
// 등급제 설정 일괄변경
public int updateGrdSetting(MberGrdVO mberGrdVO) throws Exception {
return update("mberGrdDAO.updateGrdSetting", mberGrdVO);
@ -88,6 +93,11 @@ public class MberGrdDAO extends EgovAbstractDAO {
insert("mberGrdDAO.insertMberGrdAllByExist", mberGrdVO);
}
// 회원별 등급 등록 By MberId
public void insertMberGrdByMberId(MberGrdVO mberGrdVO) throws Exception{
insert("mberGrdDAO.insertMberGrdByMberId", mberGrdVO);
}
// 회원별 등급 히스토리 등록 All
public void insertMberGrdHistAll(MberGrdVO mberGrdVO) throws Exception{
insert("mberGrdDAO.insertMberGrdHistAll", mberGrdVO);

View File

@ -75,6 +75,12 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
return mberGrdDAO.selectMberGrdSettingDetail(mberGrdVO);
}
// 회원별 설정 상세(White)
@Override
public MberGrdVO selectMberGrdSettingDetailWhite(MberGrdVO mberGrdVO) throws Exception {
return mberGrdDAO.selectMberGrdSettingDetailWhite(mberGrdVO);
}
// 등급제 설정 일괄변경
@Override
public int updateGrdSettingList(MberGrdVO mberGrdVO) throws Exception {
@ -156,6 +162,12 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
mberGrdDAO.insertMberGrdAllByExist(mberGrdVO);
}
// 회원별 등급 등록 By MberId
@Override
public void insertMberGrdByMberId(MberGrdVO mberGrdVO) throws Exception {
mberGrdDAO.insertMberGrdByMberId(mberGrdVO);
}
// 회원별 등급 히스토리 등록 All
@Override
public void insertMberGrdHistAll(MberGrdVO mberGrdVO) throws Exception {
@ -368,6 +380,7 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
MberGrdVO mberGrdVO5 = new MberGrdVO();
mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
if (mberGrdVO5 != null) {
// 업데이트
updateMberGrdOk(mberGrdVO);
// 회원별 등급 히스토리 인서트
@ -381,8 +394,53 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
insertMberGrdHist(mberGrdVO);
}
}
}
}
}
else {
System.out.println("Step 3. ELSE => 화이트등급 인서트");
// Step 4. 등급제 설정값 조회
System.out.println("Step 4. 등급제 설정값 조회");
MberGrdVO mberGrdVO4 = new MberGrdVO();
mberGrdVO4 = selectMberGrdSettingDetailWhite(mberGrdVO);
if (mberGrdVO4 != null) {
mberGrdVO.setAmt("0");
mberGrdVO.setTotAmt(0);
mberGrdVO.setGrdSetNo(mberGrdVO4.getGrdSetNo());
mberGrdVO.setShortPrice(mberGrdVO4.getShortPrice());
mberGrdVO.setLongPrice(mberGrdVO4.getLongPrice());
mberGrdVO.setPicturePrice(mberGrdVO4.getPicturePrice());
mberGrdVO.setPicture2Price(mberGrdVO4.getPicture2Price());
mberGrdVO.setPicture3Price(mberGrdVO4.getPicture3Price());
mberGrdVO.setGrdDate(mberGrdVO.getGrdDate());
mberGrdVO.setGrdStartDate(nowDate + " 00:00:00");
mberGrdVO.setGrdEndDate("9999:12:31 23:59:59");
mberGrdVO.setGrdStatus("Y");
// Step 5. 인서트 Or 업데이트
System.out.println("Step 5. 인서트 Or 업데이트");
MberGrdVO mberGrdVO5 = new MberGrdVO();
mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
if (mberGrdVO5 != null) {
// 업데이트
updateMberGrdOk(mberGrdVO);
// 회원별 등급 히스토리 인서트
insertMberGrdHist(mberGrdVO);
}
else {
// 인서트
insertMberGrd(mberGrdVO);
// 회원별 등급 히스토리 인서트
insertMberGrdHist(mberGrdVO);
}
}
}
}
else {
System.out.println("Step 2. ELSE 등급제 종료");
updateMberGrdEndByUser(mberGrdVO);
}
}
}
System.out.println("END 회원별 등급 적용");
@ -456,6 +514,7 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
MberGrdVO mberGrdVO5 = new MberGrdVO();
mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
if (mberGrdVO5 != null) {
// 업데이트
updateMberGrdOk(mberGrdVO);
}
else {
@ -463,8 +522,53 @@ public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberG
insertMberGrd(mberGrdVO);
}
}
}
}
}
else {
System.out.println("Step 3. ELSE => 화이트등급 인서트");
// Step 4. 등급제 설정값 조회
System.out.println("Step 4. 등급제 설정값 조회");
MberGrdVO mberGrdVO4 = new MberGrdVO();
mberGrdVO4 = selectMberGrdSettingDetailWhite(mberGrdVO);
if (mberGrdVO4 != null) {
mberGrdVO.setAmt("0");
mberGrdVO.setTotAmt(0);
mberGrdVO.setGrdSetNo(mberGrdVO4.getGrdSetNo());
mberGrdVO.setShortPrice(mberGrdVO4.getShortPrice());
mberGrdVO.setLongPrice(mberGrdVO4.getLongPrice());
mberGrdVO.setPicturePrice(mberGrdVO4.getPicturePrice());
mberGrdVO.setPicture2Price(mberGrdVO4.getPicture2Price());
mberGrdVO.setPicture3Price(mberGrdVO4.getPicture3Price());
mberGrdVO.setGrdDate(mberGrdVO.getGrdDate());
mberGrdVO.setGrdStartDate(nowDate + " 00:00:00");
mberGrdVO.setGrdEndDate("9999:12:31 23:59:59");
mberGrdVO.setGrdStatus("Y");
// Step 5. 인서트 Or 업데이트
System.out.println("Step 5. 인서트 Or 업데이트");
MberGrdVO mberGrdVO5 = new MberGrdVO();
mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
if (mberGrdVO5 != null) {
// 업데이트
updateMberGrdOk(mberGrdVO);
// 회원별 등급 히스토리 인서트
insertMberGrdHist(mberGrdVO);
}
else {
// 인서트
insertMberGrd(mberGrdVO);
// 회원별 등급 히스토리 인서트
insertMberGrdHist(mberGrdVO);
}
}
}
}
else {
System.out.println("Step 2. ELSE 등급제 종료");
updateMberGrdEndByUser(mberGrdVO);
}
}
}
System.out.println("END 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)");

View File

@ -466,16 +466,37 @@ public class MberGrdMngController {
// 로그인VO에서 사용자 정보 가져오기
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String frstRegisterId = loginVO == null ? "" : loginVO.getId();
mberGrdVO.setEditId(frstRegisterId); // 최초등록자ID
mberGrdVO.setRegId(frstRegisterId);
mberGrdVO.setEditId(frstRegisterId);
try{
// 회원 등급제 복원
mberGrdService.updateMberGrdRestoreByUser(mberGrdVO);
// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
mberGrdService.updateMberGrdAfterRefund(mberGrdVO);
// Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)
System.out.println("Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)");
MberGrdVO mberGrdVO1 = new MberGrdVO();
mberGrdVO1 = mberGrdService.selectMberSettingDetail(mberGrdVO);
if (mberGrdVO1.getGrdNoti().equals("Y")) {
mberGrdVO.setGrdNewDate(mberGrdVO1.getGrdNewDate());
// Step 2. 문자할인, B선라인, 스팸회원 대상자 제외
System.out.println("Step 2. 문자할인, B선라인, 스팸회원 대상자 제외");
int isMberGrd = mberGrdService.selectMberGrdCnt(mberGrdVO.getMberId()); // 등급제 대상여부(1: 대상, 0: 미대상)
if(isMberGrd == 1) {
// 회원 등급제 복원
mberGrdService.updateMberGrdRestoreByUser(mberGrdVO);
// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
mberGrdService.updateMberGrdAfterRefund(mberGrdVO);
}
else {
isSuccess = false;
msg = "문자할인, B선라인, 스팸회원 대상자는 등급제 대상자가 아닙니다.";
}
}
else {
isSuccess = false;
msg = "등급제 시행 OFF 일경우 복원이 불가합니다.";
}
}
catch(Exception e) {
isSuccess = false;

View File

@ -102,6 +102,28 @@
LIMIT 1
</select>
<!-- 등급제 설정 상세 -->
<select id="mberGrdDAO.selectMberGrdSettingDetailWhite" 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
ORDER BY A.GRD_SET_NO DESC
LIMIT 1
</select>
<!-- 등급제 설정 일괄변경 일괄변경 -->
<update id="mberGrdDAO.updateGrdSetting" parameterClass="mberGrdVO">
UPDATE MJ_MBER_GRD_SETTING A
@ -545,9 +567,9 @@
, NOW()
, '9999:12:31 23:59:59'
, 'Y'
, ''
, #regId#
, NOW()
, ''
, #editId#
, NOW()
FROM (
SELECT
@ -584,6 +606,81 @@
AND M.spamYn = 'N'
</insert>
<!-- 회원별 등급 등록 By MberId -->
<insert id="mberGrdDAO.insertMberGrdByMberId" parameterClass="mberGrdVO">
INSERT INTO MJ_MBER_GRD_INFO
(
MBER_ID
, GRD_SET_NO
, SHORT_PRICE
, LONG_PRICE
, PICTURE_PRICE
, PICTURE2_PRICE
, PICTURE3_PRICE
, AMT
, TOT_AMT
, GRD_DATE
, GRD_START_DATE
, GRD_END_DATE
, GRD_STATUS
, REG_ID
, REG_DATE
, EDIT_ID
, EDIT_DATE
)
SELECT
M.MBER_ID
, M.GRD_SET_NO
, M.SHORT_PRICE
, M.LONG_PRICE
, M.PICTURE_PRICE
, M.PICTURE2_PRICE
, M.PICTURE3_PRICE
, 0
, 0
, #grdNewDate#
, NOW()
, '9999:12:31 23:59:59'
, 'Y'
, #regId#
, NOW()
, #editId#
, NOW()
FROM (
SELECT
A.MBER_ID
, S.GRD_SET_NO
, S.SHORT_PRICE
, S.LONG_PRICE
, S.PICTURE_PRICE
, S.PICTURE2_PRICE
, S.PICTURE3_PRICE
, IFNULL(A.BLINE_CODE, 'N') AS blineCode
, IFNULL(A.SPAM_YN, 'N') AS spamYn
, CASE
WHEN
(A.SHORT_PRICE > 0
AND (B.SHORT_PRICE > A.SHORT_PRICE
OR B.LONG_PRICE > A.LONG_PRICE
OR B.PICTURE_PRICE > A.PICTURE_PRICE
OR B.PICTURE2_PRICE > A.PICTURE2_PRICE
OR B.PICTURE3_PRICE > A.PICTURE3_PRICE)
)
THEN 'Y'
ELSE 'N'
END isSalePrice
FROM LETTNGNRLMBER A
INNER JOIN MJ_MBER_GRD_SETTING S
ON S.GRD_SET_NO = (SELECT MAX(GRD_SET_NO) FROM MJ_MBER_GRD_SETTING)
JOIN MJ_MBER_SETTING B
WHERE A.MBER_STTUS = 'Y'
AND MBER_ID = #mberId#
) M
WHERE M.isSalePrice = 'N'
AND M.blineCode = 'N'
AND M.spamYn = 'N'
</insert>
<!-- 회원별 등급 히스토리 등록 All -->
<insert id="mberGrdDAO.insertMberGrdHistAll" parameterClass="mberGrdVO">
INSERT INTO MJ_MBER_GRD_HIST
@ -680,10 +777,13 @@
, A.AMT = B.AMT_SUM
, A.TOT_AMT = B.AMT_SUM
, A.GRD_DATE = CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
, A.EDIT_ID = #editId#
, A.EDIT_DATE = NOW()
, A.TEMP_YN = 'Y'
WHERE B.GRD_SET_NO IS NOT NULL
WHERE 1=1
AND B.GRD_SET_NO IS NOT NULL
AND A.GRD_STATUS = 'Y'
AND A.TEMP_YN = 'N'
AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
]]>
</update>
@ -751,7 +851,8 @@
, A.GRD_DATE = CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
, A.EDIT_ID = #editId#
, A.EDIT_DATE = NOW()
WHERE B.GRD_SET_NO IS NOT NULL
WHERE 1=1
AND 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
@ -773,6 +874,7 @@
, A.AMT = 0
, A.TOT_AMT = 0
, A.GRD_DATE = CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
, A.EDIT_ID = #editId#
, A.EDIT_DATE = NOW()
, A.TEMP_YN = 'Y'
, A.GRD_END_DATE = '9999:12:31 23:59:59'
@ -797,6 +899,7 @@
, A.AMT = 0
, A.TOT_AMT = 0
, A.GRD_DATE = CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
, A.EDIT_ID = #editId#
, A.EDIT_DATE = NOW()
WHERE C.GRD_SET_NO = (SELECT MAX(GRD_SET_NO) FROM MJ_MBER_GRD_SETTING)
]]>
@ -808,7 +911,9 @@
UPDATE MJ_MBER_GRD_INFO SET
GRD_END_DATE = NOW()
, GRD_STATUS = 'E'
, EDIT_ID = #editId#
, EDIT_DATE = NOW()
, TEMP_YN = 'Y'
WHERE MBER_ID IN (
SELECT
M.MBER_ID
@ -835,7 +940,6 @@
JOIN MJ_MBER_SETTING B
WHERE 1=1
AND A.MBER_STTUS = 'Y'
AND G.GRD_STATUS != 'E'
) M
WHERE M.IS_SALE_PRICE = 'Y'
OR M.BLINE_CODE != 'N'
@ -868,6 +972,7 @@
, GRD_STATUS = 'E'
, EDIT_ID = #editId#
, EDIT_DATE = NOW()
, TEMP_YN = 'Y'
WHERE
GRD_STATUS != 'E'
AND MBER_ID = #mberId#

View File

@ -237,16 +237,16 @@ function setMberGrdSave() {
<colgroup>
<col style="width: 5%">
<col style="width: auto;">
<col style="width: 8%;">
<col style="width: 10%;">
<col style="width: 7%;">
<col style="width: 9%">
<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: 5%">
<col style="width: 9%">
<col style="width: 5%">
</colgroup>
<thead>
<tr>
@ -307,14 +307,16 @@ function setMberGrdSave() {
<td nowrap="nowrap">
<c:out value="${result.grdStatusNm}"/>
</td>
<td nowrap="nowrap" class="left">
<td nowrap="nowrap">
<c:choose>
<c:when test="${result.grdStatusNm eq '종료'}">
<input type="button" class="btnType2" onclick="setMberGrdRestoreByUser('${result.mberId}','${result.grdDate}')" value="복원">
<input type="button" class="btnType1" onclick="setMberGrdRestoreByUser('${result.mberId}','${result.grdDate}')" value="복원">
</c:when>
<c:otherwise>
<input type="button" class="btnType2" onclick="setMberGrdUpdateByUser('${result.mberId}')" value="갱신">
<%--
<input type="button" class="btnType1" onclick="setMberGrdEndByUser('${result.mberId}')" value="종료">
--%>
</c:otherwise>
</c:choose>
</td>