Selaa lähdekoodia

业绩奖、管理奖增加会员级别限制

kevin_zhangl 3 vuotta sitten
vanhempi
commit
387098c24b
2 muutettua tiedostoa jossa 87 lisäystä ja 22 poistoa
  1. 83 22
      common/helpers/bonus/BonusCalc.php
  2. 4 0
      common/helpers/bonus/CalcCache.php

+ 83 - 22
common/helpers/bonus/BonusCalc.php

@@ -281,10 +281,12 @@ class BonusCalc extends BaseObject {
             // 蓝星奖入库,实际上是插入有奖金会员数据缓存中.
             // 调用存储过程,计算蓝星管理奖金
             $this->calcBsProcedure();
-            // 将有蓝星管理奖金的用户加入到有奖金缓存用户中
+            // 将有【蓝星业绩奖金】的用户加入到有奖金缓存用户中
+            $this->calcBonusBsYJ();
+            // 将有【蓝星管理奖金】的用户加入到有奖金缓存用户中
             $this->calcBonusBsGL();
             $t18temp = microtime(true);
-            echo('计算蓝星管理奖'.($this->_sysConfig['openGL']['VALUE']?'完成':'关闭').',耗时:' . round($t18temp - $t18, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
+            echo('计算蓝星奖'.($this->_sysConfig['openGL']['VALUE']?'完成':'关闭').',耗时:' . round($t18temp - $t18, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
             $this->_updatePercent(65);
 
             $this->calcBonusZoneBS($this->_sysConfig['openTravel']);
@@ -1731,7 +1733,7 @@ class BonusCalc extends BaseObject {
         }
         // 从缓存获取分页有收入的会员信息
         $allData = CalcBonusBS::findUseDbCalc()
-            ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
+            ->where('PERIOD_NUM=:PERIOD_NUM AND ORI_BONUS_MNT > 0', [':PERIOD_NUM' => $this->_periodNum])
             ->groupBy('USER_ID')
             ->offset($offset)
             ->limit($this->_limit)
@@ -1739,31 +1741,30 @@ class BonusCalc extends BaseObject {
             ->all();
         if ($allData) {
             foreach ($allData as $user) {
-                // 添加到有奖励信息的数据中
-                CalcCache::addHasBonusUsers($user['USER_ID'], $this->_periodNum);
-                //CalcCache::addHasMonthBonusUsers($user['USER_ID'], $this->_periodNum);
                 //扣除相应的复消积分和管理费
-                $deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS']);
-                // 把对碰后的奖金存入缓存中
-                CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS', $user['ORI_BONUS'], $deductData);
+                $deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS_MNT']);
                 $realBonusBs = $deductData['surplus']; // 扣除管理费和复消积分后的实发蓝星奖金
                 $manageTax = $deductData['manageTax']; // 管理费
-                $point = $deductData['reConsumePoints'];// 复消积分
+                $point = $deductData['reConsumePoints'] + $user['RECONSUME_POINTS'];// 复消积分
 
-                // 蓝星管理奖
-                $deductMntData = $this->deduct($user['USER_ID'], $user['ORI_BONUS_MNT']);
-                // 蓝星业绩奖
-                $deductAbbrData = $this->deduct($user['USER_ID'], $user['ORI_BONUS_ABBR']);
+                // 获取会员的报单级别
+                $userBaseInfo = CalcCache::getUserInfo($user['USER_ID'], $this->_periodNum);
+                $decLevelConfig = $this->_decLevelConfig;
+                $nowDecLevelID = $decLevelConfig[$userBaseInfo['DEC_LV']]['ID'] ?? '';
+                // 管理奖钻卡发放
+                if ($nowDecLevelID == '67ABCE0ECE705575E055736AECE8644D') {
+                    // 添加到有奖励信息的数据中
+                    CalcCache::addHasBonusUsers($user['USER_ID'], $this->_periodNum);
+                    //CalcCache::addHasMonthBonusUsers($user['USER_ID'], $this->_periodNum);
+                    // 把对碰后的奖金存入缓存中
+                    CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS_MNT', $user['ORI_BONUS_MNT'], $deductData);
+                }
 
                 // 更新蓝星奖金存储过程的实发金额数据
                 CalcBonusBS::updateAll([
-                    'AMOUNT' => $realBonusBs,
-                    'MANAGE_TAX' => $manageTax,
                     'RECONSUME_POINTS' => $point,
-                    'AMOUNT_MNT' => $deductMntData['surplus'] ?? 0,
-                    'MANAGE_TAX_MNT' => $deductMntData['manageTax'] ?? 0,
-                    'AMOUNT_ABBR' => $deductAbbrData['surplus'] ?? 0,
-                    'MANAGE_TAX_ABBR' => $deductAbbrData['manageTax'] ?? 0],
+                    'AMOUNT_MNT' => $realBonusBs,
+                    'MANAGE_TAX_MNT' => $manageTax],
                 'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM', 
                 [':USER_ID' => $user['USER_ID'], ':PERIOD_NUM' => $this->_periodNum]);
             }
@@ -1773,6 +1774,61 @@ class BonusCalc extends BaseObject {
         return true;
     }
 
+    /**
+     * 蓝星业绩奖金
+     * @param int $offset
+     * @return bool
+     * @throws \yii\db\Exception
+     */
+    public function calcBonusBsYJ(int $offset = 0) {
+        if( !$this->_isCalcMonth ) {
+            // 不是结算月,则不进行计算
+            return false;
+        }
+        // 从缓存获取分页有收入的会员信息
+        $allData = CalcBonusBS::findUseDbCalc()
+            ->where('PERIOD_NUM=:PERIOD_NUM AND ORI_BONUS_ABBR > 0', [':PERIOD_NUM' => $this->_periodNum])
+            ->groupBy('USER_ID')
+            ->offset($offset)
+            ->limit($this->_limit)
+            ->asArray()
+            ->all();
+        if ($allData) {
+            foreach ($allData as $user) {
+                LoggerTool::info(1);
+                //扣除相应的复消积分和管理费
+                $deductData = $this->deduct($user['USER_ID'], $user['ORI_BONUS_ABBR']);
+                $realBonusBs = $deductData['surplus']; // 扣除管理费和复消积分后的实发蓝星奖金
+                $manageTax = $deductData['manageTax']; // 管理费
+                $point = $deductData['reConsumePoints'] + $user['RECONSUME_POINTS'];// 复消积分
+                LoggerTool::info(2);
+                // 获取会员的报单级别
+                $userBaseInfo = CalcCache::getUserInfo($user['USER_ID'], $this->_periodNum);
+                $decLevelConfig = $this->_decLevelConfig;
+                $nowDecLevelID = $decLevelConfig[$userBaseInfo['DEC_LV']]['ID'] ?? '';
+
+                // 业绩奖金卡、钻卡发放
+                if (in_array($nowDecLevelID, ['67ABCCE20A9F5553E055736AECE8644D', '67ABCE0ECE705575E055736AECE8644D'])) {
+                    // 添加到有奖励信息的数据中
+                    CalcCache::addHasBonusUsers($user['USER_ID'], $this->_periodNum);
+                    //CalcCache::addHasMonthBonusUsers($user['USER_ID'], $this->_periodNum);
+                    // 把对碰后的奖金存入缓存中
+                    CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS_ABBR', $user['ORI_BONUS_ABBR'], $deductData);
+                }
+
+                // 更新蓝星业绩奖金存储过程的实发金额数据
+                CalcBonusBS::updateAll(['AMOUNT_ABBR' => $realBonusBs,
+                    'MANAGE_TAX_ABBR' => $manageTax,
+                    'RECONSUME_POINTS' => $point],
+                'USER_ID=:USER_ID AND PERIOD_NUM=:PERIOD_NUM',
+                    [':USER_ID' => $user['USER_ID'], ':PERIOD_NUM' => $this->_periodNum]);
+            }
+            return $this->calcBonusBsYJ($offset + $this->_limit);
+        }
+        unset($allData);
+        return true;
+    }
+
     /**
      * 报单管理奖
      * @param int $offset
@@ -1859,8 +1915,13 @@ class BonusCalc extends BaseObject {
                     //扣除相应的复消积分和管理费
                     $deductData = $this->deduct($bonusUserId, $manageBonus);
 
-                    CalcCache::bonus($bonusUserId, $this->_periodNum, 'BONUS_GL', $manageBonus, $deductData, CalcCache::FROM_MEANS_BD);
-                    CalcCache::addHasMonthBonusUsers($bonusUserId, $this->_periodNum);
+                    // 钻卡会员奖金记入缓存
+                    $decLevelConfig = $this->_decLevelConfig;
+                    $nowDecLevelConfig = $decLevelConfig[$userBaseInfo['DEC_LV']];
+                    if ($nowDecLevelConfig == '67ABCE0ECE705575E055736AECE8644D') {
+                        CalcCache::bonus($bonusUserId, $this->_periodNum, 'BONUS_GL', $manageBonus, $deductData, CalcCache::FROM_MEANS_BD);
+                        CalcCache::addHasMonthBonusUsers($bonusUserId, $this->_periodNum);
+                    }
 
                     //管理奖流水
                     $insertBonusData[] = [

+ 4 - 0
common/helpers/bonus/CalcCache.php

@@ -1433,6 +1433,10 @@ class CalcCache {
             'BONUS_YC_EXTRA' => 0,
             'ORI_BONUS_BD' => 0,
             'ORI_BONUS_BS' => 0,
+            'BONUS_BS_MNT' => 0,
+            'BONUS_BS_ABBR' => 0,
+            'ORI_BONUS_BS_MNT' => 0,
+            'ORI_BONUS_BS_ABBR' => 0,
             'ORI_BONUS_TG' => 0,
             'ORI_BONUS_XF' => 0,
             'ORI_BONUS_YJ' => 0,