wesmiler преди 2 години
родител
ревизия
11d6a8f1dd

+ 2 - 0
app/Http/Controllers/Api/v1/IndexController.php

@@ -34,6 +34,8 @@ class IndexController extends webApp
         }
     }
 
+
+
     /**
      * 配置信息
      * @return array

+ 3 - 1
app/Http/Controllers/Api/v1/LiveController.php

@@ -24,7 +24,7 @@ class LiveController extends webApp
         $params = request()->post();
         $pageSize = request()->post('pageSize', 0);
         $params['is_recommend'] = 1;
-        $datas = LiveService::make()->getDataList($params, $pageSize,'', $this->userId);
+        $datas = LiveService::make()->getIndexList($params, $pageSize,'', $this->userId);
         return showJson(1010, true, $datas);
        } catch (\Exception $exception){
            RedisService::set("caches:request:error_live_index", ['error'=>$exception->getMessage(),'trace'=>$exception->getTrace()], 7200);
@@ -32,6 +32,8 @@ class LiveController extends webApp
        }
     }
 
+
+
     /**
      * 在线用户数据
      * @return array

+ 6 - 2
app/Services/Api/VideoService.php

@@ -267,7 +267,7 @@ class VideoService extends BaseService
         // 随机优先匹配推送
         $match = false;
         $list = [];
-        if($total > 3 ){
+        if($total > 0 ){
             // 关联推荐数据
             $list = $countModel->selectRaw($field)
                 ->orderByRaw($order)
@@ -279,7 +279,11 @@ class VideoService extends BaseService
         // 数据不够补充默认匹配数据
         if($total<$pageSize){
             // 默认推荐数据
-            $list1 = $model->selectRaw($field)
+            $list1 = $model->where(function($query) use($uids){
+                    if($uids){
+                        $query->whereNotIn('a.user_id', $uids);
+                    }
+                })->selectRaw($field)
                 ->orderByRaw($order)
                 ->paginate($pageSize > 0 ? $pageSize : 9999999);
             $list1 = $list1 ? $list1->toArray() : [];

+ 115 - 0
app/Services/LiveService.php

@@ -167,6 +167,121 @@ class LiveService extends BaseService
     }
 
     /**
+     * 首页推荐数据
+     * @param $params
+     * @param int $pageSize
+     * @param string $field
+     * @param int $userId
+     * @return array
+     */
+    public function getIndexList($params, $pageSize = 18, $field = '', $userId=0)
+    {
+        $where = ['a.mark' => 1,'a.status'=>1,'b.mark'=>1];
+        $field = $field? $field : 'lev_a.*';
+        $order = 'rand()';
+        $model = $this->model->with(['member'])->from('live as a')
+            ->leftJoin('member as b', 'b.id', '=', 'a.user_id')
+            ->where($where)
+            ->where(function ($query) use ($params) {
+                $type = isset($params['type']) ? $params['type'] : 0;
+                if ($type > 0) {
+                    $query->where('a.type', $type);
+                }
+
+                $categoryId = isset($params['category_id']) ? $params['category_id'] : 0;
+                if ($categoryId > 0) {
+                    $query->where('a.category_id', $categoryId);
+                }
+
+                $uid = isset($params['user_id']) ? $params['user_id'] : 0;
+                if ($uid > 0) {
+                    $query->where('a.user_id', $uid);
+                }
+            })
+            ->where(function ($query) use ($params) {
+                $keyword = isset($params['kw']) ? $params['kw'] : '';
+                if ($keyword) {
+                    $query->where('a.title', 'like', "%{$keyword}%")
+                        ->orWhere('a.description', 'like', "%{$keyword}%")
+                        ->orWhere('b.nickname', 'like', "%{$keyword}%");
+                }
+            })->where(function ($query) use ($userId) {
+
+                if ($userId) {
+                    $query->where('a.visible_users', '=', '')
+                        ->orWhere('a.visible_users', 'like',"%{$userId},%")
+                        ->orWhere('a.manage_users', 'like',"%{$userId},%");
+                }
+            });
+
+        // 推荐的数据
+        $countModel = clone $model;
+        $total = $countModel->where(function($query) use($params, $userId){
+            // 推荐视频数据
+            $isRecommend = isset($params['is_recommend']) ? $params['is_recommend'] : 0;
+            if ($isRecommend > 0) {
+                $recommendData = VideoCollectService::make()->getRecommendData($userId);
+                $uids = isset($recommendData['uids'])? $recommendData['uids'] : []; // 按用户推荐
+                $category = isset($recommendData['category'])? $recommendData['category'] : [];  // 按标签推荐
+                if($uids){
+                    $query->orWhere(function($query) use($uids){
+                        $query->whereIn('a.user_id', $uids);
+                    });
+                }
+
+                if($category){
+                    $query->orWhere(function($query) use($category){
+                        $query->whereIn('a.category_id', $category);
+                    });
+                }
+            }
+        })->count('a.id');
+
+        if($total > 0){
+            // 关联推荐数据
+            $list = $countModel->selectRaw($field)
+                ->orderByRaw($order)
+                ->paginate($pageSize > 0 ? $pageSize : 9999999);
+            $list = $list ? $list->toArray() : [];
+            $list = isset($list['data']) && $list['data']? $list['data'] :[];
+        }
+
+        if($total < $pageSize){
+            // 默认推荐数据
+            $list1 = $model->where(function($query) use($countModel){
+                $ids = $countModel->pluck('a.id');
+                if($ids){
+                    $query->whereNotIn('a.id', $ids);
+                }
+            })->selectRaw($field)
+                ->orderByRaw($order)
+                ->paginate($pageSize > 0 ? $pageSize : 9999999);
+            $list1 = $list1 ? $list1->toArray() : [];
+            $list1 = isset($list1['data']) && $list1['data']? $list1['data'] :[];
+            $list = array_merge($list, $list1);
+        }
+
+        if ($list) {
+            foreach ($list as &$item) {
+                $item['time_text'] = isset($item['create_time']) ? dateFormat($item['create_time'], 'Y-m-d H:i') : '';
+                $member = isset($item['member'])? $item['member'] : [];
+                if($member){
+                    $member['avatar'] = isset($member['avatar']) && $member['avatar']? get_image_url($member['avatar']) : get_image_url('/images/member/logo.png');
+                }
+                $item['like_num'] = isset($item['like_num']) && $item['like_num']? intval($item['like_num']) : 0;
+                $item['views'] = isset($item['views']) && $item['views']? intval($item['views']) : 0;
+                $item['member'] = $member;
+            }
+        }
+
+        return [
+            'pageSize' => $pageSize,
+            'total'    => count($list),
+            'list'     => $list? $list : []
+        ];
+    }
+
+    /**
      * 详情
      * @param $id
      * @param $userId