Selaa lähdekoodia

Merge branch 'develop' into jmh

jmh 4 vuotta sitten
vanhempi
commit
86139aa4a3

+ 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();
+
 }

+ 18 - 10
src/main/java/com/style24/batch/biz/dao/TsbStatisticsDao.java

@@ -42,15 +42,6 @@ public interface TsbStatisticsDao {
 	 */
 	SalesSms getCurrentDaySalesSms();
 
-	/**
-	 * 매출반영I/F번호 조회
-	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 8. 27
-	 */
-	String getSalesUploadInterfaceNo(String erpGb);
-
 	/**
 	 * 어제일자 매출반영목록 생성
 	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
@@ -76,7 +67,24 @@ public interface TsbStatisticsDao {
 	 * @author gagamel
 	 * @since 2021. 8. 27
 	 */
-	public Collection<GagaMap> getSalesUploadList(Erp erp);
+	Collection<GagaMap> getSalesUploadList(Erp erp);
+
+	/**
+	 * 매출반영I/F번호 조회
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 27
+	 */
+	String getSalesUploadInterfaceNo(String erpGb);
+
+	/**
+	 * 매출반영목록 I/F번호 Update
+	 * @param paramMap - ERP 정보
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	void updateSalesUploadListInterfaceNo(GagaMap paramMap);
 
 	/**
 	 * 매출반영결과 처리

+ 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
+	}
+
+}

+ 24 - 4
src/main/java/com/style24/batch/biz/job/statistics/TsbSalesUploadJob.java

@@ -1,5 +1,7 @@
 package com.style24.batch.biz.job.statistics;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -28,14 +30,14 @@ public class TsbSalesUploadJob extends TsbAbstractJob<String, String, String> {
 	@Autowired
 	private HansaeErp hansaeErp;
 
-	private static final int PAGE_SIZE = 1000;
+	private static final int PAGE_SIZE = 10;
 
 	@Override
 	public String read() throws Exception {
 //		// 어제일자 매출반영목록 생성 (한세드림)
 //		statisticsService.createYesterdaySalesUploadList(HansaeErp.ErpGb.HANSAE_DR.value());
 
-		// 어제일자 매출반영목록 생성 (한세드림)
+		// 어제일자 매출반영목록 생성 (한세MK)
 		statisticsService.createYesterdaySalesUploadList(HansaeErp.ErpGb.HANSAE_MK.value());
 
 		return "OK";
@@ -90,11 +92,29 @@ public class TsbSalesUploadJob extends TsbAbstractJob<String, String, String> {
 			erp.setLimitStartRow(limitStartRow);
 			erp.setPageSize(PAGE_SIZE);
 
+			// 매출업로드 목록
+			Collection<GagaMap> uploadList = statisticsService.getSalesUploadList(erp);
+
+			if (uploadList == null || uploadList.isEmpty()) {
+				log.error("{}'s {} Page 매출반영할 데이터가 없습니다.", erpGb, (page + 1));
+				continue;
+			}
+
+			// 매출반영I/F번호 조회
+			String noIf = statisticsService.getSalesUploadInterfaceNo(erpGb);
+			log.info("매출반영I/F번호: {}", noIf);
+
+			for (GagaMap dataMap : uploadList) {
+				// 매출반영목록 I/F번호 Update
+				dataMap.setString("NO_IF", noIf);
+				statisticsService.updateSalesUploadListInterfaceNo(erpGb, dataMap);
+			}
+
 			// 매출업로드
-			GagaMap salesMap = hansaeErp.uploadErpSales(erpGb, statisticsService.getSalesUploadList(erp));
+			GagaMap salesMap = hansaeErp.uploadErpSales(erpGb, uploadList);
 
 			if (salesMap == null || salesMap.isEmpty()) {
-				log.error("매출반영결과 데이터가 없습니다. 한세 ERP 시스템담당자에게 문의해 주세요.");
+				log.error("{}'s {} Page 매출반영결과 데이터가 없습니다. 한세 ERP 시스템담당자에게 문의해 주세요.", erpGb, (page + 1));
 				continue;
 			}
 

+ 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();
+	}
+
 }

+ 26 - 11
src/main/java/com/style24/batch/biz/service/TsbStatisticsService.java

@@ -72,17 +72,6 @@ public class TsbStatisticsService {
 		return statisticsDao.getCurrentDaySalesSms();
 	}
 
-	/**
-	 * 매출반영I/F번호 조회
-	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 8. 27
-	 */
-	public String getSalesUploadInterfaceNo(String erpGb) {
-		return statisticsDao.getSalesUploadInterfaceNo(erpGb);
-	}
-
 	/**
 	 * 어제일자 매출반영목록 생성
 	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
@@ -117,6 +106,32 @@ public class TsbStatisticsService {
 		return statisticsDao.getSalesUploadList(erp);
 	}
 
+	/**
+	 * 매출반영I/F번호 조회
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 8. 27
+	 */
+	public String getSalesUploadInterfaceNo(String erpGb) {
+		return statisticsDao.getSalesUploadInterfaceNo(erpGb);
+	}
+
+	/**
+	 * 매출반영목록 I/F번호 Update
+	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)
+	 * @param paramMap - ERP 정보
+	 * @author gagamel
+	 * @since 2021. 8. 30
+	 */
+	@Transactional("shopTxnManager")
+	public void updateSalesUploadListInterfaceNo(String erpGb, GagaMap paramMap) {
+		GagaMap dataMap = new GagaMap();
+		dataMap.setString("ERP_GB", erpGb);
+		dataMap.putAll(paramMap);
+		statisticsDao.updateSalesUploadListInterfaceNo(dataMap);
+	}
+
 	/**
 	 * 매출반영결과 처리
 	 * @param erpGb - ERP구분(hsmk:한세MK, hsdr:한세드림)

+ 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>

+ 33 - 33
src/main/java/com/style24/persistence/mybatis/shop/TsbStatistics.xml

@@ -944,24 +944,11 @@
 		       ) ODIH
 	</select>
 	
-	<!-- 매출반영I/F번호 조회 -->
-	<select id="getSalesUploadInterfaceNo" parameterType="String" resultType="String">
-		/* TsbStatistics.getSalesUploadInterfaceNo */
-		SELECT CONCAT(DATE_FORMAT(NOW(),'%Y%m%d%H%i%S'),
-		              LPAD(IFNULL((SELECT CAST(MAX(SUBSTRING(NO_IF,15)) AS UNSIGNED)
-		                           FROM   TB_HANSAE_SALES
-		                           WHERE  ERP_GB = #{erpGb}
-		                           AND    NO_IF LIKE CONCAT(DATE_FORMAT(NOW(),'%Y%m%d'),'%')
-		                          ),0) + 1,4,'0')) AS NO_IF
-		FROM   DUAL
-	</select>
-	
 	<!-- 어제일자 매출반영목록 생성 -->
 	<insert id="createYesterdaySalesUploadList" parameterType="String">
 		/* TsbStatistics.createYesterdaySalesUploadList */
 		INSERT INTO TB_HANSAE_SALES (
 		       ERP_GB
-		     , NO_IF
 		     , DT_SALE
 		     , TP_SALE
 		     , CD_STYLE
@@ -973,14 +960,6 @@
 		     , REG_DT
 		)
 		SELECT #{erpGb}            AS ERP_GB
-		     , CONCAT(DATE_FORMAT(NOW(),'%Y%m%d%H%i%S'),
-		              (SELECT LPAD(IFNULL((SELECT CAST(MAX(SUBSTRING(NO_IF,15)) AS UNSIGNED)
-		                                   FROM   TB_HANSAE_SALES
-		                                   WHERE  ERP_GB = #{erpGb}
-		                                   AND    NO_IF LIKE CONCAT(DATE_FORMAT(NOW(),'%Y%m%d'),'%')
-		                                  ),0) + 1,4,'0')
-		               FROM   DUAL)
-		              )            AS NO_IF
 		     , DT_SALE
 		     , TP_SALE
 		     , CD_STYLE
@@ -998,14 +977,10 @@
 		             , ODIH.ITEM_CD                      AS CD_STYLE /*스타일코드*/
 		             , ODIH.OPT_CD1                      AS CD_COLOR /*색상코드*/
 		             , ODIH.OPT_CD2                      AS CD_SIZE  /*사이즈코드*/
-		             , SUM((CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' THEN 1 ELSE -1 END)
-		                   *
-		                   CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' THEN ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY /*판매-배송중*/
+		             , SUM(CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' THEN ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY /*판매-배송중*/
 		                             ELSE ODIH.CNCL_RTN_QTY /*환입-반품완료,환입-교환완료*/
 		                        END AS SIGNED INT))      AS QT_SALE  /*판매수량*/
-		             , SUM((CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' THEN 1 ELSE -1 END)
-		                   *
-		                   CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' /*판매-배송중*/ THEN
+		             , SUM(CAST(CASE WHEN ODIH.ORD_DTL_STAT = 'G720_20' /*판매-배송중*/ THEN
 		                                 ((ODIH.ORD_QTY - ODIH.CNCL_RTN_QTY) * (CASE WHEN O.MALL_GB = 'G011_20' /*제휴몰*/ THEN
 		                                                                                 IFNULL(EUP.USAC_PRICE,ODIH.ITEM_PRICE)
 		                                                                             ELSE
@@ -1062,15 +1037,15 @@
 		SELECT COUNT(*) AS CNT
 		FROM   TB_HANSAE_SALES
 		WHERE  ERP_GB = #{erpGb}
-		AND    NO_IF LIKE CONCAT(DATE_FORMAT(NOW(),'%Y%m%d'),'%')
+		AND    REG_DT <![CDATA[>=]]> CURRENT_DATE() /*당일에 등록된 넘*/
+		AND    REG_DT <![CDATA[<]]> DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY) /*당일에 등록된 넘*/
 	</select>
 	
 	<!-- 매출반영 목록 -->
 	<select id="getSalesUploadList" parameterType="Erp" resultType="paramMap">
 		/* TsbStatistics.getSalesUploadList */
 		<include refid="selectForPagingHeader"/>
-		SELECT NO_IF
-		     , DT_SALE
+		SELECT DT_SALE
 		     , TP_SALE
 		     , CD_STYLE
 		     , CD_COLOR
@@ -1080,12 +1055,37 @@
 		     , DS_REMARK
 		FROM   TB_HANSAE_SALES
 		WHERE  ERP_GB = #{erpGb}
-		AND    NO_IF LIKE CONCAT(DATE_FORMAT(NOW(),'%Y%m%d'),'%')
-		AND    CD_SALEBILL IS NULL
-		ORDER  BY NO_IF
+		AND    REG_DT <![CDATA[>=]]> CURRENT_DATE() /*당일에 등록된 넘*/
+		AND    REG_DT <![CDATA[<]]> DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY) /*당일에 등록된 넘*/
+		ORDER  BY DT_SALE, TP_SALE, CD_STYLE, CD_COLOR, CD_SIZE
 		<include refid="selectForPagingFooter"/>
 	</select>
 	
+	<!-- 매출반영I/F번호 조회 -->
+	<select id="getSalesUploadInterfaceNo" parameterType="String" resultType="String">
+		/* TsbStatistics.getSalesUploadInterfaceNo */
+		SELECT CONCAT(DATE_FORMAT(NOW(),'%Y%m%d%H%i%S')
+		             ,LPAD(IFNULL((SELECT CAST(MAX(SUBSTRING(NO_IF,15)) AS UNSIGNED)
+		                           FROM   TB_HANSAE_SALES
+		                           WHERE  ERP_GB = #{erpGb}
+		                           AND    NO_IF LIKE CONCAT(DATE_FORMAT(NOW(),'%Y%m%d'),'%')
+		                          ),0) + 1,4,'0')) AS NO_IF
+		FROM   DUAL
+	</select>
+	
+	<!-- 매출반영목록 I/F번호 Update -->
+	<update id="updateSalesUploadListInterfaceNo" parameterType="paramMap">
+		/* TsbStatistics.updateSalesUploadListInterfaceNo */
+		UPDATE TB_HANSAE_SALES
+		SET    NO_IF = #{NO_IF}
+		WHERE  ERP_GB = #{ERP_GB}
+		AND    DT_SALE = #{DT_SALE}
+		AND    TP_SALE = #{TP_SALE}
+		AND    CD_STYLE = #{CD_STYLE}
+		AND    CD_COLOR = #{CD_COLOR}
+		AND    CD_SIZE = #{CD_SIZE}
+	</update>
+	
 	<!-- 매출반영결과 처리 -->
 	<update id="updateSalesUploadResult" parameterType="paramMap">
 		/* TsbStatistics.updateSalesUploadResult */

+ 2 - 1
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:
@@ -162,7 +163,7 @@ cron:
     shoplinker:
         #stock.send10: 0 0 10 * * *          #재고 10시 (1일 1회)
         stock.send10: 2 22 2 29 2 ?          #재고 10시 (1일 1회)
-        stock.send15: 0 0/30 * * * *           #재고 15시 (1일 1회)
+        stock.send15: 0 0 15 * * *           #재고 15시 (1일 1회)
         #order.receive: 0 5 5-15 * * MON-FRI #주문 (평일 5시 ~ 15시 5분에 실행)
         order.receive: 2 22 2 29 2 ?         #주문 (평일 5시 ~ 15시 5분에 실행)
         invoice.send: 0 16 * * * *          #송장 (1시간 1회)

+ 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:

+ 8 - 7
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:
@@ -136,26 +137,26 @@ cron:
         #loc.assign: 0 0/10 7-16 * * MON-FRI            #출고처 지정 및 배송(출고) 지시 (1시간 1회)
         loc.assign: 2 22 2 29 2 ?                       #출고처 지정 및 배송(출고) 지시 (1시간 1회)
         wms:
-            #outgoing.exception.receive: 0 0/10 * * * * #WMS 출고예외 수신 (1시간 1회)
+            #outgoing.exception.receive: 0 0/10 * * * MON-FRI #WMS 출고예외 수신 (1시간 1회)
             outgoing.exception.receive: 2 22 2 29 2 ?  #WMS 출고예외 수신 (1시간 1회)
-            #outgoing.result.receive: 0 5/10 * * * *    #WMS 출고결과 수신 (1시간 1회)
+            #outgoing.result.receive: 0 5/10 * * * MON-FRI    #WMS 출고결과 수신 (1시간 1회)
             outgoing.result.receive: 2 22 2 29 2 ?     #WMS 출고결과 수신 (1시간 1회)
-            #invoice.receive: 0 7/10 * * * *            #WMS 운송장번호 수신(1시간 1회)
+            #invoice.receive: 0 7/10 * * * MON-FRI     #WMS 운송장번호 수신(1시간 1회)
             invoice.receive: 2 22 2 29 2 ?             #WMS 운송장번호 수신(1시간 1회)
         sweettracker.invoice.retrieve: 2 22 2 29 2 ?   #스윗트래커 배송추적 요청 (1시간 1회). public 배치에서 실행
-        #auto.soldout.cancel: 0 8/10 * * * *            #자동품절취소 (1시간 1회)
+        #auto.soldout.cancel: 0 8/10 8-23 * * MON-FRI  #자동품절취소 (1시간 1회)
         auto.soldout.cancel: 2 22 2 29 2 ?             #자동품절취소 (1시간 1회)
 
     #회수
     withdraw:
         wms:
-            #request: 0 0/10 7-16 * * MON-FRI             #WMS 회수요청 (1시간 1회)
+            #request: 0 0/10 7-20 * * MON-FRI             #WMS 회수요청 (1시간 1회)
             request: 2 22 2 29 2 ?                       #WMS 회수요청 (1시간 1회)
             ingoing:
-                #exception.receive: 0 2/10 * * * *        #WMS 회수입고예외 수신 (1시간 1회)
+                #exception.receive: 0 2/10 * * * MON-FRI        #WMS 회수입고예외 수신 (1시간 1회)
                 exception.receive: 2 22 2 29 2 ?         #WMS 회수입고예외 수신 (1시간 1회)
                 exception.result.receive: 2 22 2 29 2 ?  #WMS 회수입고예외 결과 수신 (1시간 1회) 사용안함
-                #result.receive: 0 6/10 * * * *           #WMS 회수입고결과 수신 (1시간 1회)
+                #result.receive: 0 6/10 * * * MON-FRI           #WMS 회수입고결과 수신 (1시간 1회)
                 result.receive: 2 22 2 29 2 ?            #WMS 회수입고결과 수신 (1시간 1회)
         cj:
             invoice.receive: 0 30 * * * *                #CJ 회수송장번호 수신 (1시간 1회)