FN_IS_GOODS_COUPON.sql 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. DROP FUNCTION IF EXISTS FN_IS_GOODS_COUPON;
  2. DELIMITER $$
  3. create FUNCTION FN_IS_GOODS_COUPON
  4. (I_FRONT_GB VARCHAR(20)
  5. ,I_GOODS_CD VARCHAR(20)
  6. ,I_CURR_PRICE int
  7. ,I_USABLE_CUST_GB VARCHAR(20)
  8. ) RETURNS CHAR(1)
  9. /******************************************************************************
  10. /*
  11. /* Module : 상품쿠폰 존재여부
  12. /* Program Name : FN_IS_GOODS_COUPON
  13. /* Description : 상품상세에서 다운받을수 있는 쿠폰이 존재하는지 확인한다.
  14. /*
  15. /* Input : i_front_gb => 프론트구분(P:PC, M:모바일,A:APP )
  16. /* i_goods_cd => 상품코드
  17. /* i_curr_price => 현재판매가
  18. /* i_usable_cust_gb => 고객구분
  19. /* OutPut : 쿠폰정보
  20. /*
  21. /* Program History
  22. /*
  23. /*----------------------------------------------------------------------------
  24. /* Date CSR NO. Name Description
  25. /*----------------------------------------------------------------------------
  26. /* 2021-02-24 eskim Initial Release
  27. /******************************************************************************/
  28. BEGIN
  29. DECLARE O_RET_VALUE VARCHAR(1);
  30. SELECT CASE WHEN (
  31. SELECT COUNT(*)
  32. FROM TB_GOODS G
  33. , TB_COUPON CP
  34. WHERE CP.SITE_CD = 'G000_10' -- 전시사이트
  35. AND G.GOODS_CD = I_GOODS_CD
  36. AND CP.CPN_STAT = 'G232_11' -- 쿠폰인 진행중인 쿠폰만
  37. AND CP.DOWN_ABL_YN = 'Y' -- 상품상세 다운로드 가능여부
  38. AND NOW() <= IF (CP.PD_GB = 'D', DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S'), CP.AVAIL_EDDT)
  39. AND NOW() BETWEEN CP.DOWN_STDT AND CP.DOWN_EDDT
  40. AND CP.CPN_TYPE IN ('G230_11', 'G230_20', 'G230_30') /* 상품쿠폰, 주문서 쿠폰, 배송비 쿠폰*/
  41. AND (SELECT COUNT(1)
  42. FROM TB_COUPON_CUST_GBN
  43. WHERE CPN_ID = CP.CPN_ID
  44. AND USABLE_CUST_GB IN (i_usable_cust_gb) /*사용가능고객구분 일반 : G100_10, 임직원 : G100_20*/
  45. ) >= 1
  46. /* AND (SELECT COUNT(1)
  47. FROM TB_COUPON_CUST_GRADE
  48. WHERE CPN_ID = CP.CPN_ID
  49. AND USABLE_CUST_GRADE IN ('G110_10', 'G110_20', 'G110_30', 'G110_40', 'G110_50' )
  50. ) = 5 */
  51. AND CP.BUY_LIMIT_AMT <= I_CURR_PRICE /*최소주문금액*/
  52. AND (CASE WHEN I_FRONT_GB = 'P' THEN DC_PVAL
  53. WHEN I_FRONT_GB = 'M' THEN DC_MVAL
  54. ELSE DC_AVAL END) > 0
  55. 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) /*총발행제한수*/
  56. AND (
  57. (CP.APPLY_SCOPE = 'A' )
  58. OR /* 적용대상:상품*/
  59. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
  60. WHERE CPN_ID = CP.CPN_ID
  61. AND CPN_TARGET = 'G260_10'
  62. AND DEL_YN = 'N'
  63. AND REF_VAL = G.GOODS_CD
  64. ) > 0
  65. )
  66. OR /* 적용대상:카테고리*/
  67. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
  68. WHERE CPN_ID = CP.CPN_ID
  69. AND CPN_TARGET = 'G260_11'
  70. AND DEL_YN = 'N'
  71. AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
  72. AND IFNULL(REF_BRAND_CD,G.BRAND_CD) = G.BRAND_CD
  73. AND REF_VAL IN (SELECT DISTINCT X.CATE_NO
  74. FROM
  75. (SELECT LEAF_CATE_NO
  76. , CATE_LVL
  77. , CATE_NO
  78. FROM (
  79. SELECT LEAF_CATE_NO ,
  80. CASE WHEN X = 1 THEN 'CATE1_NO' -- 컬럼과 매핑(컬럼명)
  81. WHEN X = 2 THEN 'CATE2_NO'
  82. WHEN X = 3 THEN 'CATE3_NO'
  83. WHEN X = 4 THEN 'CATE4_NO'
  84. ELSE 'CATE5_NO'
  85. END CATE_LVL,
  86. CASE WHEN X = 1 THEN CATE1_NO -- 컬럼과 매핑(컬럼 데이터)
  87. WHEN X = 2 THEN CATE2_NO
  88. WHEN X = 3 THEN CATE3_NO
  89. WHEN X = 4 THEN CATE4_NO
  90. ELSE CATE5_NO
  91. END CATE_NO
  92. FROM (
  93. ( SELECT LEAF_CATE_NO
  94. , CATE1_NO
  95. , CATE2_NO
  96. , CATE3_NO
  97. , CATE4_NO
  98. , CATE5_NO
  99. FROM TB_CATE_4SRCH
  100. WHERE SITE_CD = 'G000_10'
  101. AND CATE_TYPE = 'G031_10') A, -- 상품타입
  102. (SELECT 1 AS X -- UNPIVOT 컬럼 수 만큼 선언
  103. UNION ALL SELECT 2 AS X
  104. UNION ALL SELECT 3 AS X
  105. UNION ALL SELECT 4 AS X
  106. UNION ALL SELECT 5 AS X
  107. ) B
  108. )
  109. ORDER BY LEAF_CATE_NO, CATE_LVL
  110. ) K
  111. WHERE CATE_NO IS NOT NULL
  112. ) X,
  113. (
  114. SELECT A.CATE_NO, A.GOODS_CD
  115. FROM TB_CATE_GOODS A
  116. WHERE GOODS_CD = G.GOODS_CD
  117. ) Y
  118. WHERE X.LEAF_CATE_NO = Y.CATE_NO
  119. )
  120. ) >0
  121. )
  122. OR /* 적용대상:브랜드*/
  123. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
  124. WHERE CPN_ID = CP.CPN_ID
  125. AND CPN_TARGET = 'G260_12'
  126. AND DEL_YN = 'N'
  127. AND REF_VAL = G.BRAND_CD
  128. AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB
  129. ) >0
  130. )
  131. OR /* 적용대상:공급업체*/
  132. (CP.APPLY_SCOPE = 'I' AND (SELECT COUNT(1) FROM TB_COUPON_REFVAL
  133. WHERE CPN_ID = CP.CPN_ID
  134. AND CPN_TARGET = 'G260_13'
  135. AND DEL_YN = 'N'
  136. AND REF_VAL = G.SUPPLY_COMP_CD
  137. /*AND IFNULL(REF_FORMAL_GB,G.FORMAL_GB) = G.FORMAL_GB*/
  138. ) >0
  139. )
  140. )
  141. AND NOT EXISTS (
  142. SELECT 1
  143. FROM TB_COUPON_REFVAL SCPR
  144. WHERE SCPR.CPN_ID = CP.CPN_ID
  145. AND SCPR.REF_VAL = G.GOODS_CD
  146. AND SCPR.DEL_YN = 'N' /*삭제안된넘*/
  147. AND SCPR.CPN_TARGET = '40' /* 제외상품*/
  148. )
  149. AND NOT EXISTS (
  150. SELECT 1
  151. FROM TB_COUPON_BAN_GOODS
  152. WHERE GOODS_CD = G.GOODS_CD
  153. AND DEL_YN = 'N'
  154. )
  155. ) > 0
  156. THEN 'Y' ELSE 'N' END AS COUPON_YN
  157. INTO O_RET_VALUE
  158. ;
  159. RETURN O_RET_VALUE;
  160. END $$
  161. DELIMITER ;