itn 2023-07-05
등급제 신청기능 추가
@1b6f5e22afedffc119e127497f126fe56ea5e230
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
@@ -14,12 +14,21 @@
 	// 등급제 설정 목록
 	List<MberGrdVO> selectMberGrdSettingList(MberGrdVO mberGrdVO) throws Exception;
 
+	// 회원별 설정 상세
+	public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception;
+	
 	// 등급제 설정 일괄변경
 	public int updateGrdSettingList(MberGrdVO mberGrdVO) throws Exception;
+
+	// 등급제 등급 목록
+	List<MberGrdVO> selectMberGrdList(MberGrdVO mberGrdVO) throws Exception;
 	
 	// 회원별 등급 상세
 	public MberGrdVO selectMberGrdDetail(MberGrdVO mberGrdVO) throws Exception;
 
+	// 회원별 등급 누적결제액 상세
+	public MberGrdVO selectMberGrdAmtDetail(MberGrdVO mberGrdVO) throws Exception;
+	
 	// 회원별 등급 등록
 	public void insertMberGrd(MberGrdVO mberGrdVO)  throws Exception;
 	
@@ -32,9 +41,15 @@
 	// 회원별 등급 초기화
 	public int updateMberGrdEndAll(MberGrdVO mberGrdVO) throws Exception;
 
+	// 회원별 등급 적용
+	public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception;
+	
 	// 회원별 등급 진행여부
 	int selectMberGrdPrgCnt(String userId) throws Exception;
 	
+	// 회원별 등급 저장여부
+	int selectMberGrdSaveCnt(String userId) throws Exception;
+	
 	
 	// 회원별 등급 히스토리 등록
 	public void insertMberGrdHist(MberGrdVO mberGrdVO)  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
@@ -30,7 +30,7 @@
 	private String mberId;
 	private String amt;
 	private String grdStartDate;
-	private String grd_endDate;
+	private String grdEndDate;
 	private String grdStatus;
 	private int mberGrdHistNo;
 
@@ -184,11 +184,11 @@
 	public void setGrdStartDate(String grdStartDate) {
 		this.grdStartDate = grdStartDate;
 	}
-	public String getGrd_endDate() {
-		return grd_endDate;
+	public String getGrdEndDate() {
+		return grdEndDate;
 	}
-	public void setGrd_endDate(String grd_endDate) {
-		this.grd_endDate = grd_endDate;
+	public void setGrdEndDate(String grd_endDate) {
+		this.grdEndDate = grd_endDate;
 	}
 	public String getGrdStatus() {
 		return grdStatus;
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
@@ -20,10 +20,16 @@
 		return (MberGrdVO) select("mberGrdDAO.selectMberSettingDetail", mberGrdVO);
 	}	
 	
+	
 	// 등급제 설정 목록
 	@SuppressWarnings("unchecked")
 	public List<MberGrdVO> selectMberGrdSettingList(MberGrdVO mberGrdVO) throws Exception{
 		return (List<MberGrdVO>)list("mberGrdDAO.selectMberGrdSettingList", mberGrdVO);
+	}
+	
+	// 회원별 설정 상세
+	public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception{
+		return (MberGrdVO) select("mberGrdDAO.selectMberGrdSettingDetail", mberGrdVO);
 	}
 	
 	// 등급제 설정 일괄변경
@@ -31,11 +37,22 @@
 		return update("mberGrdDAO.updateGrdSetting", mberGrdVO);
 	}	
 	
+	// 등급제 등급 목록
+	@SuppressWarnings("unchecked")
+	public List<MberGrdVO> selectMberGrdList(MberGrdVO mberGrdVO) throws Exception{
+		return (List<MberGrdVO>)list("mberGrdDAO.selectMberGrdList", mberGrdVO);
+	}
+	
 	// 회원별 등급 상세
 	public MberGrdVO selectMberGrdDetail(MberGrdVO mberGrdVO) throws Exception{
 		return (MberGrdVO) select("mberGrdDAO.selectMberGrdDetail", mberGrdVO);
 	}
 
+	// 회원별 등급 누적결제액 상세
+	public MberGrdVO selectMberGrdAmtDetail(MberGrdVO mberGrdVO) throws Exception{
+		return (MberGrdVO) select("mberGrdDAO.selectMberGrdAmtDetail", mberGrdVO);
+	}
+	
 	// 회원별 등급 등록
 	public void insertMberGrd(MberGrdVO mberGrdVO) throws Exception{
 		insert("mberGrdDAO.insertMberGrd", mberGrdVO);
@@ -61,6 +78,11 @@
 		return (int) select("mberGrdDAO.selectMberGrdPrgCnt", userId);
 	}	
 	
+	// 회원별 등급 저장여부
+	public int selectMberGrdSaveCnt(String userId) throws Exception{
+		return (int) select("mberGrdDAO.selectMberGrdSaveCnt", userId);
+	}	
+	
 	
 	// 회원별 등급 히스토리 등록
 	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
@@ -29,10 +29,17 @@
 	}	
 	
 	
+	// 등급제 설정 목록
 	@Override
 	public List<MberGrdVO> selectMberGrdSettingList(MberGrdVO mberGrdVO) throws Exception {
 		return mberGrdDAO.selectMberGrdSettingList(mberGrdVO);
 	}
+	
+	// 회원별 설정 상세
+	@Override
+	public MberGrdVO selectMberGrdSettingDetail(MberGrdVO mberGrdVO) throws Exception {
+		return mberGrdDAO.selectMberGrdSettingDetail(mberGrdVO);
+	}	
 	
 	// 등급제 설정 일괄변경
 	@Override
@@ -56,11 +63,23 @@
 		return updateCnt; 
 	}		
 
+
+	// 등급제 등급 목록
+	@Override
+	public List<MberGrdVO> selectMberGrdList(MberGrdVO mberGrdVO) throws Exception {
+		return mberGrdDAO.selectMberGrdList(mberGrdVO);
+	}
 	
 	// 회원별 등급 상세
 	@Override
 	public MberGrdVO selectMberGrdDetail(MberGrdVO mberGrdVO) throws Exception {
 		return mberGrdDAO.selectMberGrdDetail(mberGrdVO);
+	}	
+	
+	// 회원별 등급 누적결제액 상세
+	@Override
+	public MberGrdVO selectMberGrdAmtDetail(MberGrdVO mberGrdVO) throws Exception {
+		return mberGrdDAO.selectMberGrdAmtDetail(mberGrdVO);
 	}	
 	
 	// 회원별 등급 등록
@@ -78,7 +97,16 @@
 	// 회원별 등급 초기화
 	@Override
 	public int updateMberGrdAll(MberGrdVO mberGrdVO) throws Exception {
-		return mberGrdDAO.updateMberGrdAll(mberGrdVO);
+		int updateCnt = 0;
+		
+		// Step 1. 등급제 시행 ON 일경우
+		MberGrdVO mberGrdVO1 = new MberGrdVO();
+		mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
+		if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate()) {
+			updateCnt = mberGrdDAO.updateMberGrdAll(mberGrdVO);
+		}
+		
+		return updateCnt;
 	}	
 	
 	// 회원별 등급 일괄변경
@@ -87,12 +115,77 @@
 		return mberGrdDAO.updateMberGrdEndAll(mberGrdVO);
 	}	
 	
+	// 회원별 등급 적용
+	@Override
+	public void mberGrdSaveByUser(MberGrdVO mberGrdVO) throws Exception {
+		mberGrdVO.setRegId(mberGrdVO.getMberId());
+		mberGrdVO.setEditId(mberGrdVO.getMberId());
+		
+		// Step 1. 등급제 시행 ON 일경우
+		MberGrdVO mberGrdVO1 = new MberGrdVO();
+		mberGrdVO1 = selectMberSettingDetail(mberGrdVO);
+		if (mberGrdVO1.getGrdNoti().equals("Y") && null != mberGrdVO1.getGrdDate()) {
+			mberGrdVO.setGrdDate(mberGrdVO1.getGrdDate());
+			
+			// Step 2. 누적결제금액(이벤트금액 제외) 추출 및 등급 조회
+			MberGrdVO mberGrdVO2 = new MberGrdVO();				
+			mberGrdVO2 = selectMberGrdAmtDetail(mberGrdVO);
+			if (null != mberGrdVO2) {
+				mberGrdVO.setTotAmt(mberGrdVO2.getTotAmt());
+				mberGrdVO.setGrdSetNo(mberGrdVO2.getGrdSetNo());
+				
+				// Step 3. 등급제 설정값 조회
+				MberGrdVO mberGrdVO3 = new MberGrdVO();
+				mberGrdVO3 = selectMberGrdSettingDetail(mberGrdVO);
+				if (null != mberGrdVO3) {
+					mberGrdVO.setAmt("0");
+			    	mberGrdVO.setTotAmt(mberGrdVO.getTotAmt());
+			    	mberGrdVO.setShortPrice(mberGrdVO3.getShortPrice());
+			    	mberGrdVO.setLongPrice(mberGrdVO3.getLongPrice());
+			    	mberGrdVO.setPicturePrice(mberGrdVO3.getPicturePrice());
+			    	mberGrdVO.setPicture2Price(mberGrdVO3.getPicture2Price());
+			    	mberGrdVO.setPicture3Price(mberGrdVO3.getPicture3Price());
+			    	mberGrdVO.setGrdStartDate(mberGrdVO.getGrdDate() + " 00:00:00");
+			    	mberGrdVO.setGrdEndDate("9999:12:31 23:59:59");
+			    	mberGrdVO.setGrdStatus("Y");
+			    	
+					// Step 4. 인서트 Or 업데이트
+					MberGrdVO mberGrdVO4 = new MberGrdVO();
+					mberGrdVO4 = selectMberGrdDetail(mberGrdVO);
+					if (null != mberGrdVO4) {
+						// 업데이트 => 현재 등급보다 낮거나 같으면 업데이트 처리
+						if (mberGrdVO4.getGrdSetNo() >= mberGrdVO.getGrdSetNo()) {
+							updateMberGrd(mberGrdVO);
+							
+							// 회원별 등급 히스토리 인서트
+							insertMberGrdHist(mberGrdVO);							
+						}
+					}
+					else {
+						// 인서트
+						insertMberGrd(mberGrdVO);
+						
+						// 회원별 등급 히스토리 인서트
+						insertMberGrdHist(mberGrdVO);
+					}
+				}
+			}
+		}
+		
+	}			
+	
 	// 회원별 등급 진행여부
 	@Override
 	public int selectMberGrdPrgCnt(String userId) throws Exception{
 		return mberGrdDAO.selectMberGrdPrgCnt(userId);
 	}
 	
+	// 회원별 등급 저장여부
+	@Override
+	public int selectMberGrdSaveCnt(String userId) throws Exception{
+		return mberGrdDAO.selectMberGrdSaveCnt(userId);
+	}
+	
 	
 	// 회원별 등급 히스토리 등록
 	@Override
src/main/java/itn/let/sym/grd/web/MberGrdController.java
--- src/main/java/itn/let/sym/grd/web/MberGrdController.java
+++ src/main/java/itn/let/sym/grd/web/MberGrdController.java
@@ -127,4 +127,39 @@
 		return modelAndView;
 	}		
     
+	// 회원별 등급 적용 테스트
+	@RequestMapping(value = "/sym/grd/mberGrdSaveAjax.do")
+	public ModelAndView mberGrdSaveAjax(
+			@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{
+        	
+       		// 회원별 등급 적용
+        	mberGrdVO.setMberId("nopay");
+       		mberGrdService.mberGrdSaveByUser(mberGrdVO);
+       		
+		}
+		catch(Exception e) {
+			isSuccess = false;
+			msg = e.getMessage();
+		}		
+
+		modelAndView.addObject("isSuccess", isSuccess);
+		modelAndView.addObject("msg", msg);
+		
+		return modelAndView;
+	}			
+	
+		
 }
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
@@ -17,7 +17,7 @@
 	<select id="mberGrdDAO.selectMberSettingDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
 		SELECT
 			GRD_NOTI AS grdNoti
-			, GRD_DATE AS grdDate 
+			, DATE_FORMAT(GRD_DATE, '%Y-%m-%d' ) AS grdDate 
 		FROM
 			MJ_MBER_SETTING
 		LIMIT 1
@@ -44,6 +44,26 @@
 		ORDER BY A.GRD_SET_NO ASC
 	</select>
 
+	<!-- 등급제 설정 상세 -->
+	<select id="mberGrdDAO.selectMberGrdSettingDetail" 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
+		WHERE A.GRD_SET_NO = #grdSetNo#
+	</select>
+
 	<!-- 등급제 설정 일괄변경 일괄변경 -->
 	<update id="mberGrdDAO.updateGrdSetting" parameterClass="mberGrdVO">
 		UPDATE mj_mber_grd_setting A 
@@ -59,6 +79,39 @@
 		WHERE A.GRD_SET_NO = #grdSetNo#
 	</update>	
 
+	<!-- 회원별 등급 목록 -->
+	<select id="mberGrdDAO.selectMberGrdList" parameterClass="mberGrdVO" resultClass="mberGrdVO">
+		SELECT
+			COUNT(MBER_ID) OVER() 	AS totCnt
+			, MBER_ID				AS mberId
+			, GRD_SET_NO			AS grdSetNo
+			, SHORT_PRICE			AS shortPrice
+			, LONG_PRICE			AS longPrice
+			, PICTURE_PRICE			AS picturePrice
+			, PICTURE2_PRICE		AS picture2Price
+			, PICTURE3_PRICE		AS picture3Price
+			, AMT					AS amt
+			, TOT_AMT				AS totAmt
+			, GRD_START_DATE		AS grdStartDate
+			, GRD_END_DATE			AS grdEndDate
+			, GRD_STATUS			AS grdStatus
+			, REG_ID				AS regId
+			, REG_DATE				AS regDate
+			, EDIT_ID				AS editId
+			, EDIT_DATE				AS editDate
+		FROM
+			mj_mber_grd_info
+		WHERE 1=1
+		ORDER BY 1=1
+		<isNotEmpty property="searchSortCnd">
+			,$searchSortCnd$
+		</isNotEmpty>
+		<isNotEmpty property="searchSortOrd">
+		 	$searchSortOrd$
+		</isNotEmpty>
+		LIMIT  #recordCountPerPage# OFFSET #firstIndex#	
+	</select>
+	
 	<!-- 회원별 등급 상세 -->
 	<select id="mberGrdDAO.selectMberGrdDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
 		SELECT
@@ -72,7 +125,7 @@
 			, AMT						AS amt
 			, TOT_AMT				AS totAmt
 			, GRD_START_DATE		AS grdStartDate
-			, GRD_END_DATE		AS grd_endDate
+			, GRD_END_DATE		AS grdEndDate
 			, GRD_STATUS			AS grdStatus
 			, REG_ID					AS regId
 			, REG_DATE				AS regDate
@@ -84,6 +137,34 @@
 			MBER_ID = #mberId#
 	</select>
 
+	<!-- 회원별 등급 누적결제액 상세 -->
+	<select id="mberGrdDAO.selectMberGrdAmtDetail" parameterClass="mberGrdVO" resultClass="mberGrdVO">
+	<![CDATA[
+		SELECT
+			M.USER_ID AS mberId
+			, M.AMT_SUM AS totAmt
+			, M.GRD_SET_NO AS grdSetNo 				
+		FROM (
+			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
+				, (
+					SELECT MIN(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))
+				 ) GRD_SET_NO 
+			FROM MJ_PG S 
+			LEFT OUTER JOIN MJ_EVENT_MBER_INFO SS
+				ON S.USER_ID = SS.MBER_ID
+				AND SS.EVENT_START_DATE >= CONCAT(DATE_FORMAT(#grdDate#, '%Y-%m-%d'), ' ', '00:00:00')
+			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.USER_ID = #mberId#
+	]]>
+	</select>
+	
 	<!-- 회원별 등급 등록 -->
 	<insert id="mberGrdDAO.insertMberGrd" parameterClass="mberGrdVO">
 		INSERT INTO mj_mber_grd_info 
@@ -117,7 +198,7 @@
 			, #amt#
 			, #totAmt#
 			, #grdStartDate#
-			, #grd_endDate#
+			, #grdEndDate#
 			, #grdStatus#
 			, #regId#
 			, NOW()
@@ -136,12 +217,9 @@
 			, PICTURE_PRICE			= #picturePrice#
 			, PICTURE2_PRICE		= #picture2Price#
 			, PICTURE3_PRICE		= #picture3Price#
-			, AMT						= #amt#
+			, AMT					= #amt#
 			, TOT_AMT				= #totAmt#
-			, GRD_START_DATE		= #grdStartDate#
-			, GRD_END_DATE		= #grd_endDate#
-			, GRD_STATUS			= #grdStatus#
-			, EDIT_ID					= #editId#
+			, EDIT_ID				= #editId#
 			, EDIT_DATE				= NOW()
 		WHERE 
 			MBER_ID = #mberId#
@@ -216,7 +294,16 @@
 			AND NOW() BETWEEN GRD_START_DATE AND GRD_END_DATE
 		LIMIT 1
 	</select>
-
+	
+	<!-- 회원별 등급 저장여부 -->
+	<select id="mberGrdDAO.selectMberGrdSaveCnt" parameterClass="String" resultClass="Integer">
+		SELECT
+			COUNT(0)
+		FROM MJ_MBER_GRD_INFO A 
+		WHERE A.MBER_ID = #mberId#
+		LIMIT 1
+	</select>	
+	
 	
 	<!-- 회원별 등급 히스토리 등록 -->
 	<insert id="mberGrdDAO.insertMberGrdHist" parameterClass="mberGrdVO">
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
@@ -84,6 +84,32 @@
 		}
 	}		
 	
+	// 등급제 적용 테스트
+	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>
 </head>
 <body>
@@ -172,6 +198,7 @@
 			<br />
 			<div class="btnWrap">
 				<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:setMberGrdSettingMassEdit(); return false;">
 			</div>
Add a comment
List