| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541 |
- -- 1.1. WMS재고이력 데이터 삭제 (2개월전 데이터)
- DELETE FROM TB_WMS_STOCK_HST
- WHERE JOBDATE < DATE_ADD(DATE_FORMAT(NOW(), '%Y%m%d'), INTERVAL -2 MONTH)
- ;
- -- 1.2. WMS재고이력 생성
- INSERT INTO TB_WMS_STOCK_HST (
- JOBDATE
- , PRODUCT_NO
- , SKU_CODE
- , LOC_QTY
- , PICKING_QTY
- , EOUT_PICKING_QTY
- )
- SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%S') AS JOBDATE
- , PRODUCT_NO
- , SKU_CODE
- , LOC_QTY
- , PICKING_QTY
- , EOUT_PICKING_QTY
- FROM TB_WMS_STOCK
- ;
- -- 2.1. WMS 재고 truncate
- TRUNCATE TABLE TB_WMS_STOCK;
- -- 2.2. WMS 재고 수신 (MSSQL 접속. 배치로 처리해야 함)
- SELECT PRODUCT_NO
- , SKU_CODE
- , LOC_QTY
- , PICKING_QTY
- , EOUT_PICKING_QTY
- FROM (
- SELECT PRODUCT_NO
- , SKU_CODE
- , SUM(LOC_QTY) AS LOC_QTY
- , SUM(PICKING_QTY) AS PICKING_QTY
- , SUM(EOUT_PICKING_QTY) AS EOUT_PICKING_QTY
- FROM iSTYLE24_WMS.DBO.VW_STOCK_BY_LOCCODE
- GROUP BY PRODUCT_NO, SKU_CODE
- ) Z
- WHERE 1 = 1
- AND LOC_QTY - PICKING_QTY - EOUT_PICKING_QTY > 0
- ;
- -- 3.1 매장재고 삭제
- TRUNCATE TABLE TB_SHOP_STOCK;
- -- 3.2. 출고처별 판매비율을 적용한 매장재고 생성
- 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 USE INDEX(PRIMARY) 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'
- ;
- -- 3.3. 매장재고이력 삭제 (2개월전 데이터)
- DELETE FROM TB_SHOP_STOCK_HST
- WHERE JOBDATE <![CDATA[<=]]> #{jobdate}
- ;
- 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
- ;
- DELETE FROM TB_OPTION_SYNC_TMP;
- 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
- , CURR_STOCK_QTY
- , 0 AS 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
- , 99999 AS REG_NO
- , NOW() AS REG_DT
- , 99999 AS UPD_NO
- , NOW() AS UPD_DT
- FROM (
- SELECT B.GOODS_CD
- , A.SKU_CODE AS OPT_CD
- , E.OPT_CD1
- , E.OPT_CD2
- , E.SKU_MODEL_NO
- , E.PRODUCT_NO
- , E.PRODUCT_CODE
- , ROUND((GREATEST(A.LOC_QTY, 0) - GREATEST(A.PICKING_QTY, 0) - GREATEST(A.EOUT_PICKING_QTY, 0)) * (IFNULL(D.STOCK_APPL_RATE, 0)/100)) AS CURR_STOCK_QTY
- , E.STORE_STOCK_QTY
- , E.DISP_ORD
- , B.ERP_STOCK_LINK_YN
- FROM TB_WMS_STOCK A
- INNER JOIN TB_OPTION E ON A.PRODUCT_NO = E.PRODUCT_NO
- AND A.SKU_CODE = 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'
- 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 = 'ST0001' -- 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 = 'ST0001' -- WMS 매장코드
- ) Z
- ;
-
- 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
- , 99999 AS REG_NO
- , NOW() AS REG_DT
- , 99999 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
- ;
-
- -- 입점상품 재고 동기화
- -- 입점상품 SELL_QTY 목록
- /* 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
- ;
- -- LOOP 돌면서
- -- 이력생성
- goodsDao.createStockHst(option);
- -- 재고 변경
- goodsDao.updateStock(option);
- -- TB_OPTION = > TB_OPTION_SYNC 적용
- TRUNCATE TABLE TB_OPTION_SYNC;
- -- TB_OPTION_SYNC.CURR_STOCK_QTY, STORE_STOCK_QTY, STORE_MAX_QTY 초기화
- 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
- , 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 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
- , 0 AS CURR_STOCK_QTY
- , 0 AS STORE_STOCK_QTY
- , 0 AS STORE_MAX_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.ERP_STOCK_LINK_YN = 'Y'
- AND A.SELF_GOODS_YN ='Y'
- AND A.GOODS_CD = B.GOODS_CD
- ;
- -- TB_OPTION_SYNC_TMP => TB_OPTION_SYNC 변경적용
- /* 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 = 99999
- , 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
- )
- ]]>
- ;
- -- WMS, 매장별 최대 주문수량 적용 == > 작업합시다.
- -- TB_SHOP_STOCK과 TB_OPTION_SYNC.CURR_STOCK_QTY 비교하여 STORE_MAX_QTY에 적용
- /* 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
- ) Y WHERE STORE_MAX_QTY > 0
- ) B
- SET A.STORE_MAX_QTY = B.STORE_MAX_QTY
- , A.UPD_NO = 99999
- , A.UPD_DT = NOW()
- WHERE A.GOODS_CD = B.GOODS_CD
- AND A.OPT_CD = B.OPT_CD
- <![CDATA[
- AND A.STORE_MAX_QTY <> B.STORE_MAX_QTY
- ]]>
- ;
-
- -- TB_OPTION_SYNC => TB_OPTION 적용
- UPDATE TB_OPTION A, (SELECT GOODS_CD
- , OPT_CD
- , CURR_STOCK_QTY
- , STORE_STOCK_QTY
- , STORE_MAX_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.STORE_MAX_QTY = B.STORE_MAX_QTY
- , A.UPD_NO = 99999
- , 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
- OR
- A.STORE_MAX_QTY <> B.STORE_MAX_QTY
- )
- ]]>
- ;
- // 자사상품중 주문상세상태가 입금대기, 결제완료, 교환대기 건은 TB_SELL_QTY 생성
- -- TB_SELL_QTY_TEMP 삭제
- TRUNCATE TABLE TB_SELL_QTY_TMP;
- -- TB_SELL_QTY_TEMP 생성
- INSERT INTO TB_SELL_QTY_TMP (
- 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
- ;
-
- -- 초기화
- DELETE FROM TB_SELL_QTY;
- -- TB_SELL_QTY_TEMP => TB_SELL_QTY 생성
- 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_TMP
- 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','G013_25','G013_30','G013_35','G013_40') -- 입금대기, 결제완료, 교환대기, 상품준비중,출고처지정,배송준비중
- AND OD.GOODS_CD = G.GOODS_CD
- AND G.SELF_GOODS_YN ='Y'
- )
- ;
- -- TB_ORDER_DETAIL => TB_SELL_QTY 생성
- 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','G013_25','G013_30','G013_35','G013_40') -- 입금대기, 결제완료, 교환대기, 상품준비중,출고처지정,배송준비중
- 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
- )
- ;
-
|