itn 2023-07-25
등급제 계산기간 관련 로직 수정
@e73d58857d530d47267c495639b941c00d7db86d
src/main/java/itn/let/sym/grd/service/MberGrdService.java
--- src/main/java/itn/let/sym/grd/service/MberGrdService.java
+++ src/main/java/itn/let/sym/grd/service/MberGrdService.java
@@ -43,16 +43,19 @@
 	// 회원별 등급 수정
 	public void updateMberGrd(MberGrdVO mberGrdVO)  throws Exception;		
 	
+	// 회원별 등급 등록 All => 기존대상자 제외
+	public void insertMberGrdAllByExist(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 updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception;
 
 	// 회원 등급제 종료
@@ -64,6 +67,9 @@
 	// 회원별 등급 적용
 	public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception;
 	
+	// 회원별 등급제 대상여부
+	int selectMberGrdCnt(String mberId) throws Exception;
+	
 	// 회원별 등급 진행여부
 	int selectMberGrdPrgCnt(String mberId) throws Exception;
 	
src/main/java/itn/let/sym/grd/service/MberGrdVO.java
--- src/main/java/itn/let/sym/grd/service/MberGrdVO.java
+++ src/main/java/itn/let/sym/grd/service/MberGrdVO.java
@@ -41,8 +41,11 @@
 	private int mberGrdHistNo;
 
 	private String grdNoti;			// 회원등급제 시행 여부
-	private String grdDate;			// 회원등급제 시행일자
-	private String grdDatePrgYn;	// 회원등급제 시행일자 진행여부(오늘보다 이전날짜이면 Y, 이후이면 N)
+	private String grdDate;			// 회원등급제 시작일자
+	private String grdPeriodDate;	// 오늘날짜 - 누적결제 계산기간 = 계산기간 시작일자  
+	private String grdNewDate;		// 시작일자, 계산기간 시작일자 중 최근날짜
+	private String grdDatePrgYn;	// 회원등급제 시작일자 진행여부(오늘보다 이전날짜이면 Y, 이후이면 N)
+	private String grdPeriod;		// 회원등급제 누적결제 계산기간
 	
 	// 검색필터
 	private String searchGrdStatus;
@@ -241,12 +244,30 @@
 	public void setGrdDate(String grdDate) {
 		this.grdDate = grdDate;
 	}	
+	public String getGrdPeriodDate() {
+		return grdPeriodDate;
+	}
+	public void setGrdPeriodDate(String grdPeriodDate) {
+		this.grdPeriodDate = grdPeriodDate;
+	}
+	public String getGrdNewDate() {
+		return grdNewDate;
+	}
+	public void setGrdNewDate(String grdNewDate) {
+		this.grdNewDate = grdNewDate;
+	}	
 	public String getGrdDatePrgYn() {
 		return grdDatePrgYn;
 	}
 	public void setGrdDatePrgYn(String grdDatePrgYn) {
 		this.grdDatePrgYn = grdDatePrgYn;
 	}	
+	public String getGrdPeriod() {
+		return grdPeriod;
+	}
+	public void setGrdPeriod(String grdPeriod) {
+		this.grdPeriod = grdPeriod;
+	}	
 	public String getSearchGrdStatus() {
 		return searchGrdStatus;
 	}
src/main/java/itn/let/sym/grd/service/impl/MberGrdDAO.java
--- src/main/java/itn/let/sym/grd/service/impl/MberGrdDAO.java
+++ src/main/java/itn/let/sym/grd/service/impl/MberGrdDAO.java
@@ -67,6 +67,11 @@
 	public void updateMberGrd(MberGrdVO mberGrdVO) throws Exception{
 		update("mberGrdDAO.updateMberGrd", mberGrdVO);
 	}	
+
+	// 회원별 등급 등록 All => 기존대상자 제외
+	public void insertMberGrdAllByExist(MberGrdVO mberGrdVO) throws Exception{
+		insert("mberGrdDAO.insertMberGrdAllByExist", mberGrdVO);
+	}
 	
 	// 회원별 등급 일괄변경
 	public int updateMberGrdAll(MberGrdVO mberGrdVO) throws Exception {
@@ -78,12 +83,12 @@
 		return update("mberGrdDAO.updateMberGrdAfterRefund", mberGrdVO);
 	}
 	
-	// 문자할인, B선라인 대상자 초기화
+	// 문자할인, B선라인 대상자 종료
 	public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception {
 		return update("mberGrdDAO.updateMberGrdEndBySale", mberGrdVO);
 	}		
 	
-	// 전체회원 등급 초기화
+	// 전체회원 등급 종료
 	public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception {
 		return update("mberGrdDAO.updateMberGrdEndAll", mberGrdVO);
 	}		
@@ -98,6 +103,11 @@
 		return update("mberGrdDAO.updateMberGrdRestoreByUser", mberGrdVO);
 	}		
 	
+	// 회원별 등급제 대상여부
+	public int selectMberGrdCnt(String mberId) throws Exception{
+		return (int) select("mberGrdDAO.selectMberGrdCnt", mberId);
+	}	
+	
 	// 회원별 등급 진행여부
 	public int selectMberGrdPrgCnt(String mberId) throws Exception{
 		return (int) select("mberGrdDAO.selectMberGrdPrgCnt", mberId);
src/main/java/itn/let/sym/grd/service/impl/MberGrdServiceImpl.java
--- src/main/java/itn/let/sym/grd/service/impl/MberGrdServiceImpl.java
+++ src/main/java/itn/let/sym/grd/service/impl/MberGrdServiceImpl.java
@@ -14,7 +14,6 @@
 import itn.let.sym.grd.service.MberGrdVO;
 import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.uss.umt.service.EgovMberManageService;
-import itn.let.uss.umt.service.MberManageVO;
 
 @Service("mberGrdService")
 public class MberGrdServiceImpl extends EgovAbstractServiceImpl implements MberGrdService {
@@ -147,6 +146,12 @@
 		mberGrdDAO.updateMberGrd(mberGrdVO);
 	}	
 	
+	// 회원별 등급 등록 All => 기존대상자 제외
+	@Override
+	public void insertMberGrdAllByExist(MberGrdVO mberGrdVO) throws Exception {
+		mberGrdDAO.insertMberGrdAllByExist(mberGrdVO);
+	}
+	
 	// 회원별 등급 일괄변경
 	@Override
 	public int updateMberGrdAll(MberGrdVO mberGrdVO) throws Exception {
@@ -157,8 +162,15 @@
 		MberGrdVO mberGrdVO1 = new MberGrdVO();
 		mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
 		if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate() && mberGrdVO1.getGrdDatePrgYn().equals("Y")) {
-			// 문자할인, B선라인 대상자 초기화
+			mberGrdVO.setGrdNewDate(mberGrdVO1.getGrdNewDate());
+			
+			// 대상자 추가
+			insertMberGrdAllByExist(mberGrdVO);
+			
+			// 문자할인, B선라인, 스팸회원 대상자 종료
 			updateCnt1 = updateMberGrdEndBySale(mberGrdVO);
+			
+			// 등급제 정상대상자 초기화(화이트등급) 
 			
 			// 회원별 등급 일괄변경
 			updateCnt2 = mberGrdDAO.updateMberGrdAll(mberGrdVO);
@@ -173,13 +185,13 @@
 		return mberGrdDAO.updateMberGrdAfterRefund(mberGrdVO);
 	}	
 
-	// 문자할인, B선라인 대상자 초기화
+	// 문자할인, B선라인 대상자 종료
 	@Override
 	public int updateMberGrdEndBySale(MberGrdVO mberGrdVO) throws Exception {
 		return mberGrdDAO.updateMberGrdEndBySale(mberGrdVO);
 	}	
 
-	// 전체회원 등급 초기화
+	// 전체회원 등급 종료
 	@Override
 	public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception {
 		return mberGrdDAO.updateMberGrdEndAll(mberGrdVO);
@@ -212,68 +224,65 @@
 		MberGrdVO mberGrdVO1 = new MberGrdVO();
 		mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
 		if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate() && mberGrdVO1.getGrdDatePrgYn().equals("Y")) {
-			mberGrdVO.setGrdDate(mberGrdVO1.getGrdDate());
+			mberGrdVO.setGrdNewDate(mberGrdVO1.getGrdNewDate());
 			
-			// Step 2. /협의/스팸/비선등급 적용 제외
-			// 문자할인여부(1: 할인, 0: 미할인)
-			int isMsgSalePrice = mjonPayService.selectMsgSalePriceCnt(mberGrdVO.getMberId());
-			if(isMsgSalePrice == 0) {
-				// B선 전송사 이용고객 => 등급제대상 제외처리
-				MberManageVO mberManageVO = new MberManageVO();
-				mberManageVO.setMberId(mberGrdVO.getMberId());
-				String blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO);
-				if (blineCode != null && blineCode.equals("N")) {		
+			// Step 2. 문자할인, B선라인, 스팸회원 대상자 제외
+			int isMberGrd = selectMberGrdCnt(mberGrdVO.getMberId());	// 등급제 대상여부(1: 대상, 0: 미대상)
+			if(isMberGrd == 1) {
+				// Step 3. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회
+				MberGrdVO mberGrdVO3 = new MberGrdVO();				
+				mberGrdVO3 = selectMberGrdAmtDetail(mberGrdVO);
+				if (null != mberGrdVO3) {
+					mberGrdVO.setTotAmt(mberGrdVO3.getTotAmt());
+					mberGrdVO.setGrdSetNo(mberGrdVO3.getGrdSetNo());
 					
-					// Step 3. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회
-					MberGrdVO mberGrdVO3 = new MberGrdVO();				
-					mberGrdVO3 = selectMberGrdAmtDetail(mberGrdVO);
-					if (null != mberGrdVO3) {
-						mberGrdVO.setTotAmt(mberGrdVO3.getTotAmt());
-						mberGrdVO.setGrdSetNo(mberGrdVO3.getGrdSetNo());
-						
-						// Step 4. 등급제 설정값 조회
-						MberGrdVO mberGrdVO4 = new MberGrdVO();
-						mberGrdVO4 = selectMberGrdSettingDetail(mberGrdVO);
-						if (null != mberGrdVO4) {
-							mberGrdVO.setAmt(mberGrdVO.getAmt());
-					    	mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
-					    	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 업데이트
-							MberGrdVO mberGrdVO5 = new MberGrdVO();
-							mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
-							if (null != mberGrdVO5) {
-								// 업데이트 => 기존등급보다 상위등급 대상만 업데이트
-								if (mberGrdVO5.getGrdSetNo() > mberGrdVO.getGrdSetNo()) {
-									updateMberGrd(mberGrdVO);
-									
-									// 회원별 등급 히스토리 인서트
-									insertMberGrdHist(mberGrdVO);							
-								}
-							}
-							else {
-								// 인서트
-								insertMberGrd(mberGrdVO);
+					// Step 4. 등급제 설정값 조회
+					MberGrdVO mberGrdVO4 = new MberGrdVO();
+					mberGrdVO4 = selectMberGrdSettingDetail(mberGrdVO);
+					if (null != mberGrdVO4) {
+						mberGrdVO.setAmt(mberGrdVO.getAmt());
+				    	mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
+				    	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 업데이트
+						MberGrdVO mberGrdVO5 = new MberGrdVO();
+						mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
+						if (null != mberGrdVO5) {
+							updateMberGrd(mberGrdVO);
 								
-								// 회원별 등급 히스토리 인서트
-								insertMberGrdHist(mberGrdVO);
-							}
+							// 회원별 등급 히스토리 인서트
+							insertMberGrdHist(mberGrdVO);							
 						}
-					}					
-				}
+						else {
+							// 인서트
+							insertMberGrd(mberGrdVO);
+							
+							// 회원별 등급 히스토리 인서트
+							insertMberGrdHist(mberGrdVO);
+						}
+					}
+				}					
 			}			
-
 		}
 	}			
 	
+	// 회원별 등급제 대상여부
+	@Override
+	public int selectMberGrdCnt(String mberId) throws Exception{
+		// 공백제거
+		mberId = mberId.trim();
+		
+		return mberGrdDAO.selectMberGrdCnt(mberId);
+	}
+	
 	// 회원별 등급 진행여부
 	@Override
 	public int selectMberGrdPrgCnt(String mberId) throws Exception{
src/main/java/itn/let/sym/grd/web/MberGrdMngController.java
--- src/main/java/itn/let/sym/grd/web/MberGrdMngController.java
+++ src/main/java/itn/let/sym/grd/web/MberGrdMngController.java
@@ -39,6 +39,7 @@
 
     	model.addAttribute("grdNoti", mberGrdVO.getGrdNoti());
     	model.addAttribute("grdDate", mberGrdVO.getGrdDate());
+    	model.addAttribute("grdPeriod", mberGrdVO.getGrdPeriod());
     	model.addAttribute("mberGrdSettingList", mberGrdSettingList);
     	
     	return "/sym/grd/mberGrdSetting";
@@ -322,10 +323,16 @@
     	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
 
         try{
-        	
-        	// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
-        	mberGrdService.updateMberGrdAfterRefund(mberGrdVO);
-       		
+    		// Step 1. 등급제 시행 ON 일경우
+    		MberGrdVO mberGrdVO1 = new MberGrdVO();
+    		mberGrdVO1 = mberGrdService.selectMberSettingDetail(mberGrdVO);
+    		if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate() && mberGrdVO1.getGrdDatePrgYn().equals("Y")) {
+    			// 회원별 등급 일괄변경
+    			mberGrdVO.setGrdNewDate(mberGrdVO1.getGrdNewDate());
+    			
+            	// 회원 등급 변경(환불후) => 기존등급 상관없이 업데이트
+            	mberGrdService.updateMberGrdAfterRefund(mberGrdVO);
+    		}        	
 		}
 		catch(Exception e) {
 			isSuccess = false;
src/main/resources/egovframework/sqlmap/let/sym/grd/MberGrd_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/sym/grd/MberGrd_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/sym/grd/MberGrd_SQL_Mysql.xml
@@ -10,15 +10,23 @@
 		UPDATE MJ_MBER_SETTING A 
 		SET 
 			A.GRD_NOTI = #grdNoti#
-			, A.GRD_DATE = #grdDate# 
+			, A.GRD_DATE = #grdDate#
+			, A.GRD_PERIOD = #grdPeriod#
 	</update>
 	
 	<!-- 등급제 시행여부 상세 -->
 	<select id="mberGrdDAO.selectMberSettingDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
 	<![CDATA[
 		SELECT
-			GRD_NOTI AS grdNoti
-			, DATE_FORMAT(GRD_DATE, '%Y-%m-%d' ) AS grdDate
+			GRD_NOTI 								AS grdNoti
+			, DATE_FORMAT(GRD_DATE, '%Y-%m-%d') 	AS grdDate
+			, DATE_FORMAT(DATE_ADD(NOW(), INTERVAL - GRD_PERIOD DAY), '%Y-%m-%d') AS grdPeriodDate
+			, CASE
+				WHEN DATE_FORMAT(GRD_DATE, '%Y-%m-%d') > DATE_FORMAT(DATE_ADD(NOW(), INTERVAL - GRD_PERIOD DAY), '%Y-%m-%d') 
+					THEN DATE_FORMAT(GRD_DATE, '%Y-%m-%d')						
+				ELSE DATE_FORMAT(DATE_ADD(NOW(), INTERVAL - GRD_PERIOD DAY), '%Y-%m-%d')
+			END grdNewDate
+			, GRD_PERIOD 							AS grdPeriod
 			, CASE
 				WHEN IFNULL(GRD_DATE, '') = '' 
 					THEN 'N'						
@@ -217,12 +225,14 @@
 		LIMIT 1
 	</select>
 
-	<!-- 회원 등급제 대상여부 정보(사용자화면용) -->
+	<!-- 회원 등급제 대상여부 정보(사용자화면용) => 문자할인, B선라인, 스팸회원 대상자 제외  -->
 	<select id="mberGrdDAO.selectMberGrdInfo" parameterClass="String" resultClass="mberGrdVO">
 	<![CDATA[
 		SELECT
 			M.mberId
-			, blineCode
+			, M.isSalePrice
+			, M.blineCode
+			, M.spamYn
 			, M.grdSetNo
 			, M.grdSetNm
 			, CASE
@@ -250,6 +260,7 @@
 			SELECT 
 				A.MBER_ID						AS mberId
 				, IFNULL(A.BLINE_CODE, 'N') 	AS blineCode
+				, IFNULL(A.SPAM_YN, 'N') 		AS spamYn
 				, G.GRD_SET_NO					AS grdSetNo
 				, S.GRD_SET_NM					AS grdSetNm
 				, DATE_FORMAT(G.GRD_DATE, '%Y-%m-%d')		AS grdDate
@@ -278,6 +289,7 @@
 				ON G.GRD_SET_NO = S.GRD_SET_NO					
 			JOIN MJ_MBER_SETTING B
 			WHERE 1=1
+				AND A.MBER_STTUS = 'Y'
 				AND B.GRD_NOTI = 'Y'
 				AND DATE_FORMAT(B.GRD_DATE, '%Y-%m-%d') <= DATE_FORMAT(NOW(), '%Y-%m-%d') 
 				AND G.GRD_STATUS = 'Y'
@@ -285,8 +297,9 @@
 				AND G.MBER_ID = #mberId#
 		) M
 		WHERE M.isSalePrice = 'N'
-		OR M.blineCode != 'N'
-		LIMIT 1
+			AND M.blineCode = 'N'
+			AND M.spamYn = 'N'
+		LIMIT 1	
 	]]>
 	</select>
 	
@@ -306,7 +319,7 @@
 				, 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))
+					SELECT IFNULL(MIN(S1.GRD_SET_NO), 12) 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
@@ -316,7 +329,7 @@
 				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')
+				AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
 			GROUP BY S.USER_ID
 		) M
 		WHERE M.GRD_SET_NO IS NOT NULL
@@ -387,6 +400,53 @@
 			MBER_ID = #mberId#
 	</update>	
 	
+	<!-- 회원별 등급 등록 All => 기존대상자 제외 -->
+	<insert id="mberGrdDAO.insertMberGrdAllByExist" 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
+			A.MBER_ID
+			, S.GRD_SET_NO
+			, S.SHORT_PRICE
+			, S.LONG_PRICE
+			, S.PICTURE_PRICE
+			, S.PICTURE2_PRICE
+			, S.PICTURE3_PRICE
+			, 0
+			, 0
+			, #grdNewDate#
+			, NOW()
+			, '9999:12:31 23:59:59'
+			, 'Y'
+			, ''
+			, NOW()
+			, ''
+			, NOW()
+		FROM LETTNGNRLMBER A
+		INNER JOIN MJ_MBER_GRD_SETTING S
+			ON S.GRD_SET_NO = 12
+		WHERE A.MBER_STTUS = 'Y'
+			AND MBER_ID NOT IN (SELECT MBER_ID FROM MJ_MBER_GRD_INFO)
+	</insert>			
+	
 	<!-- 
 		회원별 등급 일괄변경
 		=> 기존등급보다 상위등급 대상만 업데이트 됨.
@@ -409,7 +469,7 @@
 					, 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))
+						SELECT IFNULL(MIN(S1.GRD_SET_NO), 12) 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
@@ -419,7 +479,7 @@
 					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')
+					AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
 				GROUP BY S.USER_ID
 			) M
 			WHERE M.GRD_SET_NO IS NOT NULL
@@ -436,10 +496,9 @@
 			, 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.GRD_DATE = CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
 			, A.EDIT_DATE = NOW()
 		WHERE B.GRD_SET_NO IS NOT NULL
-			AND A.GRD_SET_NO > B.GRD_SET_NO
 			AND A.GRD_STATUS = 'Y'
 			AND NOW() BETWEEN A.GRD_START_DATE AND A.GRD_END_DATE
 	]]>
@@ -466,7 +525,7 @@
 					, 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))
+						SELECT IFNULL(MIN(S1.GRD_SET_NO), 12) 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
@@ -476,7 +535,7 @@
 					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')
+					AND S.REG_DATE >= CONCAT(DATE_FORMAT(#grdNewDate#, '%Y-%m-%d'), ' ', '00:00:00')
 				GROUP BY S.USER_ID
 			) M
 			WHERE M.GRD_SET_NO IS NOT NULL
@@ -493,7 +552,7 @@
 			, 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.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
@@ -503,7 +562,7 @@
 	]]>
 	</update>	
 	
-	<!-- 문자할인, B선라인 대상자 초기화 -->
+	<!-- 문자할인, B선라인, 스팸회원 대상자 종료 -->
 	<update id="mberGrdDAO.updateMberGrdEndBySale" parameterClass="mberGrdVO">
 	<![CDATA[
 		UPDATE MJ_MBER_GRD_INFO SET
@@ -517,6 +576,7 @@
 				SELECT 
 					A.MBER_ID
 					, IFNULL(A.BLINE_CODE, 'N') AS BLINE_CODE
+					, IFNULL(A.SPAM_YN, 'N') AS SPAM_YN
 					, CASE
 						WHEN 
 							(A.SHORT_PRICE > 0 
@@ -528,21 +588,23 @@
 							)
 						THEN 'Y'
 						ELSE 'N'
-					END isSalePrice
+					END IS_SALE_PRICE
 				FROM LETTNGNRLMBER A 
 				INNER JOIN MJ_MBER_GRD_INFO G
 					ON A.MBER_ID = G.MBER_ID
 				JOIN MJ_MBER_SETTING B
 				WHERE 1=1
+					AND A.MBER_STTUS = 'Y'
 					AND G.GRD_STATUS != 'E'
 			) M
-			WHERE M.isSalePrice = 'Y'
-			OR M.BLINE_CODE != 'N'
+			WHERE M.IS_SALE_PRICE = 'Y'
+				OR M.BLINE_CODE != 'N'
+				OR M.SPAM_YN = 'Y'
 		)
 	]]>
 	</update>	
 	
-	<!-- 전체회원 등급 초기화 -->
+	<!-- 전체회원 등급 종료 -->
 	<update id="mberGrdDAO.updateMberGrdEndAll" parameterClass="mberGrdVO">
 		UPDATE MJ_MBER_GRD_INFO SET
 			GRD_END_DATE			= NOW()
@@ -577,7 +639,40 @@
 			GRD_STATUS != 'Y'
 			AND MBER_ID = #mberId#
 	</update>	
-				
+
+	<!-- 회원별 등급제 대상여부 -->
+	<select id="mberGrdDAO.selectMberGrdCnt" parameterClass="String" resultClass="Integer">
+		SELECT
+			COUNT(0)
+		FROM (
+			SELECT 
+				A.MBER_ID						AS mberId
+				, 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 
+			JOIN MJ_MBER_SETTING B
+			WHERE 1=1
+				AND A.MBER_ID = #mberId#
+				AND A.MBER_STTUS = 'Y'
+		) M
+		WHERE M.isSalePrice = 'N'
+			AND M.blineCode = 'N'
+			AND M.spamYn = 'N'
+		LIMIT 1	
+	</select>
+
 	<!-- 회원별 등급 진행여부 -->
 	<select id="mberGrdDAO.selectMberGrdPrgCnt" parameterClass="String" resultClass="Integer">
 		SELECT
src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdList.jsp
--- src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdList.jsp
+++ src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdList.jsp
@@ -131,12 +131,12 @@
 }	
 
 //회원 등급제 갱신
-function setMberGrdUpdateByUser(mberId, grdDate) {
+function setMberGrdUpdateByUser(mberId) {
 	if(confirm("등급제 갱신하시겠습니까?\n등급 다시 계산합니다.")) {
 		$.ajax({
 	        type: "POST",
 	        url: "/sym/grd/mberGrdUpdateByUserAjax.do",
-	        data: {"mberId" : mberId, "grdDate" : grdDate},
+	        data: {"mberId" : mberId},
 	        dataType:'json',
 	        async: false,
 	        success: function (data) {
@@ -246,7 +246,7 @@
 						<col style="width: 12%">
 						<col style="width: 12%">
 						<col style="width: 5%">
-						<col style="width: 8%">
+						<col style="width: 9%">
 					</colgroup>
 					<thead>
 						<tr>
@@ -307,13 +307,13 @@
 					   		<td nowrap="nowrap">
 					    		<c:out value="${result.grdStatusNm}"/>
 					    	</td>					    					    	
-					   		<td nowrap="nowrap">
+					   		<td nowrap="nowrap" class="left">
 								<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="btnType2" onclick="setMberGrdUpdateByUser('${result.mberId}')" value="갱신">
 										<input type="button" class="btnType1" onclick="setMberGrdEndByUser('${result.mberId}')" value="종료">
 									</c:otherwise>
 								</c:choose>
src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdSetting.jsp
--- src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdSetting.jsp
+++ src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdSetting.jsp
@@ -100,20 +100,23 @@
 			<div class="tableWrap">
 				<table class="tbType2">
 					<colgroup>
+						<col width="20%">
 						<col width="30%">
+						<col width="20%">
 						<col width="*">
 					</colgroup>
 					<tbody>
 						<tr>
 							<th>등급제 적용</th>
-							<td>
+							<td colspan="3">
 							<input type="radio" name="grdNoti" id="grdNoti1" value="Y" <c:if test="${grdNoti eq 'Y'}">checked="checked"</c:if> /> ON
 							&nbsp;&nbsp;&nbsp;
 							<input type="radio" name="grdNoti" id="grdNoti2" value="N" <c:if test="${grdNoti eq 'N'}">checked="checked"</c:if> /> OFF
 							</td>
+							
 						</tr>					
 						<tr>
-							<th>누적결제 적용일자</th>
+							<th>누적결제 시작일자</th>
 							<td>
 								<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
 							    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
@@ -123,6 +126,10 @@
 							   	 	<input type="button" class="calBtn">
 						    	</a>
 							</td>
+							<th>누적결제 계산기간</th>
+							<td>
+								<input type="text" name="grdPeriod" value="<c:out value="${grdPeriod}" />" style="height: 20px; width: 150px; padding: 5px 5px 5px 5px;" />
+							</td>
 						</tr>
 					</tbody>
 				</table>
Add a comment
List