فهرست منبع

상품혜택 생성 배치 추가

gagamel 5 سال پیش
والد
کامیت
af1e077a99

+ 54 - 0
src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -494,4 +494,58 @@ public interface TsbGoodsDao {
 	 */
 	void createGoodsOptionList(String jobdate);
 
+	/**
+	 * 상품혜택임시 truncate
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	void truncateTemporaryGoodsBenefit();
+
+	/**
+	 * 상품혜택임시-쿠폰할인 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryGoodsBenefitCouponDiscount();
+
+	/**
+	 * 상품혜택임시-무료배송 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryGoodsBenefitFreeDelivery();
+
+	/**
+	 * 상품혜택임시-사은품 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryGoodsBenefitFreegift();
+
+	/**
+	 * 상품혜택임시-신상(=정상상품) 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryGoodsBenefitNew();
+
+	/**
+	 * 상품혜택 삭제
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	void deleteGoodsBenefit();
+
+	/**
+	 * 상품혜택 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createGoodsBenefit();
+
 }

+ 52 - 0
src/main/java/com/style24/batch/biz/job/goods/TsbGoodsBenefitJob.java

@@ -0,0 +1,52 @@
+package com.style24.batch.biz.job.goods;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbGoodsService;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품혜택(쿠폰할인, 무료배송, 사은품, 신상) 생성
+ *
+ * @author gagamel
+ * @since 2021. 4. 7
+ */
+@Component
+@Slf4j
+public class TsbGoodsBenefitJob extends TsbAbstractJob<String, String, String> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	@Override
+	public String read() throws Exception {
+		return "OK";
+	}
+
+	@Override
+	public String process(String result) throws Exception {
+		int cnt = goodsService.createTemporaryGoodsBenefit();
+		log.info("1.상품혜택임시 생성: 총 {}건", cnt);
+
+		if (cnt > 0) {
+			cnt = goodsService.createGoodsBenefit();
+			log.info("2.상품혜택 생성: {}건", cnt);
+		}
+
+		return result;
+	}
+
+	@Override
+	public String write(String result) throws Exception {
+		return result;
+	}
+
+	@Override
+	public void notify(String result) throws Exception {
+		// Do nothing
+	}
+
+}

+ 44 - 0
src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -656,4 +656,48 @@ public class TsbGoodsService {
 	public void createGoodsOptionList(String jobdate) {
 		goodsDao.createGoodsOptionList(jobdate);
 	}
+
+	/**
+	 * 상품혜택임시 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	@Transactional("shopTxnManager")
+	public int createTemporaryGoodsBenefit() {
+		// 상품혜택임시 테이블 truncate
+		goodsDao.truncateTemporaryGoodsBenefit();
+
+		int totCnt = 0;
+		int cnt = goodsDao.createTemporaryGoodsBenefitCouponDiscount();
+		totCnt += cnt;
+		log.info("1.1.상품혜택임시-쿠폰할인 생성: {}", cnt);
+
+		cnt = goodsDao.createTemporaryGoodsBenefitFreeDelivery();
+		totCnt += cnt;
+		log.info("1.2.상품혜택임시-무료배송 생성: {}", cnt);
+
+		cnt = goodsDao.createTemporaryGoodsBenefitFreegift();
+		totCnt += cnt;
+		log.info("1.3.상품혜택임시-사은품 생성: {}", cnt);
+
+		cnt = goodsDao.createTemporaryGoodsBenefitNew();
+		totCnt += cnt;
+		log.info("1.4.상품혜택임시-신상(=정상상품) 생성: {}", cnt);
+
+		return totCnt;
+	}
+
+	/**
+	 * 상품혜택 생성
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	@Transactional("shopTxnManager")
+	public int createGoodsBenefit() {
+		goodsDao.deleteGoodsBenefit();
+		return goodsDao.createGoodsBenefit();
+	}
+
 }

+ 13 - 1
src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java

@@ -5,6 +5,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import com.style24.batch.biz.job.goods.TsbGoodsBenefitJob;
 import com.style24.batch.biz.job.goods.TsbGoodsBenefitPriceJob;
 import com.style24.batch.biz.job.goods.TsbGoodsEpNaverGoods;
 import com.style24.batch.biz.job.goods.TsbGoodsInfantsSafeNoJob;
@@ -69,7 +70,8 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsEpNaverGoods goodsEpNaverGoods;
 
-
+	@Autowired
+	private TsbGoodsBenefitJob goodsBenefitJob;
 
 	/**
 	 * 초 분 시 일 월 주(년)
@@ -251,4 +253,14 @@ public class TsbGoodsTask {
 		goodsEpNaverGoods.runById("cron.goods.ep.naver.goods");
 	}
 
+	/**
+	 * 상품혜택(쿠폰할인, 무료배송, 사은품, 신상) 생성
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.benefit}")
+	@Async
+	public void createGoodsBenefit() throws Exception {
+		goodsBenefitJob.runById("cron.goods.benefit");
+	}
+
 }

+ 275 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -2112,4 +2112,279 @@
 		</choose>
 	</insert>
 	
+	<!-- 상품혜택임시 테이블 truncate -->
+	<delete id="truncateTemporaryGoodsBenefit">
+		/* TsbGoods.truncateTemporaryGoodsBenefit */
+		TRUNCATE TABLE TB_GOODS_BENEFIT_TMP
+	</delete>
+	
+	<!-- 상품혜택임시-쿠폰할인 생성 -->
+	<insert id="createTemporaryGoodsBenefitCouponDiscount">
+		/* TsbGoods.createTemporaryGoodsBenefitCouponDiscount */
+		INSERT INTO TB_GOODS_BENEFIT_TMP (
+		       GOODS_CD
+		     , BENEFIT_GB
+		)
+		SELECT G.GOODS_CD
+		     , '10'       AS BENEFIT_GB /*쿠폰할인*/
+		FROM   TB_GOODS G
+		     , TB_COUPON CP
+		WHERE  CP.SITE_CD = 'G000_10' /*전시사이트*/
+		AND    CP.CPN_STAT = 'G232_11' /*쿠폰인 진행중인 쿠폰만*/
+		AND    CP.DOWN_ABL_YN = 'Y' /*상품상세 다운로드 가능여부*/
+		AND    NOW() <![CDATA[<=]]> IF(CP.PD_GB = 'D',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d %H:%i:%S'),CP.AVAIL_EDDT)
+		AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
+		AND    CP.CPN_TYPE IN ('G230_11','G230_20','G230_30') /*상품쿠폰,주문서쿠폰,배송비쿠폰*/
+		AND    (SELECT COUNT(1)
+		        FROM   TB_COUPON_CUST_GBN
+		        WHERE  CPN_ID = CP.CPN_ID
+		        AND    USABLE_CUST_GB IN ('G100_10') /*사용가능고객구분:일반*/
+		       ) <![CDATA[>=]]> 1
+		AND    CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
+		AND    CP.DC_PVAL <![CDATA[>]]> 0
+		AND    IF(CP.TOT_PUB_LIMIT_QTY = 0,9999999999,CP.TOT_PUB_LIMIT_QTY) <![CDATA[>]]> (SELECT COUNT(1)
+		                                                                                   FROM   TB_CUST_COUPON
+		                                                                                   WHERE  CPN_ID = CP.CPN_ID
+		                                                                                  ) /*총발행제한수*/
+		AND   (
+		       (CP.APPLY_SCOPE = 'A' ) 
+		       OR  /*적용대상:상품*/
+		       (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
+		                                  FROM   TB_COUPON_REFVAL
+		                                  WHERE  CPN_ID = CP.CPN_ID
+		                                  AND    CPN_TARGET = 'G260_10'
+		                                  AND    DEL_YN = 'N'
+		                                  AND    REF_VAL = G.GOODS_CD
+		                                 ) <![CDATA[>]]> 0
+		       )
+		       OR /*적용대상:카테고리*/
+		       (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
+		                                  FROM   TB_COUPON_REFVAL
+		                                  WHERE  CPN_ID = CP.CPN_ID
+		                                  AND    CPN_TARGET = 'G260_11'
+		                                  AND    DEL_YN = 'N'
+		                                  AND    IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+		                                  AND    IFNULL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
+		                                  AND    REF_VAL IN (SELECT DISTINCT
+		                                                            X.CATE_NO 
+		                                                     FROM   (
+		                                                             SELECT LEAF_CATE_NO 
+		                                                                  , CATE_LVL 
+		                                                                  , CATE_NO
+		                                                             FROM   (
+		                                                                     SELECT 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 AS CATE_LVL
+		                                                                          , 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 AS CATE_NO
+		                                                                     FROM   (SELECT LEAF_CATE_NO
+		                                                                                  , CATE1_NO
+		                                                                                  , CATE2_NO
+		                                                                                  , CATE3_NO
+		                                                                                  , CATE4_NO
+		                                                                                  , CATE5_NO
+		                                                                             FROM   TB_CATE_4SRCH
+		                                                                             WHERE  SITE_CD = 'G000_10'
+		                                                                             AND    CATE_TYPE = 'G031_10'
+		                                                                            ) A
+		                                                                          , (
+		                                                                             /*UNPIVOT 컬럼 수 만큼 선언*/
+		                                                                             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
+		                                                                     ORDER  BY LEAF_CATE_NO, CATE_LVL
+		                                                                    ) K
+		                                                             WHERE  CATE_NO IS NOT NULL
+		                                                            ) X
+		                                                          , (
+		                                                             SELECT A.CATE_NO
+		                                                                  , A.GOODS_CD
+		                                                             FROM   TB_CATE_GOODS A
+		                                                             WHERE  GOODS_CD = G.GOODS_CD
+		                                                            ) Y
+		                                                     WHERE  X.LEAF_CATE_NO = Y.CATE_NO
+		                                                    )
+		                                 ) <![CDATA[>]]> 0
+		       )
+		       OR /*적용대상:브랜드*/
+		       (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
+		                                  FROM   TB_COUPON_REFVAL
+		                                  WHERE  CPN_ID = CP.CPN_ID
+		                                  AND    CPN_TARGET = 'G260_12'
+		                                  AND    DEL_YN = 'N'
+		                                  AND    REF_VAL = G.BRAND_CD
+		                                  AND    IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+		                                 ) <![CDATA[>]]> 0
+		       )
+		       OR /*적용대상:공급업체*/
+		       (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1)
+		                                  FROM   TB_COUPON_REFVAL
+		                                  WHERE  CPN_ID = CP.CPN_ID
+		                                  AND    CPN_TARGET = 'G260_13' 
+		                                  AND    DEL_YN = 'N'
+		                                  AND    REF_VAL = G.SUPPLY_COMP_CD
+		                                 ) <![CDATA[>]]> 0
+		       )
+		      )
+		AND   NOT EXISTS (SELECT 1
+		                  FROM   TB_COUPON_REFVAL SCPR
+		                  WHERE  SCPR.CPN_ID = CP.CPN_ID
+		                  AND    SCPR.REF_VAL = G.GOODS_CD
+		                  AND    SCPR.DEL_YN = 'N' /*삭제안된넘*/
+		                  AND    SCPR.CPN_TARGET = '40' /* 제외상품*/
+		                 )
+		AND   NOT EXISTS (SELECT 1
+		                  FROM   TB_COUPON_BAN_GOODS
+		                  WHERE  GOODS_CD = G.GOODS_CD
+		                  AND    DEL_YN = 'N'
+		                 )
+		GROUP  BY G.GOODS_CD
+		HAVING COUNT(*) <![CDATA[>]]> 0
+	</insert>
+	
+	<!-- 상품혜택임시-무료배송 생성 -->
+	<insert id="createTemporaryGoodsBenefitFreeDelivery">
+		/* TsbGoods.createTemporaryGoodsBenefitFreeDelivery */
+		INSERT INTO TB_GOODS_BENEFIT_TMP (
+		       GOODS_CD
+		     , BENEFIT_GB
+		)
+		SELECT GOODS_CD
+		     , '20'     AS BENEFIT_GB /*무료배송*/
+		FROM   (
+		        SELECT G.GOODS_CD
+		             , DFP.MIN_ORD_AMT
+		             , FN_GET_BENEFIT_PRICE('P',G.GOODS_CD,G.CURR_PRICE,'G100_10') AS CURR_PRICE
+		        FROM   TB_GOODS G
+		             , TB_GOODS_STOCK GS
+		             , TB_DELV_FEE_POLICY DFP
+		        WHERE  G.GOODS_CD = GS.GOODS_CD
+		        AND    G.DELV_FEE_CD = DFP.DELV_FEE_CD
+		        AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		        AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		        AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		        AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		        AND    DFP.USE_YN = 'Y' /*사용하는배송비정책*/
+		       ) Z
+		WHERE  MIN_ORD_AMT <![CDATA[<=]]> CURR_PRICE
+	</insert>
+	
+	<!-- 상품혜택임시-사은품 생성 -->
+	<insert id="createTemporaryGoodsBenefitFreegift">
+		/* TsbGoods.createTemporaryGoodsBenefitFreegift */
+		INSERT INTO TB_GOODS_BENEFIT_TMP (
+		       GOODS_CD
+		     , BENEFIT_GB
+		)
+		SELECT GOODS_CD
+		     , '30'       AS BENEFIT_GB /*사은품*/
+		FROM   (
+		        SELECT G.GOODS_CD
+		        FROM   TB_FREEGIFT F
+		        INNER  JOIN TB_FREEGIFT_SECTION FS
+		        ON     F.FREEGIFT_SQ = FS.FREEGIFT_SQ
+		        INNER  JOIN TB_FREEGIFT_GOODS FGA
+		        ON     F.FREEGIFT_SQ = FGA.FREEGIFT_SQ
+		        AND    FGA.GOODS_GB = 'G800_20'
+		        AND    FGA.TARGET_GB = 'G260_10'
+		        INNER  JOIN TB_GOODS G
+		        ON     FGA.TARGET_VAL = G.GOODS_CD
+		        LEFT   OUTER JOIN TB_FREEGIFT_GOODS NOT_APPLY
+		        ON     F.FREEGIFT_SQ = NOT_APPLY.FREEGIFT_SQ
+		        AND    G.GOODS_CD = NOT_APPLY.TARGET_VAL
+		        AND    NOT_APPLY.GOODS_GB = 'G800_30'
+		        AND    NOT_APPLY.TARGET_GB = 'G260_10'
+		        WHERE  NOT_APPLY.TARGET_VAL IS NULL
+		        AND    F.DEL_YN = 'N'
+		        AND    FS.DEL_YN = 'N'
+		        AND    FGA.DEL_YN = 'N'
+		        AND    NOW() BETWEEN F.FREEGIFT_STDT AND F.FREEGIFT_EDDT
+		        AND    F.SELF_YN = 'Y'
+		        AND    F.FREEGIFT_STAT = 'G232_11'
+		        GROUP  BY G.GOODS_CD
+		        HAVING COUNT(*) <![CDATA[>]]> 0
+		        
+		        UNION ALL
+		        
+		        SELECT G.GOODS_CD
+		        FROM   TB_FREEGIFT F
+		        INNER  JOIN TB_FREEGIFT_SECTION FS
+		        ON     F.FREEGIFT_SQ = FS.FREEGIFT_SQ
+		        INNER  JOIN TB_FREEGIFT_GOODS_APPLY BRAND_FGA
+		        ON     F.FREEGIFT_SQ = BRAND_FGA.FREEGIFT_SQ
+		        AND    BRAND_FGA.TARGET_GB = 'G260_12' /*브랜드*/
+		        INNER  JOIN TB_FREEGIFT_GOODS_APPLY COMPANY_FGA
+		        ON     F.FREEGIFT_SQ = COMPANY_FGA.FREEGIFT_SQ
+		        AND    COMPANY_FGA.TARGET_GB = 'G260_13' /*업체*/
+		        INNER  JOIN TB_GOODS G
+		        ON     BRAND_FGA.TARGET_VAL = G.BRAND_CD
+		        AND    COMPANY_FGA.TARGET_VAL = G.SUPPLY_COMP_CD
+		        LEFT   OUTER JOIN TB_FREEGIFT_GOODS NOT_APPLY
+		        ON     F.FREEGIFT_SQ = NOT_APPLY.FREEGIFT_SQ
+		        AND    G.GOODS_CD = NOT_APPLY.TARGET_VAL
+		        AND    NOT_APPLY.GOODS_GB = 'G800_30'
+		        WHERE  NOT_APPLY.TARGET_VAL IS NULL
+		        AND    F.DEL_YN = 'N'
+		        AND    FS.DEL_YN = 'N'
+		        AND    NOW() BETWEEN F.FREEGIFT_STDT AND F.FREEGIFT_EDDT
+		        AND    F.SELF_YN = 'Y'
+		        AND    F.FREEGIFT_STAT = 'G232_11'
+		        GROUP  BY G.GOODS_CD
+		        HAVING COUNT(*) <![CDATA[>]]> 0
+		       ) Z
+		GROUP  BY GOODS_CD
+	</insert>
+	
+	<!-- 상품혜택임시-신상 생성 -->
+	<insert id="createTemporaryGoodsBenefitNew">
+		/* TsbGoods.createTemporaryGoodsBenefitNew */
+		INSERT INTO TB_GOODS_BENEFIT_TMP (
+		       GOODS_CD
+		     , BENEFIT_GB
+		)
+		SELECT G.GOODS_CD
+		     , '40'       AS BENEFIT_GB /*신상(=정상상품)*/
+		FROM   TB_GOODS G
+		     , TB_GOODS_STOCK GS
+		WHERE  G.GOODS_CD = GS.GOODS_CD
+		AND    G.GOODS_STAT = 'G008_90' /*승인완료상품*/
+		AND    G.SELF_MALL_YN = 'Y' /*몰노출상품*/
+		AND    NOW() BETWEEN G.SELL_STDT AND G.SELL_EDDT /*판매기간*/
+		AND    GS.STOCK_QTY <![CDATA[>]]> 0 /*재고있는상품*/
+		AND    G.FORMAL_GB = 'G009_10' /*정상상품(=신상)*/
+	</insert>
+	
+	<!-- 상품혜택 삭제 -->
+	<delete id="deleteGoodsBenefit">
+		/* TsbGoods.deleteGoodsBenefit */
+		DELETE FROM TB_GOODS_BENEFIT
+	</delete>
+	
+	<!-- 상품혜택 생성 -->
+	<insert id="createGoodsBenefit">
+		/* TsbGoods.createGoodsBenefit */
+		INSERT INTO TB_GOODS_BENEFIT (
+		       GOODS_CD
+		     , BENEFIT_GB
+		     , REG_NO
+		     , REG_DT
+		)
+		SELECT GOODS_CD
+		     , BENEFIT_GB
+		     , 0          AS REG_NO
+		     , NOW()      AS REG_DT
+		FROM   TB_GOODS_BENEFIT_TMP
+	</insert>
+	
 </mapper>