Преглед изворни кода

이태영 - 20210712 위시리스트 혜택 추가 알림 푸시 개발

xodud lee пре 4 година
родитељ
комит
37fff51658

+ 11 - 2
src/main/java/com/style24/batch/biz/dao/TsbCartDao.java

@@ -35,13 +35,22 @@ public interface TsbCartDao {
 	Collection<Order> getAddCouponList(Order param);
 
 	/**
-	 * 혜택 추가 푸시 알림 대상 조회
+	 * 장바구니 혜택 추가 푸시 알림 대상 조회
 	 * @param param
 	 * @return
 	 * @author xodud1202
 	 * @since  2021. 07. 09
 	 */
-	Collection<Customer> getAddBenefitPushCustomerList(Order param);
+	Collection<Customer> getCartAddBenefitPushCustomerList(Order param);
+
+	/**
+	 * 위시리스트 혜택 추가 푸시 알림 대상 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since  2021. 07. 12
+	 */
+	Collection<Customer> getWishlistAddBenefitPushCustomerList(Order param);
 
 	/**
 	 * 장바구니 기간 만료 데이터 삭제

+ 32 - 29
src/main/java/com/style24/batch/biz/job/order/TsbCartAddCouponPushJob.java

@@ -45,36 +45,39 @@ public class TsbCartAddCouponPushJob extends TsbAbstractJob<Collection<Order>, C
 
 	@Override
 	public Collection<Order> process(Collection<Order> params) throws Exception {
-		int[] cpnIdArr = new int[params.size()];
-
 		try {
-			int i = 0;
-			for(Order param : params) {
-				cpnIdArr[i++] = param.getCpnId();
-			}
-
-			// 추가된 쿠폰이 적용된 장바구니 상품을 가진 고객 조회
-			Order cpn = new Order();
-			cpn.setCpnIdArr(cpnIdArr);
-			cpn.setTableName("TB_CART");
-			Collection<Customer> custList = cartService.getAddBenefitPushCustomerList(cpn);
-
-			// 핑거푸시
-			for(Customer cust : custList) {
-				int ansSq = FingerPushSender.FingerPushSq.SHOPPING_BAG_DISCOUNT.value();
-				cust.setRegNo(TsbConstants.REG_NO);
-				cust.setUpdNo(TsbConstants.REG_NO);
-
-				// 앱 푸시 데이터 insert
-				coreFingerPushService.send(cust, ansSq);
-				succCnt++;
-			}
-
-			// 송부 이력 저장
-			for(Order param : params) {
-				param.setRegNo(TsbConstants.REG_NO);	// 등록자
-				param.setBenefitGb("C");				// 장바구니
-				cartService.createCouponNoticeSended(param);
+			int[] cpnIdArr = new int[params.size()];
+
+			if(params != null && params.size() > 0) {
+				int i = 0;
+				for(Order param : params) {
+					cpnIdArr[i++] = param.getCpnId();
+				}
+
+				// 추가된 쿠폰이 적용된 장바구니 상품을 가진 고객 조회
+				Order cpn = new Order();
+				cpn.setCpnIdArr(cpnIdArr);
+				Collection<Customer> custList = cartService.getCartAddBenefitPushCustomerList(cpn);
+
+				// 핑거푸시
+				for(Customer cust : custList) {
+					int ansSq = FingerPushSender.FingerPushSq.SHOPPING_BAG_DISCOUNT.value();
+					cust.setContactType(TscConstants.ContactType.SHOPPING_BAG_DISCOUNT.value());
+					cust.setContactContents("쇼핑백 할인혜택 안내");
+					cust.setRegNo(TsbConstants.REG_NO);
+					cust.setUpdNo(TsbConstants.REG_NO);
+
+					// 앱 푸시 데이터 insert
+					coreFingerPushService.send(cust, ansSq);
+					succCnt++;
+				}
+
+				// 송부 이력 저장
+				for(Order param : params) {
+					param.setRegNo(TsbConstants.REG_NO);	// 등록자
+					param.setBenefitGb("C");				// 장바구니
+					cartService.createCouponNoticeSended(param);
+				}
 			}
 		} catch (Exception e) {
 			e.printStackTrace();

+ 2 - 0
src/main/java/com/style24/batch/biz/job/order/TsbCartUnpurchasePushJob.java

@@ -72,6 +72,8 @@ public class TsbCartUnpurchasePushJob extends TsbAbstractJob<Collection<Order>,
 			customer.setCellPhnno(order.getCellPhnno());
 			customer.setRegNo(TsbConstants.REG_NO);
 			customer.setUpdNo(TsbConstants.REG_NO);
+			customer.setContactType(TscConstants.ContactType.GOODS_UNPURCHASED.value());
+			customer.setContactContents("미구매 상품 확인안내");
 
 			coreFingerPushService.send(customer, ansSq);
 		}

+ 98 - 0
src/main/java/com/style24/batch/biz/job/order/TsbWishAddCouponPushJob.java

@@ -0,0 +1,98 @@
+package com.style24.batch.biz.job.order;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbCartService;
+import com.style24.batch.support.env.TsbConstants;
+import com.style24.core.biz.service.TscFingerPushService;
+import com.style24.core.biz.thirdparty.FingerPushSender;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.Order;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+
+/**
+ * 위시리스트 혜택 추가 푸시
+ *
+ * @author xodud1202
+ * @since 2021. 07. 12
+ */
+@Component
+@Slf4j
+public class TsbWishAddCouponPushJob extends TsbAbstractJob<Collection<Order>, Collection<Order>, Order> {
+
+	@Autowired
+	private TsbCartService cartService;
+
+	@Autowired
+	private TscFingerPushService coreFingerPushService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Collection<Order> read() throws Exception {
+		// 추가 다운로드 받을 수 있는 쿠폰 조회
+		Order param = new Order();
+		param.setBenefitGb("W");		// 위시리스트
+		return cartService.getAddCouponList(param);
+	}
+
+	@Override
+	public Collection<Order> process(Collection<Order> params) throws Exception {
+		try {
+			int[] cpnIdArr = new int[params.size()];
+
+			if(params != null && params.size() > 0) {
+				int i = 0;
+				for (Order param : params) {
+					cpnIdArr[i++] = param.getCpnId();
+				}
+
+				// 추가된 쿠폰이 적용된 장바구니 상품을 가진 고객 조회
+				Order cpn = new Order();
+				cpn.setCpnIdArr(cpnIdArr);
+				Collection<Customer> custList = cartService.getWishlistAddBenefitPushCustomerList(cpn);
+
+				// 핑거푸시
+				for (Customer cust : custList) {
+					int ansSq = FingerPushSender.FingerPushSq.WISHLIST_DISCOUNT.value();
+					cust.setContactType(TscConstants.ContactType.WISHLIST_DISCOUNT.value());
+					cust.setContactContents("위시리스트 할인혜택 안내");
+					cust.setRegNo(TsbConstants.REG_NO);
+					cust.setUpdNo(TsbConstants.REG_NO);
+
+					// 앱 푸시 데이터 insert
+					coreFingerPushService.send(cust, ansSq);
+					succCnt++;
+				}
+
+				// 송부 이력 저장
+				for (Order param : params) {
+					param.setRegNo(TsbConstants.REG_NO);    // 등록자
+					param.setBenefitGb("W");                // 위시리스트
+					cartService.createCouponNoticeSended(param);
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			failCnt++;
+		}
+
+		return params;
+	}
+
+	@Override
+	public Order write(Collection<Order> params) throws Exception {
+		return null;
+	}
+
+	@Override
+	public void notify(Order param) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 14 - 3
src/main/java/com/style24/batch/biz/service/TsbCartService.java

@@ -71,14 +71,25 @@ public class TsbCartService {
 	}
 
 	/**
-	 * 혜택 추가 푸시 알림 대상 조회
+	 * 장바구니 혜택 추가 푸시 알림 대상 조회
 	 * @param param
 	 * @return
 	 * @author xodud1202
 	 * @since  2021. 07. 09
 	 */
-	public Collection<Customer> getAddBenefitPushCustomerList(Order param) {
-		return cartDao.getAddBenefitPushCustomerList(param);
+	public Collection<Customer> getCartAddBenefitPushCustomerList(Order param) {
+		return cartDao.getCartAddBenefitPushCustomerList(param);
+	}
+
+	/**
+	 * 장바구니 혜택 추가 푸시 알림 대상 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since  2021. 07. 09
+	 */
+	public Collection<Customer> getWishlistAddBenefitPushCustomerList(Order param) {
+		return cartDao.getWishlistAddBenefitPushCustomerList(param);
 	}
 
 	/**

+ 18 - 2
src/main/java/com/style24/batch/biz/task/TsbOrderTask.java

@@ -33,6 +33,9 @@ public class TsbOrderTask {
 	@Autowired
 	private TsbCartAddCouponPushJob cartAddCouponPushJob;
 
+	@Autowired
+	private TsbWishAddCouponPushJob wishAddCouponPushJob;
+
 	/**
 	 * 장바구니 30일 초과 만료 데이터 삭제
 	 *
@@ -93,10 +96,23 @@ public class TsbOrderTask {
 	 * @author xodud1202
 	 * @since 2021. 07. 09
 	 */
-	//@Scheduled(cron = "${cron.order.cart.benefit.push}")
-	@Scheduled(fixedDelay = 3500000)
+	@Scheduled(cron = "${cron.order.cart.benefit.push}")
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void cartBenefitPushJob() throws Exception {
 		cartAddCouponPushJob.runById("cron.order.cart.benefit.push");
 	}
+
+	/**
+	 * 위시리스트 혜택 추가 푸시
+	 * @throws Exception - 예외처리
+	 * @author xodud1202
+	 * @since 2021. 07. 09
+	 */
+	@Scheduled(cron = "${cron.order.wish.benefit.push}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void wishlistBenefitPushJob() throws Exception {
+		wishAddCouponPushJob.runById("cron.order.wish.benefit.push");
+	}
 }

+ 19 - 2
src/main/java/com/style24/batch/biz/web/TsbOrderController.java

@@ -37,7 +37,10 @@ public class TsbOrderController extends TscBaseController {
 	private TsbCartUnpurchasePushJob cartUnpurchasePushJob;
 
 	@Autowired
-	private TsbCartAddCouponPushJob addCouponPushJob;
+	private TsbCartAddCouponPushJob cartAddCouponPushJob;
+
+	@Autowired
+	private TsbWishAddCouponPushJob wishAddCouponPushJob;
 
 	/**
 	 * 장바구니 30일 초과 만료 데이터 삭제
@@ -105,7 +108,21 @@ public class TsbOrderController extends TscBaseController {
 	@GetMapping("/cart/benefit/push")
 	@ResponseBody
 	public String cartBenefitPush() throws Exception {
-		addCouponPushJob.runById("cron.order.cart.benefit.push");
+		cartAddCouponPushJob.runById("cron.order.cart.benefit.push");
+		return "OK";
+	}
+
+	/**
+	 * 장바구니 미구매상품(삭제 10일전) 알림 푸시
+	 *
+	 * @throws Exception - 예외처리
+	 * @author xodud1202
+	 * @since 2021. 07. 12
+	 */
+	@GetMapping("/wish/benefit/push")
+	@ResponseBody
+	public String wishBenefitPush() throws Exception {
+		wishAddCouponPushJob.runById("cron.order.wish.benefit.push");
 		return "OK";
 	}
 }

+ 181 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsbCart.xml

@@ -48,7 +48,7 @@
 		FROM   TB_COUPON CP
 		LEFT   OUTER JOIN TB_COUPON_NOTICE_SENDED CNS
 		ON     CP.CPN_ID = CNS.CPN_ID
-		AND    CNS.BENEFIT_GB = 'C'
+		AND    CNS.BENEFIT_GB = #{benefitGb}
 		WHERE  1=1
 		AND    CNS.CPN_ID IS NULL
 		AND    CP.CPN_TYPE <![CDATA[ <> ]]> 'G230_10'
@@ -60,9 +60,9 @@
 		AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
 	</select>
 
-	<!-- 혜택 추가 푸시 알림 대상 조회 -->
-	<select id="getAddBenefitPushCustomerList" parameterType="Order" resultType="Customer">
-		/* TsbCart.getAddBenefitPushCustomerList : 혜택 추가 푸시 알림 대상 조회 */
+	<!-- 장바구니 혜택 추가 푸시 알림 대상 조회 -->
+	<select id="getCartAddBenefitPushCustomerList" parameterType="Order" resultType="Customer">
+		/* TsbCart.getCartAddBenefitPushCustomerList : 장바구니 혜택 추가 푸시 알림 대상 조회 */
 		SELECT CT.CUST_NO
 		     , CT.CELL_PHNNO
 		FROM   TB_CUSTOMER CT
@@ -243,6 +243,183 @@
 		     , CT.CELL_PHNNO
 	</select>
 
+	<!-- 위시리스트 혜택 추가 푸시 알림 대상 조회 -->
+	<select id="getWishlistAddBenefitPushCustomerList" parameterType="Order" resultType="Customer">
+		/* TsbCart.getWishlistAddBenefitPushCustomerList : 위시리스트 혜택 추가 푸시 알림 대상 조회 */
+		SELECT CT.CUST_NO
+		     , CT.CELL_PHNNO
+		FROM   TB_CUSTOMER CT
+		INNER  JOIN (SELECT CR.CPN_ID
+		                  , G.GOODS_CD
+		                  , W.CUST_NO
+		             FROM   TB_WISHLIST W
+		             INNER  JOIN TB_GOODS G
+		             ON     W.GOODS_CD = G.GOODS_CD
+		             INNER  JOIN TB_COUPON_REFVAL CR
+		             ON     G.SUPPLY_COMP_CD = CR.REF_VAL
+		             INNER  JOIN TB_COUPON CP
+		             ON     CP.CPN_ID = CR.CPN_ID
+		             WHERE  1=1
+		             AND    CP.CPN_ID IN
+		             <foreach collection="cpnIdArr" item="item" index="index"  open="(" close=")" separator=",">
+		                        #{item}
+		             </foreach>
+		             AND    CP.APPLY_SCOPE = 'I'
+		             AND    G.GOODS_STAT = 'G008_90'
+		             AND    CR.DEL_YN = 'N'
+		             AND    CR.CPN_TYPE <![CDATA[ <> ]]> 'G230_10'
+		             AND    W.CUST_NO > 0
+		             AND    CR.CPN_TARGET = 'G260_13' -- 공급업체
+		             UNION  ALL
+		             SELECT CR.CPN_ID
+		                  , G.GOODS_CD
+		                  , W.CUST_NO
+		             FROM   TB_WISHLIST W
+		             INNER  JOIN TB_GOODS G
+		             ON     W.GOODS_CD = G.GOODS_CD
+		             INNER  JOIN TB_COUPON_REFVAL CR
+		             ON     G.BRAND_CD = CR.REF_VAL
+		             INNER  JOIN TB_COUPON CP
+		             ON     CP.CPN_ID = CR.CPN_ID
+		             WHERE  1=1
+		             AND    CP.CPN_ID IN
+		             <foreach collection="cpnIdArr" item="item" index="index"  open="(" close=")" separator=",">
+		             	#{item}
+		             </foreach>
+		             AND    CP.APPLY_SCOPE = 'I'
+		             AND    G.GOODS_STAT = 'G008_90'
+		             AND    CR.DEL_YN = 'N'
+		             AND    CR.CPN_TYPE <![CDATA[ <> ]]> 'G230_10'
+		             AND    W.CUST_NO > 0
+		             AND    CR.CPN_TARGET = 'G260_12' -- 브랜드
+		             UNION ALL
+		             SELECT CR.CPN_ID
+		                  , CG.GOODS_CD
+		                  , W.CUST_NO
+		             FROM   TB_WISHLIST W
+		             INNER  JOIN TB_GOODS G
+		             ON     W.GOODS_CD = G.GOODS_CD
+		             INNER  JOIN TB_CATE_GOODS CG
+		             ON     G.GOODS_CD = CG.GOODS_CD
+		             INNER  JOIN (SELECT C4.LEAF_CATE_NO
+		                               , CASE WHEN X = 1 THEN CATE1_NO
+		                                      WHEN X = 2 THEN CATE2_NO
+		                                      WHEN X = 3 THEN CATE3_NO
+		                                      WHEN X = 4 THEN CATE4_NO
+		                                      ELSE CATE5_NO END  CATE_NO
+		                          FROM   TB_CATE_4SRCH C4
+		                          LEFT   OUTER JOIN (SELECT 1 AS X
+		                                             UNION  ALL
+		                                             SELECT 2 AS X
+		                                             UNION  ALL
+		                                             SELECT 3 AS X
+		                                             UNION  ALL
+		                                             SELECT 4 AS X
+		                                             UNION  ALL
+		                                             SELECT 5 AS X ) B
+		                          ON     1=1
+		                          WHERE  C4.SITE_CD = 'G000_10'
+		                          AND    C4.CATE_TYPE = 'G031_10') CATE
+		             ON     CATE.LEAF_CATE_NO = CG.CATE_NO
+		             INNER  JOIN TB_COUPON_REFVAL CR
+		             ON     CG.CATE_NO = CR.REF_VAL
+		             INNER  JOIN TB_COUPON CP
+		             ON     CP.CPN_ID = CR.CPN_ID
+		             WHERE  1=1
+		             AND    CP.CPN_ID IN
+		             <foreach collection="cpnIdArr" item="item" index="index"  open="(" close=")" separator=",">
+		                        #{item}
+		             </foreach>
+		             AND    CP.APPLY_SCOPE = 'I'
+		             AND    G.GOODS_STAT = 'G008_90'
+		             AND    CR.DEL_YN = 'N'
+		             AND    CR.CPN_TYPE <![CDATA[ <> ]]> 'G230_10'
+		             AND    CR.CPN_TARGET = 'G260_11' -- 카테고리
+		             UNION ALL
+		             SELECT CR.CPN_ID
+		                  , G.GOODS_CD
+		                  , W.CUST_NO
+		             FROM   TB_WISHLIST W
+		             INNER  JOIN TB_GOODS G
+		             ON     W.GOODS_CD = G.GOODS_CD
+		             INNER  JOIN TB_COUPON_REFVAL CR
+		             ON     G.GOODS_CD = CR.REF_VAL
+		             INNER  JOIN TB_COUPON CP
+		             ON     CP.CPN_ID = CR.CPN_ID
+		             WHERE  1=1
+		             AND    CP.CPN_ID IN
+		             <foreach collection="cpnIdArr" item="item" index="index"  open="(" close=")" separator=",">
+		                        #{item}
+		             </foreach>
+		             AND    CP.APPLY_SCOPE = 'I'
+		             AND    G.GOODS_STAT = 'G008_90'
+		             AND    CR.DEL_YN = 'N'
+		             AND    CR.CPN_TYPE <![CDATA[ <> ]]> 'G230_10'
+		             AND    W.CUST_NO > 0
+		             AND    CR.CPN_TARGET = 'G260_10' -- 적용상품
+		             ) A
+		ON     CT.CUST_NO = A.CUST_NO
+		INNER  JOIN TB_COUPON_CUST_GRADE CCG
+		ON     A.CPN_ID = CCG.CPN_ID
+		AND    CT.CUST_GRADE = CCG.USABLE_CUST_GRADE
+		LEFT   OUTER JOIN TB_COUPON_NOTICE_SENDED CNS
+		ON     A.CPN_ID = CNS.CPN_ID
+		AND    CNS.BENEFIT_GB = 'W'
+		LEFT   OUTER JOIN TB_COUPON_BAN_GOODS CG
+		ON     CG.GOODS_CD = A.GOODS_CD
+		AND    CG.DEL_YN = 'N'
+		LEFT   OUTER JOIN TB_COUPON_REFVAL CR
+		ON     A.CPN_ID = CR.CPN_ID
+		AND    A.GOODS_CD = CR.REF_VAL
+		AND    CR.CPN_TARGET = 'G260_14'
+		AND    CR.DEL_YN = 'N'
+		WHERE  CT.SECEDE_DT IS NULL
+		AND    CNS.CPN_ID IS NULL
+		AND    CG.GOODS_CD IS NULL
+		AND    CR.REF_VAL IS NULL
+		GROUP  BY CT.CUST_NO
+		        , CT.CELL_PHNNO
+		UNION  ALL
+		SELECT CT.CUST_NO
+		     , CT.CELL_PHNNO
+		FROM   TB_CUSTOMER CT
+		INNER  JOIN (SELECT W.GOODS_CD
+		                  , W.CUST_NO
+		                  , CP.CPN_ID
+		             FROM   TB_WISHLIST W
+		             INNER  JOIN TB_GOODS G
+		             ON     W.GOODS_CD = G.GOODS_CD
+		             INNER  JOIN TB_COUPON CP
+		             ON    CP.CPN_ID IN
+		             <foreach collection="cpnIdArr" item="item" index="index"  open="(" close=")" separator=",">
+		                       #{item}
+		             </foreach>
+		             AND    CP.APPLY_SCOPE = 'A'
+		             LEFT   OUTER JOIN TB_COUPON_REFVAL CR
+		             ON     CR.CPN_ID = CP.CPN_ID
+		             AND    G.GOODS_CD = CR.REF_VAL
+		             AND    CR.CPN_TARGET = 'G260_14' -- 제외상품
+		             AND    CR.DEL_YN = 'N'
+		             AND    CR.CPN_TYPE <![CDATA[ <> ]]> 'G230_10'
+		             LEFT   OUTER JOIN TB_COUPON_NOTICE_SENDED CNS
+		             ON     CP.CPN_ID = CNS.CPN_ID
+		             AND    CNS.BENEFIT_GB = 'W'
+		             LEFT   OUTER JOIN TB_COUPON_BAN_GOODS CG
+		             ON     CG.GOODS_CD = W.GOODS_CD
+		             AND    CG.DEL_YN = 'N'
+		             WHERE  1=1
+		             AND    CNS.CPN_ID IS NULL
+		             AND    CG.GOODS_CD IS NULL
+		             AND    G.GOODS_STAT = 'G008_90'
+		             AND    W.CUST_NO > 0 ) A
+		ON     CT.CUST_NO = A.CUST_NO
+		INNER  JOIN TB_COUPON_CUST_GRADE CCG
+		ON     A.CPN_ID = CCG.CPN_ID
+		AND    CT.CUST_GRADE = CCG.USABLE_CUST_GRADE
+		GROUP  BY CT.CUST_NO
+		        , CT.CELL_PHNNO
+	</select>
+
 	<!-- 장바구니 혜택추가 송부 이력 저장 -->
 	<insert id="createCouponNoticeSended" parameterType="Order">
 		/* TsbCart.createCouponNoticeSended : 장바구니 혜택추가 송부 이력 저장 */

+ 1 - 0
src/main/resources/config/application.yml

@@ -85,6 +85,7 @@ cron:
         pg.kcp.settle.receive: 2 22 2 29 2 ?    #KCP PG 정산 데이터 수신
         cart.unpurchase.push: 2 22 2 29 2 ?     #장바구니 미구매 확인(삭제 10일 전) 푸시 송부
         cart.benefit.push: 2 22 2 29 2 ?        #장바구니 혜택 추가 푸시
+        wish.benefit.push: 2 22 2 29 2 ?        #위시리스트 혜택 추가 푸시
 
     #네이버페이
     naverPay.order.batch: 2 22 2 29 2 ?        # 네이버페이 배치 실행