Переглянути джерело

상품별 다운로드 쿠폰 존재여부 함수 생성

eskim 5 роки тому
батько
коміт
d7f87a44b4

+ 161 - 0
산출물/3.설계/05.DB-Object/03.db_function/FN_IS_GOODS_COUPON.sql

@@ -0,0 +1,161 @@
+DROP FUNCTION IF EXISTS FN_IS_GOODS_COUPON;
+DELIMITER $$
+create FUNCTION FN_IS_GOODS_COUPON
+	(I_FRONT_GB       VARCHAR(20)
+	,I_GOODS_CD       VARCHAR(20)
+	,I_CURR_PRICE     int
+	) RETURNS CHAR(1)
+/******************************************************************************
+/*
+/* Module       : 상품쿠폰 존재여부
+/* Program Name : FN_IS_GOODS_COUPON
+/* Description  : 상품의 최대로 할인 받는 쿠폰정보 조회한다.
+/*
+/*                Input  : i_front_gb => 프론트구분(P:PC, M:모바일)
+/*                         i_goods_cd => 상품코드
+/*                         i_curr_price => 현재판매가
+/*                OutPut : 쿠폰정보
+/*
+/* Program History
+/*
+/*----------------------------------------------------------------------------
+/*   Date        CSR NO.             Name      Description
+/*----------------------------------------------------------------------------
+/* 2021-02-24                        eskim    Initial Release
+/******************************************************************************/
+BEGIN
+    DECLARE O_RET_VALUE VARCHAR(1);
+
+    SELECT CASE WHEN (
+                      SELECT COUNT(*)
+                      FROM   TB_GOODS G
+                           , TB_COUPON CP
+                      WHERE  CP.SITE_CD = 'G000_10'   -- 전시사이트
+                      AND    G.GOODS_CD  = I_GOODS_CD
+                      AND    CP.CPN_STAT = 'G232_11'   -- 쿠폰인 진행중인 쿠폰만
+                      AND    CP.DOWN_ABL_YN = 'Y'    -- 상품상세 다운로드 가능여부 
+                      AND    NOW() <= 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_30') /*  상품쿠폰,배송비 쿠폰*/
+                      AND    (SELECT COUNT(1)
+                              FROM TB_COUPON_CUST_GBN
+                              WHERE CPN_ID = CP.CPN_ID
+                              AND USABLE_CUST_GB IN ('G100_10') /*사용가능고객구분 일반회원*/
+                             ) >= 1
+                      AND    (SELECT COUNT(1) 
+                              FROM TB_COUPON_CUST_GRADE
+                              WHERE CPN_ID = CP.CPN_ID
+                              AND USABLE_CUST_GRADE IN ('G110_10', 'G110_20', 'G110_30', 'G110_40', 'G110_50' ) /*전체고객*/
+                              ) = 5
+                      AND    CP.BUY_LIMIT_AMT <= I_CURR_PRICE  /*최소주문금액*/
+                      AND    (CASE WHEN I_FRONT_GB = 'P' THEN DC_PVAL
+                                   WHEN I_FRONT_GB = 'M' THEN DC_MVAL
+                                   ELSE DC_AVAL END) > 0       /*  APP은 추후 사용여부 확인해야함 */
+                      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) /*총발행제한수*/
+                      AND   (
+                              (CP.APPLY_SCOPE = 'A' ) 
+                              OR  /* 적용대상:상품*/
+                              (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+                                                         WHERE CPN_ID = CP.CPN_ID
+                                                         AND CPN_TARGET = 'G260_10'
+                                                         AND DEL_YN = 'N'
+                                                         AND REF_VAL = G.GOODS_CD
+                                                         ) > 0
+                              ) 
+                              OR /* 적용대상:카테고리*/
+                              (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+                                                         WHERE CPN_ID = CP.CPN_ID
+                                                         AND CPN_TARGET = 'G260_11' 
+                                                         AND DEL_YN = 'N'
+                                                         AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+                                                         AND IFNULL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
+                                                         AND REF_VAL IN (SELECT DISTINCT X.CATE_NO 
+                                                                         FROM 
+                                                                              (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, 
+                                                                              (
+                                                                               SELECT A.CATE_NO, A.GOODS_CD
+                                                                               FROM TB_CATE_GOODS A
+                                                                               WHERE GOODS_CD = G.GOODS_CD
+                                                                              ) Y 
+                                                                              WHERE X.LEAF_CATE_NO = Y.CATE_NO
+                                                                        )
+                                                        ) >0
+                              ) 
+                              OR /* 적용대상:브랜드*/
+                              (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+                                                         WHERE CPN_ID = CP.CPN_ID
+                                                         AND CPN_TARGET = 'G260_12' 
+                                                         AND DEL_YN = 'N'
+                                                         AND REF_VAL = G.BRAND_CD
+                                                         AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
+                                                        ) >0
+                              ) 
+                              OR /* 적용대상:공급업체*/
+                              (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
+                                                         WHERE CPN_ID = CP.CPN_ID
+                                                         AND CPN_TARGET = 'G260_13' 
+                                                         AND DEL_YN = 'N'
+                                                         AND REF_VAL = G.SUPPLY_COMP_CD
+                                                         /*AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB*/
+                                                        ) >0
+                              )
+                            )
+                      AND 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'
+                                     )
+                      ) > 0
+                      THEN 'Y' ELSE 'N' END AS COUPON_YN
+      INTO   O_RET_VALUE
+      ;
+
+	RETURN O_RET_VALUE;
+END	$$
+DELIMITER ;