فهرست منبع

상품 재고 수신 관련 작업중

eskim 5 سال پیش
والد
کامیت
a0415e8352

+ 1 - 1
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -1737,7 +1737,7 @@
 	
 	<!-- 상품 옵션/재고 정보 이력생성 -->
 	<insert id="createStockHst" parameterType="Option">
-	/* TsaGoods.createStockHst */
+		/* TsaGoods.createStockHst */
 		INSERT INTO TB_OPTION_HST 
 		(     OPTION_HST_SQ
 		    , GOODS_CD

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

@@ -14,6 +14,7 @@ import com.style24.persistence.domain.IfBrand;
 import com.style24.persistence.domain.IfProduct;
 import com.style24.persistence.domain.IfProductSku;
 import com.style24.persistence.domain.IfProvider;
+import com.style24.persistence.domain.Option;
 
 /**
  * 상품 Dao
@@ -368,4 +369,104 @@ public interface TsbGoodsDao {
 	 */
 	void createTbOptionSyncTemp();
 
+	/**
+	 * 입점상품 SELL_QTY 목록 조회
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	Collection<Option> getGoodsSelfNoStockList();
+
+	/**
+	 * 상품 옵션/재고 정보 이력생성
+	 *
+	 * @param option
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void createStockHst(Option option);
+
+	/**
+	 * 상품 옵션/재고 변경
+	 *
+	 * @param option
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void updateStock(Option option);
+
+	/**
+	 * WMS 재고 임시 테이블 삭제
+	 *
+	 * @param
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void deleteGoodsOptionSync();
+
+	/**
+	 * TB_OPTION = > TB_OPTION_SYNC 적용
+	 *
+	 * @param
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void createGoodsOptionSync();
+
+	/**
+	 * TB_OPTION_SYNC_TEMP => TB_OPTION_SYNC 변경적용
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void saveGoodsOptionSyncSync();
+
+	/**
+	 * WMS 임시 테이블에서 실테이블로 이관(재고가 상이한것만 수정)
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void saveGoodsOptionNew();
+
+	/**
+	 * TB_SELL_QTY_TEMP 테이블 삭제
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void deleteTtbSellQtyTemp();
+
+	/**
+	 * TB_SELL_QTY_TEMP 생성
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void createTtbSellQtyTemp();
+
+	/**
+	 * WMS 재고 테이블 이관 후 TB_SELL_QTY 데이터 삭제
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void deleteSellQty();
+
+	/**
+	 * TB_SELL_QTY_TEMP => TB_SELL_QTY 생성
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void createTtbSellQty();
+
+	/**
+	 * TB_ORDER_DETAIL => TB_SELL_QTY 생성
+	 *
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	void createTtbSellQtyByOrderDetail();
+
 }

+ 1 - 1
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsWmsProductStockJob.java

@@ -57,7 +57,7 @@ public class TsbGoodsWmsProductStockJob extends TsbAbstractJob<IfProductSku, IfP
 			return null;
 		}else {
 			//wms상품재고이력 생성
-			goodsService.createWmsProductSkuHst(jobdate);
+			//goodsService.createWmsProductSkuHst(jobdate);
 			//온라인 상품 재고 적용
 			goodsService.saveGoodsStock();
 		}

+ 68 - 19
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -22,6 +22,7 @@ import com.style24.persistence.domain.IfBrand;
 import com.style24.persistence.domain.IfProduct;
 import com.style24.persistence.domain.IfProductSku;
 import com.style24.persistence.domain.IfProvider;
+import com.style24.persistence.domain.Option;
 
 import io.netty.util.internal.StringUtil;
 
@@ -486,28 +487,76 @@ public class TsbGoodsService {
 		goodsDao.deleteTbOptionSyncTemp();
 		// wms 재고 임시 테이블(TB_OPTION_SYNC_TEMP) 적용 - 출고처별 판매비율 적용
 		goodsDao.createTbOptionSyncTemp();
-////
-//			// 입점 상품 재고 동기화 후 SELL_QTY 삭제
-//			updateOptionByOfSellQty();
-//
-//			// TB_OPTION = > TB_OPTION_SYNC 적용
-//			tsbGoodsDao.deleteGoodsOptionSync();
-//			tsbGoodsDao.createGoodsOptionSync();
-//
-//			// TB_OPTION_SYNC_TEMP => TB_OPTION_SYNC 변경적용
-//			tsbGoodsDao.saveGoodsOptionSyncSync();
-//
-//			// TB_OPTION_SYNC => TB_OPTION 적용
-//			tsbGoodsDao.saveGoodsOptionNew();
-//
-//			// TB_OPTION_SYNC에 없는 상품,  재고 초기화
-//			tsbGoodsDao.updateOptionZero();
-//
-//			// 자사상품중 주문상세상태가 입금대기, 결제완료, 교환대기 건은 TB_SELL_QTY 생성
-//			createSellQtySelfGoods();
+
+			// 입점 상품 재고 동기화 후 SELL_QTY 삭제
+			updateOptionByOfSellQty();
+
+			// TB_OPTION = > TB_OPTION_SYNC 적용
+			goodsDao.deleteGoodsOptionSync();
+			goodsDao.createGoodsOptionSync();
+
+			// TB_OPTION_SYNC_TEMP => TB_OPTION_SYNC 변경적용
+			goodsDao.saveGoodsOptionSyncSync();
+
+			// TB_OPTION_SYNC => TB_OPTION 적용
+			goodsDao.saveGoodsOptionNew();
+
+			// 자사상품중 주문상세상태가 입금대기, 결제완료, 교환대기 건은 TB_SELL_QTY 생성
+			createSellQtySelfGoods();
 
 	}
 
+	/**
+	 * 입점상품 SELL_QTY 만큼 재고 차감
+	 *
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	private void updateOptionByOfSellQty() {
+		Collection<Option> goodsSelfNoStockList = goodsDao.getGoodsSelfNoStockList();
+		if (goodsSelfNoStockList != null && !goodsSelfNoStockList.isEmpty()) {
+
+			for (Option option : goodsSelfNoStockList) {
+
+				option.setRegNo(TsbConstants.REG_NO);
+				option.setUpdNo(TsbConstants.REG_NO);
+				// 이력생성
+				goodsDao.createStockHst(option);
+
+				// 재고 변경
+				goodsDao.updateStock(option);
+			}
+		}
+	}
+
+	/**
+	 * 자사상품, TB_SELL_QTY 생성
+	 *
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 08
+	 */
+	private void createSellQtySelfGoods() {
+
+		// TB_SELL_QTY_TEMP 삭제
+		goodsDao.deleteTtbSellQtyTemp();
+
+		// TB_SELL_QTY_TEMP 생성
+		goodsDao.createTtbSellQtyTemp();
+
+		// 초기화
+		goodsDao.deleteSellQty();
+
+		// TB_SELL_QTY_TEMP => TB_SELL_QTY 생성
+		goodsDao.createTtbSellQty();
+
+		// TB_ORDER_DETAIL => TB_SELL_QTY 생성
+		goodsDao.createTtbSellQtyByOrderDetail();
+
+	}
 	/**
 	 * 상품 전시재고 생성
 	 *

+ 1 - 1
style24.batch/src/main/java/com/style24/persistence/domain/Goods.java

@@ -17,7 +17,7 @@ public class Goods extends TscBaseDomain {
 
 	private String goodsCd;		//상품코드
 	private int productNo;		//ProductNo(WMS)
-	private int productCode;		//ProductCode(WMS)
+	private String productCode;		//ProductCode(WMS)
 	private String brandCd;		//브랜드코드
 	private String itemkindCd;		//품목코드
 	private String goodsNm;		//상품명

+ 48 - 0
style24.batch/src/main/java/com/style24/persistence/domain/Option.java

@@ -0,0 +1,48 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품 재고 Domain
+ *
+ * @author eskim
+ * @since 2020. 10. 26
+ */
+@SuppressWarnings("serial")
+@Data
+public class Option extends TscBaseDomain {
+
+	private String goodsCd;
+	private String optCd;
+	private String optNm;
+	private String optCd1;
+	private String optCd2;
+	private String skuModelNo;
+	private int productNo;
+	private String productCode;
+	private int baseStockQty;
+	private int currStockQty;
+	private int addPrice;
+	private String soldoutYn;
+	private String dispOrd;
+	private String dispYn;
+
+	private int rnum;
+	private int rcount;
+	private int saleStockQty;
+	private int ableStockQty;
+	private String goodsNm;
+	private String goodsStat;
+	private String goodsStatNm;
+	private String compsGoodsCd;
+	private String selfGoodsYn;
+	private String itemkindNm;
+	private String brandEnm;
+	private String brandCd;
+	private String itemkindCd;
+	private String supplyCompCd;
+	private String supplyGoodsCd;
+
+}

+ 329 - 36
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -1496,9 +1496,9 @@
 		     , DISP_ORD
 		     , DISP_YN
 		     , ERP_STOCK_LINK_YN
-		     , REG_ID
+		     , REG_NO
 		     , REG_DT
-		     , UPD_ID
+		     , UPD_NO
 		     , UPD_DT
 		)
 		SELECT GOODS_CD
@@ -1510,52 +1510,345 @@
 		     , PRODUCT_CODE
 		     , 0 AS BASE_STOCK_QTY
 		     , CURR_STOCK_QTY
+		     , 0 AS ADD_PRICE
 		     , 'N' AS SOLDOUT_YN
 		     , DISP_ORD
 		     , 'Y' AS DISP_YN
 		     , ERP_STOCK_LINK_YN
-		     , 'batch' AS REG_ID
-		     , SYSDATE AS REG_DT
-		     , 'batch' AS UPD_ID
-		     , SYSDATE AS UPD_DT
+		     , 0 AS REG_NO
+		     , NOW() AS REG_DT
+		     , 0 AS UPD_NO
+		     , NOW() AS UPD_DT
 		FROM (
 		      SELECT GOODS_CD
-		           , SIZE_CD
-		           , SIZE_NM
-		           , SUM(CURR_ON_STOCK_QTY) AS CURR_ON_STOCK_QTY
-		           , SUM(CURR_OFF_STOCK_QTY) AS CURR_OFF_STOCK_QTY
-		           , SUM(CURR_SHOP_STOCK_QTY) AS CURR_SHOP_STOCK_QTY
-		           , NVL((SELECT (MAX(DISP_ORD) + 1) AS DISP_ORD FROM TB_STOCK WHERE GOODS_CD = Z.GOODS_CD)
-		           , ROW_NUMBER() OVER(PARTITION BY GOODS_CD ORDER BY SIZE_CD)) AS DISP_ORD
+		           , OPT_CD
+		           , OPT_CD1
+		           , OPT_CD2
+		           , SKU_MODEL_NO
+		           , PRODUCT_NO
+		           , PRODUCT_CODE
+		           , SUM(CURR_STOCK_QTY) AS CURR_STOCK_QTY
+		           , NVL((SELECT (MAX(DISP_ORD) + 1) AS DISP_ORD 
+		                  FROM TB_OPTION WHERE GOODS_CD = Z.GOODS_CD) , ROW_NUMBER() OVER(PARTITION BY GOODS_CD ORDER BY OPT_CD)) AS DISP_ORD
 		           , ERP_STOCK_LINK_YN
 		       FROM (
 		           SELECT B.GOODS_CD
 		                , A.SKUCODE AS OPT_CD
-		                , A.OPTION1 AS OPT_CD1
-		                , A.OPTION2 ASOPT_CD2
-		                , A.SKUMODELNO AS SKU_MODEL_NO
-		                , B.PRODUCT_NO
-		                , B.PRODUCT_CODE
-		                , SUM(GREATEST(A.SELLINGSTOCKAMOUNT, 0)) AS CURR_STOCK_QTY
-		                , B.ERP_STOCK_LINK_YN
-		                , A.CD_LOC
+		                , MAX(A.OPTION1) AS OPT_CD1
+		                , MAX(A.OPTION2) AS OPT_CD2
+		                , MAX(A.SKUMODELNO) AS SKU_MODEL_NO
+		                , MAX(B.PRODUCT_NO) AS PRODUCT_NO
+		                , MAX(B.PRODUCT_CODE) AS PRODUCT_CODE
+		                , ROUND(GREATEST(A.SELLINGSTOCKAMOUNT, 0) * (NVL(D.STOCK_APPL_RATE, 0)/100)) AS CURR_STOCK_QTY
+		                , MAX(B.ERP_STOCK_LINK_YN) AS ERP_STOCK_LINK_YN
+		                , D.DELV_LOC_CD
 		                , D.STOCK_APPL_RATE
-		           FROM TB_IF_PRODUCTSKU_TEMP A, TB_GOODS B, TB_STOCK_LINK_BASE C, TB_DELIVERY_LOC D
-		           WHERE B.SELF_GOODS_YN = 'Y'
-		           AND B.GOODS_TYPE = 'N'
-		           AND B.GOODS_NUM = A.CD_STYLE
-		           AND B.COLOR_CD = A.CD_COLOR
-		           AND B.BRAND_CD = C.BRAND_CD
-		           AND B.FORMAL_GB = C.FORMAL_GB
-		           AND B.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
-		           AND C.STOCK_LINK_YN = 'Y'
-		           AND D.USE_YN = 'Y'
-		           AND A.CD_LOC = C.DELV_LOC_CD
-		           AND A.CD_LOC = D.DELV_LOC_CD
-		           GROUP BY B.GOODS_CD, A.CD_SIZE, B.ERP_STOCK_LINK_YN, A.CD_LOC, D.STOCK_APPL_RATE
+		           FROM TB_IF_PRODUCTSKU A 
+		           INNER JOIN TB_GOODS B ON A.PRODUCTCODE = B.PRODUCT_CODE 
+		                                 AND B.SELF_GOODS_YN = 'Y'
+		                                 AND B.GOODS_TYPE = 'N'
+		           INNER JOIN TB_OPTION E ON A.SKUCODE = E.OPT_CD
+		                                  AND A.PRODUCTCODE = E.PRODUCT_CODE
+		           INNER JOIN TB_STOCK_SYNC_BASE C ON B.BRAND_CD = C.BRAND_CD
+		                                           AND C.STOCK_SYNC_YN = 'Y'
+		           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'
+		           WHERE 1 = 1
+		           GROUP BY B.GOODS_CD, A.SKUCODE, D.DELV_LOC_CD, D.STOCK_APPL_RATE
 		           ) Z
-		       GROUP BY GOODS_CD, SIZE_CD, ERP_STOCK_LINK_YN
-		      )
+		       GROUP BY GOODS_CD, OPT_CD, ERP_STOCK_LINK_YN
+		      ) Y
 	</insert>
 	
+	<!-- 입점상품 SELL_QTY 목록 조회 -->
+	<select id="getGoodsSelfNoStockList" resultType="Option">
+		/* TsbGoods.getGoodsSelfNoStockList */
+		SELECT A.GOODS_CD
+		     , A.OPT_CD
+		     , SUM(
+		           (CASE A.SELL_GB WHEN '10' THEN 1
+		                          WHEN '20' THEN 1
+		                          ELSE -1 END) * A.SELL_QTY
+		           ) AS SALE_STOCK_QTY
+		FROM TB_SELL_QTY A
+		   , TB_GOODS B
+		WHERE A.GOODS_CD = B.GOODS_CD
+		AND B.SELF_GOODS_YN = 'N'  -- 입점상품
+		GROUP BY A.GOODS_CD, A.OPT_CD
+	</select>
+	
+	<!-- 상품 옵션/재고 정보 이력생성 -->
+	<insert id="createStockHst" parameterType="Option">
+		/* TsaGoods.createStockHst */
+		INSERT INTO TB_OPTION_HST 
+		(     OPTION_HST_SQ
+		    , GOODS_CD
+		    , OPT_CD
+		    , OPT_CD1
+		    , OPT_CD2
+		    , SKU_MODEL_NO
+		    , PRODUCT_NO
+		    , PRODUCT_CODE
+		    , BASE_STOCK_QTY
+		    , CURR_STOCK_QTY
+		    , ADD_PRICE
+		    , SOLDOUT_YN
+		    , DISP_ORD
+		    , DISP_YN
+		    , REG_NO
+		    , REG_DT
+		    , UPD_NO
+		    , UPD_DT
+		)
+		SELECT NULL
+		     , GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , SKU_MODEL_NO
+		     , PRODUCT_NO
+		     , PRODUCT_CODE
+		     , BASE_STOCK_QTY
+		     , CURR_STOCK_QTY
+		     , ADD_PRICE
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , DISP_YN
+		     , #{regNo}
+		     , NOW()
+		     , UPD_NO
+		     , UPD_DT
+		FROM TB_OPTION
+		WHERE GOODS_CD = #{goodsCd}
+		AND OPT_CD = #{optCd}
+	</insert>
+	
+	<!-- 상품 재고 정보 저장 -->
+	<update id="updateStock" parameterType="Option">
+		/* TsbGoods.updateStock */
+		UPDATE TB_STOCK
+		SET CURR_ON_STOCK_QTY = GREATEST(CURR_ON_STOCK_QTY - #{saleStockQty},0)
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = NOW()
+		WHERE GOODS_CD = #{goodsCd}
+		AND OPT_CD = #{optCd}
+	</update>
+	
+	<!-- WMS 재고 임시 테이블 삭제 -->
+	<delete id="deleteGoodsOptionSync">
+		/* TsbGoods.deleteGoodsOptionSync */
+		TRUNCATE TABLE TB_OPTION_SYNC
+	</delete>
+	
+	<!--TB_OPTION = > TB_OPTION_SYNC 적용 -->
+	<insert id="createGoodsOptionSync">
+		/* TsbGoods.createGoodsOptionSync */
+		INSERT INTO TB_OPTION_SYNC
+		(
+		       GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		     , SKU_MODEL_NO
+		     , PRODUCT_NO
+		     , PRODUCT_CODE
+		     , BASE_STOCK_QTY
+		     , CURR_STOCK_QTY
+		     , ADD_PRICE
+		     , SOLDOUT_YN
+		     , DISP_ORD
+		     , DISP_YN
+		     , ERP_STOCK_LINK_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT B.GOODS_CD
+		     , B.OPT_CD
+		     , B.OPT_CD1
+		     , B.OPT_CD2
+		     , B.SKU_MODEL_NO
+		     , B.PRODUCT_NO
+		     , B.PRODUCT_CODE
+		     , B.BASE_STOCK_QTY
+		     , B.CURR_STOCK_QTY
+		     , B.ADD_PRICE
+		     , B.SOLDOUT_YN
+		     , B.DISP_ORD
+		     , B.DISP_YN
+		     , A.ERP_STOCK_LINK_YN
+		     , B.REG_NO
+		     , B.REG_DT
+		     , B.UPD_NO
+		     , B.UPD_DT
+		FROM   TB_GOODS A, TB_OPTION B
+		WHERE  A.GOODS_CD = B.GOODS_CD
+	</insert>
+	
+	<!-- TB_OPTION_SYNC_TEMP => TB_OPTION_SYNC 변경적용-->
+	<insert id="saveGoodsOptionSyncSync">
+		/* TsbGoods.saveGoodsOptionSyncSync */
+		UPDATE TB_OPTION_SYNC A, (SELECT GOODS_CD
+		                               , OPT_CD
+		                               , CURR_STOCK_QTY
+		                               , ERP_STOCK_LINK_YN
+		                          FROM TB_OPTION_SYNC_TEMP
+		                          WHERE ERP_STOCK_LINK_YN = 'Y'
+		                          ) B
+		SET A.CURR_STOCK_QTY = B.CURR_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
+		]]>
+	</insert>
+	
+	<!-- WMS 임시 테이블에서 실테이블로 변경 -->
+	<insert id="saveGoodsOptionNew">
+		/* TsbGoods.saveGoodsOptionNew */
+		UPDATE TB_OPTION A, (SELECT GOODS_CD
+		                          , OPT_CD
+		                          , CURR_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.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
+		]]>
+	</insert>
+		
+	<!-- TB_SELL_QTY_TEMP 테이블 삭제 -->
+	<delete id="deleteTtbSellQtyTemp">
+		/* TsbGoods.deleteTtbSellQtyTemp */
+		TRUNCATE TABLE TB_SELL_QTY_TEMP
+	</delete>
+	
+	<!-- TB_SELL_QTY_TEMP 테이블 삭제 -->
+	<insert id="createTtbSellQtyTemp">
+		/* TsbGoods.createTtbSellQtyTemp */
+		INSERT INTO TB_SELL_QTY_TEMP (
+		      GOODS_CD
+		    , OPT_CD
+		    , SELL_GB
+		    , ORD_DTL_NO
+		    , ORD_CHG_SQ
+		    , AGENT_ORDER_ID
+		    , EXTMALL_ORDER_ID
+		    , SELL_QTY
+		    , REG_NO
+		    , REG_DT
+		)
+		SELECT GOODS_CD
+		    , OPT_CD
+		    , SELL_GB
+		    , ORD_DTL_NO
+		    , ORD_CHG_SQ
+		    , AGENT_ORDER_ID
+		    , EXTMALL_ORDER_ID
+		    , SELL_QTY
+		    , REG_NO
+		    , REG_DT
+		FROM TB_SELL_QTY
+	</insert>
+
+	<!-- 주문적재 테이블 삭제 -->
+	<delete id="deleteSellQty">
+		/* TsbGoods.deleteSellQty */
+		DELETE FROM TB_SELL_QTY
+	</delete>
+	
+	<!-- TB_SELL_QTY 테이블 생성 -->
+	<insert id="createTtbSellQty">
+		/* TsbGoods.createTtbSellQty */
+		INSERT INTO TB_SELL_QTY (
+		      GOODS_CD
+		    , OPT_CD
+		    , SELL_GB
+		    , ORD_DTL_NO
+		    , ORD_CHG_SQ
+		    , AGENT_ORDER_ID
+		    , EXTMALL_ORDER_ID
+		    , SELL_QTY
+		    , REG_NO
+		    , REG_DT
+		)
+		SELECT  GOODS_CD
+		    , OPT_CD
+		    , SELL_GB
+		    , ORD_DTL_NO
+		    , ORD_CHG_SQ
+		    , AGENT_ORDER_ID
+		    , EXTMALL_ORDER_ID
+		    , SELL_QTY
+		    , REG_NO
+		    , REG_DT
+		FROM TB_SELL_QTY_TEMP
+		WHERE ORD_DTL_NO IN (
+		                     SELECT OD.ORD_DTL_NO
+		                     FROM TB_ORDER_DETAIL OD
+		                        , TB_ORDER_DETAIL_ITEM ODI
+		                        , TB_GOODS G
+		                     WHERE OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		                     AND OD.ORD_DTL_STAT IN ('G013_10','G013_20') -- 입금대기, 결제완료
+		                     AND ODI.ITEM_CD = G.GOODS_CD
+		                     AND G.SELF_GOODS_YN ='Y'
+		                    )
+	</insert>
+	
+	<!-- TB_SELL_QTY 테이블 생성 -->
+	<insert id="createTtbSellQtyByOrderDetail">
+		/* TsbGoods.createTtbSellQtyByOrderDetail */
+		INSERT INTO TB_SELL_QTY (
+		      GOODS_CD
+		    , OPT_CD
+		    , SELL_GB
+		    , ORD_DTL_NO
+		    , AGENT_ORDER_ID
+		    , EXTMALL_ORDER_ID
+		    , SELL_QTY
+		    , REG_NO
+		    , REG_DT
+		)
+		SELECT ITEM_CD
+		     , OPT_CD
+		     , SELL_GB
+		     , ORD_DTL_NO
+		     , AGENT_ORDER_ID
+		     , EXTMALL_ORDER_ID
+		     , SELL_QTY
+		     , 0
+		     , NOW()
+		FROM (
+		      SELECT ODI.ITEM_CD
+		           , ODI.OPT_CD
+		           , '10' AS SELL_GB -- 주문건
+		           , OD.ORD_DTL_NO
+		           , OD.AGENT_ORDER_ID
+		           , OD.EXTMALL_ORDER_ID
+		           , SUM((OD.ORD_QTY - OD.CNCL_RTN_QTY) * ODI.ITEM_QTY) AS SELL_QTY
+		      FROM TB_ORDER_DETAIL OD
+		         , TB_ORDER_DETAIL_ITEM ODI
+		      WHERE OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		      AND OD.ORD_DTL_STAT IN ('G013_10','G013_20') -- 입금대기, 결제완료
+		      AND EXISTS (SELECT 1 FROM TB_OPTION X WHERE X.GOODS_CD = ODI.ITEM_CD AND X.OPT_CD = ODI.OPT_CD)
+		      GROUP BY ODI.ITEM_CD, ODI.OPT_CD, OD.ORD_DTL_NO, OD.AGENT_ORDER_ID, OD.EXTMALL_ORDER_ID
+		     ) A
+		WHERE NOT EXISTS (SELECT 1 
+		                  FROM TB_SELL_QTY Y 
+		                  WHERE Y.GOODS_CD = A.ITEM_CD 
+		                  AND Y.OPT_CD = A.OPT_CD
+		                  AND Y.SELL_GB = A.SELL_GB
+		                  AND Y.ORD_DTL_NO = A.ORD_DTL_NO
+		                  )
+	</insert>
 </mapper>