Przeglądaj źródła

Merge remote-tracking branch 'origin/develop' into jsh77b

tsit14 5 lat temu
rodzic
commit
87c4f48794

+ 10 - 2
src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -617,12 +617,20 @@ public interface TsbGoodsDao {
 	void truncateTemporaryGoodsBenefit();
 
 	/**
-	 * 상품혜택임시-쿠폰할인 생성
+	 * 상품혜택임시-쿠폰할인 생성(적용범위 개별)
 	 * @return 생성건수
 	 * @author gagamel
 	 * @since 2021. 4. 7
 	 */
-	int createTemporaryGoodsBenefitCouponDiscount();
+	int createTemporaryGoodsBenefitScopeCouponDiscount();
+
+	/**
+	 * 상품혜택임시-쿠폰할인 생성(적용범위 전체)
+	 * @return 생성건수
+	 * @author gagamel
+	 * @since 2021. 4. 7
+	 */
+	int createTemporaryGoodsBenefitAllCouponDiscount();
 
 	/**
 	 * 상품혜택임시-무료배송 생성

+ 10 - 1
src/main/java/com/style24/batch/biz/dao/TsbMonitoringDao.java

@@ -13,7 +13,16 @@ import com.style24.persistence.domain.Alarm;
 public interface TsbMonitoringDao {
 
 	/**
-	 * 알람SMS 생성
+	 * 알람SMS 생성 (개발용)
+	 * @param alarm - 알람 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 13
+	 */
+	void createAlarmSmsDev(Alarm alarm);
+
+	/**
+	 * 알람SMS 생성 (운영용)
 	 * @param alarm - 알람 정보
 	 * @return
 	 * @author gagamel

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

@@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import com.style24.batch.biz.service.TsbBatchService;
+import com.style24.batch.biz.service.TsbMonitoringService;
 import com.style24.persistence.domain.BatchLog;
 
 import lombok.extern.slf4j.Slf4j;
@@ -37,6 +38,9 @@ public abstract class TsbAbstractJob<I, O, R> {
 
 	private Integer batchLogSq;	// 배치로그일련번호
 
+	@Autowired
+	private TsbMonitoringService monitoringService;
+
 	/**
 	 * Batch Job 시작 로그를 출력한다.
 	 */
@@ -64,7 +68,6 @@ public abstract class TsbAbstractJob<I, O, R> {
 	/**
 	 * Batch Job 결과 건수 로그를 출력한다.
 	 */
-	@SuppressWarnings("rawtypes")
 	protected void printResult(int totalCount, int successCount, int failureCount) {
 		log.info("--------------------------------------------------------------------------------");
 		log.info("배치: {}, 대상: {}건 중 성공: {}건, 실패: {}건", batchName, totalCount, successCount, failureCount);
@@ -140,6 +143,13 @@ public abstract class TsbAbstractJob<I, O, R> {
 				// 배치로그 종료 처리
 				batchService.updateBatchLog(batchLogSq, batchId);
 			}
+
+			try {
+				// 실패 시 알림(SMS) 보내기
+				monitoringService.createSystemAlarmSms("A000", batchName);
+			} catch (Exception e1) {
+				// Do nothing
+			}
 		}
 	}
 

+ 9 - 4
src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -795,10 +795,15 @@ public class TsbGoodsService {
 
 		int totCnt = 0;
 		int cnt = 0;
-		// 쿼리 튜닝중 
-//		cnt = goodsDao.createTemporaryGoodsBenefitCouponDiscount();
-//		totCnt += cnt;
-//		log.info("1.1.상품혜택임시-쿠폰할인 생성: {}", cnt);
+		// 쿼리 튜닝중
+		cnt = goodsDao.createTemporaryGoodsBenefitAllCouponDiscount();
+		totCnt += cnt;
+		
+		cnt = goodsDao.createTemporaryGoodsBenefitScopeCouponDiscount();
+		totCnt += cnt;
+		
+		
+		log.info("1.1.상품혜택임시-쿠폰할인 생성: {}", cnt);
 
 		cnt = goodsDao.createTemporaryGoodsBenefitFreeDelivery();
 		totCnt += cnt;

+ 37 - 1
src/main/java/com/style24/batch/biz/service/TsbMonitoringService.java

@@ -1,6 +1,7 @@
 package com.style24.batch.biz.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -24,6 +25,9 @@ public class TsbMonitoringService {
 	@Autowired
 	private TsbMonitoringDao monitoringDao;
 
+	@Autowired
+	private Environment env;
+
 	/**
 	 * 시스템알람SMS 생성
 	 * @param alarmId - 알람ID
@@ -37,7 +41,39 @@ public class TsbMonitoringService {
 		params.setAlarmId(alarmId);
 		params.setFuserid(String.valueOf(TsbConstants.REG_NO));
 		params.setFcallback(TscConstants.CALLCENTER_TEL_NO);
-		monitoringDao.createAlarmSms(params);
+
+		String profile = env.getProperty("spring.profiles.active");
+
+		if ("run".equals(profile) || "style".equals(profile)) {
+			monitoringDao.createAlarmSms(params);
+		} else {
+			monitoringDao.createAlarmSmsDev(params);
+		}
+	}
+
+	/**
+	 * 시스템알람SMS 생성
+	 * @param alarmId - 알람ID
+	 * @param batchNm - 배치명
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 11. 13
+	 */
+	@Transactional("shopTxnManager")
+	public void createSystemAlarmSms(String alarmId, String batchNm) {
+		Alarm params = new Alarm();
+		params.setAlarmId(alarmId);
+		params.setBatchNm(batchNm);
+		params.setFuserid(String.valueOf(TsbConstants.REG_NO));
+		params.setFcallback(TscConstants.CALLCENTER_TEL_NO);
+
+		String profile = env.getProperty("spring.profiles.active");
+
+		if ("run".equals(profile) || "style".equals(profile)) {
+			monitoringDao.createAlarmSms(params);
+		} else {
+			monitoringDao.createAlarmSmsDev(params);
+		}
 	}
 
 	/**

+ 205 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -2616,9 +2616,211 @@
 		TRUNCATE TABLE TB_GOODS_BENEFIT_TMP
 	</delete>
 	
+	<!-- 상품혜택임시- 쿠폰할인 생성(적용범위 개별) -->
+	<insert id="createTemporaryGoodsBenefitScopeCouponDiscount" timeout="600">
+		/* TsbGoods.createTemporaryGoodsBenefitScopeCouponDiscount */
+		INSERT INTO TB_GOODS_BENEFIT_TMP (
+		       GOODS_CD
+		     , BENEFIT_GB
+		)
+		WITH CTE AS (
+		    SELECT CP.CPN_ID , CP.BUY_LIMIT_AMT, CPR.CPN_REFVAL_SQ
+		    FROM TB_COUPON CP
+		    INNER JOIN TB_COUPON_REFVAL CPR ON CP.CPN_ID=CPR.CPN_ID
+		    WHERE  CP.SITE_CD = 'G000_10' /*전시사이트*/
+		    AND    CP.CPN_STAT = 'G232_11' /*쿠폰인 진행중인 쿠폰만*/
+		    AND    CP.DOWN_ABL_YN = 'Y' /*상품상세 다운로드 가능여부*/
+		    AND    NOW() <![CDATA[<=]]> IF(CP.PD_GB = 'D',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d %H:%i:%S'),CP.AVAIL_EDDT)
+		    AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
+		    AND    CP.CPN_TYPE IN ('G230_11','G230_20','G230_30') /*상품쿠폰,주문서쿠폰,배송비쿠폰*/
+		    AND    CP.DC_CD_GB = 'G233_00'                         -- 일반유형(할인쿠폰구분)
+		    AND    (SELECT COUNT(1)
+		            FROM   TB_COUPON_CUST_GBN
+		            WHERE  CPN_ID = CP.CPN_ID
+		            AND    USABLE_CUST_GB IN ('G100_10') /*사용가능고객구분:일반*/
+		           ) >= 1
+		    AND    CP.APPLY_SCOPE = 'I'   -- 개별
+		    AND    CP.DC_PVAL > 0
+		    AND    IF(CP.TOT_PUB_LIMIT_QTY = 0,9999999999,CP.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1)
+		                                                                           FROM   TB_CUST_COUPON
+		                                                                           WHERE  CPN_ID = CP.CPN_ID
+		                                                                          ) /*총발행제한수*/
+		)
+		  , CTE_DETAIL AS (
+
+		        SELECT CP.CPN_REFVAL_SQ, CPR.CPN_ID, CPR.REF_VAL, G.GOODS_CD GKEY, G.GOODS_CD
+		        FROM CTE CP
+		        INNER JOIN TB_COUPON_REFVAL CPR ON CP.CPN_REFVAL_SQ=CPR.CPN_REFVAL_SQ
+		        INNER JOIN TB_GOODS G ON CPR.REF_VAL=G.GOODS_CD  AND CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
+		        WHERE CPR.CPN_TARGET = 'G260_10'
+
+		        UNION
+
+		        /* 적용대상:카테고리*/
+		        SELECT CP.CPN_REFVAL_SQ, CPR.CPN_ID, CPR.REF_VAL, G.GOODS_CD GKEY, G.GOODS_CD
+		        FROM  CTE CP
+		        INNER JOIN TB_COUPON_REFVAL CPR ON CP.CPN_REFVAL_SQ=CPR.CPN_REFVAL_SQ
+		        INNER JOIN
+		                    (SELECT LEAF_CATE_NO
+		                          , CATE_LVL
+		                          , CATE_NO
+		                     FROM (
+		                    	   SELECT LEAF_CATE_NO ,
+		                                CASE WHEN X = 1 THEN 'CATE1_NO'  -- 컬럼과 매핑(컬럼명)
+		                                     WHEN X = 2 THEN 'CATE2_NO'
+		                                     WHEN X = 3 THEN 'CATE3_NO'
+		                                     WHEN X = 4 THEN 'CATE4_NO'
+		                                     ELSE  'CATE5_NO'
+		                                END CATE_LVL,
+		                                CASE WHEN X = 1 THEN CATE1_NO  -- 컬럼과 매핑(컬럼 데이터)
+		                                     WHEN X = 2 THEN CATE2_NO
+		                                     WHEN X = 3 THEN CATE3_NO
+		                                     WHEN X = 4 THEN CATE4_NO
+		                                     ELSE  CATE5_NO
+		                                 END CATE_NO
+		                           FROM (
+		                                  ( SELECT LEAF_CATE_NO
+		                                         , CATE1_NO
+		                                         , CATE2_NO
+		                                         , CATE3_NO
+		                                         , CATE4_NO
+		                                         , CATE5_NO
+		                                    FROM  TB_CATE_4SRCH
+		                                    WHERE SITE_CD = 'G000_10'
+		                                    AND CATE_TYPE = 'G031_10') A, -- 상품타입
+		                                  (SELECT 1 AS X		-- UNPIVOT 컬럼 수 만큼 선언
+		                                   UNION ALL SELECT 2 AS X
+		                                   UNION ALL SELECT 3 AS X
+		                                   UNION ALL SELECT 4 AS X
+		                                   UNION ALL SELECT 5 AS X
+		                                 ) B
+		                                )
+		                           ORDER BY LEAF_CATE_NO, CATE_LVL
+		                          ) K
+		                          WHERE CATE_NO IS NOT NULL
+		                                ) X ON CPR.REF_VAL=X.CATE_NO
+		        INNER JOIN TB_CATE_GOODS Y  ON X.LEAF_CATE_NO = Y.CATE_NO
+		        INNER JOIN TB_GOODS G ON G.GOODS_CD=Y.GOODS_CD AND CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
+		        WHERE CPR.CPN_TARGET =  'G260_11'
+		        AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+		        AND IFNULL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
+
+		        UNION
+
+		        /* 적용대상:브랜드*/
+		        SELECT CP.CPN_REFVAL_SQ, CPR.CPN_ID, CPR.REF_VAL, G.BRAND_CD GKEY, G.GOODS_CD
+		        FROM  CTE CP
+		        INNER JOIN TB_COUPON_REFVAL CPR ON CP.CPN_REFVAL_SQ=CPR.CPN_REFVAL_SQ
+		        INNER JOIN TB_GOODS G ON CPR.REF_VAL=G.BRAND_CD AND CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
+		        WHERE CPR.CPN_TARGET = 'G260_12'
+		        AND   IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+
+		        UNION
+
+		        /* 적용대상:공급업체*/
+		        SELECT CP.CPN_REFVAL_SQ, CPR.CPN_ID, CPR.REF_VAL, G.SUPPLY_COMP_CD GKEY, G.GOODS_CD
+		        FROM CTE CP
+		        INNER JOIN TB_COUPON_REFVAL CPR ON CP.CPN_REFVAL_SQ=CPR.CPN_REFVAL_SQ
+		        INNER JOIN TB_GOODS G ON CPR.REF_VAL=G.SUPPLY_COMP_CD AND CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
+		        WHERE CPR.CPN_TARGET = 'G260_13'
+		)
+		SELECT G.GOODS_CD
+		     , '10'       AS BENEFIT_GB /*쿠폰할인*/
+		FROM   (
+		SELECT CP.CPN_ID 
+		      ,G.GOODS_CD  
+		FROM   CTE_DETAIL CC 
+		INNER JOIN TB_GOODS G ON CC.GOODS_CD = G.GOODS_CD
+		INNER JOIN TB_COUPON CP ON CC.CPN_ID = CP.CPN_ID
+		WHERE NOT EXISTS (
+		                  SELECT 1
+		                  FROM   TB_COUPON_REFVAL SCPR
+		                  WHERE  SCPR.CPN_ID = CP.CPN_ID
+		                  AND    SCPR.REF_VAL = G.GOODS_CD
+		                  AND    SCPR.DEL_YN = 'N' /*삭제안된넘*/
+		                  AND    SCPR.CPN_TARGET = '40' /* 제외상품*/
+		                 )
+		AND NOT EXISTS (
+		                SELECT 1
+		               FROM TB_COUPON_BAN_GOODS
+		               WHERE GOODS_CD = G.GOODS_CD
+		               AND DEL_YN = 'N'
+		                )
+		AND NOT EXISTS (
+		                SELECT 1
+		               FROM TB_GOODS_BENEFIT_TMP
+		               WHERE GOODS_CD = G.GOODS_CD
+		               AND BENEFIT_GB = '10'
+		                )
+		   ) G
+		GROUP  BY G.GOODS_CD
+		HAVING COUNT(*) <![CDATA[>]]> 0
+	</insert>
+	
+	<!-- 상품혜택임시- 쿠폰할인 생성(적용범위 전체) -->
+	<insert id="createTemporaryGoodsBenefitAllCouponDiscount" timeout="600">
+		/* TsbGoods.createTemporaryGoodsBenefitAllCouponDiscount */
+		INSERT INTO TB_GOODS_BENEFIT_TMP (
+		       GOODS_CD
+		     , BENEFIT_GB
+		)
+		WITH CTE AS (
+ 		    SELECT CPN_ID , BUY_LIMIT_AMT
+		    FROM TB_COUPON CP
+		    WHERE  CP.SITE_CD = 'G000_10' /*전시사이트*/
+		    AND    CP.CPN_STAT = 'G232_11' /*쿠폰인 진행중인 쿠폰만*/
+		    AND    CP.DOWN_ABL_YN = 'Y' /*상품상세 다운로드 가능여부*/
+		    AND    NOW() <![CDATA[<=]]> IF(CP.PD_GB = 'D',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d %H:%i:%S'),CP.AVAIL_EDDT)
+		    AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
+		    AND    CP.CPN_TYPE IN ('G230_11','G230_20','G230_30') /*상품쿠폰,주문서쿠폰,배송비쿠폰*/
+		    AND    CP.DC_CD_GB = 'G233_00'                         -- 일반유형(할인쿠폰구분)
+		    AND    (SELECT COUNT(1)
+		            FROM   TB_COUPON_CUST_GBN
+		            WHERE  CPN_ID = CP.CPN_ID
+		            AND    USABLE_CUST_GB IN ('G100_10') /*사용가능고객구분:일반*/
+		           ) >= 1
+		    AND    CP.APPLY_SCOPE = 'A'   -- 전체
+		    AND    CP.DC_PVAL > 0
+		    AND    IF(CP.TOT_PUB_LIMIT_QTY = 0,9999999999,CP.TOT_PUB_LIMIT_QTY) > (SELECT COUNT(1)
+		                                                                           FROM   TB_CUST_COUPON
+		                                                                           WHERE  CPN_ID = CP.CPN_ID
+		                                                                          ) /*총발행제한수*/
+		      )
+		      , CTE_DETAIL AS (
+		                       SELECT CP.CPN_ID, G.GOODS_CD
+		                       FROM  CTE CP
+		                       INNER JOIN TB_GOODS G ON CP.BUY_LIMIT_AMT <![CDATA[<=]]> G.CURR_PRICE  /*최소주문금액*/
+		                      )  
+		SELECT G.GOODS_CD
+		    , '10'       AS BENEFIT_GB /*쿠폰할인*/
+		FROM (
+		    SELECT CP.CPN_ID 
+		          ,G.GOODS_CD  
+		    FROM   CTE_DETAIL CP 
+		    INNER JOIN TB_GOODS G ON CP.GOODS_CD = G.GOODS_CD
+		    WHERE NOT EXISTS (
+		                      SELECT 1
+		                      FROM   TB_COUPON_REFVAL SCPR
+		                      WHERE  SCPR.CPN_ID = CP.CPN_ID
+		                      AND    SCPR.REF_VAL = G.GOODS_CD
+		                      AND    SCPR.DEL_YN = 'N' /*삭제안된넘*/
+		                      AND    SCPR.CPN_TARGET = '40' /* 제외상품*/
+		                     )
+		    AND NOT EXISTS (
+		                    SELECT 1
+		                    FROM TB_COUPON_BAN_GOODS
+		                    WHERE GOODS_CD = G.GOODS_CD
+		                    AND DEL_YN = 'N'
+		                   )
+		
+		   ) G
+		GROUP  BY G.GOODS_CD
+		HAVING COUNT(*) > 0
+	</insert>
+	
 	<!-- 상품혜택임시-쿠폰할인 생성 -->
-	<insert id="createTemporaryGoodsBenefitCouponDiscount" timeout="600">
-		/* TsbGoods.createTemporaryGoodsBenefitCouponDiscount */
+	<insert id="createTemporaryGoodsBenefitCouponDiscount_org" timeout="600">
+		/* TsbGoods.createTemporaryGoodsBenefitCouponDiscount_org */
 		INSERT INTO TB_GOODS_BENEFIT_TMP (
 		       GOODS_CD
 		     , BENEFIT_GB
@@ -2633,6 +2835,7 @@
 		AND    NOW() <![CDATA[<=]]> IF(CP.PD_GB = 'D',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d %H:%i:%S'),CP.AVAIL_EDDT)
 		AND    NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
 		AND    CP.CPN_TYPE IN ('G230_11','G230_20','G230_30') /*상품쿠폰,주문서쿠폰,배송비쿠폰*/
+		AND    CP.DC_CD_GB = 'G233_00'                         -- 일반유형(할인쿠폰구분)
 		AND    (SELECT COUNT(1)
 		        FROM   TB_COUPON_CUST_GBN
 		        WHERE  CPN_ID = CP.CPN_ID

+ 46 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsbMonitoring.xml

@@ -2,10 +2,48 @@
 <!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.TsbMonitoringDao">
 	
+	<!-- 알람SMS 생성 -->
+	<insert id="createAlarmSmsDev" parameterType="Alarm">
+		/* TsbMonitoring.createAlarmSmsDev */
+		INSERT INTO SSG_SEND_TRAN_SMS (
+		       FSEQ
+		     , FUSERID
+		     , FSECTIONCODE
+		     , FCAMPCODE
+		     , FMSGTYPE
+		     , FMESSAGE
+		     , FSENDDATE
+		     , FDESTINE
+		     , FCALLBACK
+		)
+		SELECT NULL          AS FSEQ
+		     , #{fuserid}    AS FUSERID
+		     , ''            AS FSECTIONCODE
+		     , ''            AS FCAMPCODE
+		     , '0'           AS FMSGTYPE
+		     <choose>
+		         <when test="batchNm != null and batchNm != ''">
+		     , CONCAT(A.ALARM_MSG,'-',#{batchNm}) AS FMESSAGE
+		         </when>
+		         <otherwise>
+		     , A.ALARM_MSG   AS FMESSAGE
+		         </otherwise>
+		     </choose>
+		     , NOW()         AS FSENDDATE
+		     , AR.CELL_PHNNO AS FDESTINE
+		     , #{fcallback}  AS FCALLBACK
+		FROM   TB_ALARM A
+		     , TB_ALARM_RECEIVER AR
+		WHERE  A.ALARM_ID = AR.ALARM_ID
+		AND    A.ALARM_ID = #{alarmId}
+		AND    A.USE_YN = 'Y'
+		AND    AR.USE_YN = 'Y'
+	</insert>
+	
 	<!-- 알람SMS 생성 -->
 	<insert id="createAlarmSms" parameterType="Alarm">
 		/* TsbMonitoring.createAlarmSms */
-		INSERT INTO SSG_SEND_TRAN_SMS (
+		INSERT INTO style24_msg.SSG_SEND_TRAN_SMS (
 		       FSEQ
 		     , FUSERID
 		     , FSECTIONCODE
@@ -21,7 +59,14 @@
 		     , ''            AS FSECTIONCODE
 		     , ''            AS FCAMPCODE
 		     , '0'           AS FMSGTYPE
+		     <choose>
+		         <when test="batchNm != null and batchNm != ''">
+		     , CONCAT(A.ALARM_MSG,'-',#{batchNm}) AS FMESSAGE
+		         </when>
+		         <otherwise>
 		     , A.ALARM_MSG   AS FMESSAGE
+		         </otherwise>
+		     </choose>
 		     , NOW()         AS FSENDDATE
 		     , AR.CELL_PHNNO AS FDESTINE
 		     , #{fcallback}  AS FCALLBACK