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

蓝星管理奖邀请会员动态调整获奖BV

kevin_zhangl 3 лет назад
Родитель
Сommit
52b6ed88a3

+ 19 - 1
backendEle/src/views/config/emp-level-edit.vue

@@ -1,7 +1,7 @@
 <template>
   <div v-loading="loading">
     <div class="white-box">
-      <el-form ref="form" :model="form" label-width="100px" style="width:500px;">
+      <el-form ref="form" :model="form" label-width="200px" style="width:500px;">
         <el-form-item label="级别名称">
           <el-input v-model="form.levelName" :disabled="true"></el-input>
         </el-form-item>
@@ -46,6 +46,18 @@
           </el-slider>
         </el-form-item>
 
+        <el-form-item label="推荐会员达标数" v-show="otherPerfShow">
+          <el-input-number v-model="form.achieveMemberNum" :min="1" :max="10"></el-input-number>
+        </el-form-item>
+
+        <el-form-item label="邀请会员数不足时达标业绩BV" v-show="otherPerfShow">
+          <el-input v-model="form.achievePv"></el-input>
+        </el-form-item>
+
+        <el-form-item label="邀请会员数满足时达标业绩BV" v-show="otherPerfShow">
+          <el-input v-model="form.achievePerfPv"></el-input>
+        </el-form-item>
+
         <el-form-item>
           <el-button type="primary" @click="onSubmit" :loading="submitButtonStat">保存</el-button>
         </el-form-item>
@@ -77,6 +89,9 @@ export default {
         this.form.iconNum = parseInt(response.ICON_NUM)
         this.form.otherDepartPerf = parseFloat(response.OTHER_DEPART_PERF)
         this.allEmployLevel = response.allLevel
+        this.form.achieveMemberNum = parseInt(response.ACHIEVE_MEMBER_NUM)
+        this.form.achievePv = parseInt(response.ACHIEVE_PV)
+        this.form.achievePerfPv = parseInt(response.ACHIEVE_PERF_PV)
         this.loading = false
         if ( response.SORT === '1' ) {
           this.otherPerfShow = true;
@@ -101,6 +116,9 @@ export default {
         iconType: 0,
         iconNum: 0,
         otherDepartPerf:0,
+        achieveMemberNum: 0,
+        achievePv: 0,
+        achievePerfPv: 0,
       },
       allEmployLevel: [],
       loading: true,

+ 3 - 0
common/models/EmployLevel.php

@@ -34,6 +34,9 @@ use yii\helpers\Json;
  * @property string $UPGRADE_SCORE 升级分数
  * @property string $TOURISM_PERCENT 旅游奖比例
  * @property string $GARAGE_PERCENT 车房奖比例
+ * @property int $ACHIEVE_MEMBER_NUM 推荐会员达标数
+ * @property string $ACHIEVE_PV 邀请会员数不足时达标业绩PV
+ * @property string $ACHIEVE_PERF_PV 邀请会员数满足时达标业绩PV
  */
 class EmployLevel extends \common\components\ActiveRecord
 {

+ 7 - 1
common/models/forms/EmployLevelForm.php

@@ -24,6 +24,9 @@ class EmployLevelForm extends Model {
     public $iconType;               // 等级排序
     public $iconNum;               // 等级排序
     public $otherDepartPerf;       // 其它部门的累计推荐业绩
+    public $achieveMemberNum;   // 当月邀请会员数
+    public $achievePv;          // 邀请会员数不及格后获奖BV值
+    public $achievePerfPv;      // 邀请会员数及格后获奖BV值
 
     public function init() {
         parent::init();
@@ -37,7 +40,7 @@ class EmployLevelForm extends Model {
      */
     public function rules() {
         return [
-            [['id', 'levelName', 'locationNum', 'locationPerf', 'newPerf', 'minEmployLevel', 'sort', 'iconType', 'iconNum', 'otherDepartPerf'], 'trim', 'on' => ['add', 'edit']],
+            [['id', 'levelName', 'locationNum', 'locationPerf', 'newPerf', 'minEmployLevel', 'sort', 'iconType', 'iconNum', 'otherDepartPerf', 'achieveMemberNum', 'achievePv', 'achievePerfPv'], 'trim', 'on' => ['add', 'edit']],
             [['id'], 'required', 'on' => 'edit'],
             [['id'], 'exist', 'targetClass' => EmployLevel::class, 'targetAttribute' => 'ID'],
             [['levelName', 'locationNum', 'locationPerf', 'newPerf', 'sort'], 'required'],
@@ -97,6 +100,9 @@ class EmployLevelForm extends Model {
         $model->ICON_TYPE = $this->iconType;
         $model->ICON_NUM = $this->iconNum;
         $model->OTHER_DEPART_PERF = $this->otherDepartPerf;
+        $model->ACHIEVE_MEMBER_NUM = $this->achieveMemberNum ?? 0;
+        $model->ACHIEVE_PV = $this->achievePv ?? 0;
+        $model->ACHIEVE_PERF_PV = $this->achievePerfPv ?? 0;
         if ($model->save()) {
             return $model;
         } else {

+ 364 - 0
sql/upgrade/1988.sql

@@ -0,0 +1,364 @@
+-- 总监级别表增加推荐会员相关属性
+ALTER TABLE `AR_EMPLOY_LEVEL` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数' AFTER `ACHIEVE_PV`;
+ALTER TABLE `AR_EMPLOY_LEVEL` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV' AFTER `ACHIEVE_MEMBER_NUM`;
+
+-- 蓝星管理奖增加推荐会员相关属性
+ALTER TABLE `AR_BS_BONUS_103_CALC` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
+ALTER TABLE `AR_BS_BONUS_103_CALC` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
+
+ALTER TABLE `AR_BS_BONUS_103_TEST` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
+ALTER TABLE `AR_BS_BONUS_103_TEST` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
+
+ALTER TABLE `AR_CALC_BONUS_BS` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
+ALTER TABLE `AR_CALC_BONUS_BS` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
+
+
+
+-- 蓝星管理奖存储过程修改
+CREATE DEFINER=`black_tea_0309`@`%` 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) AS ACHIEVE_NUM,
+          IF(DO.ACHIEVE_MEMBER_NUM >= AC_USER_NO, AC_PERF_PV, MLIMITPV) AS ACHIEVE_PV
+    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
+            REC_USER_ID,
+            COUNT(ID) AS ACHIEVE_MEMBER_NUM,
+            GROUP_CONCAT(ID) AS ACHIEVE_MEMBER
+        FROM
+            AR_DEC_ORDER
+        WHERE
+            IS_DEL = 0 AND PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE PCALCYEAR AND CALC_MONTH = PCALCMONTH )
+        GROUP BY
+            REC_USER_ID
+    ) DO ON DO.REC_USER_ID = AU.ID
+    WHERE
+            AU.DELETED = 0;
+
+END
+
+
+
+CREATE DEFINER=`black_tea_0309`@`%` 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
+
+
+
+
+
+
+CREATE DEFINER=`black_tea_0309`@`%` 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