Bladeren bron

Merge branch 'web_sannong_fr' into pre

15313670163 4 maanden geleden
bovenliggende
commit
a01603a089
4 gewijzigde bestanden met toevoegingen van 872 en 385 verwijderingen
  1. 21 4
      .env
  2. 782 381
      app/JsonRpc/NewsService.php
  3. 42 0
      app/JsonRpc/NewsServiceInterface.php
  4. 27 0
      app/Model/ArticleSurvey.php

+ 21 - 4
.env

@@ -1,4 +1,4 @@
-APP_NAME=user_producer
+APP_NAME=news_producer
 APP_ENV=dev
 
 DB_DRIVER=mysql
@@ -10,8 +10,25 @@ DB_PASSWORD=xKmapDpKCxMMSkbe
 DB_CHARSET=utf8mb4
 DB_COLLATION=utf8mb4_unicode_ci
 DB_PREFIX=
+# APP_ENV=dev
 
-REDIS_HOST=localhost
-REDIS_AUTH=(null)
-REDIS_PORT=6379
+# HOST = http://101.254.114.211:13306/
+# DB_DRIVER=mysql
+# DB_HOST=101.254.114.211
+# DB_PORT=13306
+# DB_DATABASE=hyperf
+# DB_USERNAME=root
+# DB_PASSWORD=xKmapDpKCxMMSkbe
+# DB_CHARSET=utf8mb4
+# DB_COLLATION=utf8mb4_unicode_ci
+# DB_PREFIX=
+
+# REDIS_HOST=localhost
+# REDIS_AUTH=(null)
+# REDIS_PORT=6379
+# REDIS_DB=0
+
+REDIS_HOST=101.254.114.211
+REDIS_AUTH=YPWWnFnNebc7427B
+REDIS_PORT=26739
 REDIS_DB=0

+ 782 - 381
app/JsonRpc/NewsService.php

@@ -1,382 +1,783 @@
-<?php
-namespace App\JsonRpc;
-
-use App\Model\Article;
-use App\Model\ArticleData;
-use App\Model\Category;
-use App\Model\WebsiteCategory;
-use Hyperf\DbConnection\Db;
-use Hyperf\RpcServer\Annotation\RpcService;
-use App\Tools\Result;
-
-#[RpcService(name: "NewsService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
-class NewsService implements NewsServiceInterface
-{
-
-    /**
-     * 获取导航池列表
-     * @param array $data
-     * @return array
-     */
-    public function getCategoryList(array $data): array
-    {
-        $where = [];
-        if(isset($data['name']) && $data['name']){
-            array_push($where, ['category.name','like','%'.$data['name'].'%']);
-        }
-        if(isset($data['department_id']) && $data['department_id']){
-            array_push($where, ['category.department_id','=',$data['department_id']]);
-        }
-        $city_id='';
-        if(isset($data['city_id']) && $data['city_id']){
-            $city_id = intval($data['city_id']);
-        }
-        $rep = Category::where($where)
-            ->when($city_id, function ($query) use ($city_id) {
-                if(isset($city_id) && $city_id) {
-                    $query->whereJsonContains("category.city_arr_id", $city_id);
-                }
-            })
-            ->leftJoin('district','category.city_id','district.id')
-            ->leftJoin('department','category.department_id','department.id')
-            ->select("category.*","district.name as city_name","department.name as department_name")
-            ->limit($data['pageSize'])->orderByDesc('category.updated_at')->offset(($data['page']-1)*$data['pageSize'])->get();
-        $count =  Category::where($where)->when($city_id, function ($query) use ($city_id) {
-            if(isset($city_id) && $city_id) {
-                $query->whereJsonContains("category.city_arr_id", $city_id);
-            }
-        })->count();
-        $data = [
-            'rows'=>$rep->toArray(),
-            'count'=>$count
-        ];
-        if(empty($rep->toArray())){
-            return Result::error("没有导航池数据");
-        }
-        return Result::success($data);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function categoryList(array $data): array
-    {
-        $where[] = [
-            'pid','=',$data['pid']
-        ];
-        if(isset($data['name'])){
-            array_push($where, ['category.name','like','%'.$data['name'].'%']);
-        }
-        var_dump($where);
-       $result =  Category::where($where)->select('category.*','category.id as category_id')->get();
-        if(empty($result)){
-            return Result::error("没有栏目数据");
-        }
-        return Result::success($result);
-    }
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function addCategory(array $data): array
-    {
-        $id = Category::insertGetId($data);
-        if(empty($id)){
-            return Result::error("添加失败");
-        }
-        return Result::success(['id'=>$id]);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function delCategory(array $data): array
-    {
-        $categoryList = Category::where(['pid'=>$data['id']])->get();
-        var_dump("分类列表:",$data,$categoryList);
-        if($categoryList->toArray()){
-            return Result::error("分类下面有子分类不能删除");
-        }
-        $articleList = Article::where(['catid'=>$data['id']])->get();
-        var_dump("文章列表:",$articleList);
-        if($articleList->toArray()){
-            return Result::error("分类下面有资讯不能删除");
-        }
-        $result = Category::where($data)->delete();
-        if(!$result){
-            return Result::error("删除失败");
-        }
-        return Result::success($result);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function updateCategory(array $data): array
-    {
-        $where = [
-            'id'=>$data['id']
-        ];
-        $result = Category::where($where)->update($data);
-        if($result){
-            return Result::success($result);
-        }else{
-            return Result::error("更新失败");
-        }
-    }
-
-    /**
-     * 获取导航池信息
-     * @param array $data
-     * @return array
-     */
-    public function getCategoryInfo(array $data): array
-    {
-        $where = [
-            'id'=>$data['id']
-        ];
-        $result = Category::where($where)->first();
-        if($result){
-            return Result::success($result);
-        }else{
-            return Result::error("更新失败");
-        }
-    }
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getArticleList(array $data): array
-    {
-        $where= [];
-
-        if(isset($data['title'])  && $data['title']){
-            array_push($where,['article.title','like','%'.$data['title'].'%']);
-        }
-        if(isset($data['category_name'])  && $data['category_name']){
-            array_push($where,['category.name','like','%'.$data['category_name'].'%']);
-        }
-        if(isset($data['author'])  && $data['author']){
-             array_push($where,['article.author','=',$data['author']]);
-        }
-        if(isset($data['islink'])  && $data['islink']!==""){
-            array_push($where,['article.islink','=',$data['islink']]);
-        }
-        if(isset($data['status']) && $data['status']!==""){
-            array_push($where,['article.status','=',$data['status']]);
-        }
-        
-        $rep = Article::where($where)
-            ->whereNotIn('article.status',[404])
-            ->leftJoin('category','article.catid','category.id')
-            ->select("article.*","category.name as category_name")
-            ->orderBy("article.id","desc")
-            ->limit($data['pageSize'])
-            ->offset(($data['page']-1)*$data['pageSize'])->get();
-        $count =  Article::where($where)->whereNotIn('article.status',[404])
-            ->leftJoin('category','article.catid','category.id')->count();
-        $data = [
-            'rows'=>$rep->toArray(),
-            'count'=>$count
-        ];
-        if(empty($rep)){
-            return Result::error("没有信息数据");
-        }
-        return Result::success($data);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function addArticle(array $data): array
-    {
-        Db::beginTransaction();
-        try{
-
-            $articleData = $data;
-            unset($articleData['content']);
-            $id = Article::insertGetId($articleData);
-            $articleDataContent = [
-                'article_id'=>$id,
-                'content'=>$data['content']
-            ];
-            ArticleData::insertGetId($articleDataContent);
-            Db::commit();
-        } catch(\Throwable $ex){
-            Db::rollBack();
-            var_dump($ex->getMessage());
-            return Result::error("创建失败",0);
-        }
-
-        return Result::success(['id'=>$id]);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function delArticle(array $data): array
-    {
-        $result = Article::where($data)->update(['status'=>404]);
-        if(!$result){
-            return Result::error("删除失败");
-        }
-        return Result::success($result);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function updateArticle(array $data): array
-    {
-        Db::beginTransaction();
-        try{
-            $data['cat_arr_id'] = isset($data['cat_arr_id'])?json_encode($data['cat_arr_id']):'';
-            $data['tag'] = isset($data['tag'])?json_encode($data['tag']):'';
-            $articleData = $data;
-            unset($articleData['content']);
-            unset($articleData['status_name']);
-            unset($articleData['name']);
-            unset($articleData['content']);
-            unset($articleData['pid_arr']);
-            unset($articleData['pid']);
-            $id = Article::where(['id'=>$data['id']])->update($articleData);
-            $articleDataContent = [
-                'content'=>$data['content']
-            ];
-            ArticleData::where(['article_id'=>$data['id']])->update($articleDataContent);
-        } catch(\Throwable $ex){
-            Db::rollBack();
-            var_dump($ex->getMessage());
-            return Result::error("更新失败",0);
-        }
-        return Result::success([]);
-
-    }
-
-    /**
-     * 更新资讯状态
-     * @param array $data
-     * @return array
-     */
-    public function upArticleStatus(array $data):array
-    {
-       $result =  Article::where(['id'=>$data['id']])->update($data);
-        if($result){
-            return Result::success();
-        }else{
-            return Result::error("更新状态失败",0);
-        }
-    }
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getArticleInfo(array $data): array
-    {
-        $where = [
-            'article.id'=>$data['id']
-        ];
-        $result = Article::where($where)->leftJoin("article_data","article.id","article_data.article_id")->first();
-        if($result){
-            return Result::success($result->toArray());
-        }else{
-            return Result::error("查询失败",0);
-        }
-    }
-    /**
-     *  获取新闻
-     * @param array $data
-     * @return array
-    */
-    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("created_at","desc")->offset($placeid)->limit($data['pageSize'])->get();
-            }else{
-                $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("created_at","desc")->offset(0)->limit($data['pageSize'])->get();
-            }
-            if(empty($result)){
-                return Result::error("暂无头条新闻",0);
-            }            
-            return Result::success($result); 
-        }else{
-            return Result::error("本网站下暂无相关栏目",0);
-        }
-    }
-    /**
-     * 获取模块新闻
-     * @param array $data
-     * @return array
-    */
-   
-    public function getWebsiteModelArticles(array $data): array    
-    {
-        $catid=$data['catid'];
-        $category = WebsiteCategory::where('website_id',$data['website_id'])->where('category_id',$catid)->select('category_id')->get();
-        $category = $category->toArray();
-        if(!empty($category)){
-            $where=[
-                'status' => 1,
-                'catid' => $catid
-            ];
-            if($data['level']==1){
-                $level=[
-                    0=>'1',
-                    1=>'4',
-                    2=>'5'
-                ];
-                $result = Article::where($where)->whereIn('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
-            }elseif($data['level']==2){
-                $level='2';
-                $result = Article::where($where)->where('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
-
-            }else{
-                $level='3';
-                $result = Article::where($where)->where('level',$level)->orderBy("created_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("created_at","desc")
-                    ->offset($placeid)
-                    ->limit($data['pagesize'])->get();
-                }else{
-                    $result = Article::where($where)
-                    ->whereIn('level',$level)
-                    ->offset($placeid)
-                    ->orderBy("created_at","desc")
-                    ->limit($data['pagesize'])->get();
-                } 
-            }
-            if(empty($result)){
-                return Result::error("此栏目暂无相关新闻",0);
-            }
-        }else{
-            return Result::error("此网站暂无此栏目",0);
-        
-        }
-        return Result::success($result);  
-        
-    }
+<?php
+namespace App\JsonRpc;
+
+use App\Model\Article;
+use App\Model\ArticleData;
+use App\Model\Category;
+use App\Model\Website;
+use App\Model\WebsiteCategory;
+use Hyperf\DbConnection\Db;
+use Hyperf\RpcServer\Annotation\RpcService;
+use App\Tools\Result;
+use App\Model\ArticleSurvey;
+#[RpcService(name: "NewsService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
+class NewsService implements NewsServiceInterface
+{
+
+    /**
+     * 获取导航池列表
+     * @param array $data
+     * @return array
+     */
+    public function getCategoryList(array $data): array
+    {
+        $where = [];
+        if(isset($data['name']) && $data['name']){
+            array_push($where, ['category.name','like','%'.$data['name'].'%']);
+        }
+        if(isset($data['department_id']) && $data['department_id']){
+            array_push($where, ['category.department_id','=',$data['department_id']]);
+        }
+        $city_id='';
+        if(isset($data['city_id']) && $data['city_id']){
+            $city_id = intval($data['city_id']);
+        }
+        $rep = Category::where($where)
+            ->when($city_id, function ($query) use ($city_id) {
+                if(isset($city_id) && $city_id) {
+                    $query->whereJsonContains("category.city_arr_id", $city_id);
+                }
+            })
+            ->leftJoin('district','category.city_id','district.id')
+            ->leftJoin('department','category.department_id','department.id')
+            ->select("category.*","district.name as city_name","department.name as department_name")
+            ->limit($data['pageSize'])->orderByDesc('category.updated_at')->offset(($data['page']-1)*$data['pageSize'])->get();
+        $count =  Category::where($where)->when($city_id, function ($query) use ($city_id) {
+            if(isset($city_id) && $city_id) {
+                $query->whereJsonContains("category.city_arr_id", $city_id);
+            }
+        })->count();
+        $data = [
+            'rows'=>$rep->toArray(),
+            'count'=>$count
+        ];
+        if(empty($rep->toArray())){
+            return Result::error("没有导航池数据");
+        }
+        return Result::success($data);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function categoryList(array $data): array
+    {
+        $where[] = [
+            'pid','=',$data['pid']
+        ];
+        if(isset($data['name'])){
+            array_push($where, ['category.name','like','%'.$data['name'].'%']);
+        }
+        var_dump($where);
+       $result =  Category::where($where)->select('category.*','category.id as category_id')->get();
+        if(empty($result)){
+            return Result::error("没有栏目数据");
+        }
+        return Result::success($result);
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function addCategory(array $data): array
+    {
+        $id = Category::insertGetId($data);
+        if(empty($id)){
+            return Result::error("添加失败");
+        }
+        return Result::success(['id'=>$id]);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function delCategory(array $data): array
+    {
+        $categoryList = Category::where(['pid'=>$data['id']])->get();
+        var_dump("分类列表:",$data,$categoryList);
+        if($categoryList->toArray()){
+            return Result::error("分类下面有子分类不能删除");
+        }
+        $articleList = Article::where(['catid'=>$data['id']])->get();
+        var_dump("文章列表:",$articleList);
+        if($articleList->toArray()){
+            return Result::error("分类下面有资讯不能删除");
+        }
+        $result = Category::where($data)->delete();
+        if(!$result){
+            return Result::error("删除失败");
+        }
+        return Result::success($result);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function updateCategory(array $data): array
+    {
+        $where = [
+            'id'=>$data['id']
+        ];
+        $result = Category::where($where)->update($data);
+        if($result){
+            return Result::success($result);
+        }else{
+            return Result::error("更新失败");
+        }
+    }
+
+    /**
+     * 获取导航池信息
+     * @param array $data
+     * @return array
+     */
+    public function getCategoryInfo(array $data): array
+    {
+        $where = [
+            'id'=>$data['id']
+        ];
+        $result = Category::where($where)->first();
+        if($result){
+            return Result::success($result);
+        }else{
+            return Result::error("更新失败");
+        }
+    }
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getArticleList(array $data): array
+    {
+        $where= [];
+
+        if(isset($data['title'])  && $data['title']){
+            array_push($where,['article.title','like','%'.$data['title'].'%']);
+        }
+        if(isset($data['category_name'])  && $data['category_name']){
+            array_push($where,['category.name','like','%'.$data['category_name'].'%']);
+        }
+        if(isset($data['author'])  && $data['author']){
+             array_push($where,['article.author','=',$data['author']]);
+        }
+        if(isset($data['islink'])  && $data['islink']!==""){
+            array_push($where,['article.islink','=',$data['islink']]);
+        }
+        if(isset($data['status']) && $data['status']!==""){
+            array_push($where,['article.status','=',$data['status']]);
+        }
+        
+        $rep = Article::where($where)
+            ->whereNotIn('article.status',[404])
+            ->leftJoin('category','article.catid','category.id')
+            ->select("article.*","category.name as category_name")
+            ->orderBy("article.id","desc")
+            ->limit($data['pageSize'])
+            ->offset(($data['page']-1)*$data['pageSize'])->get();
+        $count =  Article::where($where)->whereNotIn('article.status',[404])
+            ->leftJoin('category','article.catid','category.id')->count();
+        $data = [
+            'rows'=>$rep->toArray(),
+            'count'=>$count
+        ];
+        if(empty($rep)){
+            return Result::error("没有信息数据");
+        }
+        return Result::success($data);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function addArticle(array $data): array
+    {
+        Db::beginTransaction();
+        try{
+
+            $articleData = $data;
+            unset($articleData['content']);
+            $id = Article::insertGetId($articleData);
+            $articleDataContent = [
+                'article_id'=>$id,
+                'content'=>$data['content']
+            ];
+            ArticleData::insertGetId($articleDataContent);
+            Db::commit();
+        } catch(\Throwable $ex){
+            Db::rollBack();
+            var_dump($ex->getMessage());
+            return Result::error("创建失败",0);
+        }
+
+        return Result::success(['id'=>$id]);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function delArticle(array $data): array
+    {
+        $result = Article::where($data)->update(['status'=>404]);
+        if(!$result){
+            return Result::error("删除失败");
+        }
+        return Result::success($result);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function updateArticle(array $data): array
+    {
+        Db::beginTransaction();
+        try{
+            $data['cat_arr_id'] = isset($data['cat_arr_id'])?json_encode($data['cat_arr_id']):'';
+            $data['tag'] = isset($data['tag'])?json_encode($data['tag']):'';
+            $articleData = $data;
+            unset($articleData['content']);
+            unset($articleData['status_name']);
+            unset($articleData['name']);
+            unset($articleData['content']);
+            unset($articleData['pid_arr']);
+            unset($articleData['pid']);
+            $id = Article::where(['id'=>$data['id']])->update($articleData);
+            $articleDataContent = [
+                'content'=>$data['content']
+            ];
+            ArticleData::where(['article_id'=>$data['id']])->update($articleDataContent);
+        } catch(\Throwable $ex){
+            Db::rollBack();
+            var_dump($ex->getMessage());
+            return Result::error("更新失败",0);
+        }
+        return Result::success([]);
+
+    }
+
+    /**
+     * 更新资讯状态
+     * @param array $data
+     * @return array
+     */
+    public function upArticleStatus(array $data):array
+    {
+       $result =  Article::where(['id'=>$data['id']])->update($data);
+        if($result){
+            return Result::success();
+        }else{
+            return Result::error("更新状态失败",0);
+        }
+    }
+    /**
+     * 获取新闻详情
+     * @param array $data
+     * @return array
+     */
+    public function getArticleInfo(array $data): array
+    {
+        $where = [
+            '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);
+        }
+        return Result::success($result);
+    }
+    /**
+     *  获取头条新闻
+     * @param array $data
+     * @return array
+    */
+    public function getWebsiteArticlett(array $data): array   
+    {
+    
+        $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);
+        }
+    }
+    /**
+     * 获取模块新闻
+     * @param array $data
+     * @return array
+    */
+   
+    public function getWebsiteModelArticles(array $data): array    
+    {
+        $catid=$data['catid'];
+        $category = WebsiteCategory::where('website_id',$data['website_id'])->where('category_id',$catid)->select('category_id')->get();
+        $category = $category->toArray();
+        if(!empty($category)){
+            $where=[
+                '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',
+                    1 => '4',
+                    2 => '5',
+                    3 => '0',
+                ];
+                $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)
+                ->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);
+            }
+        }else{
+            return Result::error("此网站暂无此栏目",0);
+        
+        }
+        return Result::success($result);  
+        
+    }
+
+
+
+
+    /**
+     *获取新闻列表 
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteArticleList(array $data): array 
+    {
+        $where[] = ['status', '=', 1];
+       if(isset($data['keyword'])  && !empty($data['keyword'])){
+            array_push($where,['article.title','like','%'.$data['keyword'].'%']);
+        }
+        if(isset($data['catid'])  && !empty($data['catid'])){
+            if(is_array($data['catid'])){
+                $category = WebsiteCategory::where('website_id',$data['website_id'])->whereIn('category_id',$data['catid'])->pluck('category_id');
+                array_push($where,['catid', 'in', $data['catid']]);
+            }else{
+                $category = WebsiteCategory::where('website_id',$data['website_id'])->where('category_id',$data['catid'])->pluck('category_id');
+                array_push($where,['catid', '=', $data['catid']]);
+            }
+            if(empty($category)){
+               return Result::error("此网站暂无此栏目",0); 
+            }
+        }
+        // return Result::success($where);
+        $rep = Article::where(function ($query) use ($where) {
+            foreach ($where as $condition) {
+                if ($condition[1] === 'in') {
+                    $query->whereIn($condition[0], $condition[2]);
+                } else {
+                    $query->where($condition[0], $condition[1], $condition[2]);
+                }
+            }
+        })
+        ->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) {
+                if ($condition[1] === 'in') {
+                    $query->whereIn($condition[0], $condition[2]);
+                } else {
+                    $query->where($condition[0], $condition[1], $condition[2]);
+                }
+            }
+        })->count();
+
+        $data = [
+            'rows'=>$rep->toArray(),
+            'count'=>$count
+        ];
+        
+        if(empty($rep)){
+            return Result::error("没有信息数据");
+        }
+        return Result::success($data);
+        
+    }
+    /**
+     * 前端-获取新闻详情
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticleInfo(array $data): array
+    {
+        $where = [
+            'article.id'=>$data['id'],
+            'article.status'=>1
+        ];
+        $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)){
+            return Result::error("查询失败",0);
+        }
+        $result['category_id'] = $category['category_id'];
+        $result['cat_name'] = $category['alias'];
+        return Result::success($result);
+    }
+    /**
+     * 前端-获取网站调查问卷
+     * @param array $data
+     * @return array
+     */
+     public function getWebsiteSurvey(array $data): array
+    {
+        if(isset($data['website_id']) && !empty($data['website_id'])){
+            $website = Website::where('id',$data['website_id'])->first();
+            if(empty($website)){
+                return Result::error("暂无此网站",0);
+            }
+        }
+        if(isset($data['art_id'])  && !empty($data['art_id'])){
+            $article = Article::where('id',$data['art_id'])->where('status',1)->first();
+            if(empty($article)){
+                return Result::error("暂无此文章",0);
+            }
+            // return Result::error($data,0);
+            $where['art_id'] = $data['art_id'];
+            // $query = ArticleSurvey::where('art_id',$data['art_id']); 
+            
+        }else{
+            $survey = ArticleSurvey::where('website_id',$data['website_id'])->orderBy('created_at')->first();
+            if(empty($survey)){
+                return Result::error("暂无调查问卷",0); 
+            }
+            $where['sur_id'] = $survey['sur_id'];
+            // $query = ArticleSurvey::where('sur_id',$survey['sur_id']);
+        }
+        $result['survey'] =  ArticleSurvey::where($where)->where('is_other',0)
+        ->leftJoin('article','article_survey.art_id','article.id')
+        ->select('article_survey.*','article.survey_type')
+        ->get()->all();
+        $result['other'] = ArticleSurvey::where($where)->where('is_other',1)->where('other_id',0)->first();
+        $result['others'] = ArticleSurvey::where($where)->where('is_other',1)->where('other_id','!=',0)->orderByDesc('created_at')->first();
+        if(empty($result)){
+            return Result::error("此文章暂无调查问卷",0); 
+        }
+        return Result::success($result);
+    }
+    /**
+     * 前端-添加网站调查问卷选项
+     * @param array $data
+     * @return array
+     */
+    public function addWebsiteSurveyOption(array $data): array
+    {
+        if(isset($data['website_id']) && !empty($data['website_id'])){
+            $website = Website::where('id',$data['website_id'])->first();
+            if(empty($website)){
+                return Result::error("暂无此网站",0);
+            }
+            if(isset($data['sur_id']) && !empty($data['sur_id'])){
+                $survey = ArticleSurvey::where('sur_id',$data['sur_id'])->where('website_id',$data['website_id'])->where('is_other',1)->where('other_id',0)->first(); 
+                if(empty($survey)){
+                    return Result::error("此调查问卷不可添加选项",0); 
+                }
+                if(isset($data['choice_name']) &&!empty($data['choice_name'])){
+                    $choice = [
+                        'art_id'=>$survey['art_id'],
+                        'website_id'=>$data['website_id'],
+                        'survey_name'=>$survey['survey_name'],
+                        'choice_name'=>$data['choice_name'],
+                        'sur_id'=>$survey['sur_id'],                   
+                        'is_other'=>1,
+                        'other_id'=>$survey['id'],
+    
+                    ];
+                    $result = ArticleSurvey::insertGetId($choice);
+                    if(empty($result)){
+                        return Result::error("添加失败",0);
+                    }
+                    return Result::success($result);
+                }
+            }
+            return Result::error("添加失败",0);
+        }
+        return Result::error("添加失败",0);
+        
+    }
+    /**
+     * 前端-调查问卷投票   
+     * @param array $data
+     * @return array
+     */
+    public function addWebsiteSurveyVote(array $data): array
+    {
+        if(isset($data['website_id']) && !empty($data['website_id'])){
+            $website = Website::where('id',$data['website_id'])->first(); 
+            if(empty($website)){
+                return Result::error("暂无此网站",0); 
+            }
+            if(isset($data['sur_id']) && !empty($data['sur_id'])){
+                $survey = ArticleSurvey::where('sur_id',$data['sur_id'])->where('website_id',$data['website_id'])->pluck('sur_id');
+                if(empty($survey)){
+                    return Result::error("此调查问卷不存在",0);
+                }
+                // return Result::success($survey);
+                // 调查问卷类型   0:单选 1:多选
+                $type = Article::where('survey_id',$data['sur_id'])->pluck('survey_type');
+                // return Result::success($type);
+                if(empty($type) || ($type[0]!= 1 && $type[0]!= 0)){
+                    return Result::error("此调查问卷不可投票",0); 
+                }
+                // return Result::success($type[0]);
+                if(isset($data['choice_id']) &&!empty($data['choice_id'])){
+                    if($type[0] == 0){
+                        if(is_array($data['choice_id'])){
+                            return Result::error("请选择一个选项!",0);
+                        }
+                        $data['choice_id'] = [$data['choice_id']];
+                    }else{
+                        if(!is_array($data['choice_id'])){
+                            return Result::error("请传递数组!",0);
+                        }
+                    }
+                    // return Result::success($data['choice_id']);
+                    $other = ArticleSurvey::whereIn('id',$data['choice_id'])
+                    ->where('website_id',$data['website_id'])
+                    ->where('is_other',1)
+                    ->where('other_id',0)
+                    ->first();
+                    if(!empty($other)){
+                        return Result::error("请选择已有的选项!",0);
+                    }
+                    $choice['other'] = ArticleSurvey::whereIn('id',$data['choice_id'])
+                    ->where('website_id',$data['website_id'])
+                    ->where('is_other',1)
+                    ->where('other_id','!=',0)
+                    ->first();
+                    // return Result::success($data);
+                    if(!empty($choice['other'])){
+                        array_push($data['choice_id'],$choice['other']['other_id']);
+                        // return Result::success($data['choice_id']);
+                    }
+                    // return Result::success($data);
+                    $choice = ArticleSurvey::whereIn('id',$data['choice_id'])
+                    ->where('website_id',$data['website_id'])
+                    ->increment('results', 1);                 
+                    if(empty($choice)){
+                        return Result::error("请选择已有的选项!",0);
+                    }
+ 
+                    return Result::success($choice);
+
+                }
+                return Result::error("参数必填!");
+                // if(isset($data['choice_id']) && !empty($data['choice_id'])){
+                //     $choice = ArticleSurvey::whereIn('id',$data['choice_id'])->where('website_id',$data['website_id'])->where('is_other',1)->where('other_id',0)->first();
+                // }
+            }
+            return Result::error("此调查问卷不存在",0);
+        }
+        return Result::error("参数必填!");
+    }
+    /**
+     * 后端-获取网站调查问卷列表
+     * @param array $data
+     * @return array
+     */
+    public function getSurveyList(array $data): array
+    {
+        $where = [];
+        if(isset($data['survey_name']) &&!empty($data['survey_name'])){
+            array_push($where,['survey_name','like','%'.$data['survey_name'].'%']);
+        }
+        if(isset($data['survey_type']) && $data['survey_type'] != null){
+            array_push($where,['survey_type','=',$data['survey_type']]);
+        }
+        if(isset($data['is_survey']) && $data['is_survey'] != null){
+            array_push($where,['is_survey','=',$data['is_survey']]);
+        }
+        // return Result::success($where);
+        if(!empty($where)){
+            $query = Article::where($where)->whereNotNull('survey_name');
+        }else{
+            $query = Article::whereNotNull('survey_name');
+        }
+        $count = $query->count();
+        $survey = $query->orderByDesc('id')
+        ->limit($data['pageSize'])
+        ->offset(($data['page']-1)*$data['pageSize'])
+        ->get();
+        if(empty($survey->toArray())){
+            return Result::error("暂无调查问卷!",0);
+        }
+        $result = [
+            'rows'=>$survey,
+            'count'=>$count
+        ];
+        return Result::success($result);
+    }
+    /**
+     * 后端-获取网站调查问卷详情
+     * @param array $data
+     * @return array 
+     */
+    public function getSurveyInfo(array $data): array
+    {
+        if(isset($data['sur_id']) &&!empty($data['sur_id'])){
+            $where = [ 'sur_id'=>$data['sur_id']];
+            $choose =  ArticleSurvey::where($where)->where('is_other',0)
+            ->leftJoin('article','article_survey.art_id','article.id')
+            ->select('article_survey.*','article.survey_type')
+            ->get()->all();
+            if(empty($choose)){
+                return Result::error("此调查问卷不存在",0);
+            }
+            $resultsArray  = array_column($choose, 'results');
+            $total = array_sum($resultsArray);
+            $other = ArticleSurvey::where($where)->where('is_other',1)->where('other_id',0)->first();
+            $others = ArticleSurvey::where($where)->where('is_other',1)->where('other_id','!=',0)->orderByDesc('created_at')->get()->all();
+            // $total = 0;
+            if(!empty($other)){
+                $total = $total + $other['results'];
+                $other['choice_name'] = $other['choice_name'].'(其他)';
+                if(!empty($others)){
+                    $other['hasChildren'] = true;
+                    // array_push($other,['hasChildren','=',true]);
+                    $other['children'] = $others;
+                    $other_choices = [$other->toArray()];
+                    $mer_choice = array_merge($choose,$other_choices);
+                    $value_choice = array_values($mer_choice);
+                }
+                else{
+                    // return Result::error('1111');
+                    $other_choices = [$other->toArray()];
+                    $other_choices = array_merge($choose,$other_choices);
+                    $value_choice = array_values($other_choices);
+                    // return Result::success($result);
+                }
+            }else{
+                $value_choice = $choose;
+            }
+            $result = [
+                'choose'=>$value_choice,
+                'total'=>$total 
+            ];
+        }
+        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);
+    }
 }

+ 42 - 0
app/JsonRpc/NewsServiceInterface.php

@@ -85,4 +85,46 @@ interface NewsServiceInterface
      */
     public function getWebsiteModelArticles(array $data):array;
 
+     /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteArticleList(array $data):array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticleInfo(array $data):array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getWebsiteSurvey(array $data):array;
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function addWebsiteSurveyOption(array $data):array;
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function addWebsiteSurveyVote(array $data):array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getSurveyList(array $data):array;
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function getSurveyInfo(array $data):array;
+     /**
+     * @param array $data
+     * @return array
+     */
+    public function selectWebsiteArticle(array $data):array;
 }

+ 27 - 0
app/Model/ArticleSurvey.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class ArticleSurvey extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'article_survey';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}