FN_GET_APPLY_CPN1_PRICE.sql 6.4 KB

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