|
|
@@ -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
|