| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- CREATE DEFINER=`style`@`%` FUNCTION `style`.`FN_GET_APPLY_CPN1_ID`(I_GOODS_CD varchar(50), I_FRONT_GB char) RETURNS int
- BEGIN
- DECLARE O_RET_VALUE INT;
- DECLARE O_CURR_PRICE INT;
- DECLARE O_DC_VAL INT;
- SET O_RET_VALUE = 0;
- SET O_DC_VAL = 0;
- SELECT CURR_PRICE
- INTO O_CURR_PRICE -- 상품금액
- FROM TB_GOODS
- WHERE GOODS_CD = I_GOODS_CD
- ;
- WITH GOODS_DATA AS (
- SELECT G.GOODS_CD
- , G.CURR_PRICE
- , G.BRAND_CD
- , G.SUPPLY_COMP_CD
- FROM TB_GOODS G
- WHERE 1=1
- AND G.GOODS_CD = I_GOODS_CD
- )
- SELECT Y.CPN_ID
- INTO O_RET_VALUE
- FROM (
- SELECT CP.CPN_ID
- , I_FRONT_GB AS FRONT_GB
- , CASE WHEN CP.DC_WAY IN ('G240_11')
- THEN CASE WHEN CP.MAX_DC_AMT > (Z.CURR_PRICE * CP.DC_PVAL) / 100
- THEN (Z.CURR_PRICE * CP.DC_PVAL) / 100
- ELSE CP.MAX_DC_AMT
- END
- ELSE CP.DC_PVAL
- END DC_PVAL
- , CASE WHEN CP.DC_WAY IN ('G240_11')
- THEN CASE WHEN CP.MAX_DC_AMT > (Z.CURR_PRICE * CP.DC_MVAL) / 100
- THEN (Z.CURR_PRICE * CP.DC_MVAL) / 100
- ELSE CP.MAX_DC_AMT
- END
- ELSE CP.DC_MVAL
- END DC_MVAL
- , CASE WHEN CP.DC_WAY IN ('G240_11')
- THEN CASE WHEN CP.MAX_DC_AMT > (Z.CURR_PRICE * CP.DC_AVAL) / 100
- THEN (Z.CURR_PRICE * CP.DC_AVAL) / 100
- ELSE CP.MAX_DC_AMT
- END
- ELSE CP.DC_AVAL
- END DC_AVAL
- FROM TB_COUPON CP
- INNER JOIN TB_COUPON_CUST_GBN CGB
- ON CP.CPN_ID = CGB.CPN_ID
- AND CGB.USABLE_CUST_GB IN ('G100_10') -- 일반회원
- INNER JOIN (
- SELECT X.*
- FROM (
- SELECT CR.CPN_ID
- , GD.GOODS_CD
- , GD.CURR_PRICE
- FROM TB_COUPON_REFVAL CR
- INNER JOIN GOODS_DATA GD
- ON GD.GOODS_CD = CR.REF_VAL
- WHERE 1=1
- AND CR.CPN_TARGET = 'G260_10' -- 상품
- AND CR.DEL_YN = 'N'
- UNION
- SELECT CR.CPN_ID
- , GD.GOODS_CD
- , GD.CURR_PRICE
- FROM (
- SELECT C4.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 TB_CATE_4SRCH C4
- LEFT OUTER JOIN (
- SELECT 1 AS X
- 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
- ON 1=1
- WHERE 1=1
- AND C4.SITE_CD = 'G000_10'
- AND C4.CATE_TYPE = 'G031_10'
- ORDER BY LEAF_CATE_NO
- , CATE_LVL
- ) C4SRCH
- INNER JOIN TB_COUPON_REFVAL CR
- ON C4SRCH.CATE_NO = CR.REF_VAL
- INNER JOIN TB_CATE_GOODS CG
- ON C4SRCH.LEAF_CATE_NO = CG.CATE_NO
- INNER JOIN GOODS_DATA GD
- ON CG.GOODS_CD = GD.GOODS_CD
- WHERE 1=1
- AND C4SRCH.CATE_NO IS NOT NULL
- AND CR.CPN_TARGET = 'G260_11' -- 카테고리
- AND CR.DEL_YN = 'N'
- UNION
- SELECT CR1.CPN_ID
- , GD.GOODS_CD
- , GD.CURR_PRICE
- FROM GOODS_DATA GD
- INNER JOIN TB_COUPON_REFVAL CR1
- ON GD.BRAND_CD = CR1.REF_VAL
- AND CR1.CPN_TARGET = 'G260_12' -- 브랜드
- AND CR1.DEL_YN = 'N'
- UNION
- SELECT CR2.CPN_ID
- , GD.GOODS_CD
- , GD.CURR_PRICE
- FROM GOODS_DATA GD
- INNER JOIN TB_COUPON_REFVAL CR2
- ON GD.SUPPLY_COMP_CD = CR2.REF_VAL
- AND CR2.CPN_TARGET = 'G260_13' -- 공급업체
- AND CR2.DEL_YN = 'N'
- ) X
- LEFT OUTER JOIN TB_COUPON_REFVAL CR
- ON X.CPN_ID = CR.CPN_ID
- AND X.GOODS_CD = CR.REF_VAL
- AND CR.CPN_TARGET = 'G260_14' -- 쿠폰제외상품
- AND CR.DEL_YN = 'N'
- LEFT OUTER JOIN TB_COUPON_BAN_GOODS CBG -- 전체제외상품
- ON X.GOODS_CD = CBG.GOODS_CD
- AND CBG.DEL_YN = 'N'
- WHERE 1=1
- AND CR.CPN_ID IS NULL
- AND CBG.CPN_BAN_GOODS_SQ IS NULL
- ) Z
- ON Z.CPN_ID = CP.CPN_ID
- WHERE 1=1
- AND CP.SITE_CD = 'G000_10' -- 자사몰
- AND CP.CPN_TYPE = 'G230_10' -- 즉시할인
- AND CP.CPN_STAT = 'G232_11' -- 진행중
- AND CP.AVAIL_STDT < CURRENT_TIMESTAMP
- AND CP.AVAIL_EDDT > CURRENT_TIMESTAMP
- ORDER BY (CASE WHEN I_FRONT_GB IN ('P') THEN CP.DC_PVAL
- WHEN I_FRONT_GB IN ('M') THEN CP.DC_MVAL
- WHEN I_FRONT_GB IN ('A') THEN CP.DC_AVAL
- END) DESC
- ) Y
- LIMIT 1
- ;
- RETURN O_RET_VALUE;
- END
|