CALC10.sql 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. UPDATE AR_BS_BONUS_103_CALC SET PV = PV_UP_ZC + PV_FX;
  20. SELECT
  21. MAX( LAYER ) INTO MLAYER
  22. FROM
  23. AR_BS_BONUS_103_CALC
  24. WHERE
  25. PV > 0;
  26. SET MMAXLAYER := MLAYER;
  27. WHILE
  28. MLAYER >= 0 DO
  29. IF
  30. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  31. UPDATE AR_BS_BONUS_103_CALC T1
  32. INNER JOIN (
  33. SELECT
  34. INTRODUCER_ID,
  35. SUM( GPV10 ) GPV10
  36. FROM
  37. AR_BS_BONUS_103_CALC
  38. WHERE
  39. LAYER = MLAYER + 1
  40. AND USER_TYPE10 = 0
  41. AND GPV10 > 0
  42. GROUP BY
  43. INTRODUCER_ID
  44. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  45. AND T1.LAYER = MLAYER
  46. SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
  47. UPDATE AR_BS_BONUS_103_CALC T
  48. SET T.GPV10 = 0
  49. WHERE
  50. T.GPV10 < MLIMITPV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
  51. END IF;
  52. UPDATE AR_BS_BONUS_103_CALC T1
  53. SET T1.GPV10 = T1.GPV10 + T1.PV
  54. WHERE
  55. T1.LAYER = MLAYER
  56. AND T1.PV > 0;-- 是否达标 如果达标
  57. UPDATE AR_BS_BONUS_103_CALC T
  58. SET T.USER_TYPE10 = 10
  59. WHERE
  60. T.GPV10 >= MLIMITPV
  61. AND T.LAYER = MLAYER
  62. AND T.USER_TYPE10 = 0;
  63. IF
  64. ( MLAYER > 0 ) THEN-- 升级为蓝星A
  65. CALL CALCUPGARDE ( MLAYER );
  66. END IF;
  67. SET MLAYER := MLAYER - 1;
  68. END WHILE;
  69. UPDATE AR_BS_BONUS_103_CALC T
  70. SET T.BONUS10 = T.GPV10 * MRATE
  71. WHERE
  72. T.USER_TYPE10 = 10
  73. AND T.GPV10 > 0;
  74. UPDATE AR_BS_BONUS_103_CALC
  75. SET USER_TYPE = 0;
  76. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  77. SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
  78. AND GPV10 > 0;
  79. END
  80. ;;