Browse Source

유입통계 개발중

eskim 5 năm trước cách đây
mục cha
commit
2815ba3cc7

+ 22 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbStatisticsDao.java

@@ -0,0 +1,22 @@
+package com.style24.batch.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 통계 Dao
+ *
+ * @author eskim
+ * @since 2020. 12. 03
+ */
+@ShopDs
+public interface TsbStatisticsDao {
+
+	/**
+	 * 사이트 제휴코드 유입집계
+	 *
+	 * @author eskim
+	 * @since 2020. 12. 03
+	 */
+	int createInflowDaily(String inflowDt);
+
+}

+ 2 - 2
style24.batch/src/main/java/com/style24/batch/biz/job/TsbAbstractJob.java

@@ -12,7 +12,7 @@ import lombok.extern.slf4j.Slf4j;
 
 /**
  * Batch Abastract Class
- * 
+ *
  * @author gagamel
  * @since 2020. 11. 13
  */
@@ -100,7 +100,7 @@ public abstract class TsbAbstractJob<I, O, R> {
 			// 배치명 조회
 			batchName = batchService.getBatchName(batchId);
 
-			if (StringUtils.isNotBlank(batchName)) {
+			if (!StringUtils.isNotBlank(batchName)) {
 				System.exit(500);
 				log.info("{} 배치는 미사용으로 종료합니다.(TB_BATCH 테이블 참조)");
 			}

+ 55 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/statistics/TsbInflowStatisticsJob.java

@@ -0,0 +1,55 @@
+package com.style24.batch.biz.job.statistics;
+
+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.TsbStatisticsService;
+import com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 사이트 제휴코드 유입집계
+ *
+ * @author eskim
+ * @since 2020. 12. 03
+ */
+@Component
+@Slf4j
+public class TsbInflowStatisticsJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbStatisticsService statisticsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+	private int totalCnt = 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 {
+
+		int result = statisticsService.createInflowDaily("today");
+		totalCnt = result;
+		succCnt = result;
+
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+}

+ 56 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/statistics/TsbInflowYesterdayStatisticsJob.java

@@ -0,0 +1,56 @@
+package com.style24.batch.biz.job.statistics;
+
+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.TsbStatisticsService;
+import com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 사이트 제휴코드 전날 유입집계 (일배치)
+ *
+ * @author card007
+ * @since 2020. 08. 26
+ */
+@Component
+@Slf4j
+public class TsbInflowYesterdayStatisticsJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbStatisticsService statisticsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+	private int totalCnt = 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 {
+
+		int result = statisticsService.createInflowDaily("yesterday");
+		totalCnt = result;
+		succCnt = result;
+
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 1 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbBatchService.java

@@ -43,6 +43,7 @@ public class TsbBatchService {
 	 */
 	@Transactional("shopTxnManager")
 	public Integer createBatchLog(String batchId) {
+
 		BatchLog batchLog = new BatchLog();
 		batchLog.setBatchId(batchId);
 		batchLog.setRegNo(TsbConstants.REG_NO);

+ 35 - 0
style24.batch/src/main/java/com/style24/batch/biz/service/TsbStatisticsService.java

@@ -0,0 +1,35 @@
+package com.style24.batch.biz.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.batch.biz.dao.TsbStatisticsDao;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 통계 Service
+ *
+ * @author eskim
+ * @since 2020. 12. 03
+ */
+@Service
+@Slf4j
+public class TsbStatisticsService {
+
+	@Autowired
+	private TsbStatisticsDao statisticsDao;
+
+	/**
+	 * 사이트 제휴코드 유입집계
+	 *
+	 * @author daehyoung
+	 * @since 2020. 08. 18
+	 */
+	@Transactional("shopTxnManager")
+	public int createInflowDaily(String inflowDt) {
+		// 사이트 제휴코드 유입집계 전일데이터 생성
+		return statisticsDao.createInflowDaily(inflowDt);
+	}
+}

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

@@ -0,0 +1,73 @@
+package com.style24.batch.biz.task;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.statistics.TsbInflowStatisticsJob;
+import com.style24.batch.biz.job.statistics.TsbInflowYesterdayStatisticsJob;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 통계 Task
+ * @author eskim
+ * @since 2020. 12. 03
+ */
+@Component
+@Slf4j
+public class TsbStatisticsTask {
+
+	@Autowired
+	private TsbInflowYesterdayStatisticsJob inflowYesterdayStatisticsJob;
+
+	@Autowired
+	private TsbInflowStatisticsJob inflowStatisticsJob;
+
+	/**
+	 * 초 분 시 일 월 주(년)
+	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
+	 * 0 15 10 ? * *" : 모든 요일, 매월, 아무 날이나 10:15:00
+	 * 0 15 10 * * ?" : 아무 요일, 매월, 매일 10:15:00
+	 * 0 15 10 * * ? *" : 모든 연도, 아무 요일, 매월, 매일 10:15
+	 * 0 15 10 * * ? : 2005" 2005년 아무 요일이나 매월, 매일 10:15
+	 * 0 * 14 * * ?" : 아무 요일, 매월, 매일, 14시 매분 0초
+	 * 0 0/5 14 * * ?" : 아무 요일, 매월, 매일, 14시 매 5분마다 0초
+	 * 0 0/5 14,18 * * ?" : 아무 요일, 매월, 매일, 14시, 18시 매 5분마다 0초
+	 * 0 0-5 14 * * ?" : 아무 요일, 매월, 매일, 14:00 부터 매 14:05까지 매 분 0초
+	 * 0 10,44 14 ? 3 WED" : 3월의 매 주 수요일, 아무 날짜나 14:10:00, 14:44:00
+	 * 0 15 10 ? * MON-FRI" : 월~금, 매월, 아무 날이나 10:15:00
+	 * 0 15 10 15 * ?" : 아무 요일, 매월 15일 10:15:00
+	 * 0 15 10 L * ?" : 아무 요일, 매월 마지막 날 10:15:00
+	 * 0 15 10 ? * 6L" : 매월 마지막 금요일 아무 날이나 10:15:00
+	 * 0 15 10 ? * 6L 2002-2005" : 2002년부터 2005년까지 매월 마지막 금요일 아무 날이나 10:15:00
+	 * 0 15 10 ? * 6#3" : 매월 3번째 금요일 아무 날이나 10:15:00
+	 *
+	 * @throws Exception
+	 */
+
+	/**
+	 * 사이트 제휴코드 유입집계 생성
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.statistics.inflow}")
+	@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbInflowStaticsJob() throws Exception {
+		inflowStatisticsJob.runById("cron.statistics.inflow");
+	}
+
+	/**
+	 * 사이트 제휴코드 전날 유입집계 생성
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.statistics.inflow.yesterday}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbInflowYesterdayStaticsJob() throws Exception {
+		inflowYesterdayStatisticsJob.runById("cron.statistics.inflow.yesterday");
+	}
+}

+ 97 - 0
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbStatistics.xml

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.batch.biz.dao.TsbStatisticsDao">
+	
+	<!-- 사이트 제휴코드 유입집계 -->
+	<insert id="createInflowDaily" parameterType="String">
+		/* TsbStatistics.createInflowDaily */
+		MERGE INTO TB_INFLOW_DAILY A
+		USING (
+		       SELECT INFLOW_YMD
+		            , SITE_CD
+		            , AF_LINK_CD
+		            , SUM(CASE WHEN FRONT_GB = 'P' AND APP_YN = 'N' THEN INFLOW_TCNT ELSE 0 END)                   AS PC_INFLOW_TCNT
+		            , SUM(CASE WHEN FRONT_GB = 'M' AND APP_YN = 'N' THEN INFLOW_TCNT ELSE 0 END)                   AS MOB_INFLOW_TCNT
+		            , SUM(CASE WHEN FRONT_GB = 'M' AND APP_YN = 'Y' AND OS_TYPE = 'A' THEN INFLOW_TCNT ELSE 0 END) AS AOS_INFLOW_TCNT
+		            , SUM(CASE WHEN FRONT_GB = 'M' AND APP_YN = 'Y' AND OS_TYPE = 'I' THEN INFLOW_TCNT ELSE 0 END) AS IOS_INFLOW_TCNT
+		            , SUM(CASE WHEN FRONT_GB = 'P' AND APP_YN = 'N' THEN INFLOW_CNT ELSE 0 END)                    AS PC_INFLOW_CNT
+		            , 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
+		       FROM   (
+		               SELECT TO_CHAR(INFLOW_DT,'YYYYMMDD') AS INFLOW_YMD
+		                    , SITE_CD
+		                    , AF_LINK_CD
+		                    , FRONT_GB
+		                    , APP_YN
+		                    , OS_TYPE
+		                    , 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
+		              )
+		       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
+		    )
+	</insert>
+		
+</mapper>

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

@@ -46,3 +46,8 @@ cron:
         price.reserve: 2 22 2 29 2 ?
         search.keyword: 2 22 2 29 2 ?
         benefit.price: 2 22 2 29 2 ?
+    
+    #통계
+    statistics:
+        inflow: 2 22 2 29 2 ?
+        inflow.yesterday: 2 22 2 29 2 ?