itn 2023-08-16
환불완료시 회원등급 업데이트 기능 추가
@daa6b8bd4926c67c999b4cb1a71acf2c331ed876
src/main/java/itn/let/mjo/pay/web/RefundController.java
--- src/main/java/itn/let/mjo/pay/web/RefundController.java
+++ src/main/java/itn/let/mjo/pay/web/RefundController.java
@@ -48,6 +48,8 @@
 import itn.let.mjo.pay.service.RefundVO;
 import itn.let.mjo.tax.service.TaxService;
 import itn.let.mjo.tax.service.TaxVO;
+import itn.let.sym.grd.service.MberGrdService;
+import itn.let.sym.grd.service.MberGrdVO;
 import itn.let.sym.site.service.EgovSiteManagerService;
 import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.uat.uia.service.EgovLoginService;
@@ -106,6 +108,9 @@
 	
 	@Resource(name = "MjonEventService")
     private MjonEventService mjonEventService;
+	
+	@Resource(name = "mberGrdService")
+	MberGrdService mberGrdService;
 	
     /**
      * 환불요청 목록 페이지
@@ -542,7 +547,15 @@
 			mjonPayVO.setMemo("환불처리 " + refundVO.getRefundPoint() + "포인트");
 			mjonPayService.insertPoint(mjonPayVO);
 			
-			
+			// 등급제 Start
+	   		// 회원별 등급 적용
+			MberGrdVO mberGrdVO = new MberGrdVO();
+			mberGrdVO.setMberId(refundVO.getMberId());
+	    	mberGrdVO.setAmt("0");
+	    	mberGrdVO.setMoid("");
+	   		mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO);    		
+			// End				
+	   		
 			//modelAndView.addObject("status", "success");
 			s_status	=	"success";
 			
@@ -722,6 +735,15 @@
 					}
 				}
 				
+				// 등급제 Start
+		   		// 회원별 등급 적용
+				MberGrdVO mberGrdVO = new MberGrdVO();
+				mberGrdVO.setMberId(refundVO.getMberId());
+		    	mberGrdVO.setAmt("0");
+		    	mberGrdVO.setMoid("");
+		   		mberGrdService.mberGrdSaveByUserNoHist(mberGrdVO);    		
+				// End				
+				
 			}else if(afterStatus.equals("4")) {// 처리불가로 변경 시
 				
 				if(beforeStatus.equals("3")) {
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
@@ -9,6 +9,9 @@
 	// 등급제 단가 추출 => 시스템 단가에 적용
 	public JoinSettingVO selectMberGrdDefaultInfo(JoinSettingVO sysJoinSetVO, String mberId) throws Exception;	
 	
+	// 등급제 단가 추출 => 시스템 단가에 적용 Last
+	public JoinSettingVO selectMberGrdDefaultInfoLast(JoinSettingVO sysJoinSetVO, String mberId) throws Exception;	
+	
 	// 등급제 설정 일괄변경
 	public int updateMberSetting(MberGrdVO mberGrdVO) throws Exception;
 	
@@ -85,8 +88,14 @@
 	// 회원별 등급 적용
 	public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception;
 	
+	// 회원별 등급 적용 Last
+	public void mberGrdSaveByUserLast(MberGrdVO mberGrdVO) throws Exception;
+	
 	// 회원별 등급 적용(로그인시 사용 => 히스토리 저장 제외)
 	public void mberGrdSaveByUserNoHist(MberGrdVO mberGrdVO) throws Exception;
+	
+	// 회원별 등급 적용(로그인시 사용 => 히스토리 저장 제외) Last
+	public void mberGrdSaveByUserNoHistLast(MberGrdVO mberGrdVO) throws Exception;
 	
 	// 회원별 등급제 대상여부
 	int selectMberGrdCnt(String mberId) throws Exception;
@@ -100,6 +109,8 @@
 	// 회원별 등급 저장여부
 	int selectMberGrdSaveCnt(String mberId) throws Exception;
 	
+	// 회원별 등급제 기간내, 최종결제이후 환불총금액
+	int selectMberGrdRefundSum(String mberId) throws Exception;
 	
 	// 회원별 등급 히스토리 등록
 	public void insertMberGrdHist(MberGrdVO mberGrdVO)  throws Exception;	
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
@@ -158,6 +158,10 @@
 		return (int) select("mberGrdDAO.selectMberGrdSaveCnt", mberId);
 	}	
 	
+	// 회원별 등급제 기간내, 최종결제이후 환불총금액
+	public int selectMberGrdRefundSum(String mberId) throws Exception{
+		return (int) select("mberGrdDAO.selectMberGrdRefundSum", mberId);
+	}	
 	
 	// 회원별 등급 히스토리 등록
 	public void insertMberGrdHist(MberGrdVO mberGrdVO) throws Exception{
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
@@ -1,9 +1,12 @@
 package itn.let.sym.grd.service.impl;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 import javax.annotation.Resource;
 
+import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 
 import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
@@ -34,38 +37,6 @@
 	/** 등급제 설정 히스토리 idgen */
 	@Resource(name="egovGrdSettingHistIdGnrService")
 	private EgovIdGnrService gshidgenService;
-	
-	
-	// 등급제 단가 추출 => 시스템 단가에 적용
-	@Override
-	public JoinSettingVO selectMberGrdDefaultInfo(JoinSettingVO sysJoinSetVO, String mberId) throws Exception {
-		/*
-		// 공백제거
-		mberId = mberId.trim();
-		
-		// Step 1. 등급제 시행 ON 일경우
-		if (StringUtils.isNotEmpty(mberId)) {
-			MberGrdVO mberGrdVO = new MberGrdVO();		
-			MberGrdVO mberGrdVO1 = new MberGrdVO();
-			mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
-			if (mberGrdVO1.getGrdNoti().equals("Y")) {
-				mberGrdVO = new MberGrdVO();
-				mberGrdVO = selectMberGrdInfo(mberId);
-				if (null != mberGrdVO) {
-					if(mberGrdVO.getShortPrice() > 1 && mberGrdVO.getLongPrice() > 1 && mberGrdVO.getPicturePrice() > 1 && mberGrdVO.getPicture2Price() > 1 && mberGrdVO.getPicture3Price() > 1) {
-						sysJoinSetVO.setShortPrice(mberGrdVO.getShortPrice());
-						sysJoinSetVO.setLongPrice(mberGrdVO.getLongPrice());
-						sysJoinSetVO.setPicturePrice(mberGrdVO.getPicturePrice());
-						sysJoinSetVO.setPicture2Price(mberGrdVO.getPicture2Price());
-						sysJoinSetVO.setPicture3Price(mberGrdVO.getPicture3Price());
-					}
-				}
-			}		
-		}
-		*/
-		
-		return sysJoinSetVO;
-	}	
 	
 	// 등급제 시행여부 변경
 	@Override
@@ -276,11 +247,76 @@
 		return mberGrdDAO.updateMberGrdRestoreByUser(mberGrdVO);
 	}	
 	
+	
+	// 등급제 단가 추출 => 시스템 단가에 적용
+	@Override
+	public JoinSettingVO selectMberGrdDefaultInfo(JoinSettingVO sysJoinSetVO, String mberId) throws Exception {	
+		// 등급제 단가 추출 => 시스템 단가에 적용 Last
+		//sysJoinSetVO = selectMberGrdDefaultInfoLast(sysJoinSetVO, mberId);
+			
+		return sysJoinSetVO;
+	}	
+	
 	// 회원별 등급 적용
 	@Override
 	public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception {
-		/*
+		// 회원별 등급 적용 Last
+		//mberGrdSaveByUserLast(mberGrdVO);
+	}
+	
+	// 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)
+	@Override
+	public void mberGrdSaveByUserNoHist(MberGrdVO mberGrdVO) throws Exception {
+		// 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)
+		//mberGrdSaveByUserNoHistLast(mberGrdVO);
+	}	
+	
+	// 등급제 단가 추출 => 시스템 단가에 적용 Last
+	@Override
+	public JoinSettingVO selectMberGrdDefaultInfoLast(JoinSettingVO sysJoinSetVO, String mberId) throws Exception {
+		System.out.println("START 등급제 단가 추출 => 시스템 단가에 적용");
+		
+		// 공백제거
+		mberId = mberId.trim();
+		
+		if (StringUtils.isNotEmpty(mberId)) {
+			System.out.println("아이디 : " + mberId);
+			
+			MberGrdVO mberGrdVO = new MberGrdVO();		
+			// Step 1. 등급제 시행 ON 일경우
+			MberGrdVO mberGrdVO1 = new MberGrdVO();
+			mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
+			System.out.println("Step 1. 등급제 시행 ON 일경우");
+			if (mberGrdVO1.getGrdNoti().equals("Y")) {
+				mberGrdVO = new MberGrdVO();
+				
+				// Step 2. 등급 정보 조회
+				mberGrdVO = selectMberGrdInfo(mberId);
+				System.out.println("Step 2. 등급 정보 조회");
+				if (null != mberGrdVO) {
+					if(mberGrdVO.getShortPrice() > 1 && mberGrdVO.getLongPrice() > 1 && mberGrdVO.getPicturePrice() > 1 && mberGrdVO.getPicture2Price() > 1 && mberGrdVO.getPicture3Price() > 1) {
+						sysJoinSetVO.setShortPrice(mberGrdVO.getShortPrice());
+						sysJoinSetVO.setLongPrice(mberGrdVO.getLongPrice());
+						sysJoinSetVO.setPicturePrice(mberGrdVO.getPicturePrice());
+						sysJoinSetVO.setPicture2Price(mberGrdVO.getPicture2Price());
+						sysJoinSetVO.setPicture3Price(mberGrdVO.getPicture3Price());
+					}
+				}
+			}		
+		}
+		
+		System.out.println("END 등급제 단가 추출 => 시스템 단가에 적용");
+		
+		return sysJoinSetVO;
+	}	
+	
+	// 회원별 등급 적용 Last
+	@Override
+	public void mberGrdSaveByUserLast(MberGrdVO mberGrdVO) throws Exception {
     	try {
+    		System.out.println("START 회원별 등급 적용");
+    		System.out.println("아이디 : " + mberGrdVO.getMberId());
+    		
     		// 현재 날짜 구하기
             LocalDate now = LocalDate.now();
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");	// 포맷 정의
@@ -292,15 +328,18 @@
     		// Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)
     		MberGrdVO mberGrdVO1 = new MberGrdVO();
     		mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
+    		System.out.println("Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)");
     		if (mberGrdVO1.getGrdNoti().equals("Y")) {
     			mberGrdVO.setGrdNewDate(mberGrdVO1.getGrdNewDate());
     			
     			// Step 2. 문자할인, B선라인, 스팸회원 대상자 제외
     			int isMberGrd = selectMberGrdCnt(mberGrdVO.getMberId());	// 등급제 대상여부(1: 대상, 0: 미대상)
+    			System.out.println("Step 2. 문자할인, B선라인, 스팸회원 대상자 제외");
     			if(isMberGrd == 1) {
     				// Step 3. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회
     				MberGrdVO mberGrdVO3 = new MberGrdVO();				
     				mberGrdVO3 = selectMberGrdAmtDetail(mberGrdVO);
+    				System.out.println("Step 3. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회");
     				if (null != mberGrdVO3) {
     					mberGrdVO.setTotAmt(mberGrdVO3.getTotAmt());
     					mberGrdVO.setGrdSetNo(mberGrdVO3.getGrdSetNo());
@@ -308,6 +347,7 @@
     					// Step 4. 등급제 설정값 조회
     					MberGrdVO mberGrdVO4 = new MberGrdVO();
     					mberGrdVO4 = selectMberGrdSettingDetail(mberGrdVO);
+    					System.out.println("Step 4. 등급제 설정값 조회");
     					if (null != mberGrdVO4) {
     						mberGrdVO.setAmt(mberGrdVO.getAmt());
     				    	mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
@@ -324,6 +364,7 @@
     						// Step 5. 인서트 Or 업데이트
     						MberGrdVO mberGrdVO5 = new MberGrdVO();
     						mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
+    						System.out.println("Step 5. 인서트 Or 업데이트");
     						if (null != mberGrdVO5) {
     							updateMberGrdOk(mberGrdVO);
     								
@@ -341,6 +382,7 @@
     				}					
     			}			
     		}
+    		System.out.println("START 회원별 등급 적용");
     	}
     	catch (Exception e) {
 	    	// Slack 메시지 발송(단순본문)
@@ -350,14 +392,16 @@
 			System.out.println("#############################################################");
 			System.out.println(mberGrdVO.getMberId() + "님 결제중 회원등급 저장 오류");			    		
     	}												
-		*/
 	}			
 	
-	// 회원별 등급 적용(로그인시 사용 => 히스토리 저장 제외)
+	// 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)
 	@Override
-	public void mberGrdSaveByUserNoHist(MberGrdVO mberGrdVO) throws Exception {
-		/*
+	public void mberGrdSaveByUserNoHistLast(MberGrdVO mberGrdVO) throws Exception {
+
     	try {
+    		System.out.println("START 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)");
+    		System.out.println("아이디 : " + mberGrdVO.getMberId());
+    		
     		// 현재 날짜 구하기
             LocalDate now = LocalDate.now();
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");	// 포맷 정의
@@ -369,15 +413,18 @@
     		// Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)
     		MberGrdVO mberGrdVO1 = new MberGrdVO();
     		mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
+    		System.out.println("Step 1. 등급제 시행 ON 일경우(시행일자 진행여부 Y일경우)");
     		if (mberGrdVO1.getGrdNoti().equals("Y")) {
     			mberGrdVO.setGrdNewDate(mberGrdVO1.getGrdNewDate());
     			
     			// Step 2. 문자할인, B선라인, 스팸회원 대상자 제외
     			int isMberGrd = selectMberGrdCnt(mberGrdVO.getMberId());	// 등급제 대상여부(1: 대상, 0: 미대상)
+    			System.out.println("Step 2. 문자할인, B선라인, 스팸회원 대상자 제외");
     			if(isMberGrd == 1) {
     				// Step 3. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회
     				MberGrdVO mberGrdVO3 = new MberGrdVO();				
     				mberGrdVO3 = selectMberGrdAmtDetail(mberGrdVO);
+    				System.out.println("Step 3. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회");
     				if (null != mberGrdVO3) {
     					mberGrdVO.setTotAmt(mberGrdVO3.getTotAmt());
     					mberGrdVO.setGrdSetNo(mberGrdVO3.getGrdSetNo());
@@ -385,6 +432,7 @@
     					// Step 4. 등급제 설정값 조회
     					MberGrdVO mberGrdVO4 = new MberGrdVO();
     					mberGrdVO4 = selectMberGrdSettingDetail(mberGrdVO);
+    					System.out.println("Step 4. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회");
     					if (null != mberGrdVO4) {
     						mberGrdVO.setAmt(mberGrdVO.getAmt());
     				    	mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
@@ -401,6 +449,7 @@
     						// Step 5. 인서트 Or 업데이트
     						MberGrdVO mberGrdVO5 = new MberGrdVO();
     						mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
+    						System.out.println("Step 5. 인서트 Or 업데이트");
     						if (null != mberGrdVO5) {
     							updateMberGrdOk(mberGrdVO);
     						}
@@ -412,6 +461,7 @@
     				}					
     			}			
     		}
+    		System.out.println("END 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)");
     	}
     	catch (Exception e) {
 	    	// Slack 메시지 발송(단순본문)
@@ -421,7 +471,7 @@
 			System.out.println("#############################################################");
 			System.out.println(mberGrdVO.getMberId() + "님 로그인중 회원등급 저장 오류");			    		
     	}
-    	*/												
+												
 	}			
 	
 	// 회원별 등급제 대상여부
@@ -460,6 +510,14 @@
 		return mberGrdDAO.selectMberGrdSaveCnt(mberId);
 	}
 	
+	// 회원별 등급제 기간내, 최종결제이후 환불총금액
+	@Override
+	public int selectMberGrdRefundSum(String mberId) throws Exception{
+		// 공백제거
+		mberId = mberId.trim();
+		
+		return mberGrdDAO.selectMberGrdRefundSum(mberId);
+	}
 	
 	// 회원별 등급 히스토리 등록
 	@Override
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
@@ -417,7 +417,7 @@
 					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
+						, (SUM(S.AMT) - IFNULL(SUM(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10)), 0)) AS AMT_SUM
 						, (
 							SELECT IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) FROM MJ_REFUND R
 							WHERE S.USER_ID = R.MBER_ID
@@ -643,7 +643,7 @@
 					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
+						, (SUM(S.AMT) - IFNULL(SUM(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10)), 0)) AS AMT_SUM
 						, (
 							SELECT IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) FROM MJ_REFUND R
 							WHERE S.USER_ID = R.MBER_ID
@@ -712,7 +712,7 @@
 					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
+						, (SUM(S.AMT) - IFNULL(SUM(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10)), 0)) AS AMT_SUM
 						, (
 							SELECT IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) FROM MJ_REFUND R
 							WHERE S.USER_ID = R.MBER_ID
@@ -947,7 +947,18 @@
 		LIMIT 1
 	</select>	
 	
-	
+	<!-- 회원별 등급제 기간내, 최종결제이후 환불총금액 -->
+	<select id="mberGrdDAO.selectMberGrdRefundSum" parameterClass="String" resultClass="Integer">
+		SELECT 
+			IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) refundSum 
+		FROM MJ_REFUND R
+		WHERE R.MBER_ID = #mberId#
+		AND R.REFUND_STATUS  = '3' 
+		AND R.REFUND_DIVISION = '1'
+		AND R.REFUND_HANDLE_PNTTM >= (SELECT G.GRD_DATE FROM MJ_MBER_GRD_INFO G WHERE G.MBER_ID = #mberId#)
+		AND R.REFUND_HANDLE_PNTTM >= (SELECT MAX(S.REG_DATE) FROM MJ_PG S WHERE S.USER_ID = #mberId# AND S.PG_STATUS = '1')
+	</select>	
+		
 	<!-- 회원별 등급 히스토리 등록 -->
 	<insert id="mberGrdDAO.insertMberGrdHist" parameterClass="mberGrdVO">
 		INSERT INTO MJ_MBER_GRD_HIST
@@ -991,34 +1002,67 @@
 	<!-- 회원별 등급 히스토리 목록 => 등급제 시행일이후 목록(사용자화면용) -->
 	<!-- AND A.GRD_DATE >= (SELECT S.GRD_DATE FROM MJ_MBER_GRD_INFO S WHERE S.MBER_ID = #mberId#) -->
 	<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
-			, 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
-			, A.GRD_DATE			AS grdDate
-			, A.MOID				AS moid
-			, A.REG_ID				AS regId
-			, DATE_FORMAT(A.REG_DATE, '%Y-%m-%d %H:%i')			AS regDate
-			, A.EDIT_ID				AS editId
-			, A.EDIT_DATE			AS editDate	
-		FROM MJ_MBER_GRD_HIST A
+	<![CDATA[
+		SELECT 
+			M3.totCnt
+			, M3.mberId
+			, M3.regDate
+			, M3.amt
+			, M3.amtStepSum
+			, M3.refundSum
+			, M3.totAmt
+			, M3.GRD_SET_NO			AS grdSetNo 
+			, B.GRD_SET_NM			AS grdSetNm				
+		FROM (
+			SELECT 
+				M2.totCnt
+				, M2.mberId
+				, M2.regDate
+				, M2.amt
+				, M2.amtStepSum
+				, M2.refundSum
+				, (IFNULL(ROUND(M2.amtStepSum - M2.refundSum), 0)) AS totAmt
+				, (
+					SELECT IFNULL(MIN(S1.GRD_SET_NO), (SELECT MAX(GRD_SET_NO) FROM MJ_MBER_GRD_SETTING)) FROM MJ_MBER_GRD_SETTING S1 WHERE S1.STD_AMT <= IFNULL(ROUND(M2.amtStepSum - M2.refundSum), 0)
+				 ) GRD_SET_NO 		
+			FROM (
+				SELECT 
+					M.totCnt
+					, M.mberId
+					, DATE_FORMAT(M.REG_DATE, '%Y-%m-%d %H:%i')			AS regDate
+					, M.amt
+					, SUM(M.amt) OVER(ORDER BY M.REG_DATE ASC) AS amtStepSum
+					, (
+						SELECT IFNULL(ROUND(SUM(R.TRNSF_CASH)), 0) FROM MJ_REFUND R
+						WHERE M.mberId = R.MBER_ID
+							AND R.REFUND_STATUS  = '3' 
+							AND R.REFUND_DIVISION = '1'
+							AND R.REFUND_HANDLE_PNTTM >= (SELECT G.GRD_DATE FROM MJ_MBER_GRD_INFO G WHERE G.MBER_ID = M.mberId)
+							AND M.REG_DATE >= R.REFUND_HANDLE_PNTTM
+					) refundSum
+				FROM (
+					SELECT 
+						COUNT(S.USER_ID) OVER() 	AS totCnt
+						, S.USER_ID					AS mberId
+						, S.REG_DATE
+						, (S.AMT - IFNULL(SS.EVENT_FRST_CASH + ROUND(SS.EVENT_FRST_CASH / 10), 0)) AS amt
+					FROM MJ_PG S 
+					LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS
+						ON S.USER_ID = SS.MBER_ID
+						AND S.MOID = SS.EVENT_PG_MOID
+					WHERE 
+						S.USER_ID = #mberId#
+						AND S.PG_STATUS = '1'	
+						AND S.REG_DATE >= (SELECT G.GRD_DATE FROM MJ_MBER_GRD_INFO G WHERE G.MBER_ID = #mberId#)
+					ORDER BY S.REG_DATE ASC
+				) M
+				ORDER BY M.REG_DATE DESC		
+				LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+			) M2
+		) M3
 		INNER JOIN MJ_MBER_GRD_SETTING B
-			ON A.GRD_SET_NO = B.GRD_SET_NO		
-		WHERE 1=1 
-		AND A.MBER_ID = #mberId#
-		AND IFNULL(TRIM(A.MOID), '') != ''
-		AND A.TOT_AMT > 0
-		AND A.GRD_DATE >= (SELECT S.GRD_DATE FROM MJ_MBER_GRD_INFO S WHERE S.MBER_ID = #mberId#)		
-		ORDER BY A.REG_DATE DESC
-		LIMIT  #recordCountPerPage# OFFSET #firstIndex#	
+			ON M3.GRD_SET_NO = B.GRD_SET_NO
+	]]>
 	</select>
 			
 	<!-- 회원별 등급 히스토리 목록 -->
Add a comment
List