FN_GET_APPLY_CPN1_ID.sql 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. CREATE DEFINER=`style`@`%` FUNCTION `style`.`FN_GET_APPLY_CPN1_ID`(I_GOODS_CD varchar(50), I_FRONT_GB char) RETURNS int
  2. BEGIN
  3. DECLARE O_RET_VALUE INT;
  4. DECLARE O_CURR_PRICE INT;
  5. DECLARE O_DC_VAL INT;
  6. SET O_RET_VALUE = 0;
  7. SET O_DC_VAL = 0;
  8. SELECT CURR_PRICE
  9. INTO O_CURR_PRICE -- 상품금액
  10. FROM TB_GOODS
  11. WHERE GOODS_CD = I_GOODS_CD
  12. ;
  13. WITH GOODS_DATA AS (
  14. SELECT G.GOODS_CD
  15. , G.CURR_PRICE
  16. , G.BRAND_CD
  17. , G.SUPPLY_COMP_CD
  18. FROM TB_GOODS G
  19. WHERE 1=1
  20. AND G.GOODS_CD = I_GOODS_CD
  21. )
  22. SELECT Y.CPN_ID
  23. INTO O_RET_VALUE
  24. FROM (
  25. SELECT CP.CPN_ID
  26. , I_FRONT_GB AS FRONT_GB
  27. , CASE WHEN CP.DC_WAY IN ('G240_11')
  28. THEN CASE WHEN CP.MAX_DC_AMT > (Z.CURR_PRICE * CP.DC_PVAL) / 100
  29. THEN (Z.CURR_PRICE * CP.DC_PVAL) / 100
  30. ELSE CP.MAX_DC_AMT
  31. END
  32. ELSE CP.DC_PVAL
  33. END DC_PVAL
  34. , CASE WHEN CP.DC_WAY IN ('G240_11')
  35. THEN CASE WHEN CP.MAX_DC_AMT > (Z.CURR_PRICE * CP.DC_MVAL) / 100
  36. THEN (Z.CURR_PRICE * CP.DC_MVAL) / 100
  37. ELSE CP.MAX_DC_AMT
  38. END
  39. ELSE CP.DC_MVAL
  40. END DC_MVAL
  41. , CASE WHEN CP.DC_WAY IN ('G240_11')
  42. THEN CASE WHEN CP.MAX_DC_AMT > (Z.CURR_PRICE * CP.DC_AVAL) / 100
  43. THEN (Z.CURR_PRICE * CP.DC_AVAL) / 100
  44. ELSE CP.MAX_DC_AMT
  45. END
  46. ELSE CP.DC_AVAL
  47. END DC_AVAL
  48. FROM TB_COUPON CP
  49. INNER JOIN TB_COUPON_CUST_GBN CGB
  50. ON CP.CPN_ID = CGB.CPN_ID
  51. AND CGB.USABLE_CUST_GB IN ('G100_10') -- 일반회원
  52. INNER JOIN (
  53. SELECT X.*
  54. FROM (
  55. SELECT CR.CPN_ID
  56. , GD.GOODS_CD
  57. , GD.CURR_PRICE
  58. FROM TB_COUPON_REFVAL CR
  59. INNER JOIN GOODS_DATA GD
  60. ON GD.GOODS_CD = CR.REF_VAL
  61. WHERE 1=1
  62. AND CR.CPN_TARGET = 'G260_10' -- 상품
  63. AND CR.DEL_YN = 'N'
  64. UNION
  65. SELECT CR.CPN_ID
  66. , GD.GOODS_CD
  67. , GD.CURR_PRICE
  68. FROM (
  69. SELECT C4.LEAF_CATE_NO
  70. , CASE WHEN X = 1 THEN 'CATE1_NO'
  71. WHEN X = 2 THEN 'CATE2_NO'
  72. WHEN X = 3 THEN 'CATE3_NO'
  73. WHEN X = 4 THEN 'CATE4_NO'
  74. ELSE 'CATE5_NO'
  75. END CATE_LVL
  76. , CASE WHEN X = 1 THEN CATE1_NO
  77. WHEN X = 2 THEN CATE2_NO
  78. WHEN X = 3 THEN CATE3_NO
  79. WHEN X = 4 THEN CATE4_NO
  80. ELSE CATE5_NO
  81. END CATE_NO
  82. FROM TB_CATE_4SRCH C4
  83. LEFT OUTER JOIN (
  84. SELECT 1 AS X
  85. UNION ALL
  86. SELECT 2 AS X
  87. UNION ALL
  88. SELECT 3 AS X
  89. UNION ALL
  90. SELECT 4 AS X
  91. UNION ALL
  92. SELECT 5 AS X
  93. ) B
  94. ON 1=1
  95. WHERE 1=1
  96. AND C4.SITE_CD = 'G000_10'
  97. AND C4.CATE_TYPE = 'G031_10'
  98. ORDER BY LEAF_CATE_NO
  99. , CATE_LVL
  100. ) C4SRCH
  101. INNER JOIN TB_COUPON_REFVAL CR
  102. ON C4SRCH.CATE_NO = CR.REF_VAL
  103. INNER JOIN TB_CATE_GOODS CG
  104. ON C4SRCH.LEAF_CATE_NO = CG.CATE_NO
  105. INNER JOIN GOODS_DATA GD
  106. ON CG.GOODS_CD = GD.GOODS_CD
  107. WHERE 1=1
  108. AND C4SRCH.CATE_NO IS NOT NULL
  109. AND CR.CPN_TARGET = 'G260_11' -- 카테고리
  110. AND CR.DEL_YN = 'N'
  111. UNION
  112. SELECT CR1.CPN_ID
  113. , GD.GOODS_CD
  114. , GD.CURR_PRICE
  115. FROM GOODS_DATA GD
  116. INNER JOIN TB_COUPON_REFVAL CR1
  117. ON GD.BRAND_CD = CR1.REF_VAL
  118. AND CR1.CPN_TARGET = 'G260_12' -- 브랜드
  119. AND CR1.DEL_YN = 'N'
  120. UNION
  121. SELECT CR2.CPN_ID
  122. , GD.GOODS_CD
  123. , GD.CURR_PRICE
  124. FROM GOODS_DATA GD
  125. INNER JOIN TB_COUPON_REFVAL CR2
  126. ON GD.SUPPLY_COMP_CD = CR2.REF_VAL
  127. AND CR2.CPN_TARGET = 'G260_13' -- 공급업체
  128. AND CR2.DEL_YN = 'N'
  129. ) X
  130. LEFT OUTER JOIN TB_COUPON_REFVAL CR
  131. ON X.CPN_ID = CR.CPN_ID
  132. AND X.GOODS_CD = CR.REF_VAL
  133. AND CR.CPN_TARGET = 'G260_14' -- 쿠폰제외상품
  134. AND CR.DEL_YN = 'N'
  135. LEFT OUTER JOIN TB_COUPON_BAN_GOODS CBG -- 전체제외상품
  136. ON X.GOODS_CD = CBG.GOODS_CD
  137. AND CBG.DEL_YN = 'N'
  138. WHERE 1=1
  139. AND CR.CPN_ID IS NULL
  140. AND CBG.CPN_BAN_GOODS_SQ IS NULL
  141. ) Z
  142. ON Z.CPN_ID = CP.CPN_ID
  143. WHERE 1=1
  144. AND CP.SITE_CD = 'G000_10' -- 자사몰
  145. AND CP.CPN_TYPE = 'G230_10' -- 즉시할인
  146. AND CP.CPN_STAT = 'G232_11' -- 진행중
  147. AND CP.AVAIL_STDT < CURRENT_TIMESTAMP
  148. AND CP.AVAIL_EDDT > CURRENT_TIMESTAMP
  149. ORDER BY (CASE WHEN I_FRONT_GB IN ('P') THEN CP.DC_PVAL
  150. WHEN I_FRONT_GB IN ('M') THEN CP.DC_MVAL
  151. WHEN I_FRONT_GB IN ('A') THEN CP.DC_AVAL
  152. END) DESC
  153. ) Y
  154. LIMIT 1
  155. ;
  156. RETURN O_RET_VALUE;
  157. END