ソースを参照

公共校验部分抽出来

root 3 年 前
コミット
e76e33b795
1 ファイル変更39 行追加29 行削除
  1. 39 29
      common/helpers/bonus/BonusCalc.php

+ 39 - 29
common/helpers/bonus/BonusCalc.php

@@ -947,19 +947,8 @@ class BonusCalc extends BaseObject {
         if ($allData) {
             $insertBonusData = [];
             foreach ($allData as $userId) {
-                // 从缓存中获取会员的业绩信息
-                $perfData = CalcCache::nowPeriodPerf($userId, $this->_periodNum);
-                if( !$perfData ) continue;
-                // 获取小组+自己的业绩
-                $perfPv = $perfData['STORE_PV_GRAND'] ?? 0;
-                if( $perfPv <= 0 ) continue;
-                // 业绩乘以比例为奖金
-                $storeBonus = Tool::formatPrice($perfPv * $this->_sysConfig['storePercent']['VALUE'] / 100);
-                if ($storeBonus <= 0) continue;
-                // 获取会员的报单级别
-                $userBaseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
-                $storeBonus = $this->bonusTotalLimit($storeBonus, $userId, $userBaseInfo['REC_NUM'], $userBaseInfo['ZC_AMOUNT']);
-                if( $storeBonus <= 0 ) continue;
+                $storeBonus = $this->verifyStorePerf($userId);
+                if (empty($storeBonus)) continue;
                 // 判断此店铺是否是活跃用户,如果不活跃,则往上找一个活跃的店铺获得此奖
                 $isActive = $this->_isMonthPerfLimit($userId);
                 $bonusUserId = '';
@@ -1012,7 +1001,7 @@ class BonusCalc extends BaseObject {
                     'CREATED_AT' => Date::nowTime()
                 ];
 
-                unset($perfData, $perfPv, $perfUserInfo, $recBonus, $bonusUserId, $userBaseInfo, $userId, $deductData, $fromUserInfo);
+                unset($bonusUserId, $userId, $deductData);
             }
             CalcBonusST::batchInsert($insertBonusData);
             unset($allData, $insertBonusData);
@@ -1024,7 +1013,7 @@ class BonusCalc extends BaseObject {
         return true;
     }
 
-    // 未开启紧缩方式计算店补奖,不活跃即不给奖金
+    // 未开启紧缩方式计算店补奖,不活跃即不给奖金 
     public function calcStoreBonus(int $offset = 0) {
         if( !$this->_isCalcMonth ) {
             // 不是结算月,则不进行计算
@@ -1036,21 +1025,11 @@ class BonusCalc extends BaseObject {
         if ($allData) {
             $insertBonusData = [];
             foreach ($allData as $userId) {
-                // 从缓存中获取会员的业绩信息
-                $perfData = CalcCache::nowPeriodPerf($userId, $this->_periodNum);
-                if( !$perfData ) continue;
-                // 获取小组+自己的业绩
-                $perfPv = $perfData['STORE_PV_GRAND'] ?? 0;
-                if( $perfPv <= 0 ) continue;
-                // 业绩乘以比例为奖金
-                $storeBonus = Tool::formatPrice($perfPv * $this->_sysConfig['storePercent']['VALUE'] / 100);
-                if ($storeBonus <= 0) continue;
-                // 获取会员的报单级别
-                $userBaseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
-                $storeBonus = $this->bonusTotalLimit($storeBonus, $userId, $userBaseInfo['REC_NUM'], $userBaseInfo['ZC_AMOUNT']);
-                if( $storeBonus <= 0 ) continue;
+                $storeBonus = $this->verifyStorePerf($userId);
+                if (empty($storeBonus)) continue;
                 $surplus = $storeBonus;
                 $manageTax = $reConsumePoints = '0.000';
+                $deductData = [];
                 if ($this->_sysConfig['openStoreDeduct']['VALUE']) {
                     //扣除相应的复消积分和管理费
                     $deductData = $this->deduct($userId, $storeBonus);
@@ -1078,7 +1057,7 @@ class BonusCalc extends BaseObject {
                     'CREATED_AT' => Date::nowTime()
                 ];
 
-                unset($perfData, $perfPv, $perfUserInfo, $recBonus, $bonusUserId, $userBaseInfo, $userId, $deductData, $fromUserInfo);
+                unset($userId, $deductData);
             }
             CalcBonusST::batchInsert($insertBonusData);
             unset($allData, $insertBonusData);
@@ -1090,6 +1069,37 @@ class BonusCalc extends BaseObject {
         return true;
     }
 
+    /**
+     * 通过用户id,校验店补奖,此用户是否有原奖金
+     */
+    public function verifyStorePerf($userId) {
+        // 从缓存中获取会员的业绩信息
+        $perfData = CalcCache::nowPeriodPerf($userId, $this->_periodNum);
+        if( !$perfData ) {
+            return false;
+        }
+        // 获取小组+自己的业绩
+        $perfPv = $perfData['STORE_PV_GRAND'] ?? 0;
+        if( $perfPv <= 0 ) {
+            return false;
+        }
+        // 业绩乘以比例为奖金
+        $storeBonus = Tool::formatPrice($perfPv * $this->_sysConfig['storePercent']['VALUE'] / 100);
+        if ($storeBonus <= 0) {
+            return false;
+        }
+        // 获取会员的报单级别
+        $userBaseInfo = CalcCache::getUserInfo($userId, $this->_periodNum);
+        $storeBonus = $this->bonusTotalLimit($storeBonus, $userId, $userBaseInfo['REC_NUM'], $userBaseInfo['ZC_AMOUNT']);
+        if( $storeBonus <= 0 ) {
+            return false;
+        }
+
+        unset($perfData, $perfPv, $userBaseInfo, $userId);
+
+        return $storeBonus;
+    }
+
     /**
      * 报单业绩奖
      * @param int $offset