CALCLEVEL.sql 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. DROP PROCEDURE IF EXISTS `CALCLEVEL`;
  2. delimiter ;;
  3. CREATE PROCEDURE `CALCLEVEL`(IN `PCPID` INT)
  4. BEGIN
  5. DECLARE
  6. FLAG,
  7. MLAYER,
  8. MUSERTYPE INT DEFAULT 0;
  9. DECLARE
  10. MGPV,
  11. MLIMITPV DECIMAL ( 10, 2 );
  12. DECLARE
  13. MC CURSOR FOR SELECT
  14. LAYER
  15. FROM
  16. AR_BS_BONUS_103_CALC_NET T
  17. WHERE
  18. T.USER_TYPE = 30 GROUP BY LAYER ORDER BY LAYER DESC;
  19. DECLARE
  20. CONTINUE HANDLER FOR NOT FOUND
  21. SET FLAG = 1;
  22. START TRANSACTION;-- 打开游标
  23. OPEN MC;-- 获取结果
  24. L2 :
  25. LOOP
  26. FETCH MC INTO MLAYER;
  27. IF
  28. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  29. LEAVE L2;
  30. END IF;
  31. -- 计算当前层数的奖金以及向上所贡献的奖金
  32. CALL CALCLEVEL_ ( MLAYER ,PCPID);
  33. END LOOP;
  34. CLOSE MC;
  35. /*WHILE
  36. ( MLAYER >= 0 ) DO-- 计算当前层数的奖金以及向上所贡献的奖金
  37. CALL CALCLEVEL_ ( MLAYER );
  38. SET MLAYER := MLAYER - 1;
  39. END WHILE;*/-- 级别更新
  40. UPDATE AR_BS_BONUS_103_CALC C1
  41. INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
  42. AND C1.USER_TYPE <> C2.USER_TYPE
  43. SET C1.USER_TYPE = C2.USER_TYPE;
  44. SELECT
  45. T.ACHIEVE_PV INTO MLIMITPV
  46. FROM
  47. AR_EMPLOY_LEVEL T
  48. WHERE
  49. T.ID = 'E121497617216708615';
  50. UPDATE AR_BS_BONUS_103_CALC SET USER_TYPE = 0 WHERE USER_TYPE = 10;
  51. UPDATE AR_BS_BONUS_103_CALC SET USER_TYPE = 10 WHERE GPV10 >= MLIMITPV AND USER_TYPE = 0;
  52. END
  53. ;;