Просмотр исходного кода

배치 즉시할인가 쿼리 수정

eskim 5 лет назад
Родитель
Сommit
ad4da2afbe

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

@@ -145,6 +145,8 @@ public class TsbGoodsService {
 		coupon.setPointUnit(floorUnit);
 		/*
 		 * 쿠폰적용순선 전체->일반->임직원
+		 *
+		 * 테이블(TB_GOODS_BENEFIT_PRICE)은 전체기준으로만 생성
 		 */
 		coupon.setUsableCustGb("G100_00"); // 전체
 		// TB_GOODS_BENEFIT_PRICE_TEMP 생성 - 상품쿠폰 전체

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

@@ -92,7 +92,7 @@ public class TsbGoodsTask {
 	}
 
 	/**
-	 * 상품 즉시할인가 생성
+	 * 상품 즉시할인가 생성 : 시간배치 - 매시 2분
 	 *
 	 * @throws Exception
 	 * @author eskim

+ 31 - 30
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -482,33 +482,33 @@
 	<!-- 상품 혜택가 목록 -->
 	<sql id="getGoodsBenefitList_sql">
 		SELECT GOODS_CD
-		       , CUST_GB
+		       , 'G100_00' AS CUST_GB
 		       , CURR_PRICE
 		       , MIN(CURR_PRICE - 
 		           ( CASE WHEN DC_WAY = 'G240_10' THEN
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> DC_PVAL THEN MAX_DC_AMT ELSE DC_PVAL END)
 		            ELSE
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> FLOOR((CURR_PRICE * DC_PVAL / 100) / #{pointUnit}) * #{pointUnit} THEN MAX_DC_AMT ELSE FLOOR((CURR_PRICE * DC_PVAL / 100) / #{pointUnit}) * #{pointUnit} END)
-		            END) )AS PC_PRICE
+		            END) )AS PC_CURR_PRICE
 		       , MIN(CURR_PRICE - 
 		           ( CASE WHEN DC_WAY = 'G240_10' THEN
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> DC_MVAL THEN MAX_DC_AMT ELSE DC_MVAL END)
 		            ELSE
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> FLOOR((CURR_PRICE * DC_MVAL / 100) / #{pointUnit}) * #{pointUnit} THEN MAX_DC_AMT ELSE FLOOR((CURR_PRICE * DC_MVAL / 100) / #{pointUnit}) * #{pointUnit} END)
-		            END)  )AS MO_PRICE
+		            END)  )AS MO_CURR_PRICE
 		       , STAFF_CURR_PRICE
 		       , MIN(STAFF_CURR_PRICE - 
 		           ( CASE WHEN DC_WAY = 'V' THEN
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> DC_PVAL THEN MAX_DC_AMT ELSE DC_PVAL END)
 		            ELSE
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> FLOOR((STAFF_CURR_PRICE * DC_PVAL / 100) / #{pointUnit}) * #{pointUnit} THEN MAX_DC_AMT ELSE FLOOR((STAFF_CURR_PRICE * DC_PVAL / 100) / #{pointUnit}) * #{pointUnit} END)
-		            END) )AS STAFF_PC_PRICE
+		            END) )AS STAFF_PC_CURR_PRICE
 		       , MIN(STAFF_CURR_PRICE - 
 		           ( CASE WHEN DC_WAY = 'G240_10' THEN
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> DC_MVAL THEN MAX_DC_AMT ELSE DC_MVAL END)
 		            ELSE
 		                 (CASE WHEN NVL(MAX_DC_AMT, 0) >0 AND MAX_DC_AMT <![CDATA[<]]> FLOOR((STAFF_CURR_PRICE * DC_MVAL / 100) / #{pointUnit}) * #{pointUnit} THEN MAX_DC_AMT ELSE FLOOR((STAFF_CURR_PRICE * DC_MVAL / 100) / #{pointUnit}) * #{pointUnit} END)
-		            END)  )AS STAFF_MO_PRICE
+		            END)  )AS STAFF_MO_CURR_PRICE
 		FROM   (
 		        SELECT CP.CPN_ID
 		             , CP.CPN_NM
@@ -553,17 +553,20 @@
 		                AND    CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
 		                AND    IF (CP.TOT_PUB_LIMIT_QTY = 0, 9999999999,CP.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1) FROM TB_CUST_COUPON WHERE CPN_ID = CP.CPN_ID) /*총발행제한수*/
 		                AND   (
-		                        (CP.APPLY_SCOPE = 'A' ) OR
+		                        (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 CPN_TARGET = 'G260_10'
 		                                                   AND DEL_YN = 'N'
 		                                                   AND REF_VAL = G.GOODS_CD
 		                                                   ) > 0
-		                        ) OR
+		                        ) 
+		                        /*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 CPN_TARGET = 'G260_11' 
 		                                                   AND DEL_YN = 'N'
 		                                                   AND NVL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
 		                                                   AND NVL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
@@ -572,18 +575,21 @@
 		                                                                   WHERE GOODS_CD = G.GOODS_CD
 		                                                                   )
 		                                                  ) >0
-		                        ) OR
+		                        ) 
+		                        */
+		                        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 CPN_TARGET = 'G260_12' 
 		                                                   AND DEL_YN = 'N'
 		                                                   AND REF_VAL = G.BRAND_CD
 		                                                   AND NVL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
 		                                                  ) >0
-		                        ) OR
+		                        ) 
+		                        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 CPN_TARGET = 'G260_13' 
 		                                                   AND DEL_YN = 'N'
 		                                                   AND REF_VAL = G.SUPPLY_COMP_CD
 		                                                   /*AND NVL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB*/
@@ -635,7 +641,7 @@
 	<!-- 상품혜택가 temp 적용 변경 -->
 	<update id="updateGoodsBenefitPriceTemp"  parameterType="Coupon"  timeout="600">
 		/* TsbGoods.updateGoodsBenefitPriceTemp */
-		INSERT TB_GOODS_BENEFIT_PRICE_TEMP (
+		INSERT INTO TB_GOODS_BENEFIT_PRICE_TEMP (
 		         GOODS_CD
 		       , CUST_GB
 		       , CURR_PRICE
@@ -647,41 +653,36 @@
 		       , REG_DT
 		  )
 		  (
+		    SELECT * FROM (
 		       SELECT C.*, NOW() FROM (
-		           SELECT (
 		           <include refid="getGoodsBenefitList_sql"/>
-		           ) C
-		        ) B
-		       
+		       ) C
+		    ) B
 		  )
 		ON DUPLICATE KEY UPDATE
 		     REG_DT = NOW()
 		   , CURR_PRICE = B.CURR_PRICE
 		   , STAFF_CURR_PRICE = B.STAFF_CURR_PRICE
-		    <if test="custGb != null and custGb == 'G100_00'">
+		    <if test="usableCustGb != null and usableCustGb == 'G100_00'">
 		   , PC_CURR_PRICE = B.PC_CURR_PRICE
 		   , MO_CURR_PRICE = B.MO_CURR_PRICE
 		   , STAFF_PC_CURR_PRICE = B.STAFF_PC_CURR_PRICE
 		   , STAFF_MO_CURR_PRICE = B.STAFF_MO_CURR_PRICE
 		    </if>
-		    <if test="custGb != null and custGb == 'G100_10'">
-		   , PC_CURR_PRICE = CASE WHEN B.PC_CURR_PRICE <![CDATA[<=]]> PC_CURR_PRICE THEN B.PC_CURR_PRICE
-		                     ELSE PC_CURR_PRICE END
-		   , MO_CURR_PRICE = CASE WHEN B.MO_CURR_PRICE <![CDATA[<=]]> MO_CURR_PRICE THEN B.MO_CURR_PRICE
-		                     ELSE MO_CURR_PRICE END
+		    <if test="usableCustGb != null and usableCustGb == 'G100_10'">
+		   , PC_CURR_PRICE = IF (TB_GOODS_BENEFIT_PRICE_TEMP.PC_CURR_PRICE >= B.PC_CURR_PRICE, B.PC_CURR_PRICE, TB_GOODS_BENEFIT_PRICE_TEMP.PC_CURR_PRICE)
+		   , MO_CURR_PRICE = IF (TB_GOODS_BENEFIT_PRICE_TEMP.MO_CURR_PRICE >= B.MO_CURR_PRICE, B.MO_CURR_PRICE, TB_GOODS_BENEFIT_PRICE_TEMP.MO_CURR_PRICE)
 		    </if>
-		    <if test="custGb != null and custGb == 'G100_20'">
-		   , STAFF_PC_CURR_PRICE = CASE WHEN B.STAFF_PC_CURR_PRICE <![CDATA[<=]]> STAFF_PC_CURR_PRICE THEN B.STAFF_PC_CURR_PRICE
-		                           ELSE STAFF_PC_CURR_PRICE END
-		   , STAFF_MO_CURR_PRICE = CASE WHEN B.STAFF_MO_CURR_PRICE <![CDATA[<=]]> STAFF_MO_CURR_PRICE THEN B.STAFF_MO_CURR_PRICE
-		                           ELSE STAFF_MO_CURR_PRICE END
+		    <if test="usableCustGb != null and usableCustGb == 'G100_20'">
+		   , STAFF_PC_CURR_PRICE = IF (TB_GOODS_BENEFIT_PRICE_TEMP.STAFF_PC_CURR_PRICE >= B.STAFF_PC_CURR_PRICE, B.STAFF_PC_CURR_PRICE, TB_GOODS_BENEFIT_PRICE_TEMP.STAFF_PC_CURR_PRICE)
+		   , STAFF_MO_CURR_PRICE = IF (TB_GOODS_BENEFIT_PRICE_TEMP.STAFF_MO_CURR_PRICE >= B.STAFF_MO_CURR_PRICE, B.STAFF_MO_CURR_PRICE, TB_GOODS_BENEFIT_PRICE_TEMP.STAFF_MO_CURR_PRICE)
 		    </if>
 	</update>
 	
 	<!-- 상품혜택가  테이블 삭제 -->
 	<delete id="deleteGoodsBenefitPrice">
 		/* TsbGoods.deleteGoodsBenefitPrice */
-		DELETE TB_GOODS_BENEFIT_PRICE
+		DELETE FROM TB_GOODS_BENEFIT_PRICE
 	</delete>
 	
 	<!-- 상품혜택가 생성 -->