ソースを参照

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

15313670163 6 日 前
コミット
bfa5c05298
1 ファイル変更111 行追加125 行削除
  1. 111 125
      app/JsonRpc/NewsService.php

+ 111 - 125
app/JsonRpc/NewsService.php

@@ -762,134 +762,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'])) {
-          $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']);
+    $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 . '%'];
+                    }
+                    $query = Article::where($where)->where($whereL7)->orderBy('updated_at','desc');;
+                    break;
+                }else{
+                    return Result::error("请输入资讯ID",0);
+                    break;
+                }
+                default:
+                    break;
+        }
+        // $whereL7 = [];
+        // if(isset($data['id']) && !empty($data['id'])){
+        //     $keyword = Article::where('id', $data['id'])->value('keyword');
+        //     $keywordArray = explode(',', $keyword);
+            
+        //     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');
             })
-            ->when(!empty($data['textnum']), function ($query) use ($data) {
-              $query->select('article.*')
-                ->offset($data['placeid'])
-                ->limit($data['textnum']);
+            ->where(function ($query) use ($website_id) {
+                $query->whereNull('article_ignore.article_id')
+                    ->orWhere('article_ignore.website_id', '!=', $website_id);
             })
-            ->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);
+            ->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'];
+            }
         }
-      }
-      //如果是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");
+        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'];
+            }
         }
-      });
-      // 初始化结果数组
-      $result = [];
-      // $input = $data['website_id']; 
-      // 处理图片新闻查询
-      if (!empty($data['imgnum'])) {
-        // 原错误提示表明 cleanBindings 方法需要传入数组类型的参数,而实际传入了 null。
-        // 这里克隆查询构建器,确保绑定参数为数组,避免该错误。
-        $imgQuery = clone $query;
-        if ($imgQuery->getBindings() === null) {
-          $imgQuery->setBindings([]);
+        
+        if(empty($result)){
+            return Result::error("暂无相关资讯",0);
         }
-        $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);
-      }
-
-      // 处理文字新闻查询
-      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);
-      }
-
-      if (empty($result) || count($result) == 0) {
-        return Result::error("暂无头条新闻");
-      }
-      return Result::success($result);
-    } else {
-      return Result::error("本网站下暂无相关栏目", 0);
-    }
+        return Result::success($result);
   }
   /**
    * 获取模块新闻
@@ -1588,7 +1573,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 = [];
@@ -1615,7 +1600,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 = [];
@@ -2192,6 +2177,7 @@ class NewsService implements NewsServiceInterface
             'cat_1st_arr' => $cat_1st_arr,
             'catiall' => $catiall,
             'websiteInfoIndexed' => $websiteInfoIndexed,
+            'categoryIds' => $categoryIds,
         ];
 
     }