itn 2023-08-22
등급제 대상 여부 업데이트 로직 수정
@04694652d4907d388d7ef00c52871903fb631c57
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
@@ -28,6 +28,9 @@
 	// 회원별 설정 상세
 	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 @@
 	// 회원별 등급 등록 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;
 	
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
@@ -37,6 +37,11 @@
 		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 @@
 		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);
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
@@ -75,6 +75,12 @@
 		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 {
@@ -154,6 +160,12 @@
 	@Override
 	public void insertMberGrdAllByExist(MberGrdVO mberGrdVO) throws Exception {
 		mberGrdDAO.insertMberGrdAllByExist(mberGrdVO);
+	}
+	
+	// 회원별 등급 등록 By MberId
+	@Override
+	public void insertMberGrdByMberId(MberGrdVO mberGrdVO) throws Exception {
+		mberGrdDAO.insertMberGrdByMberId(mberGrdVO);
 	}
 	
 	// 회원별 등급 히스토리 등록 All
@@ -368,6 +380,7 @@
 	    				    	MberGrdVO mberGrdVO5 = new MberGrdVO();
 	    						mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
 	    						if (mberGrdVO5 != null) {
+	    							// 업데이트
 	    							updateMberGrdOk(mberGrdVO);
 	    								
 	    							// 회원별 등급 히스토리 인서트
@@ -381,8 +394,53 @@
 	    							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 @@
 	    				    	MberGrdVO mberGrdVO5 = new MberGrdVO();
 	    						mberGrdVO5 = selectMberGrdDetail(mberGrdVO);
 	    						if (mberGrdVO5 != null) {
+	    							// 업데이트
 	    							updateMberGrdOk(mberGrdVO);
 	    						}
 	    						else {
@@ -463,8 +522,53 @@
 	    							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 회원별 등급 적용(로그인, 환불시 사용 => 히스토리 저장 제외)");
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
@@ -466,16 +466,37 @@
     	// 로그인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;
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
@@ -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#
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
@@ -237,16 +237,16 @@
 					<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 @@
 					   		<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>					    					    						    	
Add a comment
List