where('delete_time', null) ->find(); if (!$categoryInfo) { return json([ 'code' => 200, 'msg' => 'success', 'list' => [], ]); } // 查询文章 $articles = Articles::published() ->where('cate', $categoryInfo['id']) ->order('publishdate', 'desc') ->limit(4) ->select(); return json([ 'code' => 200, 'msg' => 'success', 'list' => $articles, ]); } /** * 获取企业新闻 * @return Json */ public function getCompanyNews(): Json { // 获取分页参数 $page = Request::param('page', 1); $limit = Request::param('limit', 10); $page = max(1, intval($page)); $limit = max(1, min(50, intval($limit))); // 限制每页最多50条 // 查询分类 $categoryInfo = ArticlesCategory::where('name', '企业新闻') ->where('delete_time', null) ->find(); if (!$categoryInfo) { return json([ 'code' => 200, 'msg' => 'success', 'list' => [], 'total' => 0, 'page' => $page, 'limit' => $limit, ]); } // 查询总数 $total = Articles::where('cate', $categoryInfo['id']) ->where('delete_time', null) ->where('status', 2) ->count(); // 查询文章 $articles = Articles::where('cate', $categoryInfo['id']) ->where('delete_time', null) ->where('status', 2) ->order('top', 'desc') ->order('recommend', 'desc') ->order('sort', 'desc') ->order('publishdate', 'desc') ->page($page, $limit) ->select(); return json([ 'code' => 200, 'msg' => 'success', 'list' => $articles, 'total' => $total, 'page' => $page, 'limit' => $limit, ]); } /** * 获取金蝶新闻 * @return Json */ public function getKingdeeNews(): Json { // 获取分页参数 $page = Request::param('page', 1); $limit = Request::param('limit', 10); $page = max(1, intval($page)); $limit = max(1, min(50, intval($limit))); // 限制每页最多50条 // 查询分类 $categoryInfo = ArticlesCategory::where('name', '金蝶新闻') ->where('delete_time', null) ->find(); if (!$categoryInfo) { return json([ 'code' => 200, 'msg' => 'success', 'list' => [], 'total' => 0, 'page' => $page, 'limit' => $limit, ]); } // 查询总数 $total = Articles::where('cate', $categoryInfo['id']) ->where('delete_time', null) ->where('status', 2) ->count(); // 查询文章 $articles = Articles::where('cate', $categoryInfo['id']) ->where('delete_time', null) ->where('status', 2) ->order('top', 'desc') ->order('recommend', 'desc') ->order('sort', 'desc') ->order('publishdate', 'desc') ->page($page, $limit) ->select(); return json([ 'code' => 200, 'msg' => 'success', 'list' => $articles, 'total' => $total, 'page' => $page, 'limit' => $limit, ]); } /** * 获取技术中心子分类 * @return Json */ public function getTechnologyCategories(): Json { // 获取"技术中心"主分类 $parentCategory = ArticlesCategory::where('name', '技术中心') ->where('delete_time', null) ->find(); if (!$parentCategory) { return json([ 'code' => 200, 'msg' => 'success', 'data' => [] ]); } // 查找所有子分类 $subCategories = ArticlesCategory::where('cid', $parentCategory['id']) ->where('delete_time', null) ->field('id,name,desc,sort,image') ->order('sort', 'desc') ->select(); return json([ 'code' => 200, 'msg' => 'success', 'data' => $subCategories ]); } /** * 获取技术中心 * @return Json */ public function getTechnologyCenter(): Json { // 1. 分页参数规范化 $page = max(1, intval(Request::param('page', 1))); $limit = max(1, min(50, intval(Request::param('limit', 10)))); // 获取分类ID参数(可选) $categoryId = Request::param('category_id', null); // 2. 第一步:获取“技术中心”主分类的 id $parentCategory = ArticlesCategory::where('name', '技术中心') ->where('delete_time', null) ->find(); // print_r($parentCategory['id']); if (!$parentCategory) { return $this->emptyResponse($page, $limit); } // 3. 第二步:查找 cid 等于主分类 id 的所有子分类 id $subCategoryQuery = ArticlesCategory::where('cid', $parentCategory['id']) ->where('delete_time', null); // print_r($subCategoryQuery->select()); // 如果指定了分类ID,则只查询该分类 if ($categoryId) { $subCategoryQuery->where('id', $categoryId); } $subCategoryIds = $subCategoryQuery->column('id'); // print_r($subCategoryIds); if (empty($subCategoryIds)) { return $this->emptyResponse($page, $limit); } // 5. 第三步:查询 Articles 表,并限定字段 $articleQuery = Articles::whereIn('cate', $subCategoryIds) ->where('delete_time', null) ->where('status', 2); // 获取总数 $total = (clone $articleQuery)->count(); // 获取列表:限定返回 id, title, desc, publishdate, image, likes, views $articles = $articleQuery->field('id,title,desc,publishdate,image,likes,views,cate') ->order([ 'top' => 'desc', 'recommend' => 'desc', 'sort' => 'desc', 'publishdate' => 'desc' ]) ->page($page, $limit) ->select(); // 如果文章没有image,查询对应分类的image $categoryImages = ArticlesCategory::whereIn('id', $subCategoryIds)->column('image', 'id'); foreach ($articles as &$article) { if (empty($article['image']) && isset($categoryImages[$article['cate']])) { $article['image'] = $categoryImages[$article['cate']]; } } return json([ 'code' => 200, 'msg' => 'success', 'list' => $articles, 'total' => $total, 'page' => $page, 'limit' => $limit, ]); } /** * 统一空返回 */ private function emptyResponse($page, $limit): Json { return json([ 'code' => 200, 'msg' => 'success', 'list' => [], 'total' => 0, 'page' => $page, 'limit' => $limit, ]); } /** * 获取金蝶新闻详情 */ public function getKingdeeNewsDetail(int $id): Json { $article = Articles::where('id', $id) ->where('delete_time', null) ->where('status', 2) ->field('id,title,cate,image,desc,author,content,publisher,publishdate,views,likes,is_trans,transurl') ->find(); if (!$article) { return json(['code' => 404, 'msg' => '文章不存在', 'data' => null]); } $cate = (int) $article['cate']; // 转换为数组再处理 $articleData = $article->toArray(); // $articleData['catename'] = $this->getCategoryName($cate); // 获取相关文章 $articleData['relatedArticles'] = $this->getRelatedArticles($id, $cate); // 获取上一篇下一篇 $articleData['nextPreviousArticles'] = $this->getNextPreviousArticles($id, $cate); // 增加浏览量 Articles::where('id', $id)->inc('views')->update(); return json(['code' => 200, 'msg' => 'success', 'data' => $articleData]); } /** * 获取企业新闻详情 */ public function getCompanyNewsDetail(int $id): Json { $article = Articles::where('id', $id) ->where('delete_time', null) ->where('status', 2) ->find(); if (!$article) { return json(['code' => 404, 'msg' => '文章不存在', 'data' => null]); } $cate = (int) $article['cate']; // 转换为数组再处理 $articleData = $article->toArray(); $articleData['catename'] = $this->getCategoryName($cate); // 获取相关文章 $articleData['relatedArticles'] = $this->getRelatedArticles($id, $cate); // 获取上一篇下一篇 $articleData['nextPreviousArticles'] = $this->getNextPreviousArticles($id, $cate); // 增加浏览量 Articles::where('id', $id)->inc('views')->update(); return json(['code' => 200, 'msg' => 'success', 'data' => $articleData]); } /** * 获取上一篇下一篇 * @param int $id 文章ID * @param int $cate 分类ID * @return array */ private function getNextPreviousArticles(int $id, int $cate): array { $nextArticle = Articles::where('id', '<', $id) ->where('cate', $cate) ->where('delete_time', null) ->where('status', 2) ->field('id,title') ->find(); $previousArticle = Articles::where('id', '>', $id) ->where('cate', $cate) ->where('delete_time', null) ->where('status', 2) ->field('id,title') ->find(); return [ 'code' => 200, 'msg' => 'success', 'next' => $nextArticle, 'previous' => $previousArticle, ]; } /** * 通过分类 ID 获取分类名称 * @param int $cateId 分类ID * @return string */ private function getCategoryName(int $id): string { $categoryInfo = ArticlesCategory::where('id', $id) ->where('delete_time', null) ->find(); if (!$categoryInfo) { return '未分类'; } return $categoryInfo['name']; } /** * 获取相关文章 */ private function getRelatedArticles(int $id, int $cate): array { $articles = Articles::where('id', '<>', $id) ->where('cate', $cate) ->where('delete_time', null) ->where('status', 2) ->order('top', 'desc') ->order('recommend', 'desc') ->order('sort', 'desc') ->order('id', 'desc') ->limit(5) ->select(); foreach ($articles as &$article) { $article['cate'] = $this->getCategoryName($article['cate']); } return [ 'code' => 200, 'msg' => 'success', 'list' => $articles, ]; } }