CALCMAIN.sql 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. DROP PROCEDURE IF EXISTS `CALCMAIN`;
  2. delimiter ;;
  3. CREATE PROCEDURE `CALCMAIN`(IN `PCPID` int,OUT `PRESULT` varchar(100))
  4. BEGIN
  5. #Routine body goes here...
  6. DECLARE EXIT HANDLER FOR SQLEXCEPTION
  7. SET PRESULT = 'FAIL';
  8. CALL CalcBlue(PCPID);
  9. SET PRESULT = 'SUCCESS';
  10. END
  11. ;;
  12. delimiter ;
  13. -- ----------------------------
  14. -- Procedure structure for CALCPJ
  15. -- ----------------------------
  16. DROP PROCEDURE IF EXISTS `CALCPJ`;
  17. delimiter ;;
  18. CREATE PROCEDURE `CALCPJ`(IN `PCPID` int)
  19. BEGIN
  20. DECLARE USERID VARCHAR (100);
  21. DECLARE TOTALPV,
  22. PV3,
  23. PV4,
  24. PV5,
  25. PV6,
  26. PV7,
  27. PV8,
  28. PV9,
  29. PV10,
  30. PV11,
  31. PERCENT1,
  32. PERCENT2,
  33. REWARD_BONUS1,
  34. REWARD_BONUS2,
  35. REWARD_BONUS_TOTAL DECIMAL (16,2);
  36. DECLARE RATE DECIMAL (16,8);
  37. DECLARE RATE2 DECIMAL (16,8);
  38. DECLARE DONE INT DEFAULT TRUE;
  39. DECLARE DONE2 INT DEFAULT TRUE;
  40. DECLARE CUR CURSOR FOR SELECT DISTINCT(USER_ID) FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND LAST_EMP_LV>=30 AND PV>0;
  41. DECLARE CUR2 CURSOR FOR SELECT DISTINCT(USER_ID) FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND LAST_EMP_LV>=30 AND PV>0;
  42. DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = FALSE;
  43. SELECT IFNULL(MAX(INCREASE_PERCENT),0) INTO PERCENT1 FROM AR_BS_BONUS_REWARD_PARAMETER WHERE LEVEL_ID='67BE5FE7857C216AE055736AECE8644D';
  44. SELECT IFNULL(MAX(INCREASE_PERCENT),0) INTO PERCENT2 FROM AR_BS_BONUS_REWARD_PARAMETER WHERE LEVEL_ID='E121497617216708616';
  45. -- 备份AR_BS_BONUS_REWARD_PARAMETER
  46. DELETE FROM AR_BS_BONUS_REWARD_PARAMETER_HISTROY WHERE PERIOD_NUM=PCPID;
  47. INSERT INTO AR_BS_BONUS_REWARD_PARAMETER_HISTROY (LEVEL_ID,LEVEL_NAME,INCREASE_PERCENT,PERIOD_NUM) (SELECT LEVEL_ID,LEVEL_NAME,INCREASE_PERCENT,PCPID FROM AR_BS_BONUS_REWARD_PARAMETER);
  48. -- 平级奖计奖业绩
  49. SELECT SUM(PV) INTO TOTALPV FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND LAST_EMP_LV>=30;
  50. -- 平级奖奖金和业绩占比
  51. SELECT (SUM(PV)*0.15)/TOTALPV INTO RATE FROM AR_BS_BONUS_103_CALC;
  52. --
  53. UPDATE AR_BS_BONUS_103_CALC SET ORI_RATE = RATE;
  54. OPEN CUR;
  55. WHILE DONE DO
  56. FETCH CUR INTO USERID;
  57. IF DONE THEN
  58. SELECT IFNULL(SUM(PV),0) INTO PV3 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=30;
  59. UPDATE AR_BS_BONUS_103_CALC SET BONUS30 = PV3 * RATE WHERE USER_ID=USERID;
  60. END IF;
  61. END WHILE;
  62. CLOSE CUR;
  63. SELECT SUM(BONUS20)*PERCENT1 INTO REWARD_BONUS1 FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE=20;
  64. SELECT SUM(BONUS30)*PERCENT2 INTO REWARD_BONUS2 FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE=30;
  65. -- 备份高级专员的加发奖金
  66. UPDATE AR_BS_BONUS_103_CALC SET REWARD20 = BONUS20*PERCENT1 WHERE USER_TYPE=20;
  67. -- 备份主任的加发奖金
  68. UPDATE AR_BS_BONUS_103_CALC SET REWARD30 = BONUS30*PERCENT2 WHERE USER_TYPE=30;
  69. -- 特别奖励加发总奖金
  70. SET REWARD_BONUS_TOTAL=REWARD_BONUS1+REWARD_BONUS2;
  71. -- 平级奖奖金和业绩占比
  72. SELECT (SUM(PV)*0.15 -REWARD_BONUS_TOTAL)/TOTALPV INTO RATE2 FROM AR_BS_BONUS_103_CALC;
  73. -- 备份平级奖比例
  74. UPDATE AR_BS_BONUS_103_CALC SET RATE = RATE2;
  75. SET DONE = TRUE;
  76. OPEN CUR2;
  77. WHILE DONE DO
  78. FETCH CUR2 INTO USERID;
  79. IF DONE THEN
  80. SELECT IFNULL(SUM(PV),0) INTO PV3 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=30;
  81. UPDATE AR_BS_BONUS_103_CALC SET BONUS30 = PV3 * RATE2 WHERE USER_ID=USERID;
  82. SELECT IFNULL(SUM(PV),0) INTO PV4 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=40;
  83. UPDATE AR_BS_BONUS_103_CALC SET BONUS40 = PV4 * RATE2 WHERE USER_ID=USERID;
  84. SELECT IFNULL(SUM(PV),0) INTO PV5 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=50;
  85. UPDATE AR_BS_BONUS_103_CALC SET BONUS50 = PV5 * RATE2 WHERE USER_ID=USERID;
  86. SELECT IFNULL(SUM(PV),0) INTO PV6 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=60;
  87. UPDATE AR_BS_BONUS_103_CALC SET BONUS60 = PV6 * RATE2 WHERE USER_ID=USERID;
  88. SELECT IFNULL(SUM(PV),0) INTO PV7 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=70;
  89. UPDATE AR_BS_BONUS_103_CALC SET BONUS70 = PV7 * RATE2 WHERE USER_ID=USERID;
  90. SELECT IFNULL(SUM(PV),0) INTO PV8 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=80;
  91. UPDATE AR_BS_BONUS_103_CALC SET BONUS80 = PV8 * RATE2 WHERE USER_ID=USERID;
  92. SELECT IFNULL(SUM(PV),0) INTO PV9 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=90;
  93. UPDATE AR_BS_BONUS_103_CALC SET BONUS90 = PV9 * RATE2 WHERE USER_ID=USERID;
  94. SELECT IFNULL(SUM(PV),0) INTO PV10 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=100;
  95. UPDATE AR_BS_BONUS_103_CALC SET BONUS100 = PV10 * RATE2 WHERE USER_ID=USERID;
  96. SELECT IFNULL(SUM(PV),0) INTO PV11 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=110;
  97. UPDATE AR_BS_BONUS_103_CALC SET BONUS110 = PV11 * RATE2 WHERE USER_ID=USERID;
  98. END IF;
  99. END WHILE;
  100. CLOSE CUR2;
  101. -- 达到高级专员加发高级专员奖
  102. UPDATE AR_BS_BONUS_103_CALC SET BONUS20 = REWARD20 + BONUS20 WHERE USER_TYPE=20;
  103. -- 达到主任加发主任奖
  104. UPDATE AR_BS_BONUS_103_CALC SET BONUS30 = REWARD30 + BONUS30 WHERE USER_TYPE=30;
  105. END
  106. ;;