CALCLEVEL_.sql 6.2 KB

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