kevin_zhangl 3 лет назад
Родитель
Сommit
dfafa4b5a5
1 измененных файлов с 49 добавлено и 70 удалено
  1. 49 70
      common/helpers/bonus/BonusCalc.php

+ 49 - 70
common/helpers/bonus/BonusCalc.php

@@ -1736,7 +1736,7 @@ class BonusCalc extends BaseObject {
         }
         // 从缓存获取分页有收入的会员信息
         $allData = CalcBonusBS::findUseDbCalc()
-            ->where('PERIOD_NUM=:PERIOD_NUM AND ORI_BONUS_MNT > 0', [':PERIOD_NUM' => $this->_periodNum])
+            ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
             ->groupBy('USER_ID')
             ->offset($offset)
             ->limit($this->_limit)
@@ -1756,10 +1756,10 @@ class BonusCalc extends BaseObject {
 
                 // 管理奖钻卡发放
                 if (in_array($user['LAST_DEC_LV'], $minDecLevel)) {
-                    // 添加到有奖励信息的数据中
-                    CalcCache::addHasBonusUsers($user['USER_ID'], $this->_periodNum);
                     // 把对碰后的奖金存入缓存中
                     CalcCache::bonus($user['USER_ID'], $this->_periodNum, 'BONUS_BS_MNT', $user['ORI_BONUS_MNT'], $deductData);
+                    // 加入月奖的会员
+                    CalcCache::addHasMonthBonusUsers($user['USER_ID'], $this->_periodNum);
                 }
 
                 // 更新蓝星奖金存储过程的实发金额数据
@@ -1789,7 +1789,7 @@ class BonusCalc extends BaseObject {
         }
         // 从缓存获取分页有收入的会员信息
         $allData = CalcBonusBS::findUseDbCalc()
-            ->where('PERIOD_NUM=:PERIOD_NUM AND ORI_BONUS_ABBR > 0', [':PERIOD_NUM' => $this->_periodNum])
+            ->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM' => $this->_periodNum])
             ->groupBy('USER_ID')
             ->offset($offset)
             ->limit($this->_limit)
@@ -3411,20 +3411,29 @@ class BonusCalc extends BaseObject {
         $realBonusGx = 0;
         $realBonusGl = 0;
         $realBonusBs = 0; // 蓝星管理奖. BlueStar
-        $blueStartAmount = 0;
-        $buleStartOriBonus = 0;
-        $buleStartManageTax = 0;
+        $blueStartOriBonus = 0;
+        $blueStartManageTax = 0;
         $exchangePoints = 0; // 蓝星奖管理奖. 产生的兑换积分
 
-        $realBonusBsMnt = 0; // 蓝星管理奖. BlueStar
-        $blueStartOriBonusMnt = 0;
+        $realBonusBsMnt = 0; // 蓝星管理奖——实发奖金
+        $blueStartOriBonusMnt = 0;  // 蓝星管理奖——原奖金
+        $blueStartManageTaxMnt = 0;   // 蓝星管理奖——管理费
 
-        $realBonusBsAbbr = 0; // 蓝星业绩奖. BlueStar
-        $blueStartOriBonusAbbr = 0;
+        $realBonusBsAbbr = 0; // 蓝星业绩奖——实发奖金
+        $blueStartOriBonusAbbr = 0; // 蓝星业绩奖——原奖金
+        $blueStartManageTaxAbbr = 0;   // 蓝星业绩奖——管理费
         if( $this->_isCalcMonth ) {
-            //查看是否复消300
-            $monthPerfData = CalcCache::nowMonthPerf($userId, $this->_periodNum);
-            $fxPvStatus = $monthPerfData['PV_PCS_FX'] >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE'];
+            // 逻辑改成,用户此月累计消费总额大于等于配置,取消订单类型的配置
+            $userMonthTotal = PerfMonth::find()
+                ->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH', ['USER_ID'=>$userId, 'CALC_MONTH'=>$this->_calcYearMonth])
+                ->asArray()
+                ->one();
+
+            // 个人月消费PV大于配置值,才会计算发放蓝星奖
+            $fxPvStatus = false;
+            if (isset($userMonthTotal['PV_PCS']) && $userMonthTotal['PV_PCS'] >= $this->_sysConfig['monthPcsPvFxCondition']['VALUE']) {
+                $fxPvStatus = true;
+            }
             // BONUS_REAL 字段是发到用户的真实奖金
             if ( $fxPvStatus ) {
                 // 管理奖改成了蓝星奖,但是对于用户来说依旧叫管理奖.字段改成bs.
@@ -3444,16 +3453,21 @@ class BonusCalc extends BaseObject {
                 ->orderBy('CREATED_AT DESC')
                 ->asArray()
                 ->all();
+
                 $userBS = is_array($userBS) ? reset($userBS) : [];
                 $blueStartAmount = isset($userBS['AMOUNT']) && !empty($userBS['AMOUNT']) ? $userBS['AMOUNT'] : 0; // 奖金
-                $buleStartOriBonus = isset($userBS['ORI_BONUS']) && !empty($userBS['ORI_BONUS']) ? $userBS['ORI_BONUS'] : 0; // 原奖金
-                // $buleStartManageTax = isset($userBS['MANAGE_TAX']) && !empty($userBS['MANAGE_TAX']) ? $userBS['MANAGE_TAX'] : 0; // 管理费
+                $blueStartOriBonus = isset($userBS['ORI_BONUS']) && !empty($userBS['ORI_BONUS']) ? $userBS['ORI_BONUS'] : 0; // 原奖金
+                $blueStartManageTax = isset($userBS['MANAGE_TAX']) && !empty($userBS['MANAGE_TAX']) ? $userBS['MANAGE_TAX'] : 0; // 管理费
 
-                $realBonusBsMnt = $userBS['AMOUNT_MNT'] ?? 0; // 蓝星管理奖. 奖金
+                $realBonusBsMnt = $userBS['AMOUNT_MNT'] ?? 0; // 蓝星管理奖. 实发奖金
                 $blueStartOriBonusMnt = $userBS['ORI_BONUS_MNT'] ?? 0; // 蓝星管理奖. 原奖金
+                $blueStartManageTaxMnt = $userBS['MANAGE_TAX_MNT'] ?? 0; // 蓝星管理奖. 管理费
 
                 $realBonusBsAbbr = $userBS['AMOUNT_ABBR'] ?? 0; // 蓝星业绩奖. 奖金
                 $blueStartOriBonusAbbr = $userBS['ORI_BONUS_ABBR'] ?? 0; // 蓝星业绩奖. 原奖金
+                $blueStartManageTaxAbbr = $userBS['MANAGE_TAX_ABBR'] ?? 0; // 蓝星业绩奖. 管理费
+
+                $blueStartManageTax += $blueStartManageTaxMnt + $blueStartManageTaxAbbr; // 管理费
 
                 $monthSumData = CalcBonus::findUseSlaves()
                 ->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')
@@ -3465,57 +3479,15 @@ class BonusCalc extends BaseObject {
                 )
                 ->asArray()
                 ->one();
-                $bonusGxSum = $monthSumData['BONUS_GX_SUM'] ?? 0;
-                $bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
-                $realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
-                $realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
                 $realBonusBs = $blueStartAmount; // 蓝星奖直接取数据库中算好的值PRODUCT_POINT
-                $bonusReal += $realBonusGx + $realBonusGl;
                 $exchangePoints = isset($userBS['PRODUCT_POINT']) && !empty($userBS['PRODUCT_POINT']) ? $userBS['PRODUCT_POINT'] : 0; // 兑换积分
 
-                $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] + $buleStartOriBonus; // 管理奖在存储过程计算,这里单独加上管理奖(即蓝星奖)
+                // 蓝星奖总奖金:管理奖+业绩奖
+                $blueStartOriBonus = $blueStartOriBonusMnt + $blueStartOriBonusAbbr;
+                $bonus['BONUS_TOTAL'] = $bonus['BONUS_TOTAL'] + $blueStartOriBonus; // 管理奖在存储过程计算,这里单独加上管理奖(即蓝星奖)
                 unset($monthSumData, $bonusGxSum, $bonusGlSum);
             }
         }
-        // if( $this->_isCalcMonth ) {
-        //     // 将查看是否复消300的逻辑,改成月结时判断当前月有一周活跃则本月活跃
-        //     // 1. 获取此业绩期的月份
-        //     $periodInfo = Period::getInfoByPeriodNum($this->_periodNum);
-
-        //     $calcMonth = $periodInfo['CALC_YEAR'].'-'.$periodInfo['CALC_MONTH']; // 2025-7
-        //     // 获取此月的第一天和最后一天时间戳
-        //     $fday = date('Y-m-01', strtotime($calcMonth));
-        //     $lday = date('Y-m-d', strtotime("$fday +1 month -1 day"));
-        //     $ftime = strtotime($fday);
-        //     $ltime = strtotime($lday.' 23:59:59');
-        //     // 2. 根据业绩期的月份,判断用户是否是活跃状态.
-        //     $fxPvStatus = PerfActiveUser::findUseDbCalc()
-        //     ->select('USER_ID')
-        //     ->where("USER_ID=:USER_ID ", [':USER_ID' => $userId])
-        //     ->andWhere(['or',
-        //         [
-        //             'and',
-        //             ['>=', 'SRATR_AT', $ftime],
-        //             ['<=', 'SRATR_AT', $ltime]
-        //         ],
-        //         [
-        //             'and',
-        //             ['>=', 'END_AT', $ftime],
-        //             ['<=', 'END_AT', $ltime]
-        //         ]
-        //     ])
-        //     ->asArray()
-        //     ->all();
-        //     if ( !empty($fxPvStatus) ) {//加上本期和往期的共享和管理奖
-        //         $monthSumData = CalcBonus::findUseSlaves()->select('SUM(BONUS_GX) AS BONUS_GX_SUM, SUM(BONUS_GL) AS BONUS_GL_SUM')->where('USER_ID=:USER_ID AND CALC_MONTH=:CALC_MONTH', ['USER_ID'=>$userId, 'CALC_MONTH'=>$this->_calcYearMonth])->asArray()->one();
-        //         $bonusGxSum = $monthSumData['BONUS_GX_SUM'] ?? 0;
-        //         $bonusGlSum = $monthSumData['BONUS_GL_SUM'] ?? 0;
-        //         $realBonusGx += $bonusGxSum + $bonus['BONUS_GX'];
-        //         $realBonusGl += $bonusGlSum + $bonus['BONUS_GL'];
-        //         $bonusReal += $realBonusGx + $realBonusGl;
-        //         unset($monthSumData, $bonusGxSum, $bonusGlSum);
-        //     }
-        // }
 
         $result = [
             'USER_ID' => $userId,
@@ -3551,7 +3523,7 @@ class BonusCalc extends BaseObject {
             'BONUS_YC' => $bonus['BONUS_YC'] + $bonus['BONUS_YC_EXTRA'],
             'BONUS_VIP' => $bonus['BONUS_VIP'],
             'RECONSUME_POINTS' => $bonus['RECONSUME_POINTS'],
-            'MANAGE_TAX' => $bonus['MANAGE_TAX'],
+            'MANAGE_TAX' => $blueStartManageTax,    // 管理费
             'BONUS_INCOME'=>$bonus['INCOME_TOTAL'],
             'BONUS_REAL'=>  $bonusReal,
             'BONUS_TOTAL'=>$bonus['BONUS_TOTAL'],
@@ -3565,15 +3537,21 @@ class BonusCalc extends BaseObject {
             'REAL_BONUS_GX' => $realBonusGx,
             'ORI_BONUS_GL' => $bonus['ORI_BONUS_GL'],
             'REAL_BONUS_GL' => $realBonusGl,
+
             'BONUS_BS' => $realBonusBs, // 新的管理奖金,即蓝星管理奖
-            'ORI_BONUS_BS' => $buleStartOriBonus, // 蓝星管理奖金原奖金,即包含管理费
+            'ORI_BONUS_BS' => $blueStartOriBonus, // 蓝星管理奖金原奖金,即包含管理费
             'REAL_BONUS_BS' => $realBonusBs, // 实发蓝星管理奖金
-            'BONUS_BS_MNT' => $bonus['BONUS_BS_MNT'], // 蓝星管理奖
-            'ORI_BONUS_BS_MNT' => $bonus['ORI_BONUS_BS_MNT'], // 蓝星管理奖金原奖金,即包含管理费
-            'REAL_BONUS_BS_MNT' => $bonus['BONUS_BS_MNT'], // 实发蓝星管理奖金
-            'BONUS_BS_ABBR' => $bonus['BONUS_BS_ABBR'], // 蓝星业绩奖
-            'ORI_BONUS_BS_ABBR' => $bonus['ORI_BONUS_BS_ABBR'], // 蓝星业绩奖金原奖金,即包含管理费
-            'REAL_BONUS_BS_ABBR' => $bonus['BONUS_BS_ABBR'], // 实发蓝星业绩奖金
+
+            'BONUS_BS_MNT' => $realBonusBsMnt, // 蓝星管理奖
+            'ORI_BONUS_BS_MNT' => $blueStartOriBonusMnt, // 蓝星管理奖金原奖金,即包含管理费
+            'REAL_BONUS_BS_MNT' => $realBonusBsMnt, // 实发蓝星管理奖金
+            'MANAGE_TAX_MNT' => $blueStartManageTaxMnt,  // 实发蓝星管理——管理费
+
+            'BONUS_BS_ABBR' => $realBonusBsAbbr, // 蓝星业绩奖
+            'ORI_BONUS_BS_ABBR' => $blueStartOriBonusAbbr, // 蓝星业绩奖金原奖金,即包含管理费
+            'REAL_BONUS_BS_ABBR' => $realBonusBsAbbr, // 实发蓝星业绩奖金
+            'MANAGE_TAX_ABBR' => $blueStartManageTaxAbbr, // 实发蓝星业绩奖——管理费
+
             'ORI_BONUS_GL_BD' => $bonus['ORI_BONUS_GL_BD'],
             'ORI_BONUS_GL_FX' => $bonus['ORI_BONUS_GL_FX'],
             'ORI_BONUS_QY' => $bonus['ORI_BONUS_QY'],
@@ -3582,6 +3560,7 @@ class BonusCalc extends BaseObject {
             'ORI_BONUS_YC' => $bonus['ORI_BONUS_YC'] + $bonus['ORI_BONUS_YC_EXTRA'],
             'ORI_BONUS_VIP' => $bonus['ORI_BONUS_VIP'],
             'ORI_BONUS_STANDARD' => $standardBonus,
+
             'BONUS_TRAVEL' => $travelBonus, // 旅游奖
             'BONUS_CAR' => $carBonus, // 名车奖
             'BONUS_HOUSE' => $houseBonus, // 豪宅奖