Browse Source

修改所有涉及新闻的c端接口

15313670163 1 month ago
parent
commit
03e065cce3
1 changed files with 82 additions and 52 deletions
  1. 82 52
      app/JsonRpc/NewsService.php

+ 82 - 52
app/JsonRpc/NewsService.php

@@ -289,24 +289,28 @@ class NewsService implements NewsServiceInterface
     public function getWebsiteArticlett(array $data): array   
     {
     
-       $category = WebsiteCategory::where('website_id',$data['website_id'])->select('category_id')->get();
-       $category = $category->toArray();
-       $result= [];
-       if($category){
-            $category_ids = [];
-            foreach($category as $val){
-                array_push($category_ids,$val['category_id']);
-            }
-            if(isset($data['placeid'])){
-                $placeid=$data['placeid']-1;
-                $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("updated_at","desc")->offset($placeid)->limit($data['pageSize'])->get();
-            }else{
-                $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("updated_at","desc")->offset(0)->limit($data['pageSize'])->get();
-            }
-            if(empty($result)){
-                return Result::error("暂无头条新闻",0);
-            }            
-            return Result::success($result); 
+        $category = WebsiteCategory::where('website_id',$data['website_id'])->pluck('category_id');
+        $result= [];
+        if($category){
+        $placeid = isset($data['placeid']) && !empty($data['placeid']) ? $data['placeid'] - 1 : 0;
+        $where = [
+            'status' => 1,
+            'level' => $data['level'],
+        ];
+        $result = 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");
+            })
+            ->orderBy("updated_at", "desc")
+            ->offset($placeid)
+            ->limit($data['pageSize'])
+            ->get();
+        if(empty($result)){
+            return Result::error("暂无头条新闻",0);
+        }            
+        return Result::success($result); 
         }else{
             return Result::error("本网站下暂无相关栏目",0);
         }
@@ -327,6 +331,8 @@ class NewsService implements NewsServiceInterface
                 'status' => 1,
                 'catid' => $catid
             ];
+            $placeid = isset($data['placeid']) && !empty($data['placeid']) ? $data['placeid'] - 1 : 0;
+            // 级别:0:未分类 1:头条 2:轮播图 3:推荐图 4:热点资讯 5:资讯推荐
             if ($data['level'] == 1) {
                 $level = [
                     0 => '1',
@@ -334,33 +340,41 @@ class NewsService implements NewsServiceInterface
                     2 => '5',
                     3 => '0',
                 ];
-                $result = Article::where($where)->whereIn('level',$level)->orderBy("updated_at","desc")->limit($data['pagesize'])->get();
+                $result = Article::where($where)
+                ->whereIn('level',$level)
+                ->where(function ($query) use ($data) {
+                    $query->whereRaw("JSON_CONTAINS(ignore_ids, '".intval($data['website_id'])."') = 0")
+                          ->orWhereNull("ignore_ids");
+                })
+                ->orderBy("updated_at","desc")
+                ->offset($placeid)
+                ->limit($data['pagesize'])
+                ->get();
             }elseif($data['level']==2){
                 $level='2';
-                $result = Article::where($where)->where('level',$level)->orderBy("updated_at","desc")->limit($data['pagesize'])->get();
+                $result = Article::where($where)
+                ->where('level',$level)
+                ->where(function ($query) use ($data) {
+                    $query->whereRaw("JSON_CONTAINS(ignore_ids, '".intval($data['website_id'])."') = 0")
+                          ->orWhereNull("ignore_ids");
+                })
+                ->orderBy("updated_at","desc")
+                ->offset($placeid)
+                ->limit($data['pagesize'])
+                ->get();
 
             }else{
                 $level='3';
-                $result = Article::where($where)->where('level',$level)->orderBy("updated_at","desc")->limit($data['pagesize'])->get();
-            }
-            $result= $result->toArray();
-            if(!empty($result) && isset($data['placeid']) && !empty($data['placeid'])){
-                $placeid=$data['placeid']-1;
-                if($level==2 || $level==3){
-                    $where =[
-                        'level' => $level
-                    ];
-                    $result = Article::where($where)
-                    ->orderBy("updated_at","desc")
-                    ->offset($placeid)
-                    ->limit($data['pagesize'])->get();
-                }else{
-                    $result = Article::where($where)
-                    ->whereIn('level',$level)
-                    ->offset($placeid)
-                    ->orderBy("updated_at","desc")
-                    ->limit($data['pagesize'])->get();
-                } 
+                $result = Article::where($where)
+                ->where('level',$level)
+                ->where(function ($query) use ($data) {
+                    $query->whereRaw("JSON_CONTAINS(ignore_ids, '".intval($data['website_id'])."') = 0")
+                          ->orWhereNull("ignore_ids");
+                })
+                ->orderBy("updated_at","desc")
+                ->offset($placeid)
+                ->limit($data['pagesize'])
+                ->get();
             }
             if(empty($result)){
                 return Result::error("此栏目暂无相关新闻",0);
@@ -381,7 +395,7 @@ class NewsService implements NewsServiceInterface
      * @param array $data
      * @return array
      */
-    public function getWebsiteArticleList(array $data): array
+    public function getWebsiteArticleList(array $data): array 
     {
         $where[] = ['status', '=', 1];
        if(isset($data['keyword'])  && !empty($data['keyword'])){
@@ -400,7 +414,6 @@ class NewsService implements NewsServiceInterface
             }
         }
         // return Result::success($where);
-
         $rep = Article::where(function ($query) use ($where) {
             foreach ($where as $condition) {
                 if ($condition[1] === 'in') {
@@ -410,6 +423,10 @@ class NewsService implements NewsServiceInterface
                 }
             }
         })
+        ->where(function ($query) use ($data) {
+            $query->whereRaw("JSON_CONTAINS(ignore_ids, '".intval($data['website_id'])."') = 0")
+                  ->orWhereNull("ignore_ids");
+        })
         ->orderBy("updated_at", "desc")
         ->limit($data['pageSize'])
         ->offset(($data['page'] - 1) * $data['pageSize'])
@@ -447,9 +464,14 @@ class NewsService implements NewsServiceInterface
             'article.id'=>$data['id'],
             'article.status'=>1
         ];
-        $result = Article::where($where)->leftJoin("article_data","article.id","article_data.article_id")->first();
+        $result = Article::where($where)->leftJoin("article_data","article.id","article_data.article_id")
+        ->where(function ($query) use ($data) {
+            $query->whereRaw("JSON_CONTAINS(ignore_ids, '".intval($data['website_id'])."') = 0")
+                  ->orWhereNull("ignore_ids");
+        })
+        ->first();
         if(empty($result)){
-            return Result::error("查询失败",0);
+            return Result::error("暂无此新闻!",0);
         }
         $category = WebsiteCategory::where('website_id',$data['website_id'])->where(['category_id'=>$result['catid']])->first();
         if(empty($category)){
@@ -711,18 +733,27 @@ class NewsService implements NewsServiceInterface
     {
         $where = [];
         // 初始化查询构造器
-        $query = Article::where('status', 1);
-
+        $category = WebsiteCategory::where('website_id',$data['website_id'])->pluck('category_id');
+        $query = Article::where('status', 1)
+            ->whereIn('catid', $category)
+            ->where(function ($query) use ($data) {
+                $query->where(function ($subQuery) use ($data) {
+                    $subQuery->whereRaw("JSON_CONTAINS(ignore_ids, '".intval($data['website_id'])."') = 0");
+                })->orWhereNull("ignore_ids");
+            });
+        // return Result::success($all_articles);
         // 检查是否存在 cityid 参数
         if (isset($data['cityid']) && !empty($data['cityid'])) {
             $query->whereRaw("JSON_CONTAINS(city_arr_id, '".intval($data['cityid'])."')");
         }
-
         // 检查是否存在 department_id 参数
-        if (isset($data['department_id']) && $data['department_id'] !== null) {
-            // 修正此处的 $data['cityid'] 为 $data['department_id']
+        if (isset($data['department_id']) && !empty($data['department_id'])) {
             $query->whereRaw("JSON_CONTAINS(department_arr_id, '".intval($data['department_id'])."')");
         }
+        // 检查是否存在 keyword 参数
+        if (isset($data['keyword']) && !empty($data['keyword'])) {
+            $query->where('title', 'like', '%'.$data['keyword'].'%');
+        }
         // 计算总数
         $count = $query->count();
         // 分页查询
@@ -730,12 +761,11 @@ class NewsService implements NewsServiceInterface
             ->limit($data['pageSize'])
             ->offset(($data['page'] - 1) * $data['pageSize'])
             ->get()->all();
-        // 处理结果
-        if ($articles->isEmpty()) {
+        if (empty($articles)) {
             return Result::error("没有符合条件的资讯数据");
         }
         $data = [
-            'rows' => $articles->toArray(),
+            'rows' => $articles,
             'count' => $count
         ];
         return Result::success($data);