jsshin 5 лет назад
Родитель
Сommit
13bc3096ae

+ 37 - 0
src/main/java/com/style24/batch/biz/dao/TsbCustomerDao.java

@@ -1,6 +1,7 @@
 package com.style24.batch.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
 
@@ -136,4 +137,40 @@ public interface TsbCustomerDao {
 	 * @since  2021. 05. 06
 	 */
 	Collection<Customer> getMarketingAgreeNoticeTargetList(CustomerSearch customerSearch);
+
+	/**
+	 * 회원등급정책 목록
+	 *
+	 * @return Collection<CustGrade>
+	 * @author jsshin
+	 * @since  2021. 05. 07
+	 */
+	Collection<CustGrade> getCustGradePolicyList(CustGrade custGrade);
+
+	/**
+	 * 변경된 회원등급 이력 생성
+	 *
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since  2021. 05. 07
+	 */
+	int createChangeCustGradeHst(CustGrade custGrade);
+
+	/**
+	 * 변경된등급 회원 이력 생성
+	 *
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since  2021. 05. 07
+	 */
+	int createChangeCustomerHst(CustGrade custGrade);
+
+	/**
+	 * 회원등급 변경 처리
+	 *
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since  2021. 05. 07
+	 */
+	int updateCustomerGrade(CustGrade custGrade);
 }

+ 38 - 0
src/main/java/com/style24/batch/biz/service/TsbCustomerService.java

@@ -8,6 +8,7 @@ import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.util.CryptoUtils;
 import com.style24.persistence.domain.CustContactHst;
+import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -284,4 +285,41 @@ public class TsbCustomerService {
 		result.setInt("failCnt", failCnt);
 		return result;
 	}
+
+	/**
+	 * 회원등급 변경
+	 *
+	 * @param custGrade - 정보
+	 * @return GagaMap - 성공/실패 카운트
+	 * @author jsshin
+	 * @since 2021. 05. 06
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap saveCustomerGrade(CustGrade custGrade) {
+		GagaMap result = new GagaMap();
+		Collection<CustGrade> custGradeCollection = customerDao.getCustGradePolicyList(custGrade);
+		int custGradeHstCnt = 0;
+
+		// 1. 등급산정
+		for (CustGrade grade : custGradeCollection) {
+			grade.setSiteCd(custGrade.getSiteCd());
+			grade.setRegNo(custGrade.getRegNo());
+			grade.setCalMonths(custGrade.getCalMonths());
+			custGradeHstCnt += customerDao.createChangeCustGradeHst(grade);
+		}
+
+		// 2. 회원이력 생성
+		int custHstCnt = customerDao.createChangeCustomerHst(custGrade);
+
+		// 3. 회원등급 변경
+		int custGradeCnt = customerDao.updateCustomerGrade(custGrade);
+
+		result.setInt("custGradeHstCnt", custGradeHstCnt);
+		result.setInt("custHstCnt", custHstCnt);
+		result.setInt("custGradeCnt", custGradeCnt);
+
+		return result;
+	}
+
+
 }

+ 18 - 0
src/main/java/com/style24/batch/biz/task/TsbCustomerTask.java

@@ -3,6 +3,7 @@ package com.style24.batch.biz.task;
 
 import com.style24.batch.biz.job.customer.TsbDormantTransformJob;
 import com.style24.batch.biz.job.customer.TsbDormantScheduleJob;
+import com.style24.batch.biz.job.customer.TsbGradeChangeJob;
 import com.style24.batch.biz.job.customer.TsbMarketingAgreementNoticeJob;
 import com.style24.batch.biz.job.customer.TsbPrivacyPolicyNoticeJob;
 import com.style24.batch.biz.job.customer.TsbSecedeProcessJob;
@@ -37,6 +38,9 @@ public class TsbCustomerTask {
 	@Autowired
 	TsbMarketingAgreementNoticeJob marketingAgreementNoticeJob;
 
+	@Autowired
+	TsbGradeChangeJob gradeChangeJob;
+
 	/**
 	 * 휴면전환 예정 대상 메일 발송
 	 *
@@ -106,4 +110,18 @@ public class TsbCustomerTask {
 	public void marketingAgreementNoticeJob() throws Exception {
 		marketingAgreementNoticeJob.runById("cron.customer.marketing.agreement.notice");
 	}
+
+		/**
+	 * 마케팅 정보 수신동의 내역 안내 발송
+	 *
+	 * @throws Exception - 예외처리
+	 * @author jsshin
+	 * @since 2021. 05. 06
+	 */
+	//@Scheduled(cron = "${cron.customer.grade.change}")
+	@Scheduled(fixedDelay=360000)
+	@Async
+	public void gradeChangeJob() throws Exception {
+		gradeChangeJob.runById("cron.customer.grade.change");
+	}
 }

+ 184 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsbCustomer.xml

@@ -304,4 +304,188 @@
 		AND     C.SITE_CD = #{siteCd}
 	</select>
 
+	<!--회원등급정책 목록-->
+	<select id="getCustGradePolicyList" parameterType="CustGrade" resultType="CustGrade">
+		/*TsbCustomerDao.getCustGradePolicyList*/
+		SELECT GRADE_CD      AS GRADE_ACD
+		     , MIN_BUY_AMT
+		     , MIN_BUY_CNT
+		     , BUY_EXCEPT_AMT
+		     , CAL_MONTHS
+		FROM   TB_CUST_GRADE_POLICY
+		WHERE  USE_YN = 'Y'
+		AND    SITE_CD = #{siteCd}
+		ORDER BY GRADE_CD
+	</select>
+
+	<!--변경된 회원등급 이력 생성-->
+	<insert id="createChangeCustGradeHst" parameterType="CustGrade" timeout="100">
+		/*TsbCustomerDao.createChangeCustGradeHst*/
+		INSERT INTO TB_CUST_GRADE_HST (
+		       CUST_NO
+		     , APPLY_YMD
+		     , GRADE_BCD
+		     , GRADE_ACD
+		     , REAL_ORD_AMT
+		     , ORD_CNT
+		     , REG_NO
+		     , REG_DT
+		)
+		SELECT TG.CUST_NO
+		     , DATE_FORMAT(NOW(), '%Y%m%d') AS APPLY_YMD
+		     , TG.CUST_GRADE                AS GRADE_BCD
+		     , #{gradeacd}                  AS GRADE_ACD
+		     , TG.SUM_REAL_ORD_AMT          AS REAL_ORD_AMT
+		     , TG.ORD_NO_CNT                AS ORD_CNT
+		     , #{regNo}                     AS REG_NO
+		     , NOW()                        AS REG_DT
+		FROM (
+		     SELECT C.CUST_NO
+		          , COUNT(DISTINCT ORD.ORD_NO)      AS ORD_NO_CNT
+		          , IFNULL(ORD.SUM_REAL_ORD_AMT, 0) AS SUM_REAL_ORD_AMT
+		          , MAX(C.CUST_GRADE)               AS CUST_GRADE
+		     FROM TB_CUSTOMER C
+		     LEFT JOIN (
+		                SELECT O.CUST_NO
+		                     , 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
+		                WHERE  O.ORD_NO = OD.ORD_NO
+		                AND    OD.ORD_DTL_STAT = 'G013_70' /*구매확정*/
+		                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, O.CUST_NO
+		                HAVING SUM(OD.REAL_ORD_AMT + OD.GFCD_USE_AMT) >= #{buyExceptAmt}
+		               ) ORD
+		     ON    C.CUST_NO = ORD.CUST_NO
+		     WHERE C.CUST_STAT = 'G104_10'
+		     AND   C.CUST_NO != 0
+		     AND   C.CUST_NO = 100041
+		     GROUP BY C.CUST_NO
+		     ) TG
+		WHERE (TG.ORD_NO_CNT >= #{minBuyCnt} OR TG.SUM_REAL_ORD_AMT >= #{minBuyAmt})
+		AND   NOT EXISTS (
+		                  SELECT 1
+		                  FROM  TB_CUST_GRADE_HST CGH
+		                  WHERE CGH.CUST_NO = TG.CUST_NO
+		                  AND   CGH.APPLY_YMD = DATE_FORMAT(NOW(), '%Y%m%d')
+		                 )
+	</insert>
+
+	<!--변경된등급 회원 이력 생성-->
+	<insert id="createChangeCustomerHst" parameterType="CustGrade" timeout="100">
+		/*TsbCustomerDao.createChangeCustomerHst*/
+		INSERT INTO TB_CUSTOMER_HST (
+		       CUST_NO
+		     , CUST_ID
+		     , CUST_NM
+		     , PASSWD
+		     , BIRTH_YMD
+		     , SEX_GB
+		     , CELL_PHNNO
+		     , APP_AGREE_YN
+		     , APP_AGREE_DT
+		     , SMS_AGREE_YN
+		     , SMS_AGREE_DT
+		     , EMAIL
+		     , EMAIL_AGREE_YN
+		     , EMAIL_AGREE_DT
+		     , MK_AGREE_YN
+		     , MK_AGREE_DT
+		     , HOME_ZIPCODE
+		     , HOME_BASE_ADDR
+		     , HOME_DTL_ADDR
+		     , SITE_CD
+		     , FRONT_GB
+		     , AF_LINK_CD
+		     , CUST_GB
+		     , CUST_GRADE
+		     , JOIN_DT
+		     , FOREIGNER_YN
+		     , CUST_STAT
+		     , PASSWD_CHG_DT
+		     , TEMP_PASSWD_YN
+		     , LOGIN_LDT
+		     , CI
+		     , AUTH_DT
+		     , SNS_TYPE
+		     , MANAGED_RSN
+		     , MANAGED_DTL_RSN
+		     , MANAGED_DT
+		     , SECEDE_RSN
+		     , SECEDE_DTL_RSN
+		     , SECEDE_DT
+		     , RM_DORMANT_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT CUST_NO
+		     , CUST_ID
+		     , CUST_NM
+		     , PASSWD
+		     , BIRTH_YMD
+		     , SEX_GB
+		     , CELL_PHNNO
+		     , APP_AGREE_YN
+		     , APP_AGREE_DT
+		     , SMS_AGREE_YN
+		     , SMS_AGREE_DT
+		     , EMAIL
+		     , EMAIL_AGREE_YN
+		     , EMAIL_AGREE_DT
+		     , MK_AGREE_YN
+		     , MK_AGREE_DT
+		     , HOME_ZIPCODE
+		     , HOME_BASE_ADDR
+		     , HOME_DTL_ADDR
+		     , SITE_CD
+		     , FRONT_GB
+		     , AF_LINK_CD
+		     , CUST_GB
+		     , CUST_GRADE
+		     , JOIN_DT
+		     , FOREIGNER_YN
+		     , CUST_STAT
+		     , PASSWD_CHG_DT
+		     , TEMP_PASSWD_YN
+		     , LOGIN_LDT
+		     , CI
+		     , AUTH_DT
+		     , SNS_TYPE
+		     , MANAGED_RSN
+		     , MANAGED_DTL_RSN
+		     , MANAGED_DT
+		     , SECEDE_RSN
+		     , SECEDE_DTL_RSN
+		     , SECEDE_DT
+		     , RM_DORMANT_DT
+		     , #{regNo}   AS REG_NO
+		     , NOW()      AS REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		FROM   TB_CUSTOMER
+		WHERE  CUST_NO IN (
+		                   SELECT CGH.CUST_NO
+		                   FROM   TB_CUST_GRADE_HST CGH
+		                   WHERE  CGH.APPLY_YMD = DATE_FORMAT(NOW(), '%Y%m%d')
+		                   )
+	</insert>
+
+	<!--회원등급 변경 처리-->
+	<update id="updateCustomerGrade" parameterType="CustGrade" timeout="100">
+		/*TsbCustomerDao.updateCustomerGrade*/
+		UPDATE TB_CUSTOMER C
+		INNER JOIN
+		       TB_CUST_GRADE_HST CGH
+		ON     C.CUST_NO = CGH.CUST_NO
+		SET    CUST_GRADE = CGH.GRADE_ACD
+		     , UPD_DT = NOW()
+		     , UPD_NO = #{updNo}
+		WHERE  CGH.APPLY_YMD = DATE_FORMAT(NOW(), '%Y%m%d')
+	</update>
+
 </mapper>