상품평포인튼지급로직_분석및처리.sql 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. SELECT *
  2. FROM TB_COMMON_CODE
  3. WHERE CD_GB = 'G069'
  4. ;
  5. SELECT *
  6. FROM TB_REVIEW
  7. WHERE CUST_NO = 100011
  8. ;
  9. SELECT DATE_ADD(LAST_DAY(NOW()), INTERVAL -1 MONTH)
  10. , DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
  11. , STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d')
  12. FROM DUAL
  13. ;
  14. SELECT COUNT(*) AS CNT
  15. FROM TB_REVIEW RV
  16. WHERE RV.CUST_NO = 100011
  17. AND RV.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  18. AND RV.CONFIRM_DT >= STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d')
  19. AND RV.CONFIRM_DT < DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY)
  20. ;
  21. INSERT INTO TB_COMMON_CODE VALUES ('G043', 'G043_50', '당월지급횟수(10)초과', NULL, 'Y', 5, 1, NOW(), 1, NOW());
  22. INSERT INTO TB_COMMON_CODE VALUES ('G043', 'G043_60', '동일상품기지급', NULL, 'Y', 5, 1, NOW(), 1, NOW());
  23. COMMIT;
  24. SELECT CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'T'
  25. ELSE
  26. CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) > 0 THEN 'I'
  27. WHEN IFNULL(RA.VIDEO_CNT,0) > 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'V'
  28. ELSE 'IV'
  29. END
  30. END AS REVIEW_GB
  31. FROM TB_REVIEW R
  32. LEFT OUTER JOIN (
  33. SELECT REVIEW_SQ
  34. , SUM(CASE WHEN FILE_GB = 'M' AND KUF_KEY IS NOT NULL THEN 1 ELSE 0 END) AS VIDEO_CNT
  35. , SUM(CASE WHEN FILE_GB = 'I' AND ORG_FILE_NM IS NOT NULL THEN 1 ELSE 0 END) AS IMG_CNT
  36. FROM TB_REVIEW_ATTACH
  37. WHERE REVIEW_SQ = 47
  38. GROUP BY REVIEW_SQ
  39. ) RA ON R.REVIEW_SQ = RA.REVIEW_SQ
  40. WHERE R.REVIEW_SQ = 47
  41. ;
  42. SELECT GOODS_CD, COUNT(*) AS CNT
  43. FROM TB_REVIEW
  44. WHERE CUST_NO = 100030
  45. AND PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  46. AND CONFIRM_YN = 'Y' /*확인완료된 넘*/
  47. GROUP BY GOODS_CD
  48. HAVING COUNT(*) > 1
  49. ;
  50. -- 당월에 지급된 포인트 횟수
  51. SELECT *
  52. FROM TB_REVIEW R
  53. WHERE 1 = 1
  54. AND R.CUST_NO = 100047
  55. AND R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  56. AND R.REG_DT >= STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d') /*당월1일부터*/
  57. AND R.REG_DT < DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*당월말일까지*/
  58. ORDER BY REVIEW_SQ DESC
  59. ;
  60. SELECT *
  61. FROM TB_CUSTOMER
  62. WHERE CUST_NO = 100011
  63. ;
  64. SELECT *
  65. FROM TB_ORDER
  66. WHERE ORD_NO = 6217
  67. ;
  68. -- 테스트를 위한 비번 업데이트
  69. UPDATE TB_CUSTOMER SET PASSWD = 'aee70ae8fb1dc5d6e9b7aec45c5f4f23e597752ddc213321eebc41979b78ebc4' WHERE CUST_NO = 100011;
  70. COMMIT;
  71. -- 비번 원복
  72. UPDATE TB_CUSTOMER SET PASSWD = 'a0252f05fcea604efb19d3132877922f9f0a1ac56f7715368aadde4bd03538dc' WHERE CUST_NO = 100011;
  73. SELECT *
  74. FROM TB_REVIEW
  75. WHERE REVIEW_SQ = 242
  76. ;
  77. SELECT *
  78. FROM TB_REVIEW_ATTACH
  79. WHERE REVIEW_SQ = 242
  80. ;
  81. SELECT *
  82. FROM TB_CUST_POINT_HST
  83. WHERE REVIEW_SQ = 242
  84. ;
  85. DELETE
  86. FROM TB_REVIEW
  87. WHERE REVIEW_SQ = 242
  88. ;
  89. DELETE
  90. FROM TB_REVIEW_ATTACH
  91. WHERE 1 = 1
  92. AND REVIEW_SQ = 242
  93. ;
  94. DELETE
  95. FROM TB_CUST_POINT_HST
  96. WHERE REVIEW_SQ = 242
  97. ;
  98. -- 텍스트만 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급된다.
  99. -- => OK
  100. -- 텍스트+포토만 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급된다.
  101. -- => OK
  102. -- 텍스트+동영상만 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급 불가. BOS에서 동영상 노출 시 포인트 지급
  103. -- 텍스트+포토+동영상 모두 등록한 경우 포인트 즉시 지급되는가? => 즉시 지급되나 동영상은 프론트에 노출되지 않는다. BOS에서 동영상 노출 시 프론트에 노출된다.
  104. -- 포인트가 기 지급된 상품을 프론트에서 상품평을 등록한 경우 포인트가 지급되는가? => 포인트가 지급되지 않아야 한다.. 그리고 BOS에서 포인트지급상태가 "동일상품기지급"로 표기되어야 한다.
  105. -- 등록 예시) 해당 상품은 이미 등록된 상품평입니다. 상품평은 등록되어도 포인트는 지급이 안 되어야 합니다.
  106. -- => OK
  107. -- 당월에 지급 가능한 총횟수(10회)가 넘는 상품평을 등록한 경우 포인트가 지급되는가? => 포인트가 지급되지 않아야 한다. 그리고 BOS에서 포인트지급상태가 "당월지급횟수(10)초과"로 표기되어야 한다.
  108. -- => OK
  109. SELECT *
  110. FROM TB_REVIEW
  111. WHERE CUST_NO = 100030
  112. AND GOODS_CD = 'ANW11APT65'
  113. AND PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  114. AND CONFIRM_YN = 'Y' /*확인완료된 넘*/
  115. ;
  116. SELECT COUNT(*) AS CNT
  117. FROM TB_REVIEW R
  118. WHERE 1 = 1
  119. AND R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  120. AND R.CONFIRM_YN = 'Y' /*확인완료된 넘*/
  121. AND R.CUST_NO = #{custNo}
  122. AND R.GOODS_CD = #{goodsCd}
  123. ;
  124. SELECT COUNT(*) AS CNT
  125. FROM TB_REVIEW R
  126. WHERE (R.CUST_NO,R.GOODS_CD) = (SELECT CUST_NO, GOODS_CD
  127. FROM TB_REVIEW
  128. WHERE REVIEW_SQ = 152) /*해당 상품평을 등록한 고객과 상품코드*/
  129. AND R.REVIEW_SQ != 152 /*해당 상품평 외*/
  130. AND R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  131. AND R.CONFIRM_YN = 'Y' /*확인완료된 넘*/
  132. ;
  133. SELECT *
  134. FROM TB_REVIEW_ATTACH
  135. ;
  136. SELECT *
  137. FROM TB_CUST_POINT_HST
  138. WHERE 1 = 1
  139. AND OCCUR_GB = 'G069_20' /*상품평포인트지급*/
  140. AND PNT_UPLOAD_STAT = 'G070_30' /*반영완료*/
  141. AND CUST_NO
  142. AND ORD_NO
  143. AND ORD_DTL_NO
  144. ;
  145. /* TsaReview.getReviewAttachList */
  146. SELECT RV_ATC_SQ /*상품평첨부파일일련번호*/
  147. , REVIEW_SQ /*상품평일련번호*/
  148. , FILE_GB /*파일구분(M:동영상, I:이미지)*/
  149. , ORG_FILE_NM /*원본파일명*/
  150. , SYS_FILE_NM /*시스템파일명*/
  151. , KUF_KEY /*KOLLUS업로드파일키*/
  152. , KMC_KEY /*KOLLUS미디어컨텐츠키*/
  153. FROM TB_REVIEW_ATTACH
  154. WHERE REVIEW_SQ = 210 /**P*/
  155. AND DEL_YN = 'N' /*삭제안된넘*/
  156. ORDER BY FILE_GB DESC, RV_ATC_SQ
  157. ;
  158. /* TsfReivew.getReviewPointGiveMonthCount */
  159. SELECT COUNT(*) AS CNT
  160. FROM TB_REVIEW R
  161. WHERE R.CUST_NO = (SELECT CUST_NO
  162. FROM TB_REVIEW
  163. WHERE REVIEW_SQ = 210 /**P*/) /*해당 상품평을 등록한 고객*/
  164. AND R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  165. AND R.REG_DT >= STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(),'%Y-%m'),'-01'),'%Y-%m-%d') /*당월1일부터*/
  166. AND R.REG_DT < DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY) /*당월말일까지*/
  167. ;
  168. /* TsfReivew.getReviewPointGiveCount */
  169. SELECT COUNT(*) AS CNT
  170. FROM TB_REVIEW R
  171. WHERE (R.CUST_NO,R.GOODS_CD) = (SELECT CUST_NO, GOODS_CD
  172. FROM TB_REVIEW
  173. WHERE REVIEW_SQ = 210 /**P*/) /*해당 상품평을 등록한 고객과 상품코드*/
  174. AND R.REVIEW_SQ != 210 /**P*/ /*해당 상품평 외*/
  175. AND R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  176. ;
  177. /* TsaReview.getReviewAttachList */
  178. SELECT CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'T' /*텍스트상품평*/
  179. ELSE
  180. CASE WHEN IFNULL(RA.VIDEO_CNT,0) = 0 AND IFNULL(RA.IMG_CNT,0) > 0 THEN 'I' /*포토상품평*/
  181. WHEN IFNULL(RA.VIDEO_CNT,0) > 0 AND IFNULL(RA.IMG_CNT,0) = 0 THEN 'V' /*동영상상품평*/
  182. ELSE 'IV' /*포토+동영상상품평*/
  183. END
  184. END AS REVIEW_GB
  185. FROM TB_REVIEW R
  186. LEFT OUTER JOIN (
  187. SELECT REVIEW_SQ
  188. , SUM(CASE WHEN FILE_GB = 'M' AND KUF_KEY IS NOT NULL THEN 1 ELSE 0 END) AS VIDEO_CNT
  189. , SUM(CASE WHEN FILE_GB = 'I' AND ORG_FILE_NM IS NOT NULL THEN 1 ELSE 0 END) AS IMG_CNT
  190. FROM TB_REVIEW_ATTACH
  191. WHERE REVIEW_SQ = 210 /**P*/
  192. GROUP BY REVIEW_SQ
  193. ) RA ON R.REVIEW_SQ = RA.REVIEW_SQ
  194. WHERE R.REVIEW_SQ = 210 /**P*/
  195. ;
  196. -- 상품평포인트 월지급횟수(10회) 초과한 포인트금액 조회
  197. with BASE_REVIEW as (
  198. SELECT DATE_FORMAT(R.REG_DT,'%Y-%m') as REG_YM
  199. , R.CUST_NO
  200. , RANK() OVER(partition by DATE_FORMAT(R.REG_DT,'%Y-%m'), R.CUST_NO order by R.REVIEW_SQ) as RNUM
  201. , R.REVIEW_SQ
  202. , CPH.PNT_AMT
  203. FROM TB_REVIEW R
  204. inner join TB_CUST_POINT_HST CPH on R.CUST_NO = CPH.CUST_NO and R.REVIEW_SQ = CPH.REVIEW_SQ
  205. WHERE 1 = 1
  206. -- and R.CUST_NO = 106600
  207. AND R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  208. AND R.REG_DT >= STR_TO_DATE('2021-09-01','%Y-%m-%d') /*9월1일부터*/
  209. )
  210. select R.REG_YM /*연월*/
  211. , R.CUST_NO /*고객번호*/
  212. , R.TOT_PNT_AMT /*지급된총포인트*/
  213. , R.OVER_PNT_AMT /*초과지급된포인트*/
  214. , R.TOT_PNT_AMT - R.OVER_PNT_AMT as REAL_PNT_AMT /*실제지급되어야할포인트*/
  215. from (
  216. select R.REG_YM
  217. , R.CUST_NO
  218. , SUM(R.PNT_AMT) as TOT_PNT_AMT
  219. , IFNULL((select SUM(PNT_AMT)
  220. from BASE_REVIEW
  221. where REG_YM = R.REG_YM
  222. and CUST_NO = R.CUST_NO
  223. and RNUM > 10
  224. ),0) as OVER_PNT_AMT /*포인트초과분*/
  225. from BASE_REVIEW R
  226. group by R.REG_YM, R.CUST_NO
  227. ) R
  228. where R.OVER_PNT_AMT > 0
  229. order by R.REG_YM, R.CUST_NO
  230. ;
  231. -- 상품평포인트 동일상품지급횟수 조회 (3건)
  232. SELECT R.CUST_NO
  233. , R.GOODS_CD
  234. , COUNT(*) AS CNT
  235. , SUM(CPH.PNT_AMT) as PNT_AMT
  236. FROM TB_REVIEW R
  237. inner join TB_CUST_POINT_HST CPH on R.REVIEW_SQ = CPH.REVIEW_SQ and R.CUST_NO = CPH.CUST_NO
  238. WHERE R.PNT_GIVE_STAT = 'G043_30' /*포인트반영완료된 넘*/
  239. AND R.REG_DT >= STR_TO_DATE('2021-09-01','%Y-%m-%d') /*9월1일부터*/
  240. group by R.CUST_NO, R.GOODS_CD
  241. having COUNT(*) > 1
  242. ;