Bladeren bron

VW_STOCK 생성

gagamel 4 jaren geleden
bovenliggende
commit
03c85ef7e6

+ 37 - 10
src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -265,7 +265,7 @@ public interface TsbGoodsDao {
 	 * @since 2020. 12. 04
 	 */
 	void saveGoodsSafeNo(GoodsSafeNo goodsSafeNo);
-	
+
 	/**
 	 * 안전인증대상 상품 저장
 	 *
@@ -273,7 +273,6 @@ public interface TsbGoodsDao {
 	 * @since 2020. 12. 04
 	 */
 	void updateGoodsSafeNo(GoodsSafeNo goodsSafeNo);
-	
 
 	/**
 	 * 실측사이즈 저장
@@ -419,8 +418,7 @@ public interface TsbGoodsDao {
 	 * @since 2021. 05. 26
 	 */
 	void createWmsStockHst(String jobdate);
-	
-	
+
 	/**
 	 * TB_SHOP_STOCK 삭제
 	 *
@@ -452,8 +450,7 @@ public interface TsbGoodsDao {
 	 * @since 2021. 05. 27
 	 */
 	void createShopStockHst(String jobdate);
-	
-	
+
 	/**
 	 *  상품 전시재고 삭제
 	 *
@@ -485,7 +482,7 @@ public interface TsbGoodsDao {
 	 * @since 2020. 08. 24
 	 */
 	void createTbOptionSyncTemp();
-	
+
 	/**
 	 * 매장 재고 임시 테이블 이관
 	 *
@@ -545,7 +542,7 @@ public interface TsbGoodsDao {
 	 * @since 2021. 05. 27
 	 */
 	void saveGoodsOptionSyncSync();
-	
+
 	/**
 	 * TB_OPTION_SYNC 매장별 최대구매수량 적용-
 	 *
@@ -679,7 +676,7 @@ public interface TsbGoodsDao {
 	 * @since 2021. 4. 7
 	 */
 	int createGoodsBenefit();
-	
+
 	/**
 	 * 재입고알림 목록
 	 *
@@ -687,7 +684,7 @@ public interface TsbGoodsDao {
 	 * @since 2021. 07. 01
 	 */
 	Collection<ReinboundInform> getReinboundInformList();
-	
+
 	/**
 	 * 재입고 알림톡 발송처리
 	 * 
@@ -696,4 +693,34 @@ public interface TsbGoodsDao {
 	 */
 	int updateReinboundInform(ReinboundInform reinboundInform);
 
+	/**
+	 * VW_STOCK임시 테이블 Truncate
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	void truncateVwStockTemporary();
+
+	/**
+	 * VW_STOCK임시 테이블 생성
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	int createVwStockTemporary();
+
+	/**
+	 * VW_STOCK 테이블 삭제
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	void deleteVwStock();
+
+	/**
+	 * VW_STOCK 테이블 생성
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	int createVwStock();
+
 }

+ 59 - 0
src/main/java/com/style24/batch/biz/job/goods/TsbGoodsVwStockJob.java

@@ -0,0 +1,59 @@
+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;
+
+/**
+ * 상품 VW_STOCK 생성
+ * 
+ * @author gagamel
+ * @since 2021. 8. 30
+ */
+@Component
+@Slf4j
+public class TsbGoodsVwStockJob 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 {
+		// VW_STOCK임시 테이블 truncate
+		log.info("1.VW_STOCK임시 테이블 truncate");
+		goodsService.truncateVwStockTemporary();
+
+		// VW_STOCK임시 테이블 생성
+		log.info("2.VW_STOCK임시 테이블 생성 시작");
+		int cnt = goodsService.createVwStockTemporary();
+		log.info("2.VW_STOCK임시 테이블 생성 완료: {}", cnt);
+
+		if (cnt > 0) {
+			log.info("3.VW_STOCK 테이블 생성 시작");
+			cnt = goodsService.createVwStock();
+			log.info("3.VW_STOCK임시 테이블 생성 완료: {}", cnt);
+		}
+
+		return "OK";
+	}
+
+	@Override
+	public String write(String result) throws Exception {
+		return "OK";
+	}
+
+	@Override
+	public void notify(String result) throws Exception {
+		// Do nothing
+	}
+
+}

+ 47 - 14
src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -271,7 +271,7 @@ public class TsbGoodsService {
 		// 상품평-만족도점수
 		goodsSummary.setColNm1("SCORE");
 		goodsSummary.setReviewColNm("SCORE");
-	//	goodsSummary.setPhotoYn("");
+		//	goodsSummary.setPhotoYn("");
 		goodsDao.createGoodsSummaryByReviewSum(goodsSummary);
 		// 상품평-사이즈점수
 		goodsSummary.setColNm1("SCORE_SIZE1");
@@ -375,7 +375,7 @@ public class TsbGoodsService {
 					goodsSafeNo.setRegNo(TsbConstants.REG_NO);
 					goodsSafeNo.setUpdNo(TsbConstants.REG_NO);
 					goodsDao.saveGoodsSafeNo(goodsSafeNo);
-				}else {
+				} else {
 					goodsSafeNo.setUpdNo(TsbConstants.REG_NO);
 					goodsDao.updateGoodsSafeNo(goodsSafeNo);
 				}
@@ -537,7 +537,7 @@ public class TsbGoodsService {
 //		goodsDao.createWmsProductSkuHst(jobdate);
 //
 //	}
-	
+
 	/**
 	 * wms상품재고이력 생성
 	 *
@@ -555,7 +555,7 @@ public class TsbGoodsService {
 		// TB_WMS_STOCK_HST 생성
 		goodsDao.createWmsStockHst(jobdate);
 	}
-	
+
 	/**
 	 * shop 상품재고 생성
 	 *
@@ -570,16 +570,16 @@ public class TsbGoodsService {
 		// TB_SHOP_STOCK 작업
 		goodsDao.deleteShopStock();
 		int cnt = goodsDao.createShopStock();
-		
+
 		// TB_SHOP_STOCK_HST 2달 전 데이터 삭제
 		String delYyyymmdd = GagaDateUtil.getOffsetMonth(-2, "yyyyMMdd") + "000000";  //년월일시분초
 		goodsDao.deleteShopStockHst(delYyyymmdd);
 		// TB_SHOP_STOCK_HST 생성
 		if (cnt > 0) {
-			goodsDao.createShopStockHst(jobdate);	
+			goodsDao.createShopStockHst(jobdate);
 		}
 	}
-	
+
 	/**
 	 * WMS 임시 테이블에서 실테이블로 이관
 	 *
@@ -596,7 +596,7 @@ public class TsbGoodsService {
 		goodsDao.createTbOptionSyncTemp();
 //		// 매장재고 - 출고처별 판매비율 적용
 		goodsDao.saveTbOptionSyncTemp();
-		
+
 		// 입점 상품 재고 동기화 
 		updateOptionByOfSellQty();
 
@@ -610,7 +610,7 @@ public class TsbGoodsService {
 		// WMS, 매장별 최대 주문수량 적용  == > 작업합시다.
 		//TB_SHOP_STOCK과 TB_OPTION_SYNC.CURR_STOCK_QTY 비교하여 STORE_MAX_QTY에 적용
 		goodsDao.updateGoodsOptionSyncSync();
-		  
+
 		// TB_OPTION_SYNC => TB_OPTION 적용
 		goodsDao.saveGoodsOptionNew();
 
@@ -770,7 +770,7 @@ public class TsbGoodsService {
 	public void deleteWmsStockHst(String jobdate) {
 		goodsDao.deleteWmsStockHst(jobdate);
 	}
-	
+
 	/**
 	 * 입고상품중 온라인 옵션이 없는 상품옵션 추가
 	 *
@@ -798,11 +798,10 @@ public class TsbGoodsService {
 		// 쿼리 튜닝중
 		cnt = goodsDao.createTemporaryGoodsBenefitAllCouponDiscount();
 		totCnt += cnt;
-		
+
 		cnt = goodsDao.createTemporaryGoodsBenefitScopeCouponDiscount();
 		totCnt += cnt;
-		
-		
+
 		log.info("1.1.상품혜택임시-쿠폰할인 생성: {}", cnt);
 
 		cnt = goodsDao.createTemporaryGoodsBenefitFreeDelivery();
@@ -856,5 +855,39 @@ public class TsbGoodsService {
 	public int updateReinboundInform(ReinboundInform reinboundInform) {
 		return goodsDao.updateReinboundInform(reinboundInform);
 	}
-	
+
+	/**
+	 * VW_STOCK임시 테이블 Truncate
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	public void truncateVwStockTemporary() {
+		goodsDao.truncateVwStockTemporary();
+	}
+
+	/**
+	 * VW_STOCK임시 테이블 생성
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	public int createVwStockTemporary() {
+		return goodsDao.createVwStockTemporary();
+	}
+
+	/**
+	 * VW_STOCK 생성
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	@Transactional("shopTxnManager")
+	public int createVwStock() {
+		// VW_STOCK 테이블 삭제
+		goodsDao.deleteVwStock();
+
+		// VW_STOCK 테이블 생성
+		return goodsDao.createVwStock();
+	}
+
 }

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

@@ -20,6 +20,7 @@ import com.style24.batch.biz.job.goods.TsbGoodsSearchSectionJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSummaryJob;
 import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
+import com.style24.batch.biz.job.goods.TsbGoodsVwStockJob;
 import com.style24.batch.biz.job.goods.TsbGoodsWmsBrandproviderJob;
 import com.style24.batch.biz.job.goods.TsbGoodsWmsGoodsJob;
 import com.style24.batch.biz.job.goods.TsbGoodsWmsGoodsStockJob;
@@ -113,6 +114,9 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsReinboundJob goodsReinboundJob;
 
+	@Autowired
+	private TsbGoodsVwStockJob goodVwStockJob;
+
 	/**
 	 * 초 분 시 일 월 주(년)
 	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
@@ -395,4 +399,15 @@ public class TsbGoodsTask {
 		goodsReinboundJob.runById("cron.goods.reinbound.notify");
 	}
 
+	/**
+	 * 상품 VW_STOCK 생성
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.vwstock.create}")
+	@Async
+	public void goodsVwStockJob() throws Exception {
+		goodVwStockJob.runById("cron.goods.vwstock.create");
+	}
+
 }

+ 16 - 0
src/main/java/com/style24/batch/biz/web/TsbGoodsController.java

@@ -21,6 +21,7 @@ import com.style24.batch.biz.job.goods.TsbGoodsSearchSectionJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
 import com.style24.batch.biz.job.goods.TsbGoodsSummaryJob;
 import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
+import com.style24.batch.biz.job.goods.TsbGoodsVwStockJob;
 import com.style24.batch.biz.job.goods.TsbGoodsWmsBrandproviderJob;
 import com.style24.batch.biz.job.goods.TsbGoodsWmsGoodsJob;
 import com.style24.batch.biz.job.goods.TsbGoodsWmsGoodsStockJob;
@@ -115,6 +116,9 @@ public class TsbGoodsController extends TscBaseController {
 	@Autowired
 	private TsbGoodsReinboundJob goodsReinboundJob;
 
+	@Autowired
+	private TsbGoodsVwStockJob goodVwStockJob;
+
 	/**
 	 * 상품 타이틀예약 적용 주기 : 시간배치 - 매시 1분 (소셜과 시간 중복)
 	 *
@@ -386,4 +390,16 @@ public class TsbGoodsController extends TscBaseController {
 		return "OK";
 	}
 
+	/**
+	 * 상품 VW_STOCK 생성
+	 *
+	 * @throws Exception
+	 */
+	@GetMapping("/vwstock/create")
+	@ResponseBody
+	public String createGoodsVwStockJob() throws Exception {
+		goodVwStockJob.runById("cron.goods.vwstock.create");
+		return "OK";
+	}
+
 }

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

@@ -3293,5 +3293,98 @@
 		  , UPD_DT = NOW()
 		WHERE RINBD_INFO_SQ = #{rinbdInfoSq}
 	</update>
+	
+	<!-- VW_STOCK임시 테이블 truncate -->
+	<delete id="truncateVwStockTemporary">
+		/* TsbGoods.truncateVwStockTemporary */
+		TRUNCATE TABLE VW_STOCK_TMP
+	</delete>
+	
+	<!-- VW_STOCK임시 테이블 생성 -->
+	<insert id="createVwStockTemporary" timeout="900">
+		/* TsbGoods.createVwStockTemporary */
+		INSERT INTO VW_STOCK_TMP (
+		       GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , CURR_STOCK_QTY
+		     , BASE_STOCK_QTY
+		     , ADD_PRICE
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , DISP_YN
+		)
+		SELECT A.GOODS_CD
+		     , A.OPT_CD
+		     , A.OPT_CD1
+		     , A.OPT_CD2
+		     , A.CURR_STOCK_QTY
+		     , 0                AS BASE_STOCK_QTY
+		     , A.ADD_PRICE
+		     , A.SOLDOUT_YN
+		     , A.DISP_ORD
+		     , A.DISP_YN
+		FROM   (
+		        SELECT S.GOODS_CD
+		             , S.OPT_CD
+		             , S.OPT_CD1
+		             , S.OPT_CD2
+		             , GREATEST((GREATEST(((GREATEST(S.CURR_STOCK_QTY,0) + GREATEST(S.STORE_STOCK_QTY,0)) - S.BASE_STOCK_QTY),0) - IFNULL(SQ.STOCK_QTY, 0)),0) AS CURR_STOCK_QTY
+		             , S.SOLDOUT_YN
+		             , S.ADD_PRICE
+		             , S.DISP_ORD
+		             , S.DISP_YN
+		        FROM   TB_OPTION S
+		        LEFT OUTER JOIN (
+		                         SELECT GOODS_CD
+		                              , OPT_CD
+		                              , SUM((CASE SELL_GB
+		                                          WHEN '10' THEN 1
+		                                          WHEN '20' THEN 1
+		                                          ELSE -1
+		                                     END) * SELL_QTY) AS STOCK_QTY
+		                         FROM   TB_SELL_QTY
+		                         GROUP  BY GOODS_CD, OPT_CD
+		                        ) SQ ON S.GOODS_CD = SQ.GOODS_CD
+		                            AND S.OPT_CD = SQ.OPT_CD
+		       ) A
+	</insert>
+	
+	<!-- VW_STOCK 테이블 삭제 -->
+	<delete id="deleteVwStock" timeout="300">
+		/* TsbGoods.deleteVwStock */
+		DELETE FROM VW_STOCK
+	</delete>
+	
+	<!-- VW_STOCK 테이블 생성 -->
+	<insert id="createVwStock" timeout="900">
+		/* TsbGoods.createVwStock */
+		INSERT INTO VW_STOCK (
+		       GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , CURR_STOCK_QTY
+		     , BASE_STOCK_QTY
+		     , ADD_PRICE
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , DISP_YN
+		     , REG_DT
+		)
+		SELECT GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , CURR_STOCK_QTY
+		     , BASE_STOCK_QTY
+		     , ADD_PRICE
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , DISP_YN
+		     , NOW()          AS REG_DT
+		FROM   VW_STOCK_TMP
+	</insert>
 
 </mapper>

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

@@ -71,6 +71,7 @@ cron:
             all.create: 2 22 2 29 2 ?             #검색전체색인 생성
             section.create: 2 22 2 29 2 ?         #검색부분색인 생성
         reinbound.notify:  2 22 2 29 2 ?          #재입고알림톡 발송
+        vwstock.create: 2 22 2 29 2 ?             #VW_STOCK 생성 (1시간 1회)
 
     # 회원(고객)
     customer:

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

@@ -61,6 +61,7 @@ cron:
             all.create: 2 22 2 29 2 ?               #검색전체색인 생성 (1일 1회)
             section.create: 2 22 2 29 2 ?   #검색부분색인 생성 (1일 1회)
         reinbound.notify:  2 22 2 29 2 ?          #재입고알림톡 발송 (사용안함)
+        vwstock.create: 2 22 2 29 2 ?            #VW_STOCK 생성 (1시간 1회)
 
     # 회원(고객)
     #customer:

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

@@ -72,6 +72,7 @@ cron:
             all.create: 0 0 2 * * *               #검색전체색인 생성 (1일 1회)
             section.create: 0 10 0-1,3-23 * * *   #검색부분색인 생성 (1일 1회)
         reinbound.notify:  2 22 2 29 2 ?          #재입고알림톡 발송
+        vwstock.create: 2 22 2 29 2 ?             #VW_STOCK 생성 (1시간 1회)
 
     # 회원(고객)
     #customer: