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

共享奖分享次数向上五次最多

root 3 лет назад
Родитель
Сommit
37c8245220
2 измененных файлов с 28 добавлено и 1 удалено
  1. 7 1
      common/helpers/bonus/BonusCalc.php
  2. 21 0
      common/helpers/bonus/CalcCache.php

+ 7 - 1
common/helpers/bonus/BonusCalc.php

@@ -1497,8 +1497,14 @@ class BonusCalc extends BaseObject {
                 //找到下5代(安置网) 紧缩 相对偶数层2、4、6、8、10层
                 if( $shareBonusTwo > 0 ) {
                     $validDeep = 1;
-                    $this->loopNetworkParentDo($userId, function ($parent) use ($userId, $shareBonusTwo, &$validDeep, &$bonusUserData) {
+                    $periodNum = $this->_periodNum;
+                    $this->loopNetworkParentDo($userId, function ($parent) use ($periodNum, $userId, $shareBonusTwo, &$validDeep, &$bonusUserData) {
                         if ( $validDeep % 2 === 0 ) {
+                            $shareTimes = CalcCache::gxShareTimes($userId, $periodNum);
+                            // 增加判断,是否分共享奖奖金次数超过了五次,如果超过五次则不进行循环了
+                            if ($shareTimes > 5) {
+                                return self::LOOP_FINISH;
+                            }
                             $bonusUserData[] = [
                                 'bonusUid' => $parent['PARENT_UID'],
                                 'bonus' => $shareBonusTwo,

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

@@ -83,6 +83,7 @@ class CalcCache {
     const REDIS_KEY_PREFIX_GX_BONUS_DEEP_TWO_LIST_DATA = 'calc:gxBonusDeepTwoListData_';
     const REDIS_KEY_PREFIX_YC_BONUS_LIST_DATA = 'calc:ycBonusListData_';
     const REDIS_KEY_PREFIX_FW_BONUS_LIST_DATA = 'calc:fwBonusListData_';
+    const REDIS_KEY_PREFIX_GX_SHARE_TIMES_LIMIT = 'calc:gxShareTimes_';
 
     //@todo
     const REDIS_KEY_PREFIX_REPAIR_SURPLUS_PERF = 'calc:repairSurplusPerf_';
@@ -199,6 +200,7 @@ class CalcCache {
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_GX_BONUS_DEEP_TWO_LIST_DATA . $periodNum);
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_YC_BONUS_LIST_DATA . $periodNum);
         Yii::$app->redis->del(self::REDIS_KEY_PREFIX_FW_BONUS_LIST_DATA . $periodNum);
+        Yii::$app->redis->del(self::REDIS_KEY_PREFIX_GX_SHARE_TIMES_LIMIT . $periodNum);
     }
 
     /**
@@ -1509,6 +1511,25 @@ class CalcCache {
         return $value;
     }
 
+    // 共享奖金,记录向上分奖金次数,如果超过五次,则不能继续分享奖金
+    public static function gxShareTimes($userId, $periodNum) {
+        $cacheKey = self::REDIS_KEY_PREFIX_GX_SHARE_TIMES_LIMIT . $periodNum;
+        // 从 redis 中获取当前的结果
+        $cacheValue = \Yii::$app->redis->hget($cacheKey, $userId);
+        $shareTimes = 0;
+        if ($cacheValue) {
+            $cacheValue = Json::decode($cacheValue);
+            $shareTimes = $cacheValue['share_times'];
+        }
+        $shareTimes += 1; 
+        Yii::$app->redis->hset($cacheKey, $userId, Json::encode([
+            'share_times' => $shareTimes
+        ]));
+        
+
+        return $shareTimes;
+    }
+
     public static function standardBonus($userId, $periodNum, $bonus=0.00) {
         $cacheKey = self::REDIS_KEY_PREFIX_STANDARD_BONUS . $periodNum;