|
|
@@ -0,0 +1,133 @@
|
|
|
+CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `QTRCALC`(IN `PCPID` INT)
|
|
|
+LABEL: BEGIN
|
|
|
+-- DECLARE QTRSTARTPID, QTRSTARTMONTH, THISYEAR, THISMONTH, MISMONTH INT;
|
|
|
+
|
|
|
+DECLARE TBONUS,BONUSPERU DECIMAL; -- 奖金总额,每份奖金
|
|
|
+DECLARE QTRSTARTMONTH, THISYEAR, THISMONTH, MISMONTH INT; -- 这个月
|
|
|
+
|
|
|
+-- DECLARE OCROWN1NUM,OCROWN2NUM,OCROWN3NUM,OCROWN4NUM,OCROWN5NUM,OCROWN6NUM,OCROWN7NUM INT; -- 各星级的人数,原始不加权
|
|
|
+-- DECLARE CROWN1U, CROWN2U, CROWN3U, CROWN4U, CROWN5U, CROWN6U, CROWN7U INT; -- 各星级的人数(加权)
|
|
|
+
|
|
|
+DECLARE TOTALU INT; -- 加权的总份数
|
|
|
+
|
|
|
+DECLARE MAXID, USERTBID INT;
|
|
|
+DECLARE Q, R INT;
|
|
|
+
|
|
|
+START TRANSACTION;
|
|
|
+-- 日志;
|
|
|
+DELETE FROM AR_QTR_CALC_RECORD ;
|
|
|
+CALL QTRCALCRECORD(-1,'开始',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+CALL QTRCLEAN(PCPID);
|
|
|
+CALL QTRCALCRECORD(1,'清除数据',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+SELECT
|
|
|
+ CALC_YEAR, CALC_MONTH, IS_MONTH INTO THISYEAR, THISMONTH, MISMONTH FROM AR_PERIOD WHERE PERIOD_NUM = PCPID;
|
|
|
+
|
|
|
+CALL QTRCALCRECORD(2,'初始化',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+-- 查看是否季度结
|
|
|
+
|
|
|
+IF(THISMONTH!=3 AND THISMONTH!=6 AND THISMONTH!=9 AND THISMONTH!=12) OR MISMONTH!=1 THEN
|
|
|
+ CALL QTRCALCRECORD(12,'非季结,结束',PCPID,NOW());
|
|
|
+ COMMIT;
|
|
|
+ LEAVE LABEL;
|
|
|
+END IF;
|
|
|
+
|
|
|
+CALL QTRCALCRECORD(3,'计算总奖金',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+-- 按照条件,查询当前季度所有月的总PV,计算总奖金
|
|
|
+SET QTRSTARTMONTH = THISMONTH - 2;
|
|
|
+
|
|
|
+SELECT
|
|
|
+ SUM(PV_PCS) * 0.02
|
|
|
+INTO TBONUS
|
|
|
+ FROM AR_PERF_MONTH
|
|
|
+WHERE CALC_MONTH >= CONCAT(THISYEAR, lpad(QTRSTARTMONTH,2,0)) AND CALC_MONTH <= CONCAT(THISYEAR, lpad(THISMONTH,2,0));
|
|
|
+
|
|
|
+CALL QTRCALCRECORD(4,'计算总人数及加权',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+
|
|
|
+-- 查找,所有星级用户
|
|
|
+INSERT INTO AR_QTR_CALC_WEIGHT
|
|
|
+ SELECT
|
|
|
+ NULL AS ID,
|
|
|
+ QY.USER_ID,
|
|
|
+ MAX(CL.SORT) AS MAX_SORT,
|
|
|
+ (CL.SORT - 1)/2 + 1 AS WEIGHT,
|
|
|
+ PERIOD_NUM,
|
|
|
+ CALC_MONTH,
|
|
|
+ CALC_YEAR
|
|
|
+ FROM
|
|
|
+ AR_CALC_BONUS_QY AS QY
|
|
|
+ INNER JOIN
|
|
|
+ AR_CROWN_LEVEL AS CL
|
|
|
+ ON QY.LAST_CROWN_LV = CL.ID
|
|
|
+
|
|
|
+ WHERE
|
|
|
+ QY.LAST_CROWN_LV != (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 0)
|
|
|
+
|
|
|
+ GROUP BY USER_ID, CALC_MONTH;
|
|
|
+
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+INSERT INTO AR_QTR_CALC_SCORE
|
|
|
+ SELECT
|
|
|
+ NULL AS ID,
|
|
|
+ USER_ID,
|
|
|
+ COUNT(*) AS CNT,
|
|
|
+ SUM(WEIGHT) AS SCORE,
|
|
|
+ CALC_MONTH,
|
|
|
+ CALC_YEAR
|
|
|
+ FROM
|
|
|
+ AR_QTR_CALC_WEIGHT
|
|
|
+ GROUP BY USER_ID;
|
|
|
+
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+SELECT SUM(SCORE) INTO TOTALU FROM AR_QTR_CALC_SCORE;
|
|
|
+
|
|
|
+SET BONUSPERU = TBONUS / TOTALU;
|
|
|
+
|
|
|
+
|
|
|
+CALL QTRCALCRECORD(5,'计算每一份奖金',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+INSERT INTO AR_QTR_CALC_USER
|
|
|
+ SELECT
|
|
|
+ NULL AS ID,
|
|
|
+ SC.USER_ID,
|
|
|
+ BONUSPERU * SC.SCORE AS AMOUNT,
|
|
|
+ CALC_YEAR,
|
|
|
+ CALC_MONTH,
|
|
|
+ PCPID AS PERIOD_NUM
|
|
|
+ FROM
|
|
|
+ AR_QTR_CALC_SCORE AS SC;
|
|
|
+
|
|
|
+
|
|
|
+INSERT INTO AR_CALC_BONUS_QUARTER
|
|
|
+ SELECT
|
|
|
+ NULL AS ID,
|
|
|
+ USER_ID,
|
|
|
+ AMOUNT AS ORI_BONUS,
|
|
|
+ 0 AS MANAGE_TAX,
|
|
|
+ AMOUNT,
|
|
|
+ 0 AS RECONSUME_POINTS,
|
|
|
+ CALC_YEAR,
|
|
|
+ CALC_MONTH,
|
|
|
+ PERIOD_NUM,
|
|
|
+ NOW() AS CREATE_AT
|
|
|
+ FROM
|
|
|
+ AR_QTR_CALC_USER;
|
|
|
+
|
|
|
+CALL QTRCALCRECORD(20,'写入季度奖金表',PCPID,NOW());
|
|
|
+COMMIT;
|
|
|
+
|
|
|
+END
|