CALCLEVEL_kevin_01.sql 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. DROP PROCEDURE IF EXISTS `CALCLEVEL_kevin_01`;
  2. delimiter ;;
  3. CREATE PROCEDURE `CALCLEVEL_kevin_01`(IN PLAYER int, IN PCPID int)
  4. BEGIN
  5. DECLARE
  6. FLAG,
  7. MLAYER,
  8. MUSERTYPE INT DEFAULT 0;
  9. DECLARE
  10. MUSERID,
  11. MBONUSID,
  12. MNEWBONUSID VARCHAR ( 50 );
  13. DECLARE
  14. MRATE,
  15. MRATE30,
  16. MRATE40,
  17. MRATE50,
  18. MRATE60,
  19. MRATE70,
  20. MRATE80,
  21. MRATE90,
  22. MRATE100,
  23. MRATE110,
  24. MBONUS,
  25. MGPV DECIMAL ( 10, 2 );
  26. DECLARE
  27. MC CURSOR FOR SELECT
  28. C.USER_ID,
  29. C.TEAM_GPV
  30. FROM
  31. AR_BS_BONUS_103_CALC_NET C
  32. WHERE
  33. C.USER_TYPE >= 30
  34. AND LAYER = PLAYER;
  35. DECLARE
  36. CONTINUE HANDLER FOR NOT FOUND
  37. SET FLAG = 1;
  38. START TRANSACTION;
  39. SELECT
  40. T.BS_PERCENT / 100 INTO MRATE30
  41. FROM
  42. AR_EMPLOY_LEVEL T
  43. WHERE
  44. T.ID = 'E121497617216708616';
  45. SELECT
  46. T.BS_PERCENT / 100 INTO MRATE40
  47. FROM
  48. AR_EMPLOY_LEVEL T
  49. WHERE
  50. T.ID = '67BE6A4D03C52288E055736AECE8644D';
  51. SELECT
  52. T.BS_PERCENT / 100 INTO MRATE50
  53. FROM
  54. AR_EMPLOY_LEVEL T
  55. WHERE
  56. T.ID = '67BE6EA2070D22EBE055736AECE8644D';
  57. SELECT
  58. T.BS_PERCENT / 100 INTO MRATE60
  59. FROM
  60. AR_EMPLOY_LEVEL T
  61. WHERE
  62. T.ID = '67BE742A336F2370E055736AECE8644D';
  63. SELECT
  64. T.BS_PERCENT / 100 INTO MRATE70
  65. FROM
  66. AR_EMPLOY_LEVEL T
  67. WHERE
  68. T.ID = '67BE805032C22492E055736AECE8644D';
  69. SELECT
  70. T.BS_PERCENT / 100 INTO MRATE80
  71. FROM
  72. AR_EMPLOY_LEVEL T
  73. WHERE
  74. T.ID = '67BE82019BE524CAE055736AECE8644D';
  75. SELECT
  76. T.BS_PERCENT / 100 INTO MRATE90
  77. FROM
  78. AR_EMPLOY_LEVEL T
  79. WHERE
  80. T.ID = '99BE5FE7857C216AE055736AECE8644D';
  81. SELECT
  82. T.BS_PERCENT / 100 INTO MRATE100
  83. FROM
  84. AR_EMPLOY_LEVEL T
  85. WHERE
  86. T.ID = '99BE5FE9008C216AE055736AECE8644D';
  87. SELECT
  88. T.BS_PERCENT / 100 INTO MRATE110
  89. FROM
  90. AR_EMPLOY_LEVEL T
  91. WHERE
  92. T.ID = '99BE5FE7857C216AE000223AECE8644D';-- 打开游标
  93. OPEN MC;-- 获取结果
  94. L2 :
  95. LOOP
  96. FETCH MC INTO MUSERID,
  97. MGPV;
  98. IF
  99. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  100. LEAVE L2;
  101. END IF;-- 这里是为了显示获取结果
  102. SET MLAYER := 1;
  103. SET MBONUSID := MUSERID;
  104. OUTER_LABEL :
  105. WHILE
  106. ( MLAYER <= 9 ) DO
  107. IF
  108. ( MLAYER > 1 ) THEN
  109. CALL CALCREFEREE ( MBONUSID, MNEWBONUSID );
  110. IF
  111. ( ISNULL( MNEWBONUSID ) OR MNEWBONUSID = 0 ) THEN
  112. LEAVE OUTER_LABEL;
  113. ELSE
  114. SET MBONUSID := MNEWBONUSID;
  115. END IF;
  116. END IF;
  117. IF
  118. ( MLAYER = 1 ) THEN
  119. SET MRATE := MRATE30;
  120. ELSEIF ( MLAYER = 2 ) THEN
  121. SET MRATE := MRATE40;
  122. ELSEIF ( MLAYER = 3 ) THEN
  123. SET MRATE := MRATE50;
  124. ELSEIF ( MLAYER = 4 ) THEN
  125. SET MRATE := MRATE60;
  126. ELSEIF ( MLAYER = 5 ) THEN
  127. SET MRATE := MRATE70;
  128. ELSEIF ( MLAYER = 6 ) THEN
  129. SET MRATE := MRATE80;
  130. ELSEIF ( MLAYER = 7 ) THEN
  131. SET MRATE := MRATE90;
  132. ELSEIF ( MLAYER = 8 ) THEN
  133. SET MRATE := MRATE100;
  134. ELSEIF ( MLAYER = 9 ) THEN
  135. SET MRATE := MRATE110;
  136. END IF;
  137. SET MBONUS := MGPV * MRATE;
  138. IF
  139. ( MLAYER = 1 ) THEN
  140. UPDATE AR_BS_BONUS_103_CALC T
  141. SET T.BONUS30 = T.BONUS30 + MBONUS
  142. WHERE
  143. T.USER_ID = MBONUSID;
  144. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  145. VALUES
  146. ( MBONUSID, NULL, 30, MBONUS, MGPV, MRATE ,PCPID);
  147. ELSEIF ( MLAYER = 2 ) THEN
  148. UPDATE AR_BS_BONUS_103_CALC T
  149. SET T.BONUS40 = T.BONUS40 + MBONUS
  150. WHERE
  151. T.USER_ID = MBONUSID;
  152. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  153. VALUES
  154. ( MBONUSID, MUSERID, 40, MBONUS, MGPV, MRATE ,PCPID);
  155. ELSEIF ( MLAYER = 3 ) THEN
  156. UPDATE AR_BS_BONUS_103_CALC T
  157. SET T.BONUS50 = T.BONUS50 + MBONUS
  158. WHERE
  159. T.USER_ID = MBONUSID;
  160. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  161. VALUES
  162. ( MBONUSID, MUSERID, 50, MBONUS, MGPV, MRATE,PCPID );
  163. ELSEIF ( MLAYER = 4 ) THEN
  164. UPDATE AR_BS_BONUS_103_CALC T
  165. SET T.BONUS60 = T.BONUS60 + MBONUS
  166. WHERE
  167. T.USER_ID = MBONUSID;
  168. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  169. VALUES
  170. ( MBONUSID, MUSERID, 60, MBONUS, MGPV, MRATE,PCPID );
  171. ELSEIF ( MLAYER = 5 ) THEN
  172. UPDATE AR_BS_BONUS_103_CALC T
  173. SET T.BONUS70 = T.BONUS70 + MBONUS
  174. WHERE
  175. T.USER_ID = MBONUSID;
  176. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  177. VALUES
  178. ( MBONUSID, MUSERID, 70, MBONUS, MGPV, MRATE,PCPID );
  179. ELSEIF ( MLAYER = 6 ) THEN
  180. UPDATE AR_BS_BONUS_103_CALC T
  181. SET T.BONUS80 = T.BONUS80 + MBONUS
  182. WHERE
  183. T.USER_ID = MBONUSID;
  184. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  185. VALUES
  186. ( MBONUSID, MUSERID, 80, MBONUS, MGPV, MRATE,PCPID );
  187. ELSEIF ( MLAYER = 7 ) THEN
  188. UPDATE AR_BS_BONUS_103_CALC T
  189. SET T.BONUS90 = T.BONUS90 + MBONUS
  190. WHERE
  191. T.USER_ID = MBONUSID;
  192. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  193. VALUES
  194. ( MBONUSID, MUSERID, 90, MBONUS, MGPV, MRATE,PCPID );
  195. ELSEIF ( MLAYER = 8 ) THEN
  196. UPDATE AR_BS_BONUS_103_CALC T
  197. SET T.BONUS100 = T.BONUS100 + MBONUS
  198. WHERE
  199. T.USER_ID = MBONUSID;
  200. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  201. VALUES
  202. ( MBONUSID, MUSERID, 100, MBONUS, MGPV, MRATE,PCPID );
  203. ELSEIF ( MLAYER = 9 ) THEN
  204. UPDATE AR_BS_BONUS_103_CALC T
  205. SET T.BONUS110 = T.BONUS110 + MBONUS
  206. WHERE
  207. T.USER_ID = MBONUSID;
  208. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  209. VALUES
  210. ( MBONUSID, MUSERID, 110, MBONUS, MGPV, MRATE,PCPID );
  211. END IF;-- 计算会员的级别
  212. UPDATE AR_BS_BONUS_103_CALC_NET T
  213. SET T.USER_TYPE = ( MLAYER + 2 )* 10
  214. WHERE
  215. T.USER_ID = MBONUSID
  216. AND USER_TYPE <=(
  217. MLAYER + 1
  218. )* 10;
  219. SET MLAYER := MLAYER + 1;
  220. END WHILE;-- 关闭游标
  221. END LOOP;
  222. CLOSE MC;
  223. COMMIT;
  224. END
  225. ;;