jsshin 5 лет назад
Родитель
Сommit
58a3ef5e9d

+ 21 - 0
src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java

@@ -2,6 +2,7 @@ package com.style24.front.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CustDeliveryAddr;
+import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.WishList;
@@ -146,5 +147,25 @@ public interface TsfCustomerDao {
 	 */
 	int updateCustomerInfo(Customer customer);
 
+	/**
+	 * 고객등급 정책
+	 *
+	 * @param custGrade - 사이트 코드
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	Collection<CustGrade> getCustGradePolicy(CustGrade custGrade);
+
+	/**
+	 * 고객 예상등급 조회
+	 *
+	 * @param custGrade - 사이트 코드
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	CustGrade getExpectedCustGrde(CustGrade custGrade);
+
 
 }

+ 28 - 0
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -7,6 +7,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -955,4 +956,31 @@ public class TsfCustomerService {
 		resultMap.setBoolean("isSuccess", isSuccess);
 		return resultMap;
 	}
+
+	/*
+	 * 고객 예상등급
+	 *
+	 * @param  custGrade - 고객번호
+	 * @return CustGrade
+	 * @author jsshin
+	 * @since 2021. 04. 06
+	 */
+	public GagaMap getExpectedCustGrde(Customer customer) {
+		GagaMap result = new GagaMap();
+		CustGrade params = new CustGrade();
+		params.setCustNo(customer.getCustNo());
+		params.setSiteCd(customer.getSiteCd());
+		Collection<CustGrade> custGradePolicy = customerDao.getCustGradePolicy(params);
+		result.set("custGradePolicy", custGradePolicy);
+		CustGrade expctCustGrade;
+		for (CustGrade grade : custGradePolicy) {
+			grade.setCustNo(customer.getCustNo());
+			expctCustGrade = customerDao.getExpectedCustGrde(grade);
+			if (expctCustGrade != null) {
+				result.set("expctCustGrade", expctCustGrade);
+				return result;
+			}
+		}
+		return result;
+	}
 }

+ 7 - 0
src/main/java/com/style24/front/biz/web/TsfPlanningController.java

@@ -3,6 +3,7 @@ package com.style24.front.biz.web;
 import java.util.Collection;
 import java.util.Map;
 
+import com.style24.front.biz.service.TsfCustomerService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mobile.device.Device;
@@ -61,6 +62,10 @@ public class TsfPlanningController extends TsfBaseController {
 
 	@Autowired
 	private TscCouponService coreCouponService;
+
+	@Autowired
+	private TsfCustomerService customerService;
+
 	/**
 	 * 기획전 메인 화면
 	 * @param cateNo - 카테고리번호
@@ -460,6 +465,8 @@ public class TsfPlanningController extends TsfBaseController {
 			customer.setSiteCd(TscConstants.Site.STYLE24.value());
 			customer.setCustNo(TsfSession.getInfo().getCustNo());
 			customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+
+			mav.addObject("exptCustGrdeMap", customerService.getExpectedCustGrde(customer));
 			mav.addObject("customerInfo", coreCustomerService.getCustomerInfo(customer));
 		}
 

+ 56 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml

@@ -568,4 +568,60 @@
 		WHERE  CUST_NO = #{custNo}
 	</update>
 
+	<!--고객등급 정책조회-->
+	<select id="getCustGradePolicy" parameterType="CustGrade" resultType="CustGrade">
+		/* TsfCustomer.getCustGradePolicy */
+		SELECT SITE_CD
+		     , GRADE_CD
+		     , FN_GET_CODE_NM('G110', GRADE_CD) AS GRADE_CD_NM
+		     , SUBSTRING(GRADE_CD, 6, 2) AS GRADE_CD_NO
+		     , ICON_NM
+		     , CAL_MONTHS
+		     , MIN_BUY_AMT
+		     , MIN_BUY_CNT
+		     , BUY_EXCEPT_AMT
+		     , GRADE_CPN_ID1
+		     , GRADE_CPN_ID2
+		     , GRADE_CPN_ID3
+		     , DISP_ORD
+		     , USE_YN
+		FROM  TB_CUST_GRADE_POLICY
+		WHERE SITE_CD = #{siteCd}
+		AND   USE_YN = 'Y'
+		ORDER BY GRADE_CD
+	</select>
+	
+	<!--고객 예상등급 조회-->
+	<select id="getExpectedCustGrde" parameterType="CustGrade" resultType="CustGrade">
+		/* TsfCustomer.getExpectedCustGrde */
+		SELECT B.ORD_NO_CNT
+		     , B.SUM_REAL_ORD_AMT
+		     , #{gradeCd}        AS GRADE_CD
+		     , FN_GET_CODE_NM('G110', #{gradeCd}) AS GRADE_CD_NM
+		     , SUBSTRING(#{gradeCd}, 6, 2)        AS GRADE_CD_NO
+		FROM  (
+		       SELECT COUNT(DISTINCT A.ORD_NO) AS ORD_NO_CNT
+		            , SUM(A.SUM_REAL_ORD_AMT)  AS SUM_REAL_ORD_AMT
+		       FROM (
+		              SELECT O.ORD_NO
+		                   , SUM(OD.REAL_ORD_AMT + OD.GFCD_USE_AMT) AS SUM_REAL_ORD_AMT
+		              FROM   TB_ORDER O
+		              INNER JOIN
+		                     TB_ORDER_DETAIL OD
+		              ON     O.ORD_NO = OD.ORD_NO
+		              INNER JOIN
+		                     TB_CUSTOMER C
+		              ON     O.CUST_NO = C.CUST_NO
+		              WHERE  OD.ORD_DTL_STAT = 'G013_70' /*구매확정*/
+		              AND    C.CUST_NO = #{custNo}
+		              AND    O.ORD_DT >= DATE_ADD(DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY), INTERVAL -#{calMonths} MONTH)
+		              AND    O.ORD_DT <![CDATA[<]]> DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*익월 1일*/
+		              GROUP BY O.ORD_NO
+		              HAVING SUM(OD.REAL_ORD_AMT + OD.GFCD_USE_AMT) >= #{buyExceptAmt}
+		            ) A
+		       ) B
+		WHERE B.ORD_NO_CNT >= #{minBuyCnt}
+		OR    B.SUM_REAL_ORD_AMT >= #{minBuyAmt}
+	</select>
+
 </mapper>

+ 70 - 2
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -97,7 +97,16 @@
 									</div>
 								</div>
 								<div class="benefit_txt">
-									<p>구매 건수 <strong class="c_primary">6회</strong>, 구매 금액 <strong class="c_primary">300,000원</strong> 더 구매하시면 <strong><span class="c_black">VIP</span>로 등급UP!</strong></p> <!-- 등급 상승까지 남은 정보 안내 -->
+									<p id="etcGradeDp">
+										<span id="ordSpan">	구매 건수 <strong id="ordCnt" class="c_primary" >0회</strong> </span>
+										<span id="realOrdAmtSpan">, 구매 금액 <strong id="realOrdAmt" class="c_primary">0원 </span>
+										</strong> 더 구매하시면 <strong>
+										<span id="nextGrde" class="c_black"></span>로 등급UP!</strong>
+									</p> <!-- 등급 상승까지 남은 정보 안내 -->
+									<p id="vipGradeDp" style="display: none;">
+										<strong>등급 유지 조건 달성!</strong> 다음달에도
+										<strong class="c_primary"><span>VIP</span> 등급 혜택</strong>을 받으실 수 있습니다.
+									</p>
 								</div>
 							</div>
 							<!-- //회원 등급 progress바 -->
@@ -255,12 +264,71 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+ 	let exptCustGrdeMap = [[${exptCustGrdeMap}]]
 	$(document).ready(function() {
 
+		fnInit();
 
+	});
 
+ 	var fnInit = function () {
+		let expctCustGrade = exptCustGrdeMap.expctCustGrade;
+		let custGradePolicy = exptCustGrdeMap.custGradePolicy;
+		let nextCustGrade;
+
+
+		if (Number(expctCustGrade.custGradeNo) > 10) {
+
+		}
+
+
+		$(custGradePolicy).each(function(idx, item) {
+			if (Number(item.gradeCdNo) === (Number(expctCustGrade.gradeCdNo)-10)) {
+				nextCustGrade = item;
+			}
+		});
+
+		let buyAmt = 0;
+		if (nextCustGrade.minBuyAmt > expctCustGrade.sumRealOrdAmt) {
+			buyAmt = nextCustGrade.minBuyAmt - expctCustGrade.sumRealOrdAmt;
+		} else {
+			buyAmt = nextCustGrade.minBuyAmt;
+		}
+
+		let buyCnt = 0;
+		if (nextCustGrade.minBuyCnt > expctCustGrade.ordCnt) {
+			buyCnt = nextCustGrade.minBuyCnt -  expctCustGrade.ordCnt;
+		} else {
+			buyCnt = nextCustGrade.minBuyCnt;
+		}
+
+		let $ordCnt = $('#ordCnt');
+		let $ordSpan = $('#ordSpan');
+		let $realOrdAmt = $('#realOrdAmt');
+		let $realOrdAmtSpan = $('#realOrdAmtSpan');
+		let $nextGrde = $('#nextGrde');
+
+		if (buyAmt > 0) {
+			$realOrdAmtSpan.show()
+			$realOrdAmt.text(buyAmt.addComma()+'원');
+		} else {
+			$realOrdAmtSpan.hide()
+		}
+
+		if (buyCnt > 0) {
+			$ordSpan.show();
+			$ordCnt.text(buyCnt.addComma()+'회');
+		} else {
+			$ordSpan.hide();
+		}
+
+		if (buyAmt > 0 || buyCnt > 0) {
+			$nextGrde.text(nextCustGrade.gradeCdNm)
+		}
+
+
+	};
 
-	});
 /*]]>*/
 </script>