Explorar o código

优化c端获取头条资讯的接口;修改获取全部文章、最新处理路由的接口;

15313670163 hai 6 días
pai
achega
4046266073
Modificáronse 1 ficheiros con 105 adicións e 115 borrados
  1. 105 115
      app/JsonRpc/NewsService.php

+ 105 - 115
app/JsonRpc/NewsService.php

@@ -308,130 +308,119 @@ class NewsService implements NewsServiceInterface
     */
     public function getWebsiteArticlett(array $data): array   
     {
-        // return Result::success($data['website_id']);
-        $category = WebsiteCategory::where('website_id', $data['website_id'])->pluck('category_id');
-        $category = array_values(array_unique($category->toArray()));
-        $web['website_id'] = $data['website_id'];
-        if ($category) {
-            $where = [
-                'status' => 1,
-            ];
-            var_dump($data, 'data-----------------');
-            // level=7  根据文章key来匹配文章
-            if (isset($data['level']) && $data['level'] == 7) {
-                //  根据文章id获取key
-                // $data['id'] = 50142;
-                if (isset($data['id']) && !empty($data['id'])) {
+        $website_id = $data['website_id'];
+        $categorys = $this->processArticlePro($website_id);
+        $catiall = $categorys['catiall'];
+        $categoryIds = $categorys['categoryIds'];
+        $where = [
+            'status' => 1
+        ];
+        $website_id = $data['website_id'];
+        $month = date("Y-m-d H:i:s", strtotime("-30 day"));
+         //如果是4:最新资讯(数据库已不存在) 5:资讯推荐(数据库已不存在);
+            // 1:头条资讯;2:轮播图;6:热点资讯;(数据库)
+        switch($data['level']){
+            case 1:
+            case 2:
+            case 3:
+            case 6:
+                $query = Article::where($where)
+                ->where('level','like','%'.$data['level'].'%')
+                ->orderBy('updated_at','desc');
+                break;
+            case 4:
+                $query = Article::where($where)
+                ->where('updated_at', '>', $month);
+                break;
+            case 5:
+                $query = Article::where($where)->orderBy('updated_at','desc');;
+                break;
+            case 7:
+                if(isset($data['id']) && !empty($data['id'])){
                     $keyword = Article::where('id', $data['id'])->value('keyword');
                     $keywordArray = explode(',', $keyword);
                     $whereL7 = [];
                     foreach ($keywordArray as $k => $v) {
                         $whereL7[] = ['keyword', 'like', '%' . $v . '%'];
                     }
-                    // 原始查询
-                    $result['level7'] = Article::where($whereL7)
-                        ->when(!empty($data['imgnum']), function ($query) use ($data) {
-                            $query->where('article.imgurl', '!=', '')
-                                ->select('article.*')
-                                ->offset($data['placeid'])
-                                ->limit($data['imgnum']);
-                        })
-                        ->when(!empty($data['textnum']), function ($query) use ($data) {
-                            $query->select('article.*')
-                                ->offset($data['placeid'])
-                                ->limit($data['textnum']);
-                        })
-                        ->orderBy('updated_at', 'desc')
-                        ->get();
-                        $result['level7'] = $this->processArticle($result['level7'],$web);
-                        if (empty($result)) {
-                            return Result::success();
-                        }
-                    return Result::success($result);
-                } else {
-                    return Result::error("参数错误level=7,id不能为空", 0);
+                    $query = Article::where($where)->where($whereL7)->orderBy('updated_at','desc');;
+                    break;
+                }else{
+                    return Result::error("请输入资讯ID",0);
+                    break;
                 }
-            }
-            //如果是4:最新资讯(数据库已不存在) 5:资讯推荐(数据库已不存在);
-            // 1:头条资讯;2:轮播图;6:热点资讯;(数据库)
-            var_dump($where, 'where-----------------');
-           // 初始化基础查询
-            $query = Article::where($where)
-              ->whereIn("catid", $category)
-              ->where(function ($query) use ($data) {
-                $query->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($data['website_id']) . "') = 0")
-                  ->orWhereNull("ignore_ids");
-              });
-
-            // 处理 level 相关查询条件
-            $query->when($data['level'] == 5, function ($query) {
-              $query->inRandomOrder()
-                ->where('updated_at', '>', date("Y-m-d H:i:s", strtotime("-30 day")));
-            })->when($data['level'] == 4, function ($query) {
-              $query->orderBy("article.updated_at", "desc");
-            })->when(!empty($data['level']), function ($query) use ($data) {
-              if ($data['level'] != 4 && $data['level'] != 5) {
-                $query->whereRaw("JSON_CONTAINS(level, '" . intval($data['level']) . "') = 1")
-                  ->orderBy("article.updated_at", "desc");
-              }
-            });
-               // 初始化结果数组
-            $result = [];
-            // $input = $data['website_id']; 
-            // 处理图片新闻查询
-            if (!empty($data['imgnum'])) {
-                // 原错误提示表明 cleanBindings 方法需要传入数组类型的参数,而实际传入了 null。
-                // 这里克隆查询构建器,确保绑定参数为数组,避免该错误。
-                $imgQuery = clone $query;
-                if ($imgQuery->getBindings() === null) {
-                    $imgQuery->setBindings([]);
-                }   
-                $result['img'] = $imgQuery->where('article.imgurl', '!=', '')
-                    ->select('article.id',
-                    'article.title',
-                    'article.imgurl',
-                    'article.author',
-                    'article.updated_at',
-                    'article.introduce',
-                    'article.islink',
-                    'article.linkurl',
-                    'article.copyfrom',
-                    'article.cat_arr_id',
-                    'article.catid')
-                    ->offset($data['placeid'])
-                    ->limit($data['imgnum'])
-                    ->get();
-                $result['img'] = $this->processArticles( $result['img'], $web); 
-            }
+                default:
+                    break;
+        }
+        // $whereL7 = [];
+        // if(isset($data['id']) && !empty($data['id'])){
+        //     $keyword = Article::where('id', $data['id'])->value('keyword');
+        //     $keywordArray = explode(',', $keyword);
             
-            // 处理文字新闻查询
-            if (!empty($data['textnum'])) {
-                $textQuery = clone $query;
-                $result['text'] = $textQuery
-                ->select('article.id',
-                    'article.title',
-                    'article.imgurl',
-                    'article.author',
-                    'article.updated_at',
-                    'article.introduce',
-                    'article.islink',
-                    'article.linkurl',
-                    'article.copyfrom',
-                    'article.cat_arr_id',
-                    'article.catid')
-                    ->offset($data['placeid'])
-                    ->limit($data['textnum'])
-                    ->get();
-                $result['text'] = $this->processArticles($result['text'], $web); 
+        //     foreach ($keywordArray as $k => $v) {
+        //         $whereL7[] = ['keyword', 'like', '%' . $v . '%'];
+        //     }
+        // }
+
+        // $query = Article::where($where)
+        //         ->when(isset($data['level']) && !empty($data['level']), function ($query) use ($data,$whereL7) {
+        //             if($data['level'] == 1 || $data['level'] == 2 || $data['level'] == 3 || $data['level'] == 6){
+        //                 $query = $query->where('article.level','like','%'.$data['level'].'%')->orderBy('updated_at','desc');
+        //             }
+        //             if($data['level'] == 7){
+        //                 $query = $query->where($whereL7)->orderBy('updated_at','desc');
+        //             }
+        //             if($data['level'] == 4){
+        //                 $query = $query->inRandomOrder()
+        //                 ->where('updated_at', '>', date("Y-m-d H:i:s", strtotime("-30 day")));
+        //             }
+        //             if($data['level'] == 5){
+        //                 $query = $query->orderBy('updated_at','desc');
+        //             }
+        //         });
+        if($data['textnum'] > 0){
+            $query = clone $query;
+            $result['text'] = $query
+            ->whereIn('catid',$categoryIds)
+            ->leftJoinSub(function ($query) use ($website_id) {
+                $query->from('article_ignore')
+                    ->where('website_id', $website_id);
+            }, 'article_ignore', function ($join) {
+                $join->on('article_ignore.article_id', '=', 'article.id');
+            })
+            ->where(function ($query) use ($website_id) {
+                $query->whereNull('article_ignore.article_id')
+                    ->orWhere('article_ignore.website_id', '!=', $website_id);
+            })
+            ->select('article.id','article.title','article.author','article.updated_at'
+            ,'article.introduce','article.islink','article.linkurl','article.copyfrom','article.cat_arr_id',
+            'article.catid','article.level')
+            ->offset($data['placeid'])
+            ->limit($data['textnum'])
+            ->get()->all();
+            foreach ($result['text'] as $k => $v) {
+                $result['text'][$k]->pinyin = $catiall[$v->catid]['pinyin'];
             }
-            
-            if (empty($result) || count($result) == 0) {
-                return Result::error("暂无头条新闻");
+        }
+        if($data['imgnum'] > 0){
+            $query = clone $query;
+            $result['img'] = $query
+            ->where('article.imgurl', '!=','')
+            ->select('article.id','article.title','article.imgurl','article.author','article.updated_at'
+            ,'article.introduce','article.islink','article.linkurl','article.copyfrom','article.cat_arr_id',
+            'article.catid','article.level')
+            ->offset($data['placeid'])
+            ->limit($data['imgnum'])
+            ->get()->all();
+            foreach ($result['img'] as $k => $v) {
+                $result['img'][$k]->pinyin = $catiall[$v->catid]['pinyin'];
             }
-            return Result::success($result);
-        } else {
-            return Result::error("本网站下暂无相关栏目", 0);
         }
+        
+        if(empty($result)){
+            return Result::error("暂无相关资讯",0);
+        }
+        return Result::success($result);
     }
     /**
      * 获取模块新闻
@@ -1114,7 +1103,7 @@ class NewsService implements NewsServiceInterface
                         // var_dump($v);
                         // var_dump($k);
                         $img_article[$k]->category_name = $catiall[$v->catid]['alias'];
-                        $img_article[$k]->alias = $catiall[$v->catid]['alias'];
+                        $img_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
                     }
             }else{
                 $img_article = [];
@@ -1141,7 +1130,7 @@ class NewsService implements NewsServiceInterface
                     // var_dump($k);
                     $text_article[$k]->category_name = $catiall[$v->catid]['alias'];
                     // $text_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
-                    $text_article[$k]->alias = $catiall[$v->catid]['alias'];
+                    $text_article[$k]->pinyin = $catiall[$v->catid]['pinyin'];
                 }
             }else{
                 $text_article = [];
@@ -1688,6 +1677,7 @@ private function fetchArticles($catId, $website, $limit, $isImageArticle = false
             'cat_1st_arr' => $cat_1st_arr,
             'catiall' => $catiall,
             'websiteInfoIndexed' => $websiteInfoIndexed,
+            'categoryIds' => $categoryIds,
         ];
 
     }