15313670163 1 месяц назад
Родитель
Сommit
ed7ff67a37
2 измененных файлов с 139 добавлено и 61 удалено
  1. 134 61
      app/JsonRpc/NewsService.php
  2. 5 0
      app/JsonRpc/NewsServiceInterface.php

+ 134 - 61
app/JsonRpc/NewsService.php

@@ -514,27 +514,31 @@ 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);
-        } else {
-            return Result::error("本网站下暂无相关栏目", 0);
+    
+        $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);
         }
     }
     /**
@@ -553,6 +557,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',
@@ -560,33 +566,41 @@ class NewsService implements NewsServiceInterface
                     2 => '5',
                     3 => '0',
                 ];
-                $result = Article::where($where)->whereIn('level', $level)->orderBy("updated_at", "desc")->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)
+                ->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)
+                ->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();
-                }
+            }else{
+                $level='3';
+                $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);
@@ -598,12 +612,16 @@ class NewsService implements NewsServiceInterface
         return Result::success($result);
 
     }
-/**
- *获取新闻列表
- * @param array $data
- * @return array
- */
-    public function getWebsiteArticleList(array $data): array
+
+
+
+
+    /**
+     *获取新闻列表 
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteArticleList(array $data): array 
     {
         $where[] = ['status', '=', 1];
         if (isset($data['keyword']) && !empty($data['keyword'])) {
@@ -622,7 +640,6 @@ class NewsService implements NewsServiceInterface
             }
         }
         // return Result::success($where);
-
         $rep = Article::where(function ($query) use ($where) {
             foreach ($where as $condition) {
                 if ($condition[1] === 'in') {
@@ -632,10 +649,14 @@ class NewsService implements NewsServiceInterface
                 }
             }
         })
-            ->orderBy("updated_at", "desc")
-            ->limit($data['pageSize'])
-            ->offset(($data['page'] - 1) * $data['pageSize'])
-            ->get();
+        ->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'])
+        ->get();
 
         $count = Article::where(function ($query) use ($where) {
             foreach ($where as $condition) {
@@ -669,9 +690,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();
-        if (empty($result)) {
-            return Result::error("查询失败", 0);
+        $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);
         }
         $category = WebsiteCategory::where('website_id', $data['website_id'])->where(['category_id' => $result['catid']])->first();
         if (empty($category)) {
@@ -924,6 +950,53 @@ class NewsService implements NewsServiceInterface
         return Result::success($result);
     }
 
+     /**
+     * 前端-搜索新闻列表
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticle(array $data): array
+    {
+        $where = [];
+        // 初始化查询构造器
+        $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']) && !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();
+        // 分页查询
+        $articles = $query->orderBy("updated_at", "desc")
+            ->limit($data['pageSize'])
+            ->offset(($data['page'] - 1) * $data['pageSize'])
+            ->get()->all();
+        if (empty($articles)) {
+            return Result::error("没有符合条件的资讯数据");
+        }
+        $data = [
+            'rows' => $articles,
+            'count' => $count
+        ];
+        return Result::success($data);
+    }
+
     /**
      * 验证导航名称是否重复
      * @return void

+ 5 - 0
app/JsonRpc/NewsServiceInterface.php

@@ -146,4 +146,9 @@ interface NewsServiceInterface
      * @return array
      */
     public function getSurveyInfo(array $data):array;
+     /**
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticle(array $data):array;
 }