From bed64ae07979d4675a7130ed51623af9cc018010 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 18 Oct 2024 17:04:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=A7=91=E6=99=AE=E6=96=87=E7=AB=A0=E5=88=97=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/ArticleController.php | 69 +++++++++++++++ app/Model/ArticleScience.php | 123 +++++++++++++++++++++++++++ app/Model/ArticleScienceClass.php | 67 +++++++++++++++ app/Model/ArticleScienceSource.php | 57 +++++++++++++ app/Model/BasicArticleClass.php | 58 +++++++++++++ app/Request/ArticleRequest.php | 51 +++++++++++ config/routes.php | 10 +++ 7 files changed, 435 insertions(+) create mode 100644 app/Controller/ArticleController.php create mode 100644 app/Model/ArticleScience.php create mode 100644 app/Model/ArticleScienceClass.php create mode 100644 app/Model/ArticleScienceSource.php create mode 100644 app/Model/BasicArticleClass.php create mode 100644 app/Request/ArticleRequest.php diff --git a/app/Controller/ArticleController.php b/app/Controller/ArticleController.php new file mode 100644 index 0000000..3e3d914 --- /dev/null +++ b/app/Controller/ArticleController.php @@ -0,0 +1,69 @@ +container->get(ArticleRequest::class); + $request->scene('getArticleScienceList')->validateResolved(); + + $keyword = $this->request->input('keyword',""); + $is_top = $this->request->input('is_top'); + $source_id = $this->request->input('source_id'); + $basic_class_id = $this->request->input('basic_class_id'); + $page = $this->request->input('page',1); + $per_page = $this->request->input('per_page',10); + + // 组合条件 + $article_science_params = array();// 文章搜索 + $article_science_class_params = array();// 文章分类搜索 + + // 是否置顶(0:否 1:是) + if (!empty($is_top)){ + $article_science_params['is_top'] = $is_top; + } + + // 来源id + if (!empty($source_id)){ + $article_science_params['source_id'] = $source_id; + } + + // 分类id + if (!empty($basic_class_id)){ + $article_science_class_params['basic_class_id'] = $basic_class_id; + } + + $fields = ["*"]; + $article_sciences = ArticleScience::getArticleSciencePage($keyword,$article_science_params, $article_science_class_params, $fields,$page,$per_page); + if (!empty($article_sciences['data'])) { + foreach ($article_sciences['data'] as &$article_science) { + $article_science['article_image'] = addAliyunOssWebsite($article_science['article_image']); + + if (!empty($article_science["ArticleScienceSource"])){ + $article_science["ArticleScienceSource"]["source_image"] = addAliyunOssWebsite($article_science["ArticleScienceSource"]["source_image"]); + } + + } + } + return $this->response->json($article_sciences); + } +} \ No newline at end of file diff --git a/app/Model/ArticleScience.php b/app/Model/ArticleScience.php new file mode 100644 index 0000000..18a39c9 --- /dev/null +++ b/app/Model/ArticleScience.php @@ -0,0 +1,123 @@ +hasOne(ArticleScienceSource::class, 'source_id', 'source_id'); + } + + /** + * 关联分类 + * @return HasMany + */ + public function ArticleScienceClass(): HasMany + { + return $this->hasMany(ArticleScienceClass::class, "article_id", "article_id"); + } + + /** + * 获取信息-单条 + * @param array $params + * @param array $fields + * @return object|null + */ + public static function getOne(array $params, array $fields = ['*']): object|null + { + return self::where($params)->first($fields); + } + + /** + * 获取数据-多 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params = [], array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + + /** + * 获取列表 + * @param string $keyword + * @param array $article_science_params 搜索条件 + * @param array $article_science_class_params 分类搜索条件 + * @param array $fields + * @param int|null $page + * @param int|null $per_page + * @return array + */ + public static function getArticleSciencePage(string $keyword = "", array $article_science_params = [], array $article_science_class_params = [], array $fields = ["*"], int $page = null, ?int $per_page = 10): array + { + $query = self::with(['ArticleScienceSource']) + ->where($article_science_params) + ->when($keyword, function ($query, $keyword) { + $query->where(function ($query) use ($keyword) { + $query->orwhere("article_title", 'like', '%' . $keyword . '%'); + $query->orWhereHas('ArticleScienceSource', function ($query) use ($keyword) { + $query->where('source_name', 'like', '%' . $keyword . '%'); + }); + $query->orWhereHas('ArticleScienceClass.BasicArticleClass', function ($query) use ($keyword) { + $query->where('basic_class_name', 'like', '%' . $keyword . '%'); + }); + }); + }) + ->whereHas('ArticleScienceClass.BasicArticleClass', function ($query) use ($article_science_class_params) { + $query->where($article_science_class_params); + }); + + $result = $query->paginate($per_page, $fields, "page", $page); + + $data = array(); + $data['current_page'] = $result->currentPage();// 当前页码 + $data['total'] = $result->total();//数据总数 + $data['data'] = $result->items();//数据 + $data['per_page'] = $result->perPage();//每页个数 + $data['last_page'] = $result->lastPage();//最后一页 + + return $data; + } + +} diff --git a/app/Model/ArticleScienceClass.php b/app/Model/ArticleScienceClass.php new file mode 100644 index 0000000..c56608a --- /dev/null +++ b/app/Model/ArticleScienceClass.php @@ -0,0 +1,67 @@ +hasOne(BasicArticleClass::class, 'basic_class_id', 'basic_class_id'); + } + + /** + * 获取信息-单条 + * @param array $params + * @param array $fields + * @return object|null + */ + public static function getOne(array $params, array $fields = ['*']): object|null + { + return self::where($params)->first($fields); + } + + /** + * 获取数据-多 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params = [], array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + +} diff --git a/app/Model/ArticleScienceSource.php b/app/Model/ArticleScienceSource.php new file mode 100644 index 0000000..a744f3b --- /dev/null +++ b/app/Model/ArticleScienceSource.php @@ -0,0 +1,57 @@ +first($fields); + } + + /** + * 获取数据-多 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params = [], array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } +} diff --git a/app/Model/BasicArticleClass.php b/app/Model/BasicArticleClass.php new file mode 100644 index 0000000..abb66e2 --- /dev/null +++ b/app/Model/BasicArticleClass.php @@ -0,0 +1,58 @@ +first($fields); + } + + /** + * 获取数据-多 + * @param array $params + * @param array $fields + * @return Collection|array + */ + public static function getList(array $params = [], array $fields = ['*']): Collection|array + { + return self::where($params)->get($fields); + } + +} diff --git a/app/Request/ArticleRequest.php b/app/Request/ArticleRequest.php new file mode 100644 index 0000000..17ecfff --- /dev/null +++ b/app/Request/ArticleRequest.php @@ -0,0 +1,51 @@ + [ + 'keyword', + 'is_top', + 'source_id', + 'basic_class_id', + ], + ]; + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'is_top' => ['sometimes','numeric','min:0','max:1'], + ]; + } + + /** + * 获取已定义验证规则的错误消息. + */ + public function messages(): array + { + return [ + 'is_top.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_top.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_top.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_top.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + ]; + } +} diff --git a/config/routes.php b/config/routes.php index bb99420..d147eaa 100644 --- a/config/routes.php +++ b/config/routes.php @@ -11,6 +11,7 @@ declare(strict_types=1); */ use App\Controller\AreaController; +use App\Controller\ArticleController; use App\Controller\BasicDataController; use App\Controller\CallBackController; use App\Controller\DetectionController; @@ -620,6 +621,15 @@ Router::addGroup('/patient', function () { // 检测是否可创建服务包问诊订单 Router::get('/check/{order_no}', [OrderServicePackageController::class, 'getServicePackageInquiryCheck']); }); + + // 文章 + Router::addGroup('/article', function () { + // 科普文章 + Router::addGroup('/science', function () { + // 获取科普文章列表 + Router::get('', [ArticleController::class, 'getArticleScienceList']); + }); + }); }); // 药师端api