Prechádzať zdrojové kódy

Merge branch 'develop' of http://112.172.147.34:4936/style24/STYLE24.git into develop

gagamel 5 rokov pred
rodič
commit
b9cee974ec

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

@@ -5,6 +5,7 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSummary;
 
 /**
  * 상품 Dao
@@ -141,4 +142,84 @@ public interface TsbGoodsDao {
 	 */
 	void createGoodsBenefitPrice();
 
+	/**
+	 * 연관상품보기 스코어링 삭제
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void deleteGoodsRelate(String workDt);
+
+	/**
+	 * 연관상품보기 스코어링 생성
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsRelate(String work7agoDt);
+
+	/**
+	 * 전시상품 통계정보작업 - temp 테이블 삭제
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void deleteGoodsSummaryTemp();
+
+	/**
+	 * 전시상품 통계정보작업 - 상품 판매수량
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsSummaryBySale(GoodsSummary goodsSummary);
+
+	/**
+	 * 전시상품 통계정보작업 -상품 조회수
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsSummaryByView(GoodsSummary goodsSummary);
+
+	/**
+	 * 전시상품 통계정보작업 - 상품평 건수
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsSummaryByReviewCount(GoodsSummary goodsSummary);
+
+	/**
+	 * 전시상품 통계정보작업 - 상품평 점수합계
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsSummaryByReviewSum(GoodsSummary goodsSummary);
+
+	/**
+	 * 전시상품 통계정보작업 - 상품평 스코어합계
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsSummaryByReviewScore(GoodsSummary goodsSummary);
+
+	/**
+	 * 전시상품 통계정보작업 - 상품문의
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void createGoodsSummaryByCounsel(GoodsSummary goodsSummary);
+
+	/**
+	 * 전시상품 통계정보작업 - 통계정보 저장
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	void saveGoodsSummary();
+
 }

+ 60 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsRelateScoreJob.java

@@ -0,0 +1,60 @@
+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 com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.util.GagaDateUtil;
+
+/**
+ * 연관상품보기 스코어링 작업 - 일배치
+ *
+ * @author eskim
+ * @since 2020. 12. 03
+ */
+@Component
+@Slf4j
+public class TsbGoodsRelateScoreJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+	private String workDate = "";
+	private String work7agoDate = "";
+
+	@Override
+	public Goods read() throws Exception {
+
+		//작업일
+		workDate = GagaDateUtil.getOffsetDate(-1, "yyyyMMdd");
+		work7agoDate = GagaDateUtil.getOffsetDate(-7, "yyyyMMdd");
+
+		Goods goods = new Goods();
+		return goods;
+	}
+
+	@Override
+	public Goods process(Goods goods) throws Exception {
+		return goods;
+	}
+
+	@Override
+	public Goods write(Goods goods) throws Exception {
+
+		goodsService.createGoodsRelateScore(workDate, work7agoDate);
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 52 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsSummaryJob.java

@@ -0,0 +1,52 @@
+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 com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 전시상품 통계정보 작업 - 일배치
+ *
+ * @author eskim
+ * @since 2020. 12. 04
+ */
+@Component
+@Slf4j
+public class TsbGoodsSummaryJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Goods read() throws Exception {
+
+		Goods goods = new Goods();
+		return goods;
+	}
+
+	@Override
+	public Goods process(Goods goods) throws Exception {
+		return goods;
+	}
+
+	@Override
+	public Goods write(Goods goods) throws Exception {
+
+		goodsService.createGoodsSummary();
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 105 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -12,6 +12,7 @@ import com.style24.batch.support.env.TsbConstants;
 import com.style24.core.biz.service.TscEnvsetService;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsSummary;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -167,4 +168,108 @@ public class TsbGoodsService {
 		goodsDao.createGoodsBenefitPrice();
 
 	}
+
+	/**
+	 * 연관상품보기 스코어링 작업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	@Transactional("shopTxnManager")
+	public void createGoodsRelateScore(String workDt, String work7agoDt) {
+
+		// 작업일 데이터 삭제
+		goodsDao.deleteGoodsRelate(workDt);
+		// 작업일 데이터 생성
+		goodsDao.createGoodsRelate(workDt);
+		// 7일전 데이터 삭제
+		goodsDao.deleteGoodsRelate(work7agoDt);
+
+	}
+
+	/**
+	 * 전시상품 통계정보작업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 04
+	 */
+	@Transactional("shopTxnManager")
+	public void createGoodsSummary() {
+
+		GoodsSummary goodsSummary = new GoodsSummary();
+
+		goodsDao.deleteGoodsSummaryTemp();
+
+		// 상품 판매수량-총판매수량
+		goodsSummary.setColNm1("SELL_TOT_QTY");
+		goodsSummary.setFromDay("");
+		goodsDao.createGoodsSummaryBySale(goodsSummary);
+		// 상품 판매수량-주간판매수량
+		goodsSummary.setColNm1("SELL_WEEK_QTY");
+		goodsSummary.setFromDay("7");
+		goodsDao.createGoodsSummaryBySale(goodsSummary);
+		// 상품 판매수량-월간판매수량
+		goodsSummary.setColNm1("SELL_MONTH_QTY");
+		goodsSummary.setFromDay("30");
+		goodsDao.createGoodsSummaryBySale(goodsSummary);
+		// 상품 판매수량-전일판매수량
+		goodsSummary.setColNm1("SELL_YDAY_QTY");
+		goodsSummary.setFromDay("1");
+		goodsDao.createGoodsSummaryBySale(goodsSummary);
+		// 상품 판매수량-15일간판매수량
+		goodsSummary.setColNm1("SELL_DAY15_QTY");
+		goodsSummary.setFromDay("15");
+		goodsDao.createGoodsSummaryBySale(goodsSummary);
+		// 상품 조회수-금주조회건수
+		goodsSummary.setColNm1("READ_NWEEK_CNT");
+		goodsSummary.setFromDay("1");
+		goodsDao.createGoodsSummaryByView(goodsSummary);
+		// 상품 조회수-금주조회건수
+		goodsSummary.setColNm1("READ_PWEEK_CNT");
+		goodsSummary.setFromDay("8");
+		goodsDao.createGoodsSummaryByView(goodsSummary);
+//		// 상품평-상품평등록건수
+//		goodsSummary.setColNm1("REVIEW_REG_CNT");
+//		goodsSummary.setFromDay("");
+//		goodsSummary.setPhotoYn("");
+//		goodsDao.createGoodsSummaryByReviewCount(goodsSummary);
+//		// 상품평-텍스트상품평등록건수
+//		goodsSummary.setColNm1("TREVIEW_REG_CNT");
+//		goodsSummary.setFromDay("");
+//		goodsSummary.setPhotoYn("N");
+//		goodsDao.createGoodsSummaryByReviewCount(goodsSummary);
+//		// 상품평-포토상품평등록건수
+//		goodsSummary.setColNm1("PREVIEW_REG_CNT");
+//		goodsSummary.setFromDay("");
+//		goodsSummary.setPhotoYn("Y");
+//		goodsDao.createGoodsSummaryByReviewCount(goodsSummary);
+//		// 상품평-만족도점수
+//		goodsSummary.setColNm1("TOT_SCORE");
+//		goodsSummary.setReviewColNm("SCORE");
+//		goodsSummary.setPhotoYn("");
+//		goodsDao.createGoodsSummaryByReviewSum(goodsSummary);
+//		// 상품평-색상점수
+//		goodsSummary.setColNm1("SCORE_COLOR1");
+//		goodsSummary.setColNm2("SCORE_COLOR2");
+//		goodsSummary.setColNm3("SCORE_COLOR3");
+//		goodsSummary.setReviewColNm("SCORE_COLOR");
+//		goodsSummary.setPhotoYn("");
+//		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
+//		// 상품평-사이즈점수
+//		goodsSummary.setColNm1("SCORE_SIZE1");
+//		goodsSummary.setColNm2("SCORE_SIZE2");
+//		goodsSummary.setColNm3("SCORE_SIZE3");
+//		goodsSummary.setReviewColNm("SCORE_SIZE");
+//		goodsSummary.setPhotoYn("");
+//		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
+		// 상품평-상품문의
+		goodsDao.createGoodsSummaryByCounsel(goodsSummary);
+
+		// 전시상품 통계 저장
+		goodsDao.saveGoodsSummary();
+
+	}
+
 }

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

@@ -7,7 +7,9 @@ import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.goods.TsbGoodsBenefitPriceJob;
 import com.style24.batch.biz.job.goods.TsbGoodsPriceJob;
+import com.style24.batch.biz.job.goods.TsbGoodsRelateScoreJob;
 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 lombok.extern.slf4j.Slf4j;
@@ -33,6 +35,12 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsBenefitPriceJob goodsBenefitPriceJob;
 
+	@Autowired
+	private TsbGoodsRelateScoreJob goodsRelateScoreJob;
+
+	@Autowired
+	private TsbGoodsSummaryJob goodsSummaryJob;
+
 	/**
 	 * 초 분 시 일 월 주(년)
 	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
@@ -104,4 +112,28 @@ public class TsbGoodsTask {
 	public void tsbGoodsBenefitPriceJob() throws Exception {
 		goodsBenefitPriceJob.runById("cron.goods.benefit.price");
 	}
+
+	/**
+	 * 연관상품보기 스코어링 주기 : 일배치 - 매일 2시
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.relate.score}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsRelateScoreJob() throws Exception {
+		goodsRelateScoreJob.runById("cron.goods.relate.score");
+	}
+
+	/**
+	 * 전시상품 통계정보 주기 : 일배치 - 매일 1시 5분
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.summary}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsSummaryJob() throws Exception {
+		goodsSummaryJob.run("cron.goods.summary");
+	}
 }

+ 1 - 1
style24.batch/src/main/java/com/style24/batch/biz/task/TsbStatisticsTask.java

@@ -53,7 +53,7 @@ public class TsbStatisticsTask {
 	 * @throws Exception
 	 */
 	@Scheduled(cron = "${cron.statistics.inflow}")
-	@Scheduled(fixedDelay = 3500000)
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbInflowStaticsJob() throws Exception {
 		inflowStatisticsJob.runById("cron.statistics.inflow");

+ 26 - 0
style24.batch/src/main/java/com/style24/persistence/domain/GoodsSummary.java

@@ -0,0 +1,26 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 상품요약(통계성) Domain
+ *
+ * @author eskim
+ * @since 2020. 12. 04
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsSummary extends TscBaseDomain {
+
+	private String goodsCd;
+	private String colNm1;
+	private String colNm2;
+	private String colNm3;
+	private String reviewColNm;
+	private int colValue;
+	private String fromDay;
+	private String photoYn;
+
+}

+ 291 - 1
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -710,5 +710,295 @@
 		     , NOW()
 		FROM TB_GOODS_BENEFIT_PRICE_TEMP
 	</insert>
-		
+	
+	<!-- 연관상품보기 스코어링 삭제 -->
+	<delete id="deleteGoodsRelate" parameterType="String">
+		/* TsbGoods.deleteGoodsRelate */
+		DELETE FROM TB_RELATE_GOODS
+		WHERE REG_YMD = #{regYmd}
+	</delete>
+
+	<!-- 연관상품보기 스코어링 생성 -->
+	<insert id="createGoodsRelate" parameterType="String">
+		/* TsbGoods.createGoodsRelate */
+		INSERT INTO TB_RELATE_GOODS
+		    ( REG_YMD
+		    , GOODS_CD
+		    , PREV_GOODS_CD
+		    , RELATE_SCORE
+		    , REG_NO
+		    , REG_DT
+		    )
+		SELECT DISTINCT REG_YMD
+		     , GOODS_CD
+		     , PREV_GOODS_CD
+		     , RELATE_SCORE
+		     , 0
+		     , NOW()
+		FROM(
+		    SELECT REG_YMD
+		         , JSESSION_ID
+		         , REG_DT
+		         , GOODS_CD
+		         , PREV_GOODS_CD
+		         , COUNT(*) OVER (PARTITION BY CONCAT(GOODS_CD,PREV_GOODS_CD)  ORDER BY CONCAT(GOODS_CD,PREV_GOODS_CD)) RELATE_SCORE
+		    FROM(
+		         SELECT REG_YMD
+		              , JSESSION_ID
+		              , REG_DT
+		              , GOODS_CD
+		              , PREV_GOODS_CD
+		         FROM (
+		               SELECT DATE_FORMAT(REG_DT,'%Y%m%d') AS REG_YMD
+		                    , JSESSION_ID
+		                    , REG_DT
+		                    , GOODS_CD
+		                    , LAG(GOODS_CD,1) OVER (ORDER BY DATE_FORMAT(REG_DT, '%Y%m%d'),JSESSION_ID,REG_DT) PREV_GOODS_CD
+		               FROM TB_GOODS_VIEW_HST
+		               WHERE REG_DT >= DATE_FORMAT(#{workDt}, '%Y-%m-%d %H:%i:%S') 
+		                <![CDATA[
+		               AND   REG_DT < DATE_FORMAT(DATE_ADD(#{workDt}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		               ]]>
+		              ) A
+		         WHERE GOODS_CD <![CDATA[<>]]> PREV_GOODS_CD
+		         AND PREV_GOODS_CD IS NOT NULL
+		      ) B
+		  ) C
+	</insert>
+	
+	<!--  전시상품 통계 - temp 테이블 삭제 -->
+	<delete id="deleteGoodsSummaryTemp">
+		/* TsbGoods.deleteGoodsSummaryTemp */
+		TRUNCATE TABLE TB_GOODS_SUMMARY_TEMP
+	</delete>
+
+	<!--전시상품 통계 - 판매 -->
+	<insert id="createGoodsSummaryBySale" parameterType="GoodsSummary">
+		/* TsbGoods.createGoodsSummaryBySale */
+		INSERT INTO TB_GOODS_SUMMARY_TEMP (
+		    GOODS_CD
+		  , ${colNm1}
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		    SELECT *
+		    FROM (
+		        SELECT GOODS_CD
+		              ,SUM(USAC_QTY *  (CASE USAC_GB WHEN '10' THEN 1 ELSE -1 END) ) AS COL_DATA
+		              , 0
+		              , NOW() 
+		        FROM TB_USAC
+		        WHERE MALL_GB = '10'
+		        <if test="fromDay != null and fromDay != ''">
+		        AND OCCUR_DT >= DATE_FORMAT(DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -#{fromDay} DAY), '%Y%m%d'), '%Y%m%d%H%i%S')
+		        <![CDATA[
+		        AND OCCUR_DT < DATE_FORMAT(DATE_ADD(DATE_FORMAT(NOW(), '%Y%m%d'), INTERVAL 1 DAY), '%Y%m%d%H%i%S')
+		        ]]>
+		        </if>
+		        GROUP BY GOODS_CD
+		    ) B
+		)
+		ON DUPLICATE KEY UPDATE
+		    ${colNm1} = B.COL_DATA
+	</insert>
+
+	<!--전시상품 통계 - 조회 -->
+	<insert id="createGoodsSummaryByView" parameterType="GoodsSummary">
+		/* TsbGoods.createGoodsSummaryByView */
+		INSERT INTO TB_GOODS_SUMMARY_TEMP (
+		    GOODS_CD
+		  , ${colNm1}
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		    SELECT *
+		    FROM (
+		       SELECT GOODS_CD
+		             ,COUNT(GOODS_CD) AS COL_DATA
+		             ,0
+		             ,NOW()
+		       FROM TB_GOODS_VIEW_HST
+		       WHERE 1 = 1
+		       AND REG_DT >= DATE_FORMAT(DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -#{fromDay} DAY), '%Y%m%d'), '%Y%m%d%H%i%S')
+		       <![CDATA[
+		       AND REG_DT < DATE_FORMAT(DATE_FORMAT(DATE_ADD(DATE_ADD(NOW(), INTERVAL -7 DAY), INTERVAL 7 DAY ), '%Y%m%d'), '%Y%m%d%H%i%S') 
+		       ]]> 
+		       GROUP BY GOODS_CD
+		    ) B
+		)
+		ON DUPLICATE KEY UPDATE
+		    ${colNm1} = B.COL_DATA
+	</insert>
+
+	<!--전시상품 통계 - 상품평 건수 -->
+	<insert id="createGoodsSummaryByReviewCount" parameterType="GoodsSummary">
+		/* TsbGoods.createGoodsSummaryByReviewCount */
+		INSERT INTO TB_GOODS_SUMMARY_TEMP (
+		    GOODS_CD
+		  , ${colNm1}
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		    SELECT *
+		    FROM (
+		       SELECT GOODS_CD
+		             ,COUNT(GOODS_CD) AS COL_DATA
+		             ,0
+		             ,NOW()
+		       FROM TB_REVIEW
+		       WHERE DISP_YN = 'Y'
+		       AND DEL_YN = 'N'
+		       <if test='photoYn != null and photoYn == "Y"'>
+		       AND SYS_FILE_NM IS NOT NULL
+		       </if>
+		       <if test='photoYn != null and photoYn == "N"'>
+		       AND SYS_FILE_NM IS NULL
+		       </if>
+		       GROUP BY GOODS_CD
+		    ) B
+		)
+		ON DUPLICATE KEY UPDATE
+		    ${colNm1} = B.COL_DATA
+	</insert>
+
+	<!--전시상품 통계 - 상품평 점수 합계 -->
+	<insert id="createGoodsSummaryByReviewSum" parameterType="GoodsSummary">
+		/* TsbGoods.createGoodsSummaryByReviewSum */
+		INSERT INTO TB_GOODS_SUMMARY_TEMP (
+		    GOODS_CD
+		  , ${colNm1}
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		    SELECT *
+		    FROM (
+		       SELECT GOODS_CD
+		             ,SUM(${reviewColNm})AS COL_DATA
+		             ,0
+		             ,NOW()
+		       FROM TB_REVIEW
+		       WHERE DISP_YN = 'Y'
+		       AND DEL_YN = 'N'
+		       <if test='photoYn != null and photoYn == "Y"'>
+		       AND SYS_FILE_NM IS NOT NULL
+		       </if>
+		       <if test='photoYn != null and photoYn == "N"'>
+		       AND SYS_FILE_NM IS NULL
+		       </if>
+		       GROUP BY GOODS_CD
+		    ) B
+		)
+		ON DUPLICATE KEY UPDATE
+		    ${colNm1} = B.COL_DATA
+	</insert>
+
+	<!--전시상품 통계 - 상품평 스코어합계-->
+	<insert id="createGoodsSummaryByReviewScore" parameterType="GoodsSummary">
+		/* TsbGoods.createGoodsSummaryByReviewScore */
+		INSERT INTO TB_GOODS_SUMMARY_TEMP (
+		    GOODS_CD
+		  , ${colNm1}
+		  , ${colNm2}
+		  , ${colNm3}
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		    SELECT *
+		    FROM (
+		       SELECT GOODS_CD
+		             ,NVL(SUM(DECODE(${reviewColNm},'1',1,0)),0) AS COL_DATA1
+		             ,NVL(SUM(DECODE(${reviewColNm},'2',1,0)),0) AS COL_DATA2
+		             ,NVL(SUM(DECODE(${reviewColNm},'3',1,0)),0) AS COL_DATA3
+		             ,0
+		             ,NOW()
+		       FROM TB_REVIEW
+		       WHERE DISP_YN = 'Y'
+		       AND DEL_YN = 'N'
+		       <if test='photoYn != null and photoYn == "Y"'>
+		       AND SYS_FILE_NM IS NOT NULL
+		       </if>
+		       <if test='photoYn != null and photoYn == "N"'>
+		       AND SYS_FILE_NM IS NULL
+		       </if>
+		       GROUP BY GOODS_CD
+		    ) B
+		)
+		ON DUPLICATE KEY UPDATE
+		    ${colNm1} = B.COL_DATA1
+		   ,${colNm2} = B.COL_DATA2
+		   ,${colNm3} = B.COL_DATA3
+	</insert>
+
+	<!--전시상품 통계 - 상품문의 -->
+	<insert id="createGoodsSummaryByCounsel" parameterType="GoodsSummary">
+		/* TsbGoods.createGoodsSummaryByCounsel */
+		INSERT INTO TB_GOODS_SUMMARY_TEMP (
+		    GOODS_CD
+		  , GOODS_QNA_CNT
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		    SELECT *
+		    FROM (
+		       SELECT REL_GOODS_CD
+		             ,COUNT(REL_GOODS_CD) AS COL_DATA
+		             ,0
+		             ,NOW()
+		       FROM TB_COUNSEL
+		       WHERE COUNSEL_TYPE = 'G'
+		       AND REL_GOODS_CD IS NOT NULL
+		       GROUP BY REL_GOODS_CD
+		    ) B
+		)
+		ON DUPLICATE KEY UPDATE
+		    GOODS_QNA_CNT = B.COL_DATA
+	</insert>
+
+	<!--전시상품 통계 - 저장-->
+	<insert id="saveGoodsSummary">
+		/* TsbGoods.saveGoodsSummary */
+		UPDATE TB_GOODS_SUMMARY A, TB_GOODS_SUMMARY_TEMP GS
+		SET  A.SELL_TOT_QTY        = NVL(GS.SELL_TOT_QTY,0)
+		   , A.SELL_WEEK_QTY       = NVL(GS.SELL_WEEK_QTY,0)
+		   , A.SELL_MONTH_QTY      = NVL(GS.SELL_MONTH_QTY,0)
+		   , A.SELL_YDAY_QTY       = NVL(GS.SELL_YDAY_QTY,0)
+		   , A.SELL_DAY15_QTY      = NVL(GS.SELL_DAY15_QTY,0)
+		   , A.READ_NWEEK_CNT      = NVL(GS.READ_NWEEK_CNT,0)
+		   , A.READ_PWEEK_CNT      = NVL(GS.READ_PWEEK_CNT,0)
+		   , A.GOODS_QNA_CNT       = NVL(GS.GOODS_QNA_CNT,0)
+		   , A.REVIEW_REG_CNT      = NVL(GS.REVIEW_REG_CNT,0)
+		   , A.TREVIEW_REG_CNT     = NVL(GS.TREVIEW_REG_CNT,0)
+		   , A.PREVIEW_REG_CNT     = NVL(GS.PREVIEW_REG_CNT,0)
+		   , A.TOT_SCORE           = NVL(GS.TOT_SCORE,0)
+		   , A.SCORE_COLOR1        = NVL(GS.SCORE_COLOR1,0)
+		   , A.SCORE_COLOR2        = NVL(GS.SCORE_COLOR2,0)
+		   , A.SCORE_COLOR3        = NVL(GS.SCORE_COLOR3,0)
+		   , A.SCORE_COLOR4        = NVL(GS.SCORE_COLOR4,0)
+		   , A.SCORE_COLOR5        = NVL(GS.SCORE_COLOR5,0)
+		   , A.SCORE_SIZE1         = NVL(GS.SCORE_SIZE1,0)
+		   , A.SCORE_SIZE2         = NVL(GS.SCORE_SIZE2,0)
+		   , A.SCORE_SIZE3         = NVL(GS.SCORE_SIZE3,0)
+		   , A.SCORE_SIZE4         = NVL(GS.SCORE_SIZE4,0)
+		   , A.SCORE_SIZE5         = NVL(GS.SCORE_SIZE5,0)
+		   , A.SCORE_BALL1         = NVL(GS.SCORE_BALL1,0)
+		   , A.SCORE_BALL2         = NVL(GS.SCORE_BALL2,0)
+		   , A.SCORE_BALL3         = NVL(GS.SCORE_BALL3,0)
+		   , A.SCORE_BALL4         = NVL(GS.SCORE_BALL4,0)
+		   , A.SCORE_BALL5         = NVL(GS.SCORE_BALL5,0)
+		   , A.SCORE_WEARFEEL1     = NVL(GS.SCORE_WEARFEEL1,0)
+		   , A.SCORE_WEARFEEL2     = NVL(GS.SCORE_WEARFEEL2,0)
+		   , A.SCORE_WEARFEEL3     = NVL(GS.SCORE_WEARFEEL3,0)
+		   , A.SCORE_WEARFEEL4     = NVL(GS.SCORE_WEARFEEL4,0)
+		   , A.SCORE_WEARFEEL5     = NVL(GS.SCORE_WEARFEEL5,0)
+		   , A.UPD_NO              = 0
+		   , A.UPD_DT              = NOW()
+		WHERE A.GOODS_CD = GS.GOODS_CD
+	</insert>
+	
 </mapper>

+ 48 - 66
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbStatistics.xml

@@ -5,8 +5,23 @@
 	<!-- 사이트 제휴코드 유입집계 -->
 	<insert id="createInflowDaily" parameterType="String">
 		/* TsbStatistics.createInflowDaily */
-		MERGE INTO TB_INFLOW_DAILY A
-		USING (
+		INSERT INTO TB_INFLOW_DAILY (
+		    INFLOW_YMD
+		  , SITE_CD
+		  , AF_LINK_CD
+		  , PC_INFLOW_TCNT
+		  , MOB_INFLOW_TCNT
+		  , AOS_INFLOW_TCNT
+		  , IOS_INFLOW_TCNT
+		  , PC_INFLOW_CNT
+		  , MOB_INFLOW_CNT
+		  , AOS_INFLOW_CNT
+		  , IOS_INFLOW_CNT
+		  , REG_NO
+		  , REG_DT
+		)
+		(
+		SELECT * FROM (
 		       SELECT INFLOW_YMD
 		            , SITE_CD
 		            , AF_LINK_CD
@@ -18,10 +33,10 @@
 		            , SUM(CASE WHEN FRONT_GB = 'M' AND APP_YN = 'N' THEN INFLOW_CNT ELSE 0 END)                    AS MOB_INFLOW_CNT
 		            , SUM(CASE WHEN FRONT_GB = 'M' AND APP_YN = 'Y' AND OS_TYPE = 'A' THEN INFLOW_CNT ELSE 0 END)  AS AOS_INFLOW_CNT
 		            , SUM(CASE WHEN FRONT_GB = 'M' AND APP_YN = 'Y' AND OS_TYPE = 'I' THEN INFLOW_CNT ELSE 0 END)  AS IOS_INFLOW_CNT
-		            , 'batch'                                                                                      AS REG_ID
-		            , SYSDATE                                                                                      AS REG_DT
+		            , 0                                                                                            AS REG_NO
+		            , NOW()                                                                                        AS REG_DT
 		       FROM   (
-		               SELECT TO_CHAR(INFLOW_DT,'YYYYMMDD') AS INFLOW_YMD
+		               SELECT DATE_FORMAT(INFLOW_DT,'%Y%m%d') AS INFLOW_YMD
 		                    , SITE_CD
 		                    , AF_LINK_CD
 		                    , FRONT_GB
@@ -30,68 +45,35 @@
 		                    , COUNT(DISTINCT JSESSION_ID)   AS INFLOW_TCNT
 		                    , COUNT(DISTINCT IP_ADDR)       AS INFLOW_CNT
 		               FROM   TB_INFLOW_HST
-		<where>
-			<if test="inflowDt == 'today'">
-		                      INFLOW_DT BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 0.99999 --당일자
-			</if>
-			<if test="inflowDt == 'yesterday'">
-		                      INFLOW_DT BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE-1) + 0.99999 --당일자
-			</if>
-		</where>
-		               GROUP  BY TO_CHAR(INFLOW_DT,'YYYYMMDD'), AF_LINK_CD, SITE_CD, FRONT_GB, APP_YN, OS_TYPE
-		              )
+		               WHERE 1 = 1
+		               <if test="inflowDt == 'today'">
+		               AND   INFLOW_DT >= DATE_FORMAT(DATE_FORMAT(NOW(), '%Y%m%d'), '%Y%m%d%H%i%S')
+		               <![CDATA[
+		               AND   INFLOW_DT < DATE_FORMAT(DATE_ADD(DATE_FORMAT(NOW(), '%Y%m%d'), INTERVAL 1 DAY), '%Y%m%d%H%i%S')
+		               ]]>
+		               </if>
+		               <if test="inflowDt == 'yesterday'">
+		               AND   INFLOW_DT >= DATE_FORMAT(DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y%m%d'), '%Y%m%d%H%i%S')
+		               <![CDATA[
+		               AND   INFLOW_DT < DATE_FORMAT(DATE_ADD(DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y%m%d'), INTERVAL 1 DAY), '%Y%m%d%H%i%S')
+		               ]]>
+		               </if>
+		               GROUP  BY DATE_FORMAT(INFLOW_DT,'%Y%m%d'), AF_LINK_CD, SITE_CD, FRONT_GB, APP_YN, OS_TYPE
+		              ) Z
 		       GROUP  BY INFLOW_YMD, AF_LINK_CD, SITE_CD
-		      ) B
-		ON    (
-		       A.INFLOW_YMD = B.INFLOW_YMD
-		       AND
-		       A.SITE_CD = B.SITE_CD
-		       AND
-		       A.AF_LINK_CD = B.AF_LINK_CD
-		      )
-		WHEN MATCHED THEN
-		    UPDATE
-		    SET    A.PC_INFLOW_TCNT  = B.PC_INFLOW_TCNT
-		         , A.MOB_INFLOW_TCNT = B.MOB_INFLOW_TCNT
-		         , A.AOS_INFLOW_TCNT = B.AOS_INFLOW_TCNT
-		         , A.IOS_INFLOW_TCNT = B.IOS_INFLOW_TCNT
-		         , A.PC_INFLOW_CNT   = B.PC_INFLOW_CNT
-		         , A.MOB_INFLOW_CNT  = B.MOB_INFLOW_CNT
-		         , A.AOS_INFLOW_CNT  = B.AOS_INFLOW_CNT
-		         , A.IOS_INFLOW_CNT  = B.IOS_INFLOW_CNT
-		         , REG_ID            = B.REG_ID
-		         , REG_DT            = B.REG_DT
-		WHEN NOT MATCHED THEN
-		    INSERT (
-		           INFLOW_YMD
-		         , SITE_CD
-		         , AF_LINK_CD
-		         , PC_INFLOW_TCNT
-		         , MOB_INFLOW_TCNT
-		         , AOS_INFLOW_TCNT
-		         , IOS_INFLOW_TCNT
-		         , PC_INFLOW_CNT
-		         , MOB_INFLOW_CNT
-		         , AOS_INFLOW_CNT
-		         , IOS_INFLOW_CNT
-		         , REG_ID
-		         , REG_DT
-		    )
-		    VALUES (
-		           B.INFLOW_YMD
-		         , B.SITE_CD
-		         , B.AF_LINK_CD
-		         , B.PC_INFLOW_TCNT
-		         , B.MOB_INFLOW_TCNT
-		         , B.AOS_INFLOW_TCNT
-		         , B.IOS_INFLOW_TCNT
-		         , B.PC_INFLOW_CNT
-		         , B.MOB_INFLOW_CNT
-		         , B.AOS_INFLOW_CNT
-		         , B.IOS_INFLOW_CNT
-		         , B.REG_ID
-		         , B.REG_DT
-		    )
+		      ) B 
+		)
+		ON DUPLICATE KEY UPDATE
+		   PC_INFLOW_TCNT  = B.PC_INFLOW_TCNT
+		 , MOB_INFLOW_TCNT = B.MOB_INFLOW_TCNT
+		 , AOS_INFLOW_TCNT = B.AOS_INFLOW_TCNT
+		 , IOS_INFLOW_TCNT = B.IOS_INFLOW_TCNT
+		 , PC_INFLOW_CNT   = B.PC_INFLOW_CNT
+		 , MOB_INFLOW_CNT  = B.MOB_INFLOW_CNT
+		 , AOS_INFLOW_CNT  = B.AOS_INFLOW_CNT
+		 , IOS_INFLOW_CNT  = B.IOS_INFLOW_CNT
+		 , REG_NO          = B.REG_NO
+		 , REG_DT          = B.REG_DT
 	</insert>
 		
 </mapper>

+ 2 - 0
style24.batch/src/main/resources/config/application-locd.yml

@@ -46,6 +46,8 @@ cron:
         price.reserve: 2 22 2 29 2 ?
         search.keyword: 2 22 2 29 2 ?
         benefit.price: 2 22 2 29 2 ?
+        relate.score: 2 22 2 29 2 ?
+        summary: 2 22 2 29 2 ?
     
     #통계
     statistics: