qtr.sql 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `QTRCALC`(IN `PCPID` INT)
  2. LABEL: BEGIN
  3. -- DECLARE QTRSTARTPID, QTRSTARTMONTH, THISYEAR, THISMONTH, MISMONTH INT;
  4. DECLARE TBONUS,BONUSPERU DECIMAL; -- 奖金总额,每份奖金
  5. DECLARE QTRSTARTMONTH, THISYEAR, THISMONTH, MISMONTH INT; -- 这个月
  6. DECLARE OCROWN1NUM,OCROWN2NUM,OCROWN3NUM,OCROWN4NUM,OCROWN5NUM,OCROWN6NUM,OCROWN7NUM INT; -- 各星级的人数,原始不加权
  7. DECLARE CROWN1U, CROWN2U, CROWN3U, CROWN4U, CROWN5U, CROWN6U, CROWN7U INT; -- 各星级的人数(加权)
  8. DECLARE TOTALU INT; -- 加权的总份数
  9. DECLARE MAXID, USERTBID INT;
  10. DECLARE Q, R INT;
  11. START TRANSACTION;
  12. -- 日志;
  13. DELETE FROM AR_QTR_CALC_RECORD ;
  14. CALL QTRCALCRECORD(-1,'开始',PCPID,NOW());
  15. COMMIT;
  16. CALL QTRCLEAN(PCPID);
  17. CALL QTRCALCRECORD(1,'清除数据',PCPID,NOW());
  18. COMMIT;
  19. SELECT
  20. CALC_YEAR, CALC_MONTH, IS_MONTH INTO THISYEAR, THISMONTH, MISMONTH FROM AR_PERIOD WHERE PERIOD_NUM = PCPID;
  21. CALL QTRCALCRECORD(2,'初始化',PCPID,NOW());
  22. COMMIT;
  23. -- 查看是否季度结
  24. IF(THISMONTH!=3 AND THISMONTH!=6 AND THISMONTH!=9 AND THISMONTH!=12) OR MISMONTH!=1 THEN
  25. CALL QTRCALCRECORD(12,'非季结,结束',PCPID,NOW());
  26. COMMIT;
  27. LEAVE LABEL;
  28. END IF;
  29. CALL QTRCALCRECORD(3,'计算总奖金',PCPID,NOW());
  30. COMMIT;
  31. -- 按照条件,查询当前季度所有月的总PV,计算总奖金
  32. SET QTRSTARTMONTH = THISMONTH - 2;
  33. SELECT
  34. SUM(PV_PCS) * 0.02
  35. INTO TBONUS
  36. FROM AR_PERF_MONTH
  37. WHERE CALC_MONTH >= CONCAT(THISYEAR, lpad(QTRSTARTMONTH,2,0)) AND CALC_MONTH <= CONCAT(THISYEAR, lpad(THISMONTH,2,0));
  38. CALL QTRCALCRECORD(4,'计算总人数及加权',PCPID,NOW());
  39. COMMIT;
  40. -- 查找,所有星级用户
  41. SELECT COUNT(*) INTO OCROWN1NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 1);
  42. SELECT COUNT(*) INTO OCROWN2NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 2);
  43. SELECT COUNT(*) INTO OCROWN3NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 3);
  44. SELECT COUNT(*) INTO OCROWN4NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 4);
  45. SELECT COUNT(*) INTO OCROWN5NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 5);
  46. SELECT COUNT(*) INTO OCROWN6NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 6);
  47. SELECT COUNT(*) INTO OCROWN7NUM FROM AR_CALC_BONUS_QY WHERE PERIOD_NUM = PCPID AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 7);
  48. SET CROWN1U = OCROWN1NUM;
  49. SET CROWN2U = OCROWN2NUM * 1.5;
  50. SET CROWN3U = OCROWN3NUM * 2;
  51. SET CROWN4U = OCROWN4NUM * 2.5;
  52. SET CROWN5U = OCROWN5NUM * 3;
  53. SET CROWN6U = OCROWN6NUM * 3.5;
  54. SET CROWN7U = OCROWN7NUM * 4;
  55. CALL QTRCALCRECORD(5,'计算每一份奖金',PCPID,NOW());
  56. COMMIT;
  57. SET TOTALU = CROWN1U + CROWN2U + CROWN3U + CROWN4U + CROWN5U + CROWN6U + CROWN7U;
  58. SET BONUSPERU = TBONUS / TOTALU; -- 算出每一份奖金的金额
  59. IF(CROWN1U > 0) THEN
  60. INSERT INTO AR_QTR_CALC_USER
  61. SELECT
  62. NULL AS ID,
  63. USER_ID,
  64. BONUSPERU AS AMOUNT,
  65. CALC_YEAR,
  66. CALC_MONTH,
  67. PERIOD_NUM
  68. FROM
  69. AR_CALC_BONUS_QY
  70. WHERE
  71. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 1);
  72. END IF;
  73. CALL QTRCALCRECORD(11,'计算1星奖金',PCPID,NOW());
  74. COMMIT;
  75. IF(CROWN2U > 0) THEN
  76. INSERT INTO AR_QTR_CALC_USER
  77. SELECT
  78. NULL AS ID,
  79. USER_ID,
  80. BONUSPERU * 1.5 AS AMOUNT,
  81. CALC_YEAR,
  82. CALC_MONTH,
  83. PERIOD_NUM
  84. FROM
  85. AR_CALC_BONUS_QY
  86. WHERE
  87. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 2);
  88. END IF;
  89. CALL QTRCALCRECORD(12,'计算2星奖金',PCPID,NOW());
  90. COMMIT;
  91. IF(CROWN3U > 0) THEN
  92. INSERT INTO AR_QTR_CALC_USER
  93. SELECT
  94. NULL AS ID,
  95. USER_ID,
  96. BONUSPERU * 2 AS AMOUNT,
  97. CALC_YEAR,
  98. CALC_MONTH,
  99. PERIOD_NUM
  100. FROM
  101. AR_CALC_BONUS_QY
  102. WHERE
  103. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 3);
  104. END IF;
  105. CALL QTRCALCRECORD(13,'计算3星奖金',PCPID,NOW());
  106. COMMIT;
  107. IF(CROWN4U > 0) THEN
  108. INSERT INTO AR_QTR_CALC_USER
  109. SELECT
  110. NULL AS ID,
  111. USER_ID,
  112. BONUSPERU * 2.5 AS AMOUNT,
  113. CALC_YEAR,
  114. CALC_MONTH,
  115. PERIOD_NUM
  116. FROM
  117. AR_CALC_BONUS_QY
  118. WHERE
  119. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 4);
  120. END IF;
  121. CALL QTRCALCRECORD(14,'计算4星奖金',PCPID,NOW());
  122. COMMIT;
  123. IF(CROWN5U > 0) THEN
  124. INSERT INTO AR_QTR_CALC_USER
  125. SELECT
  126. NULL AS ID,
  127. USER_ID,
  128. BONUSPERU * 3 AS AMOUNT,
  129. CALC_YEAR,
  130. CALC_MONTH,
  131. PERIOD_NUM
  132. FROM
  133. AR_CALC_BONUS_QY
  134. WHERE
  135. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 5);
  136. END IF;
  137. CALL QTRCALCRECORD(15,'计算5星奖金',PCPID,NOW());
  138. COMMIT;
  139. IF(CROWN6U > 0) THEN
  140. INSERT INTO AR_QTR_CALC_USER
  141. SELECT
  142. NULL AS ID,
  143. USER_ID,
  144. BONUSPERU * 3.5 AS AMOUNT,
  145. CALC_YEAR,
  146. CALC_MONTH,
  147. PERIOD_NUM
  148. FROM
  149. AR_CALC_BONUS_QY
  150. WHERE
  151. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 6);
  152. END IF;
  153. CALL QTRCALCRECORD(16,'计算6星奖金',PCPID,NOW());
  154. COMMIT;
  155. IF(CROWN7U > 0) THEN
  156. INSERT INTO AR_QTR_CALC_USER
  157. SELECT
  158. NULL AS ID,
  159. USER_ID,
  160. BONUSPERU * 4 AS AMOUNT,
  161. CALC_YEAR,
  162. CALC_MONTH,
  163. PERIOD_NUM
  164. FROM
  165. AR_CALC_BONUS_QY
  166. WHERE
  167. PERIOD_NUM = 111 AND LAST_CROWN_LV = (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 7);
  168. END IF;
  169. CALL QTRCALCRECORD(17,'计算7星奖金',PCPID,NOW());
  170. COMMIT;
  171. INSERT INTO AR_CALC_BONUS_QUARTER
  172. SELECT
  173. NULL AS ID,
  174. USER_ID,
  175. AMOUNT AS ORI_BONUS,
  176. 0 AS MANAGE_TAX,
  177. AMOUNT,
  178. 0 AS RECONSUME_POINTS,
  179. CALC_YEAR,
  180. CALC_MONTH,
  181. PERIOD_NUM,
  182. 0 AS CREATE_AT
  183. FROM
  184. AR_QTR_CALC_USER;
  185. CALL QTRCALCRECORD(20,'写入季度奖金表',PCPID,NOW());
  186. COMMIT;
  187. END