wesmiler 2 lat temu
rodzic
commit
a39f9c3db9

+ 7 - 0
app/Services/Api/MemberService.php

@@ -117,6 +117,13 @@ class MemberService extends BaseService
                 $liveOpenLevel = $liveOpenLevel>0? $liveOpenLevel : 0;
                 $info['live_open'] = $info['member_level']>=$liveOpenLevel? 1 : 0;
             }
+            // 直播
+            else if($type == 'live'){
+                $liveId = request()->post('live_id', 0);
+                $rankData = VideoCollectService::make()->getRankData($info['id'], $liveId);
+                $info['live_reward_total'] = isset($rankData['reward_total'])? format_num($rankData['reward_total']) : 0;
+                $info['live_rank'] = isset($rankData['rank'])? $rankData['rank'] : 0;
+            }
             else if ($type == 'team' || $type == 'share') {
                 $inviteUrl = get_web_url('/#/pages/register/index?code=' . $info['code']);
                 $qrcode = $this->makeQrcode($inviteUrl);

+ 43 - 0
app/Services/Api/VideoCollectService.php

@@ -12,6 +12,7 @@
 namespace App\Services\Api;
 
 use App\Models\MemberCollectModel;
+use App\Models\MemberModel;
 use App\Models\VideoCollectModel;
 use App\Models\VideoModel;
 use App\Services\BaseService;
@@ -235,6 +236,48 @@ class VideoCollectService extends BaseService
     }
 
     /**
+     * 获取直播间当前用户的打赏金额和打赏排名
+     * @param $userId 用户ID
+     * @param $liveId 直播ID
+     */
+    public function getRankData($userId, $liveId)
+    {
+        $datas = MemberModel::from('member as a')
+            ->leftJoin('video_collect as b',function($join) use($liveId){
+                $join->on('a.id','=','b.user_id')
+                    ->where(['b.type'=>1,'b.collect_id'=> $liveId,'b.source_type'=>2,'b.status'=>1,'b.mark'=>1]);
+            })
+            ->where(['a.status'=>1,'a.mark'=>1])
+            ->where('b.id','>', 0)
+            ->select(['a.id','b.create_time','b.reward_total','b.collect_id as live_id'])
+            ->groupBy('id')
+            ->orderBy('b.reward_total','desc')
+            ->orderBy('b.create_time','desc')
+            ->limit(210)
+            ->get();
+        $datas = $datas? $datas->toArray() : [];
+        $rankData = ['rank'=>0,'reward_total'=>0];
+        if($datas){
+            foreach($datas as $k => $item)
+            {
+                if($item['id'] == $userId){
+                    $rankData['rank'] = ($k+1) >200? 0 : ($k+1);
+                    $rankData['reward_total'] = $item['reward_total'];
+                }
+            }
+        }
+
+        // 用户排名在200名外的数据
+        if($rankData['rank'] <= 0 && $rankData['reward_total']<=0 && count($datas) > 200){
+            $rewardTotal = $this->model->where(['user_id'=> $userId,'type'=>1,'collect_id'=> $liveId,'source_type'=>2,'status'=>1,'mark'=>1])
+                ->value('reward_total');
+            $rankData['reward_total'] = $rewardTotal? floatval($rewardTotal) : 0;
+        }
+
+        return $rankData;
+    }
+
+    /**
      * 收藏点赞
      * @param $userId
      * @param $dynamicId