Просмотр исходного кода

NGDS_CALC_PROCEDURE first commit

TonyY 2 лет назад
Родитель
Сommit
11d6542097

+ 85 - 0
NGDS_CALC_PROCEDURE/CALC10.sql

@@ -0,0 +1,85 @@
+DROP PROCEDURE IF EXISTS `CALC10`;
+delimiter ;;
+CREATE PROCEDURE `CALC10`(IN `PCPID` INT)
+BEGIN
+    DECLARE
+        MLAYER,
+        MMAXLAYER INT;
+    DECLARE
+        MRATE,
+        MLIMITPV DECIMAL ( 10, 2 );-- 查询第一个级别的限制以及等奖比例
+    SELECT
+        T.ACHIEVE_PV,
+        T.BS_PERCENT / 100 INTO MLIMITPV,
+        MRATE
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = 'E121497617216708615';
+    SELECT
+        MAX( LAYER ) INTO MLAYER
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            PV > 0;
+
+    SET MMAXLAYER := MLAYER;
+    WHILE
+            MLAYER >= 0 DO
+            IF
+                ( MLAYER < MMAXLAYER ) THEN-- 向上累计
+                UPDATE AR_BS_BONUS_103_CALC T1
+                    INNER JOIN (
+                        SELECT
+                            INTRODUCER_ID,
+                            SUM( GPV10 ) GPV10
+                        FROM
+                            AR_BS_BONUS_103_CALC
+                        WHERE
+                                LAYER = MLAYER + 1
+                          AND USER_TYPE10 = 0
+                          AND GPV10 > 0
+                        GROUP BY
+                            INTRODUCER_ID
+                    ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
+                        AND T1.LAYER = MLAYER
+                SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
+                UPDATE AR_BS_BONUS_103_CALC T
+                SET T.GPV10 = 0
+                WHERE
+                        T.GPV10 < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
+
+            END IF;
+            UPDATE AR_BS_BONUS_103_CALC T1
+            SET T1.GPV10 = T1.GPV10 + T1.PV
+            WHERE
+                    T1.LAYER = MLAYER
+              AND T1.PV > 0;-- 是否达标 如果达标
+            UPDATE AR_BS_BONUS_103_CALC T
+            SET T.USER_TYPE10 = 10
+            WHERE
+                    T.GPV10 >= T.ACHIEVE_PERF_PV
+              AND T.LAYER = MLAYER
+              AND T.USER_TYPE10 = 0;
+            IF
+                ( MLAYER > 0 ) THEN-- 升级为蓝星A
+                CALL CALCUPGARDE ( MLAYER );
+
+            END IF;
+
+            SET MLAYER := MLAYER - 1;
+
+        END WHILE;
+    UPDATE AR_BS_BONUS_103_CALC T
+    SET T.BONUS10 = T.GPV10 * MRATE
+    WHERE
+            T.USER_TYPE10 = 10
+      AND T.GPV10 > 0;
+    UPDATE AR_BS_BONUS_103_CALC
+    SET USER_TYPE = 0;
+
+    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+    SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
+                                                                                             AND GPV10 > 0;
+END
+;;

+ 151 - 0
NGDS_CALC_PROCEDURE/CALC20.sql

@@ -0,0 +1,151 @@
+DROP PROCEDURE IF EXISTS `CALC20`;
+delimiter ;;
+CREATE PROCEDURE `CALC20`(IN `PCPID` INT)
+BEGIN
+    DECLARE
+        MLAYER,
+        MMAXLAYER,
+        MCOUNT INT;
+    DECLARE
+        MRATE,
+        MLIMITPV DECIMAL ( 10, 2 );
+    START TRANSACTION;-- 第一个级别的限制
+    SELECT
+        T.ACHIEVE_PV INTO MLIMITPV
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = 'E121497617216708615';-- 第二个级别得奖的比例
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE5FE7857C216AE055736AECE8644D';
+    SELECT
+        MAX( LAYER ) INTO MLAYER
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            PV > 0;
+
+    SET MMAXLAYER := MLAYER;
+    WHILE
+            MLAYER >= 0 DO
+            IF
+                ( MLAYER < MMAXLAYER ) THEN-- 向上累计
+                UPDATE AR_BS_BONUS_103_CALC T1
+                    INNER JOIN (
+                        SELECT
+                            INTRODUCER_ID,
+                            SUM( GPV ) GPV
+                        FROM
+                            AR_BS_BONUS_103_CALC
+                        WHERE
+                                LAYER = MLAYER + 1
+                          AND USER_TYPE = 0
+                          AND GPV > 0
+                        GROUP BY
+                            INTRODUCER_ID
+                    ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
+                        AND T1.LAYER = MLAYER
+                SET T1.GPV = T2.GPV;-- 没有升级的会员需要将自己的小组业绩清零
+                UPDATE AR_BS_BONUS_103_CALC T
+                SET T.GPV = 0
+                WHERE
+                        T.GPV < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND GPV > 0;
+
+            END IF;
+            UPDATE AR_BS_BONUS_103_CALC T1
+            SET T1.GPV = T1.GPV + T1.PV
+            WHERE
+                    T1.LAYER = MLAYER;-- 是否达标 如果达标
+            UPDATE AR_BS_BONUS_103_CALC T
+            SET T.USER_TYPE = 10
+            WHERE
+                    T.GPV >= T.ACHIEVE_PERF_PV
+              AND T.LAYER = MLAYER;
+
+            SET MLAYER := MLAYER - 1;
+
+        END WHILE;
+    UPDATE AR_BS_BONUS_103_CALC
+    SET GPV = 0
+    WHERE
+            USER_TYPE = 0
+      AND GPV > 0;
+    SELECT
+        MAX( LAYER ) INTO MLAYER
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            USER_TYPE > 0;
+
+    SET MMAXLAYER := MLAYER;-- 添加至新网体页面
+    INSERT INTO AR_BS_BONUS_103_CALC_NET ( USER_ID, INTRODUCER_ID, CALC_PERIOD_ID, USER_TYPE, GPV, DIRECTLY_UNDER, LAYER, TEAM_GPV ) SELECT
+                                                                                                                                         USER_ID,
+                                                                                                                                         INTRODUCER_ID,
+                                                                                                                                         CALC_PERIOD_ID,
+                                                                                                                                         USER_TYPE,
+                                                                                                                                         GPV,
+                                                                                                                                         0,
+                                                                                                                                         LAYER,
+                                                                                                                                         0
+    FROM
+        AR_BS_BONUS_103_CALC
+    WHERE
+            LAYER <= MLAYER; -- 处理新的网体
+    DELETE FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER AND USER_TYPE = 0; SET MLAYER := MLAYER - 1; WHILE MLAYER >= 0 DO-- 计算直属宽度
+    UPDATE AR_BS_BONUS_103_CALC_NET T1
+        INNER JOIN ( SELECT INTRODUCER_ID, COUNT( * ) SONS FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER + 1 GROUP BY INTRODUCER_ID ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
+            AND T1.LAYER = MLAYER
+    SET T1.DIRECTLY_UNDER = T2.SONS;-- 本人达标并且下属满足一个及以上的达标数升级为第二个级别
+    UPDATE AR_BS_BONUS_103_CALC_NET T1
+    SET T1.USER_TYPE = 20
+    WHERE
+            T1.LAYER = MLAYER
+      AND USER_TYPE = 10
+      AND DIRECTLY_UNDER >= 1;-- 计算本层达标人员
+    SELECT
+        COUNT( * ) INTO MCOUNT
+    FROM
+        AR_BS_BONUS_103_CALC_NET C
+    WHERE
+            C.DIRECTLY_UNDER >= 2
+      AND C.USER_TYPE = 0
+      AND LAYER = MLAYER;
+    IF
+        ( MCOUNT > 0 ) THEN
+        CALL CALC20_0 ( MLAYER, PCPID );
+
+    END IF;-- 删除未达标人员
+    CALL CALCDELNET ( MLAYER );
+
+    SET MLAYER := MLAYER - 1;
+
+        END WHILE;-- 计算GPV_4_CALC,会员级别
+    UPDATE AR_BS_BONUS_103_CALC C1
+        INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
+    SET C1.GPV_4_CALC = C2.GPV,
+        C1.USER_TYPE = C2.USER_TYPE;-- 计算见习奖金
+    UPDATE AR_BS_BONUS_103_CALC C1
+        INNER JOIN ( SELECT INTRODUCER_ID, SUM( GPV ) ALL_GPV FROM AR_BS_BONUS_103_CALC_NET GROUP BY INTRODUCER_ID ) C2 ON C1.USER_ID = C2.INTRODUCER_ID
+            AND C1.USER_TYPE = 20
+    SET C1.BONUS20 = C2.ALL_GPV * MRATE;
+    COMMIT;
+    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE, PERIOD_NUM ) SELECT
+                                                                                                                           C1.USER_ID,
+                                                                                                                           NULL,
+                                                                                                                           20,
+                                                                                                                           C2.ALL_GPV * MRATE,
+                                                                                                                           C2.ALL_GPV,
+                                                                                                                           MRATE,
+                                                                                                                           PCPID
+    FROM
+        AR_BS_BONUS_103_CALC C1
+            INNER JOIN ( SELECT INTRODUCER_ID, SUM( GPV ) ALL_GPV FROM AR_BS_BONUS_103_CALC_NET GROUP BY INTRODUCER_ID ) C2 ON C1.USER_ID = C2.INTRODUCER_ID
+            AND C1.USER_TYPE = 20
+            AND ALL_GPV > 0;
+
+END
+;;

+ 97 - 0
NGDS_CALC_PROCEDURE/CALC20_0.sql

@@ -0,0 +1,97 @@
+DROP PROCEDURE IF EXISTS `CALC20_0`;
+delimiter ;;
+CREATE PROCEDURE `CALC20_0`(IN PLAYER INT,IN `PCPID` INT)
+BEGIN
+	DECLARE
+		FLAG INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MMAXUSERID VARCHAR ( 50 );
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		ACHIEVEPV DECIMAL ( 10, 2 );
+	DECLARE
+		MC CURSOR FOR SELECT
+		C.USER_ID 
+	FROM
+		AR_BS_BONUS_103_CALC_NET C 
+	WHERE
+		C.DIRECTLY_UNDER >= 2 
+		AND C.USER_TYPE = 0 
+		AND LAYER = PLAYER;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;-- 打开游标
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MUSERID;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;-- 这里是为了显示获取结果
+		SELECT
+			MIN( GPV ) INTO MGPV 
+		FROM
+			AR_BS_BONUS_103_CALC_NET C 
+		WHERE
+			C.INTRODUCER_ID = MUSERID 
+			AND C.USER_TYPE >= 10;
+			
+		SELECT
+			MAX( USER_ID ) INTO MMAXUSERID 
+		FROM
+			AR_BS_BONUS_103_CALC_NET C 
+		WHERE
+			C.INTRODUCER_ID = MUSERID 
+			AND C.GPV = MGPV;
+			
+		SELECT
+		  ACHIEVE_PV INTO ACHIEVEPV
+		FROM
+		  AR_EMPLOY_LEVEL
+		WHERE ID ='E121497617216708615';
+			
+		IF MGPV >= ACHIEVEPV THEN
+		
+		UPDATE AR_BS_BONUS_103_CALC_NET C 
+		SET C.USER_TYPE = 20,
+		C.GPV = ACHIEVEPV 
+		WHERE
+			USER_ID = MUSERID;
+			
+		UPDATE AR_BS_BONUS_103_CALC_NET C 
+		SET C.GPV = MGPV - ACHIEVEPV 
+		WHERE
+			USER_ID = MMAXUSERID;
+			
+		INSERT INTO AR_CALC_BONUS_BS_DETAIL_GPV(USER_ID,INTRODUCER_ID,GPV,PERIOD_NUM)
+		VALUES(MMAXUSERID,MUSERID,ACHIEVEPV,PCPID);
+			
+		ELSE
+		
+		UPDATE AR_BS_BONUS_103_CALC_NET C 
+		SET C.USER_TYPE = 20,
+		C.GPV = MGPV 
+		WHERE
+			USER_ID = MUSERID;
+			
+		UPDATE AR_BS_BONUS_103_CALC_NET C 
+		SET C.GPV = 0 
+		WHERE
+			USER_ID = MMAXUSERID;
+			
+		INSERT INTO AR_CALC_BONUS_BS_DETAIL_GPV(USER_ID,INTRODUCER_ID,GPV,PERIOD_NUM)
+		VALUES(MMAXUSERID,MUSERID,MGPV,PCPID);
+			
+		END IF;
+			
+	END LOOP;
+	
+	-- 关闭游标
+	CLOSE MC;
+
+END
+;;

+ 95 - 0
NGDS_CALC_PROCEDURE/CALCBLUE.sql

@@ -0,0 +1,95 @@
+DROP PROCEDURE IF EXISTS `CALCBLUE`;
+delimiter ;;
+CREATE PROCEDURE `CALCBLUE`(IN `PCPID` INT)
+LABEL: BEGIN
+DECLARE MCALCYEAR INT;
+DECLARE MISMONTH,MCALCMONTH,MISSENT TINYINT;
+
+START TRANSACTION;
+-- 日志;
+DELETE FROM AR_BS_BONUS_103_CALC_EVENT ;-- WHERE CALC_PERIOD_ID >= PCPID;
+CALL CALCRECORD(-1,'开始',PCPID,NOW());
+COMMIT;
+-- SELECT USER_ID INTO MISMONTH FROM ZR_USER;
+SELECT AP.IS_MONTH,AP.CALC_MONTH,AP.CALC_YEAR,AP.IS_SENT
+INTO MISMONTH,MCALCMONTH,MCALCYEAR,MISSENT
+FROM AR_PERIOD AP WHERE AP.PERIOD_NUM = PCPID;
+
+	-- 查看是否月结
+-- IF(MISMONTH  =  0 OR MISSENT = 1)THEN
+-- LEAVE LABEL;
+-- END IF;
+
+
+-- 清除数据
+CALL CALCRECORD(1,'清除数据',PCPID,NOW());
+COMMIT;
+CALL CALCCLEAN(PCPID);
+COMMIT;
+
+-- 初始化
+CALL CALCRECORD(2,'初始化',PCPID,NOW());
+COMMIT;
+CALL CALCINIT(PCPID,MCALCMONTH,MCALCYEAR);
+COMMIT;
+
+
+-- 初始业绩
+-- 3.蓝星奖
+CALL CALCRECORD(3,'蓝星奖',PCPID,NOW());
+COMMIT;
+CALL CALC10(PCPID);
+COMMIT;
+
+-- 4.新网体
+CALL CALCRECORD(4,'新网体',PCPID,NOW());
+COMMIT;
+CALL CALC20(PCPID);
+COMMIT;
+
+-- 5.升级主任
+CALL CALCRECORD(5,'升级主任',PCPID,NOW());
+COMMIT;
+CALL CALCUP30;
+COMMIT;
+
+-- 6.计算主任自己第一层的总业绩
+CALL CALCRECORD(6,'计算主任自己第一层的总业绩',PCPID,NOW());
+COMMIT;
+CALL CALCTOTALGPV;
+COMMIT;
+
+-- 7.计算平级奖
+CALL CALCRECORD(7,'计算平级奖',PCPID,NOW());
+COMMIT;
+CALL CALCLEVEL(PCPID);
+COMMIT;
+
+-- 8.积分
+CALL CALCRECORD(8,'积分',PCPID,NOW());
+COMMIT;
+CALL CALCPOINT;
+COMMIT;
+
+-- 9.汇总
+CALL CALCRECORD(9,'汇总',PCPID,NOW());
+COMMIT;
+CALL CALCSUMMARY;
+COMMIT;
+
+-- 10.记录总表
+CALL CALCRECORD(10,'记录总表',PCPID,NOW());
+COMMIT;
+CALL CALCKEEP(MCALCYEAR,MCALCMONTH);
+COMMIT;
+
+-- 11.计算拨出比
+CALL CALCRECORD(11,'计算拨出比',PCPID,NOW());
+COMMIT;
+CALL CALCSTAT(PCPID);
+COMMIT;
+
+CALL CALCRECORD(12,'结束',PCPID,NOW());
+COMMIT;
+END
+;;

+ 167 - 0
NGDS_CALC_PROCEDURE/CALCCHECKING.sql

@@ -0,0 +1,167 @@
+DROP PROCEDURE IF EXISTS `CALCCHECKING`;
+delimiter ;;
+CREATE PROCEDURE `CALCCHECKING`(IN `PCPID` INT)
+LABEL : BEGIN-- 遍历数据结束标志
+	DECLARE
+		MCOLUMNNAME,
+		MVALUES,
+		MVALUES0,
+		MVALUES1,
+		MVALUES2 VARCHAR ( 100 );-- 定义预处理SQL语句
+	DECLARE
+		SQL_FOR_SELECT VARCHAR ( 2000 );
+	DECLARE
+		MCOUNT INT DEFAULT 0;
+	DECLARE
+		DONE INT DEFAULT FALSE;
+	DECLARE
+		MISMONTH,
+		MISSEND TINYINT;-- 游标
+	DECLARE
+		CUR_ACCOUNT CURSOR FOR SELECT
+		COLUMN_NAME 
+	FROM
+		INFORMATION_SCHEMA.COLUMNS 
+	WHERE
+		TABLE_NAME = 'AR_CALC_BONUS_BS_DETAIL' 
+		AND TABLE_SCHEMA = 'aikang_db_28' 
+		AND COLUMN_NAME NOT IN ( 'CALC_YEAR', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT', 'ID', 'LAYER' ) 
+		AND DATA_TYPE IN ( 'DECIMAL', 'DOUBLE', 'INT' );-- 将结束标志绑定到游标
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET DONE = TRUE;
+	START TRANSACTION;
+	SELECT
+		AP.IS_MONTH,
+		AP.IS_SENT INTO MISMONTH,
+		MISSEND 
+	FROM
+		AR_PERIOD AP 
+	WHERE
+		AP.PERIOD_NUM = PCPID;-- 查看是否月结
+	IF
+		( MISMONTH = 0 OR MISSEND = 1 ) THEN
+			LEAVE LABEL;
+		
+	END IF;-- 打开游标
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_CHECKING 
+	WHERE
+		PERIOD_NUM >= PCPID;
+	OPEN CUR_ACCOUNT;-- 遍历
+	READ_LOOP :
+	LOOP-- 取值 取多个字段
+		FETCH NEXT 
+		FROM
+			CUR_ACCOUNT INTO MCOLUMNNAME;
+		IF
+			DONE THEN
+				LEAVE READ_LOOP;
+			
+		END IF;
+		
+		SET SQL_FOR_SELECT = CONCAT(
+			"SELECT COUNT(*) INTO @MVALUES0 FROM (SELECT IFNULL(A1.USER_ID,'-1') MAIN_ID,IFNULL(A2.USER_ID,'-1') TEST_ID,IFNULL(A1.",
+			MCOLUMNNAME,
+			",0) NAME1,IFNULL(A2.",
+			MCOLUMNNAME,
+			",0) NAME2 FROM AR_CALC_BONUS_BS_DETAIL A1 LEFT JOIN AR_CALC_BONUS_BS_DETAIL_CALC A2 ON A1.USER_ID = A2.USER_ID WHERE A1.PERIOD_NUM = ",
+			PCPID,
+			" AND A2.PERIOD_NUM = ",
+			PCPID,
+			" UNION SELECT IFNULL(A2.USER_ID,'-1') MAIN_ID,IFNULL(A1.USER_ID,'-1') TEST_ID,IFNULL(A2.",
+			MCOLUMNNAME,
+			",0) NAME1,IFNULL(A1.",
+			MCOLUMNNAME,
+			",0) NAME2 FROM AR_CALC_BONUS_BS_DETAIL_CALC A1 LEFT JOIN AR_CALC_BONUS_BS_DETAIL A2 ON A1.USER_ID = A2.USER_ID WHERE A1.PERIOD_NUM = ",
+			PCPID,
+			" AND A2.PERIOD_NUM = ",
+			PCPID,
+			") B WHERE B.MAIN_ID != B.TEST_ID OR ABS(B.NAME1-B.NAME2)>0.5" 
+		);-- 拼接查询SQL语句
+		
+		SET @SQL = SQL_FOR_SELECT;
+		PREPARE STMT 
+		FROM
+			@SQL;-- 预处理动态SQL语句
+		EXECUTE STMT;-- 执行SQL语句
+		DEALLOCATE PREPARE STMT;
+		
+		SET MVALUES0 := @MVALUES0;
+		
+		SET SQL_FOR_SELECT = CONCAT( "SELECT IFNULL(SUM(", MCOLUMNNAME, "),0) INTO @MVALUES1 FROM  AR_CALC_BONUS_BS_DETAIL  WHERE PERIOD_NUM = '", PCPID, "'" );-- 拼接查询SQL语句
+		
+		SET @SQL = SQL_FOR_SELECT;
+		PREPARE STMT 
+		FROM
+			@SQL;-- 预处理动态SQL语句
+		EXECUTE STMT;-- 执行SQL语句
+		DEALLOCATE PREPARE STMT;
+		
+		SET MVALUES1 := @MVALUES1;
+		
+		SET SQL_FOR_SELECT = CONCAT( "SELECT IFNULL(SUM(", MCOLUMNNAME, "),0) INTO @MVALUES2 FROM  AR_CALC_BONUS_BS_DETAIL_CALC  WHERE USER_ID != '0' AND PERIOD_NUM = '", PCPID, "'" );-- 拼接查询SQL语句
+		
+		SET @SQL = SQL_FOR_SELECT;
+		PREPARE STMT 
+		FROM
+			@SQL;-- 预处理动态SQL语句
+		EXECUTE STMT;-- 执行SQL语句
+		DEALLOCATE PREPARE STMT;
+		
+		SET MVALUES2 := @MVALUES2;
+		INSERT INTO AR_CALC_BONUS_BS_CHECKING ( PERIOD_NUM, COLUMN_NAME, DIFF_COUNT, MAIN_SUM, CALC_SUM, DIFF_SUM )
+		VALUES
+			(
+				PCPID,
+				MCOLUMNNAME,
+				MVALUES0,
+				MVALUES1,
+				MVALUES2,
+				ABS(
+					CONVERT (
+						MVALUES1,
+						DECIMAL ( 12, 2 ))- CONVERT (
+						MVALUES2,
+					DECIMAL ( 12, 2 ))));
+		COMMIT;
+		
+	END LOOP;
+	CLOSE CUR_ACCOUNT;
+	SELECT
+		COUNT(*) INTO MCOUNT 
+	FROM
+		AR_CALC_BONUS_BS_CHECKING 
+	WHERE
+		( DIFF_COUNT > 0 OR DIFF_SUM >= 1 ) 
+		AND COLUMN_NAME IN (
+			'USER_TYPE10',
+			'USER_TYPE',
+			'BONUS10',
+			'BONUS20',
+			'BONUS30',
+			'BONUS40',
+			'BONUS50',
+			'BONUS60',
+			'BONUS70',
+			'BONUS80',
+			'BONUS90',
+			'BONUS100',
+			'BONUS110',
+			'ORI_BONUS',
+			'AMOUNT',
+			'PRODUCT_POINT' 
+		);
+	IF
+		( MCOUNT = 0 ) THEN
+			UPDATE AR_CALC_BONUS_BS_STAT T 
+			SET T.CHECK_STATUS = 1 
+		WHERE
+			T.PERIOD_NUM = PCPID;
+		
+	END IF;
+	COMMIT;
+
+END
+;;

+ 48 - 0
NGDS_CALC_PROCEDURE/CALCCLEAN.sql

@@ -0,0 +1,48 @@
+DROP PROCEDURE IF EXISTS `CALCCLEAN`;
+delimiter ;;
+CREATE PROCEDURE `CALCCLEAN`(IN `PCPID` INT)
+BEGIN-- 删除当期奖金
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_CALC;
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_TEST 
+	WHERE
+		CALC_PERIOD_ID >= PCPID;-- 使用的奖金表
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS 
+	WHERE
+		PERIOD_NUM >= PCPID;
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_DETAIL 
+	WHERE
+		PERIOD_NUM >= PCPID;-- 删除当期网体
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_CALC_NET;
+	DELETE 
+	FROM
+		AR_BS_BONUS_103_TEST_NET 
+	WHERE
+		CALC_PERIOD_ID >= PCPID;-- 删除拨出表
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_STAT 
+	WHERE
+		PERIOD_NUM >= PCPID;-- 删除明细表
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_DETAIL_BONUS 
+	WHERE
+		PERIOD_NUM >= PCPID;-- 删除日志
+	DELETE 
+	FROM
+		AR_CALC_BONUS_BS_DETAIL_GPV 
+	WHERE
+		PERIOD_NUM >= PCPID;
+
+END
+;;

+ 67 - 0
NGDS_CALC_PROCEDURE/CALCDELNET.sql

@@ -0,0 +1,67 @@
+DROP PROCEDURE IF EXISTS `CALCDELNET`;
+delimiter ;;
+CREATE PROCEDURE `CALCDELNET`(IN `PLAYER` INT)
+BEGIN
+	DECLARE
+		FLAG INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MMAXUSERID,
+		MINTRODUCERID VARCHAR ( 50 );
+	/*DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		DN CURSOR FOR SELECT
+		USER_ID 
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		LAYER = PLAYER 
+		AND USER_TYPE = 0;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;*/
+	START TRANSACTION;-- 打开游标
+	/*OPEN DN;-- 获取结果
+	L2 :
+	LOOP
+			FETCH DN INTO MUSERID;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;-- 查询需要删除会员的推荐人ID
+		SELECT
+			T.INTRODUCER_ID INTO MINTRODUCERID 
+		FROM
+			AR_BS_BONUS_103_CALC_NET T 
+		WHERE
+			T.USER_ID = MUSERID;-- 更改需要删除会员第一代的推荐人ID以及层数
+		UPDATE AR_BS_BONUS_103_CALC_NET T 
+		SET T.INTRODUCER_ID = MINTRODUCERID,
+		T.LAYER = T.LAYER - 1 
+		WHERE
+			T.INTRODUCER_ID = MUSERID;-- 关闭游标
+		
+	END LOOP;
+	CLOSE DN;*/
+	UPDATE AR_BS_BONUS_103_CALC_NET
+	SET DELETED = 1
+	WHERE
+		LAYER = PLAYER 
+		AND USER_TYPE = 0;
+	UPDATE AR_BS_BONUS_103_CALC_NET T1
+	INNER JOIN AR_BS_BONUS_103_CALC_NET T2
+	ON T1.INTRODUCER_ID = T2.USER_ID AND T1.LAYER = PLAYER+1 AND T2.LAYER =  PLAYER AND T2.USER_TYPE = 0
+	SET T1.INTRODUCER_ID = T2.INTRODUCER_ID,T1.LAYER = PLAYER;
+	DELETE
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		LAYER = PLAYER 
+		AND USER_TYPE = 0
+		AND DELETED = 1;
+	COMMIT;
+
+END
+;;

+ 110 - 0
NGDS_CALC_PROCEDURE/CALCINIT.sql

@@ -0,0 +1,110 @@
+DROP PROCEDURE IF EXISTS `CALCINIT`;
+delimiter ;;
+CREATE PROCEDURE `CALCINIT`(IN `PCPID` INT, IN `PCALCMONTH` TINYINT, IN `PCALCYEAR` INT)
+BEGIN
+
+    DECLARE
+        AC_USER_NO INT;     -- 邀请会员达标数
+    DECLARE
+        MLIMITPV,   -- 邀请会员不及格达标PV
+        AC_PERF_PV DECIMAL ( 10, 2 );   -- 邀请会员及格达标PV
+
+    -- 查询第一个级别的邀请会员数、达标PV值以及等奖比例
+    SELECT
+        T.ACHIEVE_PV,
+        T.ACHIEVE_PERF_PV,
+        T.ACHIEVE_MEMBER_NUM
+    INTO MLIMITPV, AC_PERF_PV, AC_USER_NO
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+        T.ID = 'E121497617216708615';
+
+    INSERT INTO AR_BS_BONUS_103_CALC (
+        LAST_DEC_LV,
+        LAST_EMP_LV,
+        LAST_STATUS,
+        USER_ID,
+        INTRODUCER_ID,
+        LAYER,
+        PV,
+        GPV10,
+        GPV,
+        GPV_4_CALC,
+        USER_TYPE10,
+        USER_TYPE,
+        BONUS10,
+        BONUS20,
+        BONUS30,
+        BONUS40,
+        BONUS50,
+        BONUS60,
+        BONUS70,
+        BONUS80,
+        BONUS90,
+        BONUS100,
+        BONUS110,
+        BONUS,
+        PRODUCT_POINT,
+        CALC_PERIOD_ID,
+        ACHIEVE_MEMBER_NUM,
+        ACHIEVE_PERF_PV
+    ) SELECT
+          AU.LAST_DEC_LV,
+          AU.EMP_LV,
+          AU.STATUS,
+          AU.ID,
+          IFNULL( AURN.PARENT_UID, 0 ),
+          AURN.TOP_DEEP,
+          IFNULL( AO.PV, 0 ),
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          0,
+          PCPID,
+          IFNULL(DO.ACHIEVE_MEMBER_NUM, 0),
+          IF(DO.ACHIEVE_MEMBER_NUM >= AC_USER_NO, AC_PERF_PV, MLIMITPV)
+    FROM
+        AR_USER AU
+    INNER JOIN AR_USER_RELATION_NEW AURN ON AU.ID = AURN.USER_ID
+    LEFT JOIN (
+        SELECT
+            USER_ID,
+            SUM( PV ) PV
+        FROM
+            AR_PERF_ORDER
+        WHERE
+                PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
+        GROUP BY
+            USER_ID
+    ) AO ON AO.USER_ID = AU.ID
+    LEFT JOIN (
+        SELECT
+            R.PARENT_UID,
+            COUNT(R.USER_ID) AS ACHIEVE_MEMBER_NUM
+        FROM
+            AR_PERF_ORDER O
+            INNER JOIN AR_USER_RELATION_NEW R ON O.USER_ID = R.USER_ID
+        WHERE
+            O.DEC_TYPE = 'ZC' AND O.PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
+        GROUP BY R.PARENT_UID
+    ) DO ON DO.PARENT_UID = AU.ID
+    WHERE
+            AU.DELETED = 0;
+
+END
+;;

+ 164 - 0
NGDS_CALC_PROCEDURE/CALCKEEP.sql

@@ -0,0 +1,164 @@
+DROP PROCEDURE IF EXISTS `CALCKEEP`;
+delimiter ;;
+CREATE PROCEDURE `CALCKEEP`(IN PCALCYEAR int, IN PCALCMONTH int)
+BEGIN
+    INSERT INTO AR_BS_BONUS_103_TEST SELECT
+        *
+    FROM
+        AR_BS_BONUS_103_CALC;
+    INSERT INTO AR_BS_BONUS_103_TEST_NET SELECT
+        *
+    FROM
+        AR_BS_BONUS_103_CALC_NET;
+           
+    UPDATE AR_BS_BONUS_103_CALC
+    SET USER_TYPE = 10
+    WHERE
+            USER_TYPE = 0
+      AND USER_TYPE10 = 10;
+       
+    INSERT INTO AR_CALC_BONUS_BS (
+        USER_ID,
+        INTRODUCER_ID,
+        LAST_DEC_LV,
+        LAST_EMP_LV,
+        LAST_STATUS,
+        LEVEL_ID,
+        ORI_BONUS,
+        MANAGE_TAX,
+        AMOUNT,
+        PRODUCT_POINT,
+        PERIOD_NUM,
+        CALC_YEAR,
+        CALC_MONTH,
+        P_CALC_MONTH,
+        CREATED_AT,
+        ORI_BONUS_MNT,
+        MANAGE_TAX_MNT,
+        AMOUNT_MNT,
+        ORI_BONUS_ABBR,
+        MANAGE_TAX_ABBR,
+        AMOUNT_ABBR,
+        ACHIEVE_MEMBER_NUM,
+        ACHIEVE_PERF_PV
+    ) SELECT
+          A.USER_ID,
+          A.INTRODUCER_ID,
+          A.LAST_DEC_LV,
+          A.LAST_EMP_LV,
+          A.LAST_STATUS,
+          B.ID,
+          IFNULL( A.BONUS, 0 ),
+          0,
+          IFNULL( A.BONUS, 0 ),
+          IFNULL( A.PRODUCT_POINT, 0 ),
+          CALC_PERIOD_ID,
+          PCALCYEAR,
+          PCALCYEAR*100+PCALCMONTH,
+          NOW(),
+          UNIX_TIMESTAMP(
+                  NOW()),
+          IFNULL( A.BONUS_MNT, 0 ),
+          0,
+          IFNULL( A.BONUS_MNT, 0 ),
+          IFNULL( A.BONUS_ABBR, 0 ),
+          0,
+          IFNULL( A.BONUS_ABBR, 0 ),
+          A.ACHIEVE_MEMBER_NUM,
+          A.ACHIEVE_PERF_PV
+    FROM
+        AR_BS_BONUS_103_CALC A
+            LEFT JOIN AR_EMPLOY_LEVEL B ON A.USER_TYPE = B.SORT * 10
+    WHERE
+            A.BONUS > 0
+       OR A.PRODUCT_POINT > 0
+       OR A.USER_TYPE = 10;
+      
+      INSERT INTO AR_CALC_BONUS_BS_DETAIL (
+        USER_ID,
+        INTRODUCER_ID,
+        LAST_DEC_LV,
+        LAST_EMP_LV,
+        LAST_STATUS,
+        LEVEL_ID,
+        ORI_BONUS,
+        MANAGE_TAX,
+        AMOUNT,
+        PRODUCT_POINT,
+        PERIOD_NUM,
+        LAYER,
+        PV,
+        GPV10,
+        GPV,
+        GPV_4_CALC,
+        USER_TYPE10,
+        USER_TYPE,
+        BONUS10,
+        BONUS20,
+        BONUS30,
+        BONUS40,
+        BONUS50,
+        BONUS60,
+        BONUS70,
+        BONUS80,
+        BONUS90,
+        BONUS100,
+        BONUS110,
+        CALC_YEAR,
+        CALC_MONTH,
+        P_CALC_MONTH,
+        CREATED_AT,
+        ORI_BONUS_MNT,
+        MANAGE_TAX_MNT,
+        AMOUNT_MNT,
+        ORI_BONUS_ABBR,
+        MANAGE_TAX_ABBR,
+        AMOUNT_ABBR
+    ) SELECT
+          USER_ID,
+          INTRODUCER_ID,
+          LAST_DEC_LV,
+          LAST_EMP_LV,
+          LAST_STATUS,
+          B.ID,
+          IFNULL( BONUS, 0 ),
+          0,
+          IFNULL( BONUS, 0 ),
+          IFNULL( PRODUCT_POINT, 0 ),
+          CALC_PERIOD_ID,
+          LAYER,
+          PV,
+          GPV10,
+          GPV,
+          GPV_4_CALC,
+          USER_TYPE10,
+          USER_TYPE,
+          BONUS10,
+          BONUS20,
+          BONUS30,
+          BONUS40,
+          BONUS50,
+          BONUS60,
+          BONUS70,
+          BONUS80,
+          BONUS90,
+          BONUS100,
+          BONUS110,
+          PCALCYEAR,
+          PCALCYEAR*100+PCALCMONTH,
+          NOW(),
+          UNIX_TIMESTAMP(
+                  NOW()),
+          IFNULL( A.BONUS_MNT, 0 ),
+          0,
+          IFNULL( A.BONUS_MNT, 0 ),
+          IFNULL( A.BONUS_ABBR, 0 ),
+          0,
+          IFNULL( A.BONUS_ABBR, 0 )
+    FROM
+        AR_BS_BONUS_103_CALC A
+            LEFT JOIN ( SELECT ID, SORT FROM AR_EMPLOY_LEVEL ) B ON A.USER_TYPE = B.SORT * 10;
+    
+
+END
+;;

+ 55 - 0
NGDS_CALC_PROCEDURE/CALCLEVEL.sql

@@ -0,0 +1,55 @@
+DROP PROCEDURE IF EXISTS `CALCLEVEL`;
+delimiter ;;
+CREATE PROCEDURE `CALCLEVEL`(IN `PCPID` INT)
+BEGIN
+	DECLARE
+		FLAG,
+		MLAYER,
+		MUSERTYPE INT DEFAULT 0;
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	
+		DECLARE
+		MC CURSOR FOR SELECT
+		LAYER
+	FROM
+		AR_BS_BONUS_103_CALC_NET T 
+	WHERE
+		T.USER_TYPE = 30 GROUP BY LAYER ORDER BY LAYER DESC;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;
+	START TRANSACTION;-- 打开游标
+
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MLAYER;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;
+		
+-- 计算当前层数的奖金以及向上所贡献的奖金
+			CALL CALCLEVEL_ ( MLAYER ,PCPID);
+	END LOOP;
+	CLOSE MC;
+	/*WHILE
+			( MLAYER >= 0 ) DO-- 计算当前层数的奖金以及向上所贡献的奖金
+			CALL CALCLEVEL_ ( MLAYER );
+		
+		SET MLAYER := MLAYER - 1;
+		
+	END WHILE;*/-- 级别更新
+	
+
+	UPDATE AR_BS_BONUS_103_CALC C1
+	INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID 
+	AND C1.USER_TYPE <> C2.USER_TYPE 
+	SET C1.USER_TYPE = C2.USER_TYPE;
+
+
+
+END
+;;

+ 273 - 0
NGDS_CALC_PROCEDURE/CALCLEVEL_.sql

@@ -0,0 +1,273 @@
+DROP PROCEDURE IF EXISTS `CALCLEVEL_`;
+delimiter ;;
+CREATE PROCEDURE `CALCLEVEL_`(IN PLAYER int, IN PCPID int)
+BEGIN
+	DECLARE
+		FLAG,
+		MLAYER,
+		MUSERTYPE INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MBONUSID,
+		MNEWBONUSID VARCHAR ( 50 );
+	DECLARE
+		MRATE,
+		MRATE30,
+		MRATE40,
+		MRATE50,
+		MRATE60,
+		MRATE70,
+		MRATE80,
+		MRATE90,
+		MRATE100,
+		MRATE110,
+		MBONUS,
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		MC CURSOR FOR SELECT
+		C.USER_ID,
+		C.TEAM_GPV 
+	FROM
+		AR_BS_BONUS_103_CALC_NET C 
+	WHERE
+		C.USER_TYPE >= 30 
+		AND LAYER = PLAYER;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;
+
+	START TRANSACTION;
+
+	-- 取各级别蓝星奖比例【开始】
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE30 
+	FROM
+		AR_EMPLOY_LEVEL T 
+	WHERE
+		T.ID = 'E121497617216708616';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE40 
+	FROM
+		AR_EMPLOY_LEVEL T 
+	WHERE
+		T.ID = '67BE6A4D03C52288E055736AECE8644D';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE50 
+	FROM
+		AR_EMPLOY_LEVEL T 
+	WHERE
+		T.ID = '67BE6EA2070D22EBE055736AECE8644D';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE60
+	FROM
+		AR_EMPLOY_LEVEL T
+	WHERE
+		T.ID = '67BE742A336F2370E055736AECE8644D';
+
+	SELECT
+		T.BS_PERCENT / 100 INTO MRATE70
+	FROM
+		AR_EMPLOY_LEVEL T
+	WHERE
+		T.ID = '67BE805032C22492E055736AECE8644D';
+
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE80
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '67BE82019BE524CAE055736AECE8644D';
+#
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE90
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '99BE5FE7857C216AE055736AECE8644D';
+#
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE100
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '99BE5FE9008C216AE055736AECE8644D';
+#
+# 	SELECT
+# 		T.BS_PERCENT / 100 INTO MRATE110
+# 	FROM
+# 		AR_EMPLOY_LEVEL T
+# 	WHERE
+# 		T.ID = '99BE5FE7857C216AE000223AECE8644D';
+    -- 取各级别蓝星奖比例【结束】
+
+    -- 打开游标
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MUSERID,
+			MGPV;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;-- 这里是为了显示获取结果
+		
+		SET MLAYER := 1;
+		
+		SET MBONUSID := MUSERID;
+		OUTER_LABEL :
+		WHILE ( MLAYER <= 5 ) DO
+			IF ( MLAYER > 1 ) THEN
+					CALL CALCREFEREE ( MBONUSID, MNEWBONUSID );
+				IF ( ISNULL( MNEWBONUSID ) OR MNEWBONUSID = 0 ) THEN
+						LEAVE OUTER_LABEL;
+					ELSE 
+						SET MBONUSID := MNEWBONUSID;
+					
+				END IF;
+				
+			END IF;
+			IF
+				( MLAYER = 1 ) THEN
+					
+					SET MRATE := MRATE30;
+				
+				ELSEIF ( MLAYER = 2 ) THEN
+				
+				SET MRATE := MRATE40;
+				
+				ELSEIF ( MLAYER = 3 ) THEN
+				
+				SET MRATE := MRATE50;
+				
+				ELSEIF ( MLAYER = 4 ) THEN
+				
+				SET MRATE := MRATE60;
+				
+				ELSEIF ( MLAYER = 5 ) THEN
+				
+				SET MRATE := MRATE70;
+				
+				ELSEIF ( MLAYER = 6 ) THEN
+				
+				SET MRATE := MRATE80;
+				
+				ELSEIF ( MLAYER = 7 ) THEN
+				
+				SET MRATE := MRATE90;
+				
+				ELSEIF ( MLAYER = 8 ) THEN
+				
+				SET MRATE := MRATE100;
+				
+				ELSEIF ( MLAYER = 9 ) THEN
+				
+				SET MRATE := MRATE110;
+				
+			END IF;
+			
+			SET MBONUS := MGPV * MRATE;
+			IF
+				( MLAYER = 1 ) THEN
+					UPDATE AR_BS_BONUS_103_CALC T 
+					SET T.BONUS30 = T.BONUS30 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, NULL, 30, MBONUS, MGPV, MRATE ,PCPID);
+				
+				ELSEIF ( MLAYER = 2 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS40 = T.BONUS40 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 40, MBONUS, MGPV, MRATE ,PCPID);
+				
+				ELSEIF ( MLAYER = 3 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS50 = T.BONUS50 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 50, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 4 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS60 = T.BONUS60 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 60, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 5 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS70 = T.BONUS70 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 70, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 6 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS80 = T.BONUS80 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 80, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 7 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS90 = T.BONUS90 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 90, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 8 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS100 = T.BONUS100 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 100, MBONUS, MGPV, MRATE,PCPID );
+				
+				ELSEIF ( MLAYER = 9 ) THEN
+				UPDATE AR_BS_BONUS_103_CALC T 
+				SET T.BONUS110 = T.BONUS110 + MBONUS 
+				WHERE
+					T.USER_ID = MBONUSID;
+				INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+				VALUES
+					( MBONUSID, MUSERID, 110, MBONUS, MGPV, MRATE,PCPID );
+				
+			END IF;-- 计算会员的级别
+			UPDATE AR_BS_BONUS_103_CALC_NET T 
+			SET T.USER_TYPE = ( MLAYER + 2 )* 10 
+			WHERE
+				T.USER_ID = MBONUSID 
+				AND USER_TYPE <=(
+					MLAYER + 1 
+				)* 10;
+			
+			SET MLAYER := MLAYER + 1;
+			
+		END WHILE;-- 关闭游标
+		
+	END LOOP;
+	CLOSE MC;
+	COMMIT;
+
+END
+;;

+ 262 - 0
NGDS_CALC_PROCEDURE/CALCLEVEL_kevin_01.sql

@@ -0,0 +1,262 @@
+DROP PROCEDURE IF EXISTS `CALCLEVEL_kevin_01`;
+delimiter ;;
+CREATE PROCEDURE `CALCLEVEL_kevin_01`(IN PLAYER int, IN PCPID int)
+BEGIN
+    DECLARE
+        FLAG,
+        MLAYER,
+        MUSERTYPE INT DEFAULT 0;
+    DECLARE
+        MUSERID,
+        MBONUSID,
+        MNEWBONUSID VARCHAR ( 50 );
+    DECLARE
+        MRATE,
+        MRATE30,
+        MRATE40,
+        MRATE50,
+        MRATE60,
+        MRATE70,
+        MRATE80,
+        MRATE90,
+        MRATE100,
+        MRATE110,
+        MBONUS,
+        MGPV DECIMAL ( 10, 2 );
+    DECLARE
+        MC CURSOR FOR SELECT
+                          C.USER_ID,
+                          C.TEAM_GPV
+                      FROM
+                          AR_BS_BONUS_103_CALC_NET C
+                      WHERE
+                              C.USER_TYPE >= 30
+                        AND LAYER = PLAYER;
+    DECLARE
+        CONTINUE HANDLER FOR NOT FOUND
+        SET FLAG = 1;
+    START TRANSACTION;
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE30
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = 'E121497617216708616';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE40
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE6A4D03C52288E055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE50
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE6EA2070D22EBE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE60
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE742A336F2370E055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE70
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE805032C22492E055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE80
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '67BE82019BE524CAE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE90
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '99BE5FE7857C216AE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE100
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '99BE5FE9008C216AE055736AECE8644D';
+    SELECT
+            T.BS_PERCENT / 100 INTO MRATE110
+    FROM
+        AR_EMPLOY_LEVEL T
+    WHERE
+            T.ID = '99BE5FE7857C216AE000223AECE8644D';-- 打开游标
+    OPEN MC;-- 获取结果
+    L2 :
+    LOOP
+        FETCH MC INTO MUSERID,
+            MGPV;
+        IF
+                FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+            LEAVE L2;
+
+        END IF;-- 这里是为了显示获取结果
+
+        SET MLAYER := 1;
+
+        SET MBONUSID := MUSERID;
+        OUTER_LABEL :
+        WHILE
+            ( MLAYER <= 9 ) DO
+                IF
+                    ( MLAYER > 1 ) THEN
+                    CALL CALCREFEREE ( MBONUSID, MNEWBONUSID );
+                    IF
+                        ( ISNULL( MNEWBONUSID ) OR MNEWBONUSID = 0 ) THEN
+                        LEAVE OUTER_LABEL;
+                    ELSE
+                        SET MBONUSID := MNEWBONUSID;
+
+                    END IF;
+
+                END IF;
+                IF
+                    ( MLAYER = 1 ) THEN
+
+                    SET MRATE := MRATE30;
+
+                ELSEIF ( MLAYER = 2 ) THEN
+
+                    SET MRATE := MRATE40;
+
+                ELSEIF ( MLAYER = 3 ) THEN
+
+                    SET MRATE := MRATE50;
+
+                ELSEIF ( MLAYER = 4 ) THEN
+
+                    SET MRATE := MRATE60;
+
+                ELSEIF ( MLAYER = 5 ) THEN
+
+                    SET MRATE := MRATE70;
+
+                ELSEIF ( MLAYER = 6 ) THEN
+
+                    SET MRATE := MRATE80;
+
+                ELSEIF ( MLAYER = 7 ) THEN
+
+                    SET MRATE := MRATE90;
+
+                ELSEIF ( MLAYER = 8 ) THEN
+
+                    SET MRATE := MRATE100;
+
+                ELSEIF ( MLAYER = 9 ) THEN
+
+                    SET MRATE := MRATE110;
+
+                END IF;
+
+                SET MBONUS := MGPV * MRATE;
+                IF
+                    ( MLAYER = 1 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS30 = T.BONUS30 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, NULL, 30, MBONUS, MGPV, MRATE ,PCPID);
+
+                ELSEIF ( MLAYER = 2 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS40 = T.BONUS40 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 40, MBONUS, MGPV, MRATE ,PCPID);
+
+                ELSEIF ( MLAYER = 3 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS50 = T.BONUS50 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 50, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 4 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS60 = T.BONUS60 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 60, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 5 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS70 = T.BONUS70 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 70, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 6 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS80 = T.BONUS80 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 80, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 7 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS90 = T.BONUS90 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 90, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 8 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS100 = T.BONUS100 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 100, MBONUS, MGPV, MRATE,PCPID );
+
+                ELSEIF ( MLAYER = 9 ) THEN
+                    UPDATE AR_BS_BONUS_103_CALC T
+                    SET T.BONUS110 = T.BONUS110 + MBONUS
+                    WHERE
+                            T.USER_ID = MBONUSID;
+                    INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
+                    VALUES
+                        ( MBONUSID, MUSERID, 110, MBONUS, MGPV, MRATE,PCPID );
+
+                END IF;-- 计算会员的级别
+                UPDATE AR_BS_BONUS_103_CALC_NET T
+                SET T.USER_TYPE = ( MLAYER + 2 )* 10
+                WHERE
+                        T.USER_ID = MBONUSID
+                  AND USER_TYPE <=(
+                                          MLAYER + 1
+                                      )* 10;
+
+                SET MLAYER := MLAYER + 1;
+
+            END WHILE;-- 关闭游标
+
+    END LOOP;
+    CLOSE MC;
+    COMMIT;
+
+END
+;;

+ 11 - 0
NGDS_CALC_PROCEDURE/CALCMAIN.sql

@@ -0,0 +1,11 @@
+DROP PROCEDURE IF EXISTS `CALCMAIN`;
+delimiter ;;
+CREATE PROCEDURE `CALCMAIN`(IN `PCPID` int,OUT `PRESULT` varchar(100))
+BEGIN
+	#Routine body goes here...
+DECLARE EXIT HANDLER FOR SQLEXCEPTION  
+SET PRESULT = 'FAIL';
+ CALL CalcBlue(PCPID);
+SET PRESULT = 'SUCCESS';
+END
+;;

+ 22 - 0
NGDS_CALC_PROCEDURE/CALCPOINT.sql

@@ -0,0 +1,22 @@
+DROP PROCEDURE IF EXISTS `CALCPOINT`;
+delimiter ;;
+CREATE PROCEDURE `CALCPOINT`()
+BEGIN
+	DECLARE
+		MPOINTRATE DECIMAL ( 10, 2 );
+	SELECT 
+	VALUE
+		/ 100 INTO MPOINTRATE 
+	FROM
+		AR_CONFIG 
+	WHERE
+		CONFIG_NAME = 'bsNoPvPointsPercent';
+	UPDATE AR_BS_BONUS_103_CALC 
+	SET PRODUCT_POINT = PV * MPOINTRATE 
+	WHERE
+		USER_TYPE10 = 0 
+		AND USER_TYPE = 0 
+		AND PV > 0;
+
+END
+;;

+ 10 - 0
NGDS_CALC_PROCEDURE/CALCRECORD.sql

@@ -0,0 +1,10 @@
+DROP PROCEDURE IF EXISTS `CALCRECORD`;
+delimiter ;;
+CREATE PROCEDURE `CALCRECORD`(IN `PID` INT, IN `PEVENT` VARCHAR ( 255 ), IN `PCPID` INT, IN `PNOW` DATETIME)
+BEGIN
+	INSERT INTO AR_BS_BONUS_103_CALC_EVENT ( ID, EVENT, CREATION_TIME, CALC_PERIOD_ID )
+	VALUES
+		( PID, PEVENT, NOW(), PCPID );
+
+END
+;;

+ 143 - 0
NGDS_CALC_PROCEDURE/CALCREFEREE.sql

@@ -0,0 +1,143 @@
+DROP PROCEDURE IF EXISTS `CALCREFEREE`;
+delimiter ;;
+CREATE PROCEDURE `CALCREFEREE`(IN `PBONUSID` VARCHAR ( 50 ),
+	OUT `PNEWBONUSID` VARCHAR ( 50 ))
+BEGIN
+	DECLARE
+		MUSERID,
+		MBONUSID VARCHAR ( 50 );
+	DECLARE
+		MUSERTYPE INT;
+	
+	/*SET MUSERID := PBONUSID;
+	OUTER_LABEL :
+	WHILE
+			(
+			ISNULL( MBONUSID )) DO
+		SELECT
+			INTRODUCER_ID INTO MUSERID 
+		FROM
+			AR_BS_BONUS_103_CALC_NET T 
+		WHERE
+			T.USER_ID = MUSERID;
+		IF
+			( MUSERID = 0 ) THEN
+				
+				SET PNEWBONUSID := NULL;
+			LEAVE OUTER_LABEL;
+			
+		END IF;
+		SELECT
+			USER_TYPE INTO MUSERTYPE 
+		FROM
+			AR_BS_BONUS_103_CALC_NET T 
+		WHERE
+			T.USER_ID = MUSERID;
+		IF
+			( MUSERTYPE >= 30 ) THEN
+				
+				SET PNEWBONUSID := MUSERID;
+			LEAVE OUTER_LABEL;
+			
+		END IF;
+		
+	END WHILE;*/
+  SELECT INTRODUCER_ID30 INTO PNEWBONUSID FROM AR_BS_BONUS_103_CALC_NET WHERE USER_ID = PBONUSID;
+END
+;;
+delimiter ;
+
+-- ----------------------------
+-- Procedure structure for CALCSTAT
+-- ----------------------------
+DROP PROCEDURE IF EXISTS `CALCSTAT`;
+delimiter ;;
+CREATE PROCEDURE `CALCSTAT`(IN PCPID int)
+BEGIN
+	INSERT INTO AR_CALC_BONUS_BS_STAT (
+		PERIOD_NUM,
+		TOTAL_PV,
+		BONUS10,
+		PERCENT10,
+		BONUS20,
+		PERCENT20,
+		BONUS30,
+		PERCENT30,
+		BONUS40,
+		PERCENT40,
+		BONUS50,
+		PERCENT50,
+		BONUS60,
+		PERCENT60,
+		BONUS70,
+		PERCENT70,
+		BONUS80,
+		PERCENT80,
+		BONUS90,
+		PERCENT90,
+		BONUS100,
+		PERCENT100,
+		BONUS110,
+		PERCENT110,
+		BONUS,
+		PERCENT,
+		CHECK_STATUS,
+        BONUS_MNT,
+        BONUS_MNT_PERCENT,
+        BONUS_ABBR,
+        BONUS_ABBR_PERCENT
+	) SELECT
+	PCPID,
+	SUM( PV ),
+	SUM( BONUS10 ),
+	0,
+	SUM( BONUS20 ),
+	0,
+	SUM( BONUS30 ),
+	0,
+	SUM( BONUS40 ),
+	0,
+	SUM( BONUS50 ),
+	0,
+	SUM( BONUS60 ),
+	0,
+	SUM( BONUS70 ),
+	0,
+	SUM( BONUS80 ),
+	0,
+	SUM( BONUS90 ),
+	0,
+	SUM( BONUS100 ),
+	0,
+	SUM( BONUS110 ),
+	0,
+	SUM( BONUS ),
+	0,
+	0,
+    SUM(BONUS_MNT),
+    0,
+	SUM(BONUS_ABBR),
+    0
+	FROM
+		AR_BS_BONUS_103_CALC;
+
+	UPDATE AR_CALC_BONUS_BS_STAT 
+        SET PERCENT10 = BONUS10 / TOTAL_PV,
+        PERCENT20 = BONUS20 / TOTAL_PV,
+        PERCENT30 = BONUS30 / TOTAL_PV,
+        PERCENT40 = BONUS40 / TOTAL_PV,
+        PERCENT50 = BONUS50 / TOTAL_PV,
+        PERCENT60 = BONUS60 / TOTAL_PV,
+        PERCENT70 = BONUS70 / TOTAL_PV,
+        PERCENT80 = BONUS80 / TOTAL_PV,
+        PERCENT90 = BONUS90 / TOTAL_PV,
+        PERCENT100 = BONUS100 / TOTAL_PV,
+        PERCENT110 = BONUS110 / TOTAL_PV,
+        PERCENT = BONUS / TOTAL_PV,
+        BONUS_MNT_PERCENT = BONUS_MNT / TOTAL_PV,
+        BONUS_ABBR_PERCENT = BONUS_ABBR / TOTAL_PV
+	WHERE
+		PERIOD_NUM = PCPID AND TOTAL_PV > 0;
+
+END
+;;

+ 27 - 0
NGDS_CALC_PROCEDURE/CALCSUMMARY.sql

@@ -0,0 +1,27 @@
+DROP PROCEDURE IF EXISTS `CALCSUMMARY`;
+delimiter ;;
+CREATE PROCEDURE `CALCSUMMARY`()
+BEGIN
+	UPDATE AR_BS_BONUS_103_CALC T 
+	    SET T.BONUS = BONUS10 + BONUS20 + BONUS30 + BONUS40 + BONUS50 + BONUS60 + BONUS70 + BONUS80 + BONUS90 + BONUS100 + BONUS110,
+	        T.BONUS_MNT = BONUS30 + BONUS40 + BONUS50 + BONUS60 + BONUS70 + BONUS80 + BONUS90 + BONUS100 + BONUS110,
+	        T.BONUS_ABBR = BONUS10 + BONUS20
+	WHERE
+		T.BONUS10 > 0 
+		OR T.BONUS20 > 0 
+		OR T.BONUS30 > 0 
+		OR T.BONUS40 > 0 
+		OR T.BONUS50 > 0 
+		OR T.BONUS60 > 0 
+		OR T.BONUS70 > 0 
+		OR T.BONUS80 > 0 
+		OR T.BONUS90 > 0 
+		OR T.BONUS100 > 0 
+		OR T.BONUS110 > 0;
+	UPDATE AR_BS_BONUS_103_CALC T 
+	SET GPV = 0 
+	WHERE
+		T.INTRODUCER_ID = '0' 
+		AND USER_TYPE = 0;
+END
+;;

+ 40 - 0
NGDS_CALC_PROCEDURE/CALCTOTALGPV.sql

@@ -0,0 +1,40 @@
+DROP PROCEDURE IF EXISTS `CALCTOTALGPV`;
+delimiter ;;
+CREATE PROCEDURE `CALCTOTALGPV`()
+BEGIN
+	DECLARE
+		MLAYER,
+		MMINLAYER,
+		MUSERTYPE INT DEFAULT 0;
+	DECLARE
+		MUSERID,
+		MMAXUSERID VARCHAR ( 50 );
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	SELECT
+		MAX( LAYER ) INTO MLAYER 
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		GPV > 0;
+	SELECT
+		MIN( LAYER ) INTO MMINLAYER 
+	FROM
+		AR_BS_BONUS_103_CALC_NET 
+	WHERE
+		USER_TYPE = 30;
+	UPDATE AR_BS_BONUS_103_CALC_NET T1
+	INNER JOIN AR_BS_BONUS_103_CALC_NET T2 ON IFNULL( T1.INTRODUCER_ID, '0' ) = T2.USER_ID 
+	AND T1.USER_TYPE = 30 
+	AND T2.USER_TYPE = 30 
+	SET T1.INTRODUCER_ID30 = T2.USER_ID;
+	WHILE
+			MLAYER > MMINLAYER DO
+			CALL CALCTOTALGPV_ ( MLAYER, MMINLAYER );
+		
+		SET MLAYER = MLAYER - 1;
+		
+	END WHILE;
+
+END
+;;

+ 105 - 0
NGDS_CALC_PROCEDURE/CALCTOTALGPV_.sql

@@ -0,0 +1,105 @@
+DROP PROCEDURE IF EXISTS `CALCTOTALGPV_`;
+delimiter ;;
+CREATE PROCEDURE `CALCTOTALGPV_`(IN `PLAYER` INT, -- 第几层
+	IN `PMINLAYER` INT)
+BEGIN
+	DECLARE
+		FLAG,
+		MLAYER,
+		MINTLAYER,
+		MUSERTYPE,
+		MINTTYPE INT DEFAULT 0;
+	DECLARE
+		MGPV DECIMAL ( 10, 2 );
+	DECLARE
+		MUSERID,
+		MUSERINTID,
+		MINTUSERID,
+		MINTRODUCERID VARCHAR ( 50 );
+	DECLARE
+		MC CURSOR FOR SELECT
+		C.USER_ID,
+		C.INTRODUCER_ID,
+		C.USER_TYPE,
+		C.GPV 
+	FROM
+		(
+		SELECT
+			USER_ID,
+			IFNULL( INTRODUCER_ID, '0' ) INTRODUCER_ID,
+			USER_TYPE,
+			GPV 
+		FROM
+			AR_BS_BONUS_103_CALC_NET 
+		WHERE
+			LAYER = PLAYER 
+			AND GPV > 0 
+			OR ( GPV = 0 AND USER_TYPE = 30 ) 
+		ORDER BY
+			USER_ID DESC 
+		) C;
+	DECLARE
+		CONTINUE HANDLER FOR NOT FOUND 
+		SET FLAG = 1;
+	START TRANSACTION;-- 打开游标
+	OPEN MC;-- 获取结果
+	L2 :
+	LOOP
+			FETCH MC INTO MUSERID,
+			MUSERINTID,
+			MUSERTYPE,
+			MGPV;
+		IF
+			FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
+				LEAVE L2;
+			
+		END IF;
+		SET MLAYER = PLAYER;
+		
+		SET MINTUSERID = MUSERINTID;
+		IF
+			( MINTUSERID != '0' ) THEN
+				OUTLABEL :
+			WHILE
+					MLAYER > PMINLAYER DO
+				SELECT
+					INTRODUCER_ID,
+					USER_TYPE,
+					LAYER INTO MINTRODUCERID,
+					MINTTYPE,
+					MLAYER 
+				FROM
+					AR_BS_BONUS_103_CALC_NET 
+				WHERE
+					USER_ID = MINTUSERID;
+				IF
+					( MINTUSERID != MUSERINTID AND MINTTYPE = 30 ) THEN
+						UPDATE AR_BS_BONUS_103_CALC_NET 
+						SET TEAM_GPV = TEAM_GPV + MGPV 
+					WHERE
+						USER_ID = MINTUSERID;
+					IF
+						( MUSERTYPE = 30 ) THEN
+							UPDATE AR_BS_BONUS_103_CALC_NET 
+							SET INTRODUCER_ID30 = MINTUSERID 
+						WHERE
+							USER_ID = MUSERID 
+							AND INTRODUCER_ID30 IS NULL;
+						
+					END IF;
+					LEAVE OUTLABEL;
+					
+				END IF;
+				
+				SET MINTUSERID = MINTRODUCERID;
+				
+			END WHILE;
+			
+		END IF;-- 关闭游标
+		
+	END LOOP;
+	CLOSE MC;
+	COMMIT;
+
+END
+;;

+ 14 - 0
NGDS_CALC_PROCEDURE/CALCUP30.sql

@@ -0,0 +1,14 @@
+DROP PROCEDURE IF EXISTS `CALCUP30`;
+delimiter ;;
+CREATE PROCEDURE `CALCUP30`()
+BEGIN
+	START TRANSACTION;
+	UPDATE AR_BS_BONUS_103_CALC_NET T1 
+	SET T1.USER_TYPE = 30 
+	WHERE
+		USER_TYPE >= 10 
+		AND DIRECTLY_UNDER >= 3;
+	COMMIT;
+
+END
+;;

+ 58 - 0
NGDS_CALC_PROCEDURE/CALCUPGARDE.sql

@@ -0,0 +1,58 @@
+DROP PROCEDURE IF EXISTS `CALCUPGARDE`;
+delimiter ;;
+CREATE PROCEDURE `CALCUPGARDE`(IN `PLAYER` INT)
+BEGIN
+	DECLARE
+		MLAYER,
+		MCOUNT,
+		MCOUNT1,
+		MCOUNT2 INT;
+	
+	SET MLAYER := PLAYER;
+	SELECT
+		COUNT(*) INTO MCOUNT 
+	FROM
+		AR_BS_BONUS_103_CALC T 
+	WHERE
+		T.LAYER = MLAYER 
+		AND USER_TYPE10 = 10 
+		AND USER_TYPE = 0;
+	IF
+		( MCOUNT > 0 ) THEN
+			BREAKLABLE :
+		WHILE
+				MLAYER > 0 DO
+			SELECT
+				COUNT(*) INTO MCOUNT1 
+			FROM
+				AR_BS_BONUS_103_CALC T1 
+			WHERE
+				T1.USER_TYPE10 = 10 
+				AND T1.LAYER = MLAYER - 1;
+			UPDATE AR_BS_BONUS_103_CALC T1
+			INNER JOIN ( SELECT INTRODUCER_ID FROM AR_BS_BONUS_103_CALC WHERE LAYER = MLAYER AND USER_TYPE10 = 10 GROUP BY INTRODUCER_ID ) T2 ON T1.USER_ID = T2.INTRODUCER_ID 
+			AND T1.USER_TYPE10 = 0 
+			AND T1.LAYER = MLAYER - 1 
+			SET T1.USER_TYPE10 = 10,
+			T1.USER_TYPE = 10;
+			SELECT
+				COUNT(*) INTO MCOUNT2 
+			FROM
+				AR_BS_BONUS_103_CALC T1 
+			WHERE
+				T1.USER_TYPE10 = 10 
+				AND T1.LAYER = MLAYER - 1;
+			IF
+				( MCOUNT1 = MCOUNT2 ) THEN
+					LEAVE BREAKLABLE;
+				
+			END IF;
+			
+			SET MLAYER := MLAYER - 1;
+			
+		END WHILE;
+		
+	END IF;
+
+END
+;;

+ 156 - 0
NGDS_CALC_PROCEDURE/CLEANACTIVE.sql

@@ -0,0 +1,156 @@
+DROP PROCEDURE IF EXISTS `CLEANACTIVE`;
+delimiter ;;
+CREATE PROCEDURE `CLEANACTIVE`(IN `UNUMBER` VARCHAR(32))
+BEGIN
+DECLARE t_error INTEGER DEFAULT 0;    
+DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
+
+START TRANSACTION;
+  -- 备份用户的余额 奖金 兑换积分 复消积分
+	INSERT INTO `AR_ACTIVED_ACCOUNT_BACK` ( `USER_ID`, `USER_NAME`, `USER_CASH`, `EXCHANGE_POINTS`, `EXCHANGE_POINTS_TOTAL`, `RECONSUME_POINTS`, `RECONSUME_POINTS_TOTAL`, `USER_BONUS`, `RECONSUME_POINTS_EXPIRED` ) SELECT
+`AR_USER_BONUS`.`USER_ID`,
+`AR_USER`.`USER_NAME`,
+`AR_USER_WALLET`.`CASH`,
+`AR_USER_BONUS`.`EXCHANGE_POINTS`,
+`AR_USER_BONUS`.`EXCHANGE_POINTS_TOTAL`,
+`AR_USER_BONUS`.`RECONSUME_POINTS`,
+`AR_USER_BONUS`.`RECONSUME_POINTS_TOTAL`,
+`AR_USER_BONUS`.`BONUS`,
+`AR_USER_BONUS`.`RECONSUME_POINTS_EXPIRED` 
+FROM
+	`AR_USER_BONUS`
+	INNER JOIN `AR_USER` ON `AR_USER`.`ID` = `AR_USER_BONUS`.`USER_ID`
+	LEFT JOIN `AR_USER_WALLET` ON `AR_USER_WALLET`.`USER_ID` = `AR_USER_BONUS`.`USER_ID` 
+WHERE
+	`AR_USER`.`USER_NAME` = `UNUMBER`;
+
+	-- 删除用户奖金
+	DELETE  `UB`  FROM  `AR_USER_BONUS` `UB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	
+	-- 清除用户的cash余额
+	UPDATE `AR_USER_WALLET` INNER JOIN `AR_USER` ON `AR_USER`.`ID`=`AR_USER_WALLET`.`USER_ID`      SET  `AR_USER_WALLET`.`CASH`=0 WHERE `AR_USER`.`USER_NAME` = `UNUMBER`; 
+	
+	
+	-- 删除用户累计业绩
+	DELETE  `UP`  FROM  `AR_USER_PERF` `UP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	
+	-- 删除用户总奖金发送记录
+	DELETE  `CB`  FROM  `AR_CALC_BONUS` `CB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	
+	-- 删除用户各个奖金发送记录
+	DELETE  `CBBD`  FROM  `AR_CALC_BONUS_BD` `CBBD` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBBD`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBBS`  FROM  `AR_CALC_BONUS_BS` `CBBS` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBBS`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBBT`  FROM  `AR_CALC_BONUS_BT` `CBBT` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBBT`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBCF`  FROM  `AR_CALC_BONUS_CF` `CBCF` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBCF`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBFL`  FROM  `AR_CALC_BONUS_FL` `CBFL` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBFL`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBFW`  FROM  `AR_CALC_BONUS_FW` `CBFW` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBFW`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBFX`  FROM  `AR_CALC_BONUS_FX` `CBFX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBFX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBGL`  FROM  `AR_CALC_BONUS_GL` `CBGL` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBGL`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBGX`  FROM  `AR_CALC_BONUS_GX` `CBGX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBGX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBLS`  FROM  `AR_CALC_BONUS_LS` `CBLS` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBLS`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBLX`  FROM  `AR_CALC_BONUS_LX` `CBLX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBLX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBQY`  FROM  `AR_CALC_BONUS_QY` `CBQY` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBQY`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBST`  FROM  `AR_CALC_BONUS_STANDARD` `CBST` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBST`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBTG`  FROM  `AR_CALC_BONUS_TG` `CBTG` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBTG`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBVIP`  FROM  `AR_CALC_BONUS_VIP` `CBVIP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBVIP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBXF`  FROM  `AR_CALC_BONUS_XF` `CBXF` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBXF`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBYC`  FROM  `AR_CALC_BONUS_YC` `CBYC` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBYC`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CBYJ`  FROM  `AR_CALC_BONUS_YJ` `CBYJ` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CBYJ`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `CMBU`  FROM  `AR_CALC_MONTH_BONUS_USER` `CMBU` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`CMBU`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FB`  FROM  `AR_FLOW_BONUS` `FB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FC`  FROM  `AR_FLOW_CF` `FC` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FC`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FDZ`  FROM  `AR_FLOW_DEDUCT_ZR` `FDZ` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FDZ`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FEP`  FROM  `AR_FLOW_EXCHANGE_POINTS` `FEP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FEP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FLX`  FROM  `AR_FLOW_LX` `FLX` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FLX`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FRP`  FROM  `AR_FLOW_RECONSUME_POINTS` `FRP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FRP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `FW`  FROM  `AR_FLOW_WALLET` `FW` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`FW`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `HB`  FROM  `AR_HISTORY_BONUS` `HB` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`HB`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `UPEP`  FROM  `AR_USER_PERIOD_EXCHANGE_POINTS` `UPEP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UPEP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `UPP`  FROM  `AR_USER_PERIOD_POINTS` `UPP` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`UPP`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `AW`  FROM  `AR_WITHDRAW` `AW` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`AW`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `AT`  FROM  `AR_TRANSFER` `AT` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`AT`.`OUT_UID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `ABA`  FROM  `AR_BALANCE_AUDIT` `ABA` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`ABA`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `R`  FROM  `AR_RECHARGE` `R` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`R`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	DELETE  `ASM`  FROM  `AR_SCORE_MONTH` `ASM` INNER JOIN `AR_USER` `U` ON `U`.`ID`=`ASM`.`USER_ID` 
+	WHERE `U`.`USER_NAME` = `UNUMBER`;
+	
+	IF t_error = 1 THEN    
+      ROLLBACK;    
+  ELSE
+	    COMMIT;
+	END IF;
+	select t_error;  -- 返回标识位的结果集
+END
+;;

+ 146 - 0
NGDS_CALC_PROCEDURE/QTRCALC.sql

@@ -0,0 +1,146 @@
+DROP PROCEDURE IF EXISTS `QTRCALC`;
+delimiter ;;
+CREATE 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,
+		(MAX(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
+	 INNER JOIN 
+		AR_USER AS U
+	 ON QY.USER_ID = U.ID
+	 
+	WHERE
+		QY.LAST_CROWN_LV != (SELECT ID FROM AR_CROWN_LEVEL WHERE SORT = 0)
+		AND U.DEC_LV = '67ABCE0ECE705575E055736AECE8644D'
+		AND QY.CALC_MONTH >= CONCAT(THISYEAR, lpad(QTRSTARTMONTH,2,0)) 
+		AND QY.CALC_MONTH <= CONCAT(THISYEAR, lpad(THISMONTH,2,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;
+
+CALL QTRCALCRECORD(6,'写入user表',PCPID,NOW());
+
+COMMIT;
+
+INSERT INTO AR_CALC_BONUS_QUARTER
+	SELECT
+		NULL AS ID,
+		AU.USER_ID,
+		AU.AMOUNT AS ORI_BONUS,
+		0 AS MANAGE_TAX,
+		AU.AMOUNT,
+		0 AS RECONSUME_POINTS,
+		U.DEC_LV,
+		AU.CALC_MONTH, 
+		AU.PERIOD_NUM,
+		NOW() AS CREATE_AT
+	FROM
+		AR_QTR_CALC_USER AS AU
+	 LEFT JOIN
+	  AR_USER AS U
+	 ON AU.USER_ID = U.ID;
+
+CALL QTRCALCRECORD(20,'写入季度奖金表',PCPID,NOW());
+COMMIT;	
+
+END
+;;

+ 10 - 0
NGDS_CALC_PROCEDURE/QTRCALCRECORD.sql

@@ -0,0 +1,10 @@
+DROP PROCEDURE IF EXISTS `QTRCALCRECORD`;
+delimiter ;;
+CREATE PROCEDURE `QTRCALCRECORD`(IN `PID` INT, IN `PEVENT` VARCHAR ( 255 ), IN `PCPID` INT, IN `PNOW` DATETIME)
+BEGIN
+	INSERT INTO AR_QTR_CALC_RECORD ( ID, EVENT, CREATION_TIME, CALC_PERIOD_ID )
+	VALUES
+		( PID, PEVENT, NOW(), PCPID );
+
+END
+;;

+ 17 - 0
NGDS_CALC_PROCEDURE/QTRCLEAN.sql

@@ -0,0 +1,17 @@
+DROP PROCEDURE IF EXISTS `QTRCLEAN`;
+delimiter ;;
+CREATE PROCEDURE `QTRCLEAN`(IN `PCPID` INT)
+BEGIN-- 删除当期奖金
+	DELETE 
+	FROM
+		AR_CALC_BONUS_QUARTER
+	WHERE
+		PERIOD_NUM >= PCPID;
+  TRUNCATE
+		AR_QTR_CALC_USER;
+	TRUNCATE
+		AR_QTR_CALC_WEIGHT;
+	TRUNCATE
+		AR_QTR_CALC_SCORE;
+END
+;;

+ 37 - 0
NGDS_CALC_PROCEDURE/UPPERCASE.sql

@@ -0,0 +1,37 @@
+DROP PROCEDURE IF EXISTS `UPPERCASE`;
+delimiter ;;
+CREATE PROCEDURE `UPPERCASE`(IN DBNAME VARCHAR(200))
+BEGIN 
+  
+DECLARE DONE INT DEFAULT 0;  
+  
+DECLARE OLDNAME VARCHAR(200);  
+  
+DECLARE CUR CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DBNAME;  
+  
+DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = 1;  
+  
+OPEN CUR;  
+  
+REPEAT  
+  
+FETCH CUR INTO OLDNAME;  
+  
+SET @NEWNAME = UPPER(OLDNAME);  
+SET @ISNOTSAME = @NEWNAME <> BINARY OLDNAME;   
+IF NOT DONE && @ISNOTSAME THEN   
+SET @SQL = CONCAT('RENAME TABLE `',OLDNAME,'` TO `', LOWER(@NEWNAME), '_TMP` ');   
+PREPARE TMPSTMT FROM @SQL;   
+EXECUTE TMPSTMT;  
+
+SET @SQL = CONCAT('RENAME TABLE `',LOWER(@NEWNAME),'_TMP` TO `',@NEWNAME, '`');   
+PREPARE TMPSTMT FROM @SQL;   
+EXECUTE TMPSTMT; 
+  
+DEALLOCATE PREPARE TMPSTMT;  
+  
+END IF;   
+UNTIL DONE END REPEAT;   
+CLOSE CUR;   
+END
+;;