Преглед на файлове

온라인 재고 생성 관련 수정

eskim преди 5 години
родител
ревизия
dcf97a52a1

+ 51 - 2
src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -411,6 +411,39 @@ public interface TsbGoodsDao {
 	void createWmsStockHst(String jobdate);
 	
 	
+	/**
+	 * TB_SHOP_STOCK 삭제
+	 *
+	 * @author eskim
+	 * @since 2021. 05. 27
+	 */
+	void deleteShopStock();
+
+	/**
+	 * TB_SHOP_STOCK 저장
+	 *
+	 * @author eskim
+	 * @since 2021. 05. 27
+	 */
+	void createShopStock();
+
+	/**
+	 * TB_SHOP_STOCK_HST 삭제
+	 *
+	 * @author eskim
+	 * @since 2021. 05. 27
+	 */
+	void deleteShopStockHst(String jobdate);
+
+	/**
+	 * TB_SHOP_STOCK_HST 저장
+	 *
+	 * @author eskim
+	 * @since 2021. 05. 27
+	 */
+	void createShopStockHst(String jobdate);
+	
+	
 	/**
 	 *  상품 전시재고 삭제
 	 *
@@ -436,12 +469,20 @@ public interface TsbGoodsDao {
 	void deleteTbOptionSyncTemp();
 
 	/**
-	 * ERP 재고 임시 테이블 이관
+	 * wms 재고 임시 테이블 이관
 	 *
 	 * @author eskim
 	 * @since 2020. 08. 24
 	 */
 	void createTbOptionSyncTemp();
+	
+	/**
+	 * 매장 재고 임시 테이블 이관
+	 *
+	 * @author eskim
+	 * @since 2021. 05. 27
+	 */
+	void saveTbOptionSyncTemp();
 
 	/**
 	 * 입점상품 SELL_QTY 목록 조회
@@ -491,9 +532,17 @@ public interface TsbGoodsDao {
 	 * TB_OPTION_SYNC_TEMP => TB_OPTION_SYNC 변경적용
 	 *
 	 * @author eskim
-	 * @since 2021. 01. 08
+	 * @since 2021. 05. 27
 	 */
 	void saveGoodsOptionSyncSync();
+	
+	/**
+	 * TB_OPTION_SYNC 매장별 최대구매수량 적용-
+	 *
+	 * @author eskim
+	 * @since 2021. 05. 28
+	 */
+	void updateGoodsOptionSyncSync();
 
 	/**
 	 * WMS 임시 테이블에서 실테이블로 이관(재고가 상이한것만 수정)

+ 7 - 5
src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsGoodsStockJob.java

@@ -65,10 +65,10 @@ public class TsbGoodsWmsGoodsStockJob extends TsbAbstractJob<WmsStock, WmsStock,
 			return null;
 		} else {
 
-			// TB_STOCK_BY_LOCCODE 작업
+			// TB_WMS_STOCK 작업
 			goodsService.deleteWmsStock();
 
-			// TB_STOCK_BY_LOCCODE  생성
+			// TB_WMS_STOCK  생성
 			Collection<WmsStock> wmsStockList = wmsGoodsService.getWmsStockList();
 			String byrow = "N";
 			if ("Y".equals(byrow)) {
@@ -95,14 +95,16 @@ public class TsbGoodsWmsGoodsStockJob extends TsbAbstractJob<WmsStock, WmsStock,
 			
 			//wms상품재고이력 생성
 			goodsService.createWmsStockHst(jobdate);
-
+			
+			//매장재고생성 - 출고처별 판매비율 적용
+			goodsService.createShopStock(jobdate);
 
 			//온라인 상품 재고 적용
-			goodsService.saveGoodsStock(); // 테스트 막음
+			goodsService.saveGoodsStock(); 
 		}
 
 		//온라인 전시 재고 작업
-		//goodsService.saveGoodsDispStock();  // 테스트 막음
+		goodsService.saveGoodsDispStock();
 
 		return wmsStock;
 	}

+ 35 - 7
src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -530,7 +530,6 @@ public class TsbGoodsService {
 //		goodsDao.createWmsProductSkuHst(jobdate);
 //
 //	}
-
 	
 	/**
 	 * wms상품재고이력 생성
@@ -548,9 +547,32 @@ public class TsbGoodsService {
 		goodsDao.deleteWmsStockHst(delYyyymmdd);
 		// TB_WMS_STOCK_HST 생성
 		goodsDao.createWmsStockHst(jobdate);
-
 	}
+	
+	/**
+	 * shop 상품재고 생성
+	 *
+	 * @param jobdate
+	 * @return
+	 * @author eskim
+	 * @since 2021. 05. 27
+	 */
+	@Transactional("shopTxnManager")
+	public void createShopStock(String jobdate) {
 
+		// TB_SHOP_STOCK 작업
+		goodsDao.deleteShopStock();
+		goodsDao.createShopStock();
+		
+		// TB_SHOP_STOCK_HST 2달 전 데이터 삭제
+		String delYyyymmdd = GagaDateUtil.getOffsetMonth(-2, "yyyyMMdd") + "000000";  //년월일시분초
+		goodsDao.deleteShopStockHst(delYyyymmdd);
+		// TB_SHOP_STOCK_HST 생성
+		goodsDao.createShopStockHst(jobdate);
+	}
+	
+	
+	
 	
 	/**
 	 * WMS 임시 테이블에서 실테이블로 이관
@@ -562,21 +584,27 @@ public class TsbGoodsService {
 	@Transactional("shopTxnManager")
 	public void saveGoodsStock() throws Exception {
 
-		// wms 재고 임시 테이블(TB_OPTION_SYNC_TEMP) 삭제
+		// wms 재고 임시 테이블(TB_OPTION_SYNC_TMP) 삭제
 		goodsDao.deleteTbOptionSyncTemp();
-		// wms 재고 임시 테이블(TB_OPTION_SYNC_TEMP) 적용 - 출고처별 판매비율 적용
+		// wms 재고 임시 테이블(TB_OPTION_SYNC_TMP) 적용 - 출고처별 판매비율 적용
 		goodsDao.createTbOptionSyncTemp();
-
+//		// 매장재고 - 출고처별 판매비율 적용
+		goodsDao.saveTbOptionSyncTemp();
+		
 		// 입점 상품 재고 동기화 
 		updateOptionByOfSellQty();
 
 		// TB_OPTION = > TB_OPTION_SYNC 적용
 		goodsDao.deleteGoodsOptionSync();
-		goodsDao.createGoodsOptionSync();  // TB_OPTION_SYNC.CURR_STOCK_QTY 초기화
+		goodsDao.createGoodsOptionSync();  // TB_OPTION_SYNC.CURR_STOCK_QTY, STORE_STOCK_QTY, STORE_MAX_QTY 초기화
 
-		// TB_OPTION_SYNC_TEMP => TB_OPTION_SYNC 변경적용
+		// TB_OPTION_SYNC_TMP => TB_OPTION_SYNC 변경적용
 		goodsDao.saveGoodsOptionSyncSync();
 
+		// WMS, 매장별 최대 주문수량 적용  == > 작업합시다.
+		//TB_SHOP_STOCK과 TB_OPTION_SYNC.CURR_STOCK_QTY 비교하여 STORE_MAX_QTY에 적용
+		goodsDao.updateGoodsOptionSyncSync();
+		  
 		// TB_OPTION_SYNC => TB_OPTION 적용
 		goodsDao.saveGoodsOptionNew();
 

+ 216 - 9
src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -1812,6 +1812,7 @@
 		     , BASE_STOCK_QTY
 		     , CURR_STOCK_QTY
 		     , STORE_STOCK_QTY
+		     , STORE_MAX_QTY
 		     , ADD_PRICE
 		     , SOLDOUT_YN
 		     , DISP_ORD
@@ -1831,7 +1832,8 @@
 		     , PRODUCT_CODE
 		     , 0 AS BASE_STOCK_QTY
 		     , CURR_STOCK_QTY
-		     , STORE_STOCK_QTY
+		     , 0 AS STORE_STOCK_QTY
+		     , 0 AS STORE_MAX_QTY
 		     , 0 AS ADD_PRICE
 		     , 'N' AS SOLDOUT_YN
 		     , DISP_ORD
@@ -1861,14 +1863,84 @@
 		                            AND B.ERP_STOCK_LINK_YN = 'Y'
 		      INNER JOIN TB_STOCK_SYNC_BASE C ON B.BRAND_CD = C.BRAND_CD
 		                                      AND C.STOCK_SYNC_YN = 'Y'
+		                                      AND C.DELV_LOC_CD = 'DL001'    -- WMS 매장코드
 		      INNER JOIN TB_DELIVERY_LOC D ON B.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		                                   AND C.DELV_LOC_CD = D.DELV_LOC_CD
 		                                   AND D.USE_YN = 'Y'
 		                                   AND D.DELV_LOC_CD = 'DL001'    -- WMS 매장코드
-		      WHERE 1 = 1
 		     ) Z
 	</insert>
 	
+	<!--매장 재고 임시 테이블 이관  -->
+	<insert id="saveTbOptionSyncTemp"   timeout="300">
+		/* TsbGoods.saveTbOptionSyncTemp */
+		INSERT INTO TB_OPTION_SYNC_TMP
+		(
+		       GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , SKU_MODEL_NO
+		     , PRODUCT_NO
+		     , PRODUCT_CODE
+		     , BASE_STOCK_QTY
+		     , CURR_STOCK_QTY
+		     , STORE_STOCK_QTY
+		     , STORE_MAX_QTY
+		     , ADD_PRICE
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , DISP_YN
+		     , ERP_STOCK_LINK_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , SKU_MODEL_NO
+		     , PRODUCT_NO
+		     , PRODUCT_CODE
+		     , 0 AS BASE_STOCK_QTY
+		     , 0 AS CURR_STOCK_QTY
+		     , STORE_STOCK_QTY
+		     , 0 AS STORE_MAX_QTY
+		     , 0 AS ADD_PRICE
+		     , 'N' AS SOLDOUT_YN
+		     , DISP_ORD
+		     , 'Y' AS DISP_YN
+		     , ERP_STOCK_LINK_YN
+		     , 0 AS REG_NO
+		     , NOW() AS REG_DT
+		     , 0 AS UPD_NO
+		     , NOW() AS UPD_DT
+		FROM (
+		      SELECT E.GOODS_CD
+		           , E.OPT_CD
+		           , E.OPT_CD1
+		           , E.OPT_CD2
+		           , E.SKU_MODEL_NO
+		           , E.PRODUCT_NO
+		           , E.PRODUCT_CODE
+		           , E.CURR_STOCK_QTY
+		           , SUM(A.STORE_STOCK_QTY) AS STORE_STOCK_QTY
+		           , B.ERP_STOCK_LINK_YN
+		           , E.DISP_ORD
+		      FROM TB_SHOP_STOCK A
+		      INNER JOIN TB_OPTION E ON A.CD_STYLE = E.GOODS_CD
+		                             AND A.OPT_CD = E.OPT_CD
+		      INNER JOIN TB_GOODS B ON E.GOODS_CD = B.GOODS_CD
+		                            AND B.SELF_GOODS_YN = 'Y'
+		                            AND B.ERP_STOCK_LINK_YN = 'Y'
+		      GROUP BY GOODS_CD , OPT_CD , OPT_CD1 , OPT_CD2 , SKU_MODEL_NO , PRODUCT_NO , PRODUCT_CODE , CURR_STOCK_QTY , DISP_ORD , ERP_STOCK_LINK_YN
+		  ) Z
+		ON DUPLICATE KEY UPDATE
+		     STORE_STOCK_QTY = Z.STORE_STOCK_QTY
+	</insert>
+	
 	<!-- 입점상품 SELL_QTY 목록 조회 -->
 	<select id="getGoodsSelfNoStockList" resultType="Option"   timeout="300">
 		/* TsbGoods.getGoodsSelfNoStockList */
@@ -1966,6 +2038,7 @@
 		     , BASE_STOCK_QTY
 		     , CURR_STOCK_QTY
 		     , STORE_STOCK_QTY
+		     , STORE_MAX_QTY
 		     , ADD_PRICE
 		     , SOLDOUT_YN
 		     , DISP_ORD
@@ -1985,7 +2058,8 @@
 		     , B.PRODUCT_CODE
 		     , B.BASE_STOCK_QTY
 		     , 0 AS CURR_STOCK_QTY
-		     , B.STORE_STOCK_QTY
+		     , 0 AS STORE_STOCK_QTY
+		     , 0 AS STORE_MAX_QTY
 		     , B.ADD_PRICE
 		     , B.SOLDOUT_YN
 		     , B.DISP_ORD
@@ -2001,44 +2075,86 @@
 	</insert>
 	
 	<!-- TB_OPTION_SYNC_TMP => TB_OPTION_SYNC 변경적용-->
-	<insert id="saveGoodsOptionSyncSync"  timeout="300">
+	<update id="saveGoodsOptionSyncSync"  timeout="300">
 		/* TsbGoods.saveGoodsOptionSyncSync */
 		UPDATE TB_OPTION_SYNC A, (SELECT GOODS_CD
 		                               , OPT_CD
 		                               , CURR_STOCK_QTY
+		                               , STORE_STOCK_QTY
 		                               , ERP_STOCK_LINK_YN
 		                          FROM TB_OPTION_SYNC_TMP
 		                          WHERE ERP_STOCK_LINK_YN = 'Y'
 		                          ) B
 		SET A.CURR_STOCK_QTY = B.CURR_STOCK_QTY
+		  , A.STORE_STOCK_QTY = B.STORE_STOCK_QTY
+		  , A.UPD_NO = 0
+		  , A.UPD_DT = NOW()
+		WHERE A.GOODS_CD = B.GOODS_CD
+		AND A.OPT_CD = B.OPT_CD
+		<![CDATA[
+		AND (A.CURR_STOCK_QTY <> B.CURR_STOCK_QTY
+		    OR
+		    A.STORE_STOCK_QTY <> B.STORE_STOCK_QTY
+		    )
+		]]>
+	</update>
+	
+	<!-- TB_OPTION_SYNC 매장별 최대구매수량 적용-->
+	<update id="updateGoodsOptionSyncSync"  timeout="300">
+		/* TsbGoods.updateGoodsOptionSyncSync */
+		UPDATE TB_OPTION_SYNC A, (SELECT GOODS_CD
+		                               , OPT_CD
+		                               , STORE_MAX_QTY
+		                          FROM (     
+		                                SELECT GOODS_CD
+		                                     , OPT_CD
+		                                     , GREATEST(CURR_STOCK_QTY, QT_STOCK) AS STORE_MAX_QTY
+		                                FROM (
+		                                         SELECT OS.GOODS_CD
+		                                              , OS.OPT_CD
+		                                              , GREATEST(OS.CURR_STOCK_QTY, 0)  AS CURR_STOCK_QTY
+		                                              , GREATEST(IFNULL(SS.QT_STOCK, 0), 0) AS QT_STOCK
+		                                         FROM TB_OPTION_SYNC OS
+		                                         LEFT OUTER JOIN TB_SHOP_STOCK SS ON OS.GOODS_CD = SS.CD_STYLE
+		                                                                       AND OS.OPT_CD = SS.OPT_CD
+		                                         WHERE OS.ERP_STOCK_LINK_YN = 'Y'
+		                                      ) Z
+		                               ) WHERE STORE_MAX_QTY > 0
+		                           ) B
+		SET A.STORE_MAX_QTY = B.STORE_MAX_QTY
 		  , A.UPD_NO = 0
 		  , A.UPD_DT = NOW()
 		WHERE A.GOODS_CD = B.GOODS_CD
 		AND A.OPT_CD = B.OPT_CD
 		<![CDATA[
-		AND A.CURR_STOCK_QTY <> B.CURR_STOCK_QTY
+		AND A.STORE_MAX_QTY <> B.STORE_MAX_QTY
 		]]>
-	</insert>
+	</update>
 	
 	<!-- WMS 임시 테이블에서 실테이블로 변경 -->
-	<insert id="saveGoodsOptionNew"  timeout="300">
+	<update id="saveGoodsOptionNew"  timeout="300">
 		/* TsbGoods.saveGoodsOptionNew */
 		UPDATE TB_OPTION A, (SELECT GOODS_CD
 		                          , OPT_CD
 		                          , CURR_STOCK_QTY
+		                          , STORE_STOCK_QTY
 		                          , ERP_STOCK_LINK_YN
 		                      FROM TB_OPTION_SYNC
 		                      WHERE ERP_STOCK_LINK_YN = 'Y'
 		                      ) B
 		SET A.CURR_STOCK_QTY = B.CURR_STOCK_QTY
+		  , A.STORE_STOCK_QTY = B.STORE_STOCK_QTY
 		  , A.UPD_NO = 0
 		  , A.UPD_DT = NOW()
 		WHERE A.GOODS_CD = B.GOODS_CD
 		AND A.OPT_CD = B.OPT_CD
 		<![CDATA[
-		AND A.CURR_STOCK_QTY <> B.CURR_STOCK_QTY
+		AND (A.CURR_STOCK_QTY <> B.CURR_STOCK_QTY
+		    OR
+		    A.STORE_STOCK_QTY <> B.STORE_STOCK_QTY
+		    )
 		]]>
-	</insert>
+	</update>
 		
 	<!-- TB_SELL_QTY_TMP 테이블 삭제 -->
 	<delete id="deleteTtbSellQtyTemp"  timeout="300">
@@ -2560,4 +2676,95 @@
 		       ) Z
 	</insert>
 	
+	<!-- TB_SHOP_STOCK 삭제 -->
+	<delete id="deleteShopStock"  timeout="300">
+		/* TsbGoods.deleteShopStock */
+		DELETE FROM TB_SHOP_STOCK
+	</delete>
+
+	<!-- TB_SHOP_STOCK 저장 -->
+	<insert id="createShopStock" >
+		/* TsbGoods.createShopStock */
+		INSERT INTO TB_SHOP_STOCK(
+		      SUPPLY_COMP_CD   
+		    , CD_SHOP          
+		    , CD_STYLE         
+		    , CD_COLOR         
+		    , CD_SIZE          
+		    , QT_STOCK         
+		    , OPT_CD           
+		    , OPT_CD1          
+		    , STORE_STOCK_QTY  
+		    , UPD_DT           
+		)
+		SELECT A.SUPPLY_COMP_CD
+		     , A.CD_SHOP
+		     , A.CD_STYLE
+		     , A.CD_COLOR
+		     , A.CD_SIZE
+		     , A.QT_STOCK
+		     , E.OPT_CD
+		     , E.OPT_CD1
+		     , ROUND(GREATEST(A.QT_STOCK, 0) * (IFNULL(D.STOCK_APPL_RATE, 0)/100)) AS STORE_STOCK_QTY
+		     , NOW()
+		FROM (SELECT S.SUPPLY_COMP_CD
+		          , S.CD_SHOP
+		          , S.CD_STYLE
+		          , S.CD_COLOR
+		          , S.CD_SIZE
+		          , S.QT_STOCK
+		          , M.COLOR_CD AS OPT_CD1
+		     FROM TB_SHOP_GOODS_STOCK S
+		     INNER JOIN TB_WMS_COLOR_MAPPING M ON S.SUPPLY_COMP_CD = M.SUPPLY_COMP_CD
+		                                       AND S.CD_COLOR = M.WMS_COLOR_CD
+		                                       AND M.USE_YN = 'Y') A
+		INNER JOIN TB_OPTION E ON A.CD_STYLE = E.GOODS_CD
+		                       AND A.OPT_CD1 = E.OPT_CD1
+		                       AND A.CD_SIZE = E.OPT_CD2
+		INNER JOIN TB_GOODS B ON A.CD_STYLE = B.GOODS_CD
+		                      AND B.SELF_GOODS_YN = 'Y'
+		                      AND B.ERP_STOCK_LINK_YN = 'Y'
+		INNER JOIN TB_STOCK_SYNC_BASE C ON B.BRAND_CD = C.BRAND_CD
+		                                AND C.STOCK_SYNC_YN = 'Y'
+		                                AND A.CD_SHOP = C.DELV_LOC_CD
+		INNER JOIN TB_DELIVERY_LOC D ON A.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
+		                             AND A.CD_SHOP = D.DELV_LOC_CD
+		                             AND D.USE_YN = 'Y'
+	</insert>
+	
+	<!-- TB_SHOP_STOCK_HST 삭제 -->
+	<delete id="deleteShopStockHst"  parameterType="String" timeout="300">
+		/* TsbGoods.deleteShopStockHst */
+		DELETE FROM TB_SHOP_STOCK_HST
+		WHERE JOBDATE <![CDATA[<=]]> #{jobdate} 
+	</delete>
+	
+	<!-- TB_SHOP_STOCK_HST 저장 -->
+	<insert id="createShopStockHst"  parameterType="String" timeout="300">
+		/* TsbGoods.createShopStockHst */
+		INSERT INTO TB_SHOP_STOCK_HST(
+		       JOBDATE
+		     , SUPPLY_COMP_CD
+		     , CD_SHOP
+		     , CD_STYLE
+		     , CD_COLOR
+		     , CD_SIZE
+		     , QT_STOCK
+		     , OPT_CD
+		     , OPT_CD1
+		     , STORE_STOCK_QTY
+		)
+		SELECT #{jobdate}
+		      SUPPLY_COMP_CD
+		     , CD_SHOP
+		     , CD_STYLE
+		     , CD_COLOR
+		     , CD_SIZE
+		     , QT_STOCK
+		     , OPT_CD
+		     , OPT_CD1
+		     , STORE_STOCK_QTY
+		FROM TB_SHOP_STOCK
+	</insert>
+	
 </mapper>