FN_GET_APPLY_CPN1_PRICE.sql 6.1 KB

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