CALC10.sql 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. DROP PROCEDURE IF EXISTS `CALC10`;
  2. delimiter ;;
  3. CREATE PROCEDURE `CALC10`(IN `PCPID` INT)
  4. BEGIN
  5. DECLARE
  6. MLAYER,
  7. MMAXLAYER INT;
  8. DECLARE
  9. MRATE,
  10. MLIMITPV DECIMAL ( 10, 2 );-- 查询第一个级别的限制以及等奖比例
  11. SELECT
  12. T.ACHIEVE_PV,
  13. T.BS_PERCENT / 100 INTO MLIMITPV,
  14. MRATE
  15. FROM
  16. AR_EMPLOY_LEVEL T
  17. WHERE
  18. T.ID = 'E121497617216708615';
  19. SELECT
  20. MAX( LAYER ) INTO MLAYER
  21. FROM
  22. AR_BS_BONUS_103_CALC
  23. WHERE
  24. PV > 0;
  25. SET MMAXLAYER := MLAYER;
  26. WHILE
  27. MLAYER >= 0 DO
  28. IF
  29. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  30. UPDATE AR_BS_BONUS_103_CALC T1
  31. INNER JOIN (
  32. SELECT
  33. INTRODUCER_ID,
  34. SUM( GPV10 ) GPV10
  35. FROM
  36. AR_BS_BONUS_103_CALC
  37. WHERE
  38. LAYER = MLAYER + 1
  39. AND USER_TYPE10 = 0
  40. AND GPV10 > 0
  41. GROUP BY
  42. INTRODUCER_ID
  43. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  44. AND T1.LAYER = MLAYER
  45. SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
  46. UPDATE AR_BS_BONUS_103_CALC T
  47. SET T.GPV10 = 0
  48. WHERE
  49. T.GPV10 < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
  50. END IF;
  51. UPDATE AR_BS_BONUS_103_CALC T1
  52. SET T1.GPV10 = T1.GPV10 + T1.PV
  53. WHERE
  54. T1.LAYER = MLAYER
  55. AND T1.PV > 0;-- 是否达标 如果达标
  56. UPDATE AR_BS_BONUS_103_CALC T
  57. SET T.USER_TYPE10 = 10
  58. WHERE
  59. T.GPV10 >= T.ACHIEVE_PERF_PV
  60. AND T.LAYER = MLAYER
  61. AND T.USER_TYPE10 = 0;
  62. IF
  63. ( MLAYER > 0 ) THEN-- 升级为蓝星A
  64. CALL CALCUPGARDE ( MLAYER );
  65. END IF;
  66. SET MLAYER := MLAYER - 1;
  67. END WHILE;
  68. UPDATE AR_BS_BONUS_103_CALC T
  69. SET T.BONUS10 = T.GPV10 * MRATE
  70. WHERE
  71. T.USER_TYPE10 = 10
  72. AND T.GPV10 > 0;
  73. UPDATE AR_BS_BONUS_103_CALC
  74. SET USER_TYPE = 0;
  75. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  76. SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
  77. AND GPV10 > 0;
  78. END
  79. ;;