wesmiler 4 дней назад
Родитель
Сommit
0cc497dac3
1 измененных файлов с 68 добавлено и 61 удалено
  1. 68 61
      app/Services/Api/SettleService.php

+ 68 - 61
app/Services/Api/SettleService.php

@@ -654,81 +654,88 @@ class SettleService extends BaseService
     public function updateUserData($userId, $points)
     {
         // 上级用户复购参数更新
-        $points = $points ? explode(',', $points) : [];
-        $points = array_filter($points);
-        $points = array_reverse($points);
-        $rewardLayer = ConfigService::make()->getConfigByCode('business_reward_layer', 6);
-        $points = array_splice($points, 0, $rewardLayer);
-        if ($points) {
-            // 累计购买人数
-            MemberModel::where(['bonus_status'=>1,'mark' => 1])->whereIn('id', $points)
-                ->update(['buy_count' => DB::raw("buy_count + 1"), 'update_time' => time()]);
-
-            // 购买人数满N层暂停收益
-            $buyCount = pow(2, $rewardLayer + 1) - 2;
-            MemberModel::where('buy_count', '>=', $buyCount)
-                ->where(['bonus_status'=>1])
-                ->whereIn('id', $points)
-                ->update(['buy_count' => 0, 'buy_type' => DB::raw("buy_type+1"), 'bonus_status' => 2, 'update_time' => time()]);
-        }
+        try {
+            $points = $points ? explode(',', $points) : [];
+            $points = array_filter($points);
+            $points = array_reverse($points);
+            $rewardLayer = ConfigService::make()->getConfigByCode('business_reward_layer', 6);
+            $points = array_splice($points, 0, $rewardLayer);
+            if ($points) {
+                // 累计购买人数
+                MemberModel::where(['bonus_status'=>1,'mark' => 1])->whereIn('id', $points)
+                    ->update(['buy_count' => DB::raw("buy_count + 1"), 'update_time' => time()]);
+
+                // 购买人数满N层暂停收益
+                $buyCount = pow(2, $rewardLayer + 1) - 2;
+                MemberModel::where('buy_count', '>=', $buyCount)
+                    ->where(['bonus_status'=>1])
+                    ->whereIn('id', $points)
+                    ->update(['buy_count' => 0, 'buy_type' => DB::raw("buy_type+1"), 'bonus_status' => 2, 'update_time' => time()]);
+            }
 
 
-        // 用户升级
-        $userInfo = MemberModel::with(['parent'])->where(['id' => $userId, 'mark' => 1])
-            ->select(['id', 'member_level', 'parent_id', 'status'])
-            ->first();
-        $memberLevel = isset($userInfo['member_level']) ? $userInfo['member_level'] : [];
-        $parent = isset($userInfo['parent']) ? $userInfo['parent'] : [];
-        $parentId = isset($userInfo['parent_id']) ? $userInfo['parent_id'] : 0;
-        $parentLevel = isset($parent['member_level']) ? $parent['member_level'] : 0;
-
-
-        $upperLevel = 0;
-        $parentUpperLevel = 0;
-        $levelList = MemberLevelService::make()->getListByLevel();
-        $orderCount = OrderModel::from('orders as a')
-            ->distinct('user_id')
-            ->leftJoin('member as b', 'b.id', '=', 'a.user_id')
-            ->where('a.status', '>', 1)
-            ->where(['a.main_no' => '', 'a.type' => 2, 'a.user_id' => $userId, 'a.pay_status' => 20])
-            ->count();
-
-        $parentOrderCount = 0;
-        if ($parentId > 0) {
-            $parentOrderCount = OrderModel::from('orders as a')
+            // 用户升级
+            $userInfo = MemberModel::with(['parent'])->where(['id' => $userId, 'mark' => 1])
+                ->select(['id', 'member_level', 'parent_id', 'status'])
+                ->first();
+            $memberLevel = isset($userInfo['member_level']) ? $userInfo['member_level'] : [];
+            $parent = isset($userInfo['parent']) ? $userInfo['parent'] : [];
+            $parentId = isset($userInfo['parent_id']) ? $userInfo['parent_id'] : 0;
+            $parentLevel = isset($parent['member_level']) ? $parent['member_level'] : 0;
+
+
+            $upperLevel = 0;
+            $parentUpperLevel = 0;
+            $levelList = MemberLevelService::make()->getListByLevel();
+            $orderCount = OrderModel::from('orders as a')
                 ->distinct('user_id')
                 ->leftJoin('member as b', 'b.id', '=', 'a.user_id')
                 ->where('a.status', '>', 1)
-                ->where(['a.main_no' => '', 'a.type' => 2, 'b.parent_id' => $parentId, 'a.pay_status' => 20])
+                ->where(['a.main_no' => '', 'a.type' => 2, 'a.user_id' => $userId, 'a.pay_status' => 20])
                 ->count();
-        }
 
-        // 升级检查
-        if($orderCount||$parentOrderCount){
-            foreach ($levelList as $item) {
-                $level = isset($item['id']) ? $item['id'] : 0;
-                $upperCount = isset($item['upper_count']) ? $item['upper_count'] : 0;
-                if ($orderCount >= $upperCount && $level > $memberLevel) {
-                    $upperLevel = $level;
-                }
+            $parentOrderCount = 0;
+            if ($parentId > 0) {
+                $parentOrderCount = OrderModel::from('orders as a')
+                    ->distinct('user_id')
+                    ->leftJoin('member as b', 'b.id', '=', 'a.user_id')
+                    ->where('a.status', '>', 1)
+                    ->where(['a.main_no' => '', 'a.type' => 2, 'b.parent_id' => $parentId, 'a.pay_status' => 20])
+                    ->count();
+            }
+
+            // 升级检查
+            if($orderCount||$parentOrderCount){
+                foreach ($levelList as $item) {
+                    $level = isset($item['id']) ? $item['id'] : 0;
+                    $upperCount = isset($item['upper_count']) ? $item['upper_count'] : 0;
+                    if ($orderCount >= $upperCount && $level > $memberLevel) {
+                        $upperLevel = $level;
+                    }
 
-                if ($parentOrderCount >= $upperCount && $level > $parentLevel) {
-                    $parentUpperLevel = $level;
+                    if ($parentOrderCount >= $upperCount && $level > $parentLevel) {
+                        $parentUpperLevel = $level;
+                    }
                 }
             }
-        }
 
 
-        if ($upperLevel > 0) {
-            MemberModel::where(['id' => $userId])->update(['member_level' => $upperLevel, 'update_time' => time()]);
-        }
+            if ($upperLevel > 0) {
+                MemberModel::where(['id' => $userId])->update(['member_level' => $upperLevel, 'update_time' => time()]);
+            }
 
-        if ($parentUpperLevel > 0) {
-            MemberModel::where(['id' => $parentId])->update(['member_level' => $parentUpperLevel, 'update_time' => time()]);
-        }
+            if ($parentUpperLevel > 0) {
+                MemberModel::where(['id' => $parentId])->update(['member_level' => $parentUpperLevel, 'update_time' => time()]);
+            }
 
-        $this->error = $upperLevel || $parentUpperLevel? '等级更新成功':'没有等级可更新';
-        return ['user_id' => $userId, 'member_level' => $memberLevel, 'upper_level' => $upperLevel,'order_count'=>$orderCount, 'parent_level' => $parentLevel, 'parent_upper_level' => $parentUpperLevel,'parent_order_count'=>$parentOrderCount, 'parent_id' => $parentId];
+            $this->error = $upperLevel || $parentUpperLevel? '等级更新成功':'没有等级可更新';
+            $result = ['user_id' => $userId, 'member_level' => $memberLevel, 'upper_level' => $upperLevel,'order_count'=>$orderCount, 'parent_level' => $parentLevel, 'parent_upper_level' => $parentUpperLevel,'parent_order_count'=>$parentOrderCount, 'parent_id' => $parentId];
+            RedisService::set("caches:upperLevel:{$userId}_success", $result, 7200);
+            return $result;
+        } catch (\Exception $exception){
+            RedisService::set("caches:upperLevel:{$userId}_error", ['error'=>$exception->getMessage(),'trace'=>$exception->getTrace()], 7200);
+            return false;
+        }
     }
 
     /**