Forráskód Böngészése

배치 가격예약 개발중

eskim 5 éve
szülő
commit
6e9726fe3a

+ 26 - 4
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -17,7 +17,7 @@ public interface TsbGoodsDao {
 	 *
 	 * @param goods
 	 * @author eskim
-	 * @since 2019. 12. 31
+	 * @since 2020. 11. 27
 	 */
 	void createGoodsHst(Goods goods);
 
@@ -25,7 +25,7 @@ public interface TsbGoodsDao {
 	 * 상품 타이틀 예약건 초기화
 	 *
 	 * @author eskim
-	 * @since 2020. 02. 07
+	 * @since 2020. 11. 27
 	 */
 	void updateGoodTnmInit();
 
@@ -33,7 +33,7 @@ public interface TsbGoodsDao {
 	 * 상품 타이틀예약 종료처리
 	 *
 	 * @author eskim
-	 * @since 2020. 02. 07
+	 * @since 2020. 11. 27
 	 */
 	void updateGoodsTnmRes();
 
@@ -41,10 +41,32 @@ public interface TsbGoodsDao {
 	 * 상품 타이틀예약 작업
 	 *
 	 * @author eskim
-	 * @since 2020. 02. 07
+	 * @since 2020. 11. 27
 	 */
 	void updateGoodsTnm();
 
+	/**
+	 * 상품 가격 예약건 초기화
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodPriceInit();
 
+	/**
+	 * 상품 가격예약 종료처리
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodsPriceRes();
+
+	/**
+	 * 상품 가격예약 작업
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodsPrice();
 
 }

+ 52 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsPriceJob.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 com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품 가격예약 적용
+ *
+ * @author eskim
+ * @since 2020. 11. 27
+ */
+@Component
+@Slf4j
+public class TsbGoodsPriceJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Goods read() throws Exception {
+
+		Goods goods = new Goods();
+		return goods;
+	}
+
+	@Override
+	public Goods process(Goods goods) throws Exception {
+		return goods;
+	}
+
+	@Override
+	public Goods write(Goods goods) throws Exception {
+
+		goodsService.saveGoodsPriceRsvt();
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 12 - 15
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsTnmJob.java

@@ -1,8 +1,5 @@
 package com.style24.batch.biz.job.goods;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -13,14 +10,14 @@ import com.style24.persistence.domain.Goods;
 import lombok.extern.slf4j.Slf4j;
 
 /**
- * 시간 모니터링
+ * 상품 타이틀예약 적용
  *
- * @author gagamel
- * @since 2020. 11. 13
+ * @author eskim
+ * @since 2020. 11. 27
  */
 @Component
 @Slf4j
-public class TsbGoodsTnmJob extends TsbAbstractJob<Collection<Goods>, Collection<Goods>, Collection<Goods>> {
+public class TsbGoodsTnmJob extends TsbAbstractJob<Goods, Goods, Goods> {
 
 	@Autowired
 	private TsbGoodsService goodsService;
@@ -29,26 +26,26 @@ public class TsbGoodsTnmJob extends TsbAbstractJob<Collection<Goods>, Collection
 	private int failCnt = 0;
 
 	@Override
-	public Collection<Goods> read() throws Exception {
+	public Goods read() throws Exception {
 
-		Collection<Goods> goodsList = new ArrayList<Goods>();
-		return goodsList;
+		Goods goods = new Goods();
+		return goods;
 	}
 
 	@Override
-	public Collection<Goods> process(Collection<Goods> goodsList) throws Exception {
-		return goodsList;
+	public Goods process(Goods goods) throws Exception {
+		return goods;
 	}
 
 	@Override
-	public Collection<Goods> write(Collection<Goods> goodsList) throws Exception {
+	public Goods write(Goods goods) throws Exception {
 
 		goodsService.saveGoodsTnmRsvt();
-		return goodsList;
+		return goods;
 	}
 
 	@Override
-	public void notify(Collection<Goods> goods) throws Exception {
+	public void notify(Goods goods) throws Exception {
 		super.printResult(succCnt, failCnt);
 	}
 

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

@@ -37,7 +37,7 @@ public class TsbGoodsService {
 
 		// 1.예약기간 만료 상품 타이틀 작업
 		// 1.1 이력쌓기
-		goods.setProcJob("TRI"); // 상품타이틀예약 만료건 변경
+		goods.setProcJob("GTE"); // 상품타이틀예약 만료건 변경
 		goods.setRegNo(Integer.parseInt(TsbConstants.REG_ID));
 		goods.setUpdNo(Integer.parseInt(TsbConstants.REG_ID));
 		goodsDao.createGoodsHst(goods);
@@ -49,11 +49,41 @@ public class TsbGoodsService {
 
 		// 3.예약도래 상품 타이틀 작업
 		// 3.1 이력쌓기
-		goods.setProcJob("TR"); // 상품타이틀예약 예약 변경
+		goods.setProcJob("GTS"); // 상품타이틀예약 예약 변경
 		goodsDao.createGoodsHst(goods);
 		// 3.2 상품타이틀 변경
 		goodsDao.updateGoodsTnm();
 	}
 
+	/**
+	 * 상품 가격예약 작업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGoodsPriceRsvt() {
+		Goods goods = new Goods();
+
+		// 1.예약기간 만료 상품 가격 작업
+		// 1.1 이력쌓기
+		goods.setProcJob("GPE"); // 상품 가격예약 만료건 변경
+		goods.setRegNo(Integer.parseInt(TsbConstants.REG_ID));
+		goods.setUpdNo(Integer.parseInt(TsbConstants.REG_ID));
+		goodsDao.createGoodsHst(goods);
+		// 1.2 삼품 가격 원복
+		goodsDao.updateGoodPriceInit();
+
+		// 2.상품예약 종료처리
+		goodsDao.updateGoodsPriceRes();
+
+		// 3.예약도래 상품 가격 작업
+		// 3.1 이력쌓기
+		goods.setProcJob("GPS"); // 상품 예약 가격 적용
+		goodsDao.createGoodsHst(goods);
+		// 3.2 상품 가격 변경
+		goodsDao.updateGoodsPrice();
+	}
 
 }

+ 39 - 1
style24.batch/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.TsbGoodsPriceJob;
 import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
 
 import lombok.extern.slf4j.Slf4j;
@@ -21,15 +22,52 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsTnmJob goodsTnmJob;
 
+	@Autowired
+	private TsbGoodsPriceJob goodsPriceJob;
+
+	/**
+	 * 초 분 시 일 월 주(년)
+	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
+	 * 0 15 10 ? * *" : 모든 요일, 매월, 아무 날이나 10:15:00
+	 * 0 15 10 * * ?" : 아무 요일, 매월, 매일 10:15:00
+	 * 0 15 10 * * ? *" : 모든 연도, 아무 요일, 매월, 매일 10:15
+	 * 0 15 10 * * ? : 2005" 2005년 아무 요일이나 매월, 매일 10:15
+	 * 0 * 14 * * ?" : 아무 요일, 매월, 매일, 14시 매분 0초
+	 * 0 0/5 14 * * ?" : 아무 요일, 매월, 매일, 14시 매 5분마다 0초
+	 * 0 0/5 14,18 * * ?" : 아무 요일, 매월, 매일, 14시, 18시 매 5분마다 0초
+	 * 0 0-5 14 * * ?" : 아무 요일, 매월, 매일, 14:00 부터 매 14:05까지 매 분 0초
+	 * 0 10,44 14 ? 3 WED" : 3월의 매 주 수요일, 아무 날짜나 14:10:00, 14:44:00
+	 * 0 15 10 ? * MON-FRI" : 월~금, 매월, 아무 날이나 10:15:00
+	 * 0 15 10 15 * ?" : 아무 요일, 매월 15일 10:15:00
+	 * 0 15 10 L * ?" : 아무 요일, 매월 마지막 날 10:15:00
+	 * 0 15 10 ? * 6L" : 매월 마지막 금요일 아무 날이나 10:15:00
+	 * 0 15 10 ? * 6L 2002-2005" : 2002년부터 2005년까지 매월 마지막 금요일 아무 날이나 10:15:00
+	 * 0 15 10 ? * 6#3" : 매월 3번째 금요일 아무 날이나 10:15:00
+	 *
+	 * @throws Exception
+	 */
+
 	/**
 	 * 상품 타이틀예약 적용 주기 : 시간배치 - 매시 1분 (소셜과 시간 중복)
 	 *
 	 * @throws Exception
 	 */
 	@Scheduled(cron = "${cron.goods.goodsTnmJob}")
-	@Scheduled(fixedDelay = 3500000)
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbGoodsTnmJob() throws Exception {
 		goodsTnmJob.run("상품 타이틀예약 적용 ");
 	}
+
+	/**
+	 * 상품 가격예약 적용 주기 : 시간배치 - 매시 1분 (소셜과 시간 중복)
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.goodsPriceJob}")
+	@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsPriceJob() throws Exception {
+		goodsPriceJob.run("상품 가격예약 적용 ");
+	}
 }

+ 130 - 10
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -115,7 +115,7 @@
 		      <when test='procJob != null and procJob == "G"'>
 		AND GOODS_CD = #{goodsCd}
 		      </when>
-		      <when test='procJob != null and procJob == "TRI"'>
+		      <when test='procJob != null and procJob == "GTE"'>
 		AND GOODS_CD IN (
 		                 SELECT G.GOODS_CD
 		                 FROM TB_GOODS G
@@ -127,7 +127,7 @@
 		                                  , GT.GOODS_TNM
 		                                  , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_TNM_RES_SQ DESC) RANK
 		                             FROM TB_GOODS_TNM_RES GT
-		                             WHERE GT.APPLYC_YN = 'N'
+		                             WHERE GT.APPLY_YN = 'N'
 		                             AND GT.APPLY_EDDT <![CDATA[<]]> NOW()
 		                            ) Z
 		                       WHERE RANK = 1
@@ -136,7 +136,7 @@
 		                 AND G.GOODS_TNM = S.GOODS_TNM
 		                )
 		      </when>
-		      <when test='procJob != null and procJob == "TR"'>
+		      <when test='procJob != null and procJob == "GTS"'>
 		AND GOODS_CD IN (
 		                 SELECT G.GOODS_CD
 		                 FROM TB_GOODS G
@@ -148,7 +148,7 @@
 		                                  , GT.GOODS_TNM
 		                                  , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_TNM_RES_SQ DESC) RANK
 		                             FROM TB_GOODS_TNM_RES GT
-		                             WHERE GT.APPLYC_YN = 'N'
+		                             WHERE GT.APPLY_YN = 'N'
 		                             AND NOW() BETWEEN GT.APPLY_STDT AND GT.APPLY_EDDT
 		                            ) Z
 		                       WHERE RANK = 1
@@ -157,6 +157,50 @@
 		                 AND (G.GOODS_TNM IS NULL OR G.GOODS_TNM <![CDATA[<>]]> S.GOODS_TNM)
 		                )
 		      </when>
+		      <when test='procJob != null and procJob == "GPE"'>
+		AND GOODS_CD IN (
+		                 SELECT G.GOODS_CD
+		                 FROM TB_GOODS G
+		                     ,(
+		                       SELECT GOODS_CD
+		                            , RES_GOODS_PRICE
+		                       FROM (
+		                             SELECT GT.GOODS_CD
+		                                  , GT.RES_GOODS_PRICE
+		                                  , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_PRICE_RES_SQ DESC) RANK
+		                             FROM TB_GOODS_PRICE_RES GT
+		                             WHERE GT.APPLY_YN = 'N'
+		                             AND GT.APPLY_EDDT <![CDATA[<]]> NOW()
+		                            ) Z
+		                       WHERE RANK = 1
+		                      ) S
+		                 WHERE G.GOODS_CD = S.GOODS_CD
+		                 AND G.CURR_PRICE = S.RES_GOODS_PRICE
+		                 AND G.SELF_GOODS_YN = 'Y'
+		                )
+		      </when>
+		      <when test='procJob != null and procJob == "GPS"'>
+		AND GOODS_CD IN (
+		                 SELECT G.GOODS_CD
+		                 FROM TB_GOODS G
+		                     ,(
+		                       SELECT GOODS_CD
+		                            , RES_GOODS_PRICE
+		                       FROM (
+		                             SELECT GT.GOODS_CD
+		                                  , GT.RES_GOODS_PRICE
+		                                  , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_PRICE_RES_SQ DESC) RANK
+		                             FROM TB_GOODS_PRICE_RES GT
+		                             WHERE GT.APPLY_YN = 'N'
+		                             AND NOW() BETWEEN GT.APPLY_STDT AND GT.APPLY_EDDT
+		                            ) Z
+		                       WHERE RANK = 1
+		                      ) S
+		                 WHERE G.GOODS_CD = S.GOODS_CD
+		                 AND (G.CURR_PRICE <![CDATA[<>]]> S.RES_GOODS_PRICE)
+		                 AND G.SELF_GOODS_YN = 'Y'
+		                )
+		      </when>
 		      <otherwise>
 		AND 1 = 2
 		      </otherwise>
@@ -176,7 +220,7 @@
 		                            , GT.GOODS_TNM
 		                            , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_TNM_RES_SQ DESC) RANK
 		                       FROM TB_GOODS_TNM_RES GT
-		                       WHERE GT.APPLYC_YN = 'N'
+		                       WHERE GT.APPLY_YN = 'N'
 		                       AND NOW() BETWEEN GT.APPLY_STDT AND GT.APPLY_EDDT
 		                      ) S
 		                   WHERE S.RANK = 1
@@ -193,7 +237,7 @@
 		                                   , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_TNM_RES_SQ DESC) RANK
 		                              FROM TB_GOODS_TNM_RES RS
 		                              WHERE RS.APPLY_EDDT <![CDATA[<]]> NOW()
-		                              AND RS.APPLYC_YN = 'N'
+		                              AND RS.APPLY_YN = 'N'
 		                              ) Z
 		                         WHERE RANK = 1
 		                        ) TS
@@ -205,11 +249,11 @@
 	<update id="updateGoodsTnmRes">
 		/* TsbGoods.updateGoodsTnmRes */
 		UPDATE TB_GOODS_TNM_RES
-		   SET APPLYC_YN = 'Y'
+		   SET APPLY_YN = 'Y'
 		     , UPD_NO = 0
 		     , UPD_DT = NOW()
 		WHERE APPLY_EDDT <![CDATA[<]]> NOW()
-		AND APPLYC_YN = 'N'
+		AND APPLY_YN = 'N'
 	</update>
 	
 	<!-- 상품타이틀 변경 -->
@@ -230,7 +274,7 @@
 		                                  , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_TNM_RES_SQ DESC) RANK
 		                             FROM TB_GOODS_TNM_RES RS
 		                             WHERE NOW() BETWEEN RS.APPLY_STDT AND RS.APPLY_EDDT
-		                             AND RS.APPLYC_YN = 'N'
+		                             AND RS.APPLY_YN = 'N'
 		                             ) Z
 		                       WHERE RANK = 1
 		                      ) S
@@ -249,7 +293,7 @@
 		                                   , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_TNM_RES_SQ DESC) RANK
 		                              FROM TB_GOODS_TNM_RES RS
 		                              WHERE NOW() BETWEEN RS.APPLY_STDT AND RS.APPLY_EDDT
-		                              AND RS.APPLYC_YN = 'N'
+		                              AND RS.APPLY_YN = 'N'
 		                              ) Z
 		                         WHERE RANK = 1
 		                        ) S
@@ -258,4 +302,80 @@
 		                  )
 	</update>
 	
+	<!-- 상품 가격 예약건 초기화 -->
+	<update id="updateGoodPriceInit">
+		/* TsbGoods.updateGoodPriceInit */
+		UPDATE TB_GOODS A, (SELECT P.GOODS_CD
+		                         , TS.END_GOODS_PRICE
+		                         , P.CURR_PRICE
+		                         , 100 - ROUND((TS.END_GOODS_PRICE / P.LIST_PRICE) * 100 ,0) AS DC_RATE
+		                    FROM TB_GOODS P
+		                      , (SELECT GOODS_CD
+		                              , END_GOODS_PRICE
+		                         FROM (SELECT GT.GOODS_CD
+		                                    , GT.END_GOODS_PRICE
+		                                    , RANK() OVER(PARTITION BY GT.GOODS_CD ORDER BY GT.GOODS_PRICE_RES_SQ DESC) RANK
+		                               FROM TB_GOODS_PRICE_RES GT
+		                               WHERE GT.APPLY_EDDT <![CDATA[<]]> NOW()
+		                               AND GT.APPLY_YN = 'N'
+		                              ) S
+		                         WHERE S.RANK = 1
+		                         ) TS
+		                    WHERE P.GOODS_CD = TS.GOODS_CD
+		                    ) B
+		SET A.UPD_NO = 0
+		  , A.UPD_DT = NOW()
+		  , A.CURR_PRICE = B.END_GOODS_PRICE
+		  , A.CURR_BPRICE = B.CURR_PRICE
+		  , A.DC_RATE = B.DC_RATE
+		  , A.PRICE_UPD_DT = NOW()
+		WHERE A.GOODS_CD = B.GOODS_CD
+		AND A.SELF_GOODS_YN = 'Y'
+	</update>
+	
+	<!-- 상품예약 종료처리 -->
+	<update id="updateGoodsPriceRes">
+		/* TsbGoods.updateGoodsPriceRes */
+		UPDATE TB_GOODS_PRICE_RES
+		   SET APPLY_YN = 'Y'
+		     , UPD_NO = 0
+		     , UPD_DT = NOW()
+		WHERE APPLY_EDDT <![CDATA[<]]> NOW()
+		AND APPLY_YN = 'N'
+	</update>
+	
+	<!-- 상품 가격 변경 -->
+	<update id="updateGoodsPrice">
+		/* TsbGoods.updateGoodsPrice */
+		UPDATE TB_GOODS A, (SELECT P.GOODS_CD
+		                         , S.RES_GOODS_PRICE
+		                         , P.CURR_PRICE
+		                         , 100 - ROUND((S.RES_GOODS_PRICE / P.LIST_PRICE) * 100 ,0) AS DC_RATE
+		                    FROM TB_GOODS P
+		                       , (
+		                          SELECT GOODS_CD
+		                               , RES_GOODS_PRICE
+		                          FROM (
+		                                SELECT RS.GOODS_CD
+		                                     , RS.RES_GOODS_PRICE
+		                                     , RANK() OVER(PARTITION BY RS.GOODS_CD ORDER BY RS.GOODS_PRICE_RES_SQ DESC) RANK
+		                                FROM TB_GOODS_PRICE_RES RS
+		                                WHERE NOW() BETWEEN RS.APPLY_STDT AND RS.APPLY_EDDT
+		                                AND RS.APPLY_YN = 'N'
+		                                ) Z
+		                          WHERE RANK = 1
+		                         ) S
+		                    WHERE P.GOODS_CD = S.GOODS_CD
+		                    AND P.CURR_PRICE <![CDATA[<>]]> S.RES_GOODS_PRICE
+		                 ) B
+		SET A.UPD_NO = 0
+		  , A.UPD_DT = NOW()
+		  , A.CURR_PRICE = B.RES_GOODS_PRICE
+		  , A.CURR_BPRICE = B.CURR_PRICE
+		  , A.DC_RATE = B.DC_RATE
+		  , A.PRICE_UPD_DT = NOW()
+		WHERE A.GOODS_CD = B.GOODS_CD
+		AND A.SELF_GOODS_YN = 'Y'
+	</update>
+	
 </mapper>

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

@@ -43,3 +43,4 @@ cron:
     #상품
     goods:
         goodsTnmJob: 2 22 2 29 2 ?
+        goodsPriceJob: 2 22 2 29 2 ?