LiuJ 2 天之前
父節點
當前提交
f283790d22
共有 1 個文件被更改,包括 201 次插入169 次删除
  1. 201 169
      app/JsonRpc/NewsService.php

+ 201 - 169
app/JsonRpc/NewsService.php

@@ -1458,175 +1458,6 @@ class NewsService implements NewsServiceInterface
    * @param array $data
    * @return array
    */
-  public function getWebsiteAllArticle(array $data): array
-  {
-
-
-
-    // $redisKey = 'website_cache';
-    // $this->redis->hSet($redisKey, $data['website_id'], json_encode($data));
-    // $result = $this->redis->sadd($redisKey);
-    // 使用缓存键
-    // $cacheKey = $data['website_id'];
-
-    //  // 尝试从缓存获取数据
-    $container = \Hyperf\Context\ApplicationContext::getContainer();
-    $cache = $container->get(\Psr\SimpleCache\CacheInterface::class);
-    // 修正传入的字符串,将单引号替换为双引号
-    $input['id'] = $data['id'];
-    $input['website_id'] = $data['website_id'];
-
-    // 将 JSON 字符串转换为 PHP 数组
-    $items = json_decode($input['id'], true);
-
-    if (!is_array($items)) {
-      return Result::error("无效的JSON格式", 0);
-    }
-
-    $website = [
-      'website_id' => $input['website_id'],
-    ];
-    foreach ($items as $key => $item) {
-      if (isset($item['parent']) && $item['parent'] !== "") {
-        $parentParams = explode(',', $item['parent']);
-        if (isset($parentParams) && $parentParams[0] !== "") {
-          $parentCatId[$key] = $parentParams[0];
-        }
-      } else {
-        return Result::error("缺少必需参数错误", 0);
-      }
-    }
-    $pid = WebsiteCategory::whereIn('category_id', $parentCatId)->where($website)->pluck('pid')->toArray();
-    // return Result::success($pid);
-    if (!empty($pid)) {
-      $pid = array_values(array_unique($pid));
-      if (count($pid) == 1) {
-        $cacheKey = $data['website_id'] . ',' . $pid[0];
-      } else {
-        return Result::error("参数传递错误", 0);
-      }
-    }
-    // return Result::success($cacheKey);
-    if ($cachedData = $cache->get($cacheKey)) {
-      return Result::success(unserialize($cachedData));
-    }
-    try {
-
-
-      // 提前缓存常用查询结果,减少重复查询
-      $categoryCache = [];
-      $childCategoryCache = [];
-
-      // 使用 array_map 处理每个元素
-      $result = array_map(function ($item) use ($website, &$categoryCache, &$childCategoryCache) {
-        $resultItem = [
-          'alias' => null,
-          'category_id' => null,
-          'pinyin' => null,
-          'imgnum' => [],
-          'textnum' => [],
-          'child' => []
-        ];
-
-        // 处理父级栏目
-        if (isset($item['parent']) && $item['parent'] !== 'undefined' && $item['parent'] !== "") {
-          $parentParams = explode(',', $item['parent']);
-
-          if (count($parentParams) !== 3) {
-            return Result::error("父级栏目:缺少必需参数错误", 0);
-          }
-
-          list($parentCatId, $parentImgNum, $parentTextNum) = $parentParams;
-          $cacheKey = "parent_{$parentCatId}_{$website['website_id']}";
-
-          if (!isset($categoryCache[$cacheKey])) {
-            // 查询栏目名称
-            $categoryCache[$cacheKey] = WebsiteCategory::where('category_id', $parentCatId)
-              ->where($website)
-              ->first(['alias', 'category_id', 'aLIas_pinyin', 'type']);
-          }
-
-          $category = $categoryCache[$cacheKey];
-
-          if (!empty($category)) {
-            $resultItem['alias'] = $category->alias;
-            $resultItem['category_id'] = $category->category_id;
-            $resultItem['pinyin'] = $category->aLIas_pinyin;
-
-            // 查询图片新闻
-            if (!empty($parentImgNum)) {
-              $resultItem['imgnum'] = $this->fetchArticles($parentCatId, $website, (int)$parentImgNum, true);
-            }
-
-            // 查询文字新闻
-            if (!empty($parentTextNum)) {
-              $resultItem['textnum'] = $this->fetchArticles($parentCatId, $website, (int)$parentTextNum, false);
-            }
-          }
-        }
-
-        // 处理子级栏目
-        if (isset($item['child']) && $item['child'] !== 'undefined' && $item['child'] !== "") {
-          $childParams = explode(',', $item['child']);
-
-          if (count($childParams) !== 3) {
-            return Result::error("子级栏目:缺少必需参数错误", 0);
-          }
-
-          list($childCatId, $childImgNum, $childTextNum) = $childParams;
-          $cacheKey = "child_{$childCatId}_{$website['website_id']}";
-
-          if (!isset($childCategoryCache[$cacheKey])) {
-            // 查询子栏目信息
-            $childCategoryCache[$cacheKey] = WebsiteCategory::where($website)
-              ->where("category_id", $childCatId)
-              ->whereRaw("JSON_CONTAINS(category_arr_id, '" . intval($childCatId) . "') = 1")
-              ->first(['alias', 'category_id', 'aLIas_pinyin', 'pid', 'category_arr_id as cat_arr_id']);
-          }
-
-          $childCategory = $childCategoryCache[$cacheKey];
-
-          if (!empty($childCategory)) {
-            $childCategory = $this->processArticles($childCategory, $website);
-
-            // 查询此层级的所有子栏目
-            $allChildCategories = WebsiteCategory::where($website)
-              ->where("pid", $childCategory['pid'])
-              ->get(['alias', 'category_id', 'aLIas_pinyin', 'pid', 'category_arr_id as cat_arr_id']);
-
-            $allChildCategories = $this->processArticles($allChildCategories, $website);
-
-            $childResult = [
-              'alias' => $childCategory->alias,
-              'category_id' => $childCategory->category_id,
-              'pinyin' => $childCategory->aLIas_pinyin,
-              'all_childcat' => $allChildCategories,
-              'imgnum' => [],
-              'textnum' => []
-            ];
-
-            // 查询子栏目图片新闻
-            if (!empty($childImgNum)) {
-              $childResult['imgnum'] = $this->fetchArticles($childCatId, $website, (int)$childImgNum, true);
-            }
-
-            // 查询子栏目文字新闻
-            if (!empty($childTextNum)) {
-              $childResult['textnum'] = $this->fetchArticles($childCatId, $website, (int)$childTextNum, false);
-            }
-
-            $resultItem['child'] = $childResult;
-          }
-        }
-        return $resultItem;
-      }, $items);
-      $cache->set($cacheKey, serialize($result), 86400);
-      return Result::success($result);
-    } catch (\Exception $e) {
-      // 记录错误日志
-      return Result::error("获取网站文章失败: " . $e->getMessage());
-    }
-  }
 
   /**
    * 辅助方法:获取文章列表
@@ -5760,4 +5591,205 @@ class NewsService implements NewsServiceInterface
       ->toArray();
     return Result::success($articlesList);
   }
+
+  /**
+   * 模块新闻加强版 
+   * @param array $data
+   * @return array
+   */
+  public function getWebsiteAllArticle(array $data): array
+  {
+
+
+
+    // 修正传入的字符串,将单引号替换为双引号
+    $input['id'] = $data['id'];
+    $input['website_id'] = $data['website_id'];
+    // 将 JSON 字符串转换为 PHP 数组
+    $data = json_decode($input['id'], true);
+    // 使用 array_map 处理每个元素
+    $result = array_map(function ($item) use ($input) {
+      // 检查parent元素是否存在且不是undefined
+      if (isset($item['parent']) && $item['parent'] != 'undefined' && $item['parent'] != "") {
+        $count = explode(',', $item['parent']);
+        if (count($count) != 3) {
+          return Result::error("参数错误", 0);
+        }
+        list($parentCatId, $parentImgNum, $parentTextNum) = explode(',', $item['parent']);
+        $website = [
+          'website_id' => $input['website_id'],
+        ];
+        // 查询栏目名称
+        $categroy = WebsiteCategory::where('category_id', $parentCatId)->where($website)->first(['alias', 'category_id', 'aLIas_pinyin', 'type']);
+        // 查询图片新闻
+        if (isset($parentImgNum) && $parentImgNum != 0 && !empty($categroy)) {
+          $imgArticles = Article::where('article.status', 1)
+            ->where(function ($query) use ($parentCatId) {
+              $query->whereRaw("JSON_CONTAINS(cat_arr_id, '\"$parentCatId\"')")
+                ->orWhereRaw("JSON_CONTAINS(cat_arr_id, '$parentCatId')");
+            })
+            ->where(function ($query) use ($website) {
+              $query->where(function ($subQuery) use ($website) {
+                $subQuery->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($website['website_id']) . "') = 1")
+                  ->orWhereNull("ignore_ids");
+              });
+            })
+            ->where('imgurl', '!=', '')
+            ->leftJoin('website_category', function ($join) use ($website) {
+              $join->on('article.catid', '=', 'website_category.category_id')
+                ->where('website_category.website_id', '=', $website['website_id']);
+            })
+            ->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',
+              'website_category.alias as category_name',
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($parentImgNum)
+            ->get();
+          //调取封装路由的方法,处理新闻路由   
+          if (!empty($imgArticles)) {
+            $imgArticles = $this->processArticles($imgArticles, $website);
+          }
+        }
+        // 查询文字新闻
+        if (isset($parentTextNum) && $parentTextNum != 0 && !empty($categroy)) {
+          $textArticles = [];
+          $textArticles = Article::where('article.status', 1)
+            ->where(function ($query) use ($parentCatId) {
+              $query->whereRaw("JSON_CONTAINS(cat_arr_id, '\"$parentCatId\"')")
+                ->orWhereRaw("JSON_CONTAINS(cat_arr_id, '$parentCatId')");
+            })
+            ->where(function ($query) use ($website) {
+              $query->where(function ($subQuery) use ($website) {
+                $subQuery->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($website['website_id']) . "') = 1")
+                  ->orWhereNull("ignore_ids");
+              });
+            })
+            ->leftJoin('website_category', function ($join) use ($website) {
+              $join->on('article.catid', '=', 'website_category.category_id')
+                ->where('website_category.website_id', '=', $website['website_id']);
+            })
+            ->select(
+              'article.id',
+              'article.title',
+              'article.author',
+              'article.updated_at',
+              'article.cat_arr_id',
+              'article.introduce',
+              'article.islink',
+              'article.linkurl',
+              'article.copyfrom',
+              'article.catid',
+              'website_category.alias as category_name',
+            )
+            ->orderBy('updated_at', 'desc')
+            ->limit($parentTextNum)
+            ->get();
+          if (!empty($textArticles)) {
+            $textArticles = $this->processArticles($textArticles, $website);
+          }
+        }
+      }
+      $resultItem = [
+        'alias' =>  $categroy ? $categroy->alias : null,
+        'category_id' =>  $categroy ? $categroy->category_id : null,
+        'pinyin' =>  $categroy ? $categroy->aLIas_pinyin : null,
+        'imgnum' => $imgArticles ?? [],
+        'textnum' => $textArticles ?? [],
+      ];
+      if (isset($item['child']) && $item['child'] != 'undefined' && $item['child'] != "") {
+        list($childCatId, $childImgNum, $childTextNum) = explode(',', $item['child']);
+        $childCategory = WebsiteCategory::where($website)
+          ->where("category_id", $childCatId)
+          ->whereRaw("JSON_CONTAINS(category_arr_id, '" . intval($parentCatId) . "') = 1")
+          ->first(['alias', 'category_id', 'aLIas_pinyin', 'pid', 'type', 'category_arr_id as cat_arr_id']);
+        if (!empty($childCategory)) {
+          $childCategory = $this->processArticles($childCategory, $website);
+          // 查询此层级的所有子栏目
+          $all_childcat = WebsiteCategory::where($website)
+            ->where("pid", $childCategory['pid'])
+            ->whereRaw("JSON_CONTAINS(category_arr_id, '" . intval($parentCatId) . "') = 1")
+            ->get(['alias', 'category_id', 'aLIas_pinyin', 'pid', 'type', 'category_arr_id as cat_arr_id']);
+          $all_childcat = $this->processArticles($all_childcat, $website);
+          // 查询子栏目图片新闻
+          if (isset($childImgNum) && $childImgNum != 0) {
+            $childImgArticles = Article::where('catid', $childCatId)
+              ->where('status', 1)
+              ->where(function ($query) use ($website) {
+                $query->where(function ($subQuery) use ($website) {
+                  $subQuery->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($website['website_id']) . "') = 1");
+                })->orWhereNull("ignore_ids");
+              })
+              ->select(
+                'article.id',
+                'article.title',
+                'article.imgurl',
+                'article.author',
+                'article.updated_at',
+                'article.introduce',
+                'article.islink',
+                'article.linkurl',
+                'article.catid',
+                'article.cat_arr_id',
+                'article.copyfrom',
+              )
+              ->where('imgurl', '!=', '')
+              ->orderBy('updated_at', 'desc')
+              ->limit($childImgNum)
+              ->get();
+            $childImgArticles = $this->processArticles($childImgArticles, $website);
+          }
+          // 查询子栏目文字新闻
+          if (isset($childTextNum) && $childTextNum != 0) {
+            $childTextArticles = Article::where('catid', $childCatId)
+              ->where('status', 1)
+              ->where(function ($query) use ($website) {
+                $query->where(function ($subQuery) use ($website) {
+                  $subQuery->whereRaw("JSON_CONTAINS(ignore_ids, '" . intval($website['website_id']) . "') = 1");
+                })->orWhereNull("ignore_ids");
+              })
+              ->select(
+                'article.id',
+                'article.title',
+                'article.author',
+                'article.updated_at',
+                'article.introduce',
+                'article.islink',
+                'article.linkurl',
+                'article.catid',
+                'article.cat_arr_id',
+                'article.copyfrom',
+              )
+              ->orderBy('updated_at', 'desc')
+              ->limit($childTextNum)
+              ->get();
+            $childTextArticles = $this->processArticles($childTextArticles, $website);
+          }
+        }
+        $resultItem['child'] = [
+          'alias' => $childCategory ? $childCategory->alias : null,
+          'category_id' => $childCategory ? $childCategory->category_id : null,
+          'type' => $childCategory ? $childCategory->type : null,
+          'pinyin' => $childCategory ? $childCategory->pinyin : null,
+          'all_childcat' => $all_childcat ?? [],
+          'imgnum' => $childImgArticles ?? [],
+          'textnum' => $childTextArticles ?? [],
+        ];
+      } else {
+        $resultItem['child'] = [];
+      }
+      return $resultItem;
+    }, $data);
+    return Result::success($result);
+  }
 }