From e33f02c84d734e672ecdd5f4198ff7bf731e5fe6 Mon Sep 17 00:00:00 2001 From: lapuda <577732344@qq.com> Date: Mon, 20 Jul 2026 15:43:45 +0800 Subject: [PATCH] feat: Enhance news information query with full-text keyword search support --- docs/cms-news-info-api.md | 207 +++++------------- .../controller/app/AppNewsInfoController.java | 2 +- .../ruoyi/cms/domain/news/NewsInfoQuery.java | 5 +- .../resources/mapper/news/NewsInfoMapper.xml | 6 + 4 files changed, 66 insertions(+), 154 deletions(-) diff --git a/docs/cms-news-info-api.md b/docs/cms-news-info-api.md index 48da91c..070a9a6 100644 --- a/docs/cms-news-info-api.md +++ b/docs/cms-news-info-api.md @@ -1,41 +1,46 @@ -# 新闻资讯 API +# 新闻资讯公开查询 API ## 约定 -- 基础地址:`/api` -- CMS 接口需要登录,并按菜单权限校验。 -- 上下架状态:`0` 上架,`1` 下架。新增新闻默认下架。 -- `module` 保存业务字典 `news_module` 的 `dict_value`,展示名称来自 `dict_label`。管理员可以在 CMS 的“业务字典”中继续维护模块项。 -- `content` 为富文本 HTML。服务端保存前会按白名单清理脚本、事件属性、危险协议等内容。 -- 列表接口返回分页结构:`{ code, msg, total, rows }`;详情和写操作返回标准 RuoYi 结构。 +- 后端接口基础地址:`/api`;生产环境经 Nginx 对外暴露为 `/api/shihezi`,例如列表实际地址为 `/api/shihezi/app/newsInfo/list`。 +- 以下接口均无需登录。 +- 接口只返回已上架且未删除的新闻资讯,`status=0` 表示上架。 +- `module` 保存业务字典 `news_module` 的 `dict_value`,返回的 `moduleName` 为对应的 `dict_label`。 +- `content` 为富文本 HTML;列表接口不返回正文,详情接口返回完整正文。 +- 列表接口返回分页结构:`{ code, msg, total, rows }`;详情接口返回标准 RuoYi 结构。 -## CMS 管理接口 - -### 1. 查询新闻资讯列表 +## 1. 查询已上架新闻资讯列表 ```http -GET /api/cms/newsInfo/list +GET /api/app/newsInfo/list ``` -权限:`cms:newsInfo:list` - -请求参数: +### 请求参数 | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `pageNum` | integer | 否 | 页码,默认 `1` | | `pageSize` | integer | 否 | 每页条数,默认 `10` | -| `title` | string | 否 | 标题关键词 | -| `module` | string | 否 | `news_module` 字典值 | -| `status` | string | 否 | `0` 上架,`1` 下架 | +| `keyword` | string | 否 | 全文关键字,使用 `LIKE '%keyword%'` 同时匹配标题和正文 | +| `module` | string | 否 | `news_module` 业务字典值 | -示例: +服务端会强制使用 `status=0`,调用方不能通过参数查询下架资讯。 + +### 请求示例 + +查询标题或正文中包含“面试”的已上架资讯: ```http -GET /api/cms/newsInfo/list?pageNum=1&pageSize=10&module=interview_tips&status=1 +GET /api/app/newsInfo/list?pageNum=1&pageSize=10&keyword=%E9%9D%A2%E8%AF%95 ``` -响应示例: +查询指定模块中标题或正文包含“简历”的已上架资讯: + +```http +GET /api/app/newsInfo/list?pageNum=1&pageSize=10&keyword=%E7%AE%80%E5%8E%86&module=resume_guide +``` + +### 响应示例 ```json { @@ -48,7 +53,7 @@ GET /api/cms/newsInfo/list?pageNum=1&pageSize=10&module=interview_tips&status=1 "module": "interview_tips", "moduleName": "面试技巧", "title": "结构化面试准备指南", - "status": "1", + "status": "0", "createTime": "2026-07-20 15:00:00", "updateTime": null } @@ -56,152 +61,50 @@ GET /api/cms/newsInfo/list?pageNum=1&pageSize=10&module=interview_tips&status=1 } ``` -列表不返回正文,查看正文使用详情接口。 +`keyword` 查询使用数据库 `LIKE`,匹配范围为: -### 2. 查询新闻资讯详情 - -```http -GET /api/cms/newsInfo/{id} +```sql +news.title LIKE '%' || :keyword || '%' +OR news.content LIKE '%' || :keyword || '%' ``` -权限:`cms:newsInfo:query` +正文是富文本 HTML,关键字会在正文 HTML 字符串中进行匹配。 -响应示例: +## 2. 查询已上架新闻资讯详情 + +```http +GET /api/app/newsInfo/{id} +``` + +路径参数: + +| 参数 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| `id` | long | 是 | 新闻资讯 ID | + +只有同时满足“未删除、已上架”的记录才会返回;下架或不存在时,`data` 为 `null`。 + +### 请求示例 + +```http +GET /api/app/newsInfo/1 +``` + +### 响应示例 ```json { "code": 200, - "msg": "查询成功", + "msg": "操作成功", "data": { "id": 1, "module": "interview_tips", "moduleName": "面试技巧", "title": "结构化面试准备指南", "content": "
先了解岗位要求。
", - "status": "1", - "createBy": "admin", + "status": "0", "createTime": "2026-07-20 15:00:00", - "updateBy": "admin", - "updateTime": null, - "remark": "" + "updateTime": null } } ``` - -### 3. 新增新闻资讯 - -```http -POST /api/cms/newsInfo -Content-Type: application/json -``` - -权限:`cms:newsInfo:add` - -请求体: - -```json -{ - "module": "job_information", - "title": "求职资讯标题", - "content": "经过白名单清理的富文本正文。
", - "status": "1", - "remark": "" -} -``` - -`module` 必须是启用状态的 `news_module` 字典值;`status` 省略时按下架处理。标题不能为空且最多 200 个字符,正文必须包含文字或图片内容。 - -### 4. 修改新闻资讯 - -```http -PUT /api/cms/newsInfo -Content-Type: application/json -``` - -权限:`cms:newsInfo:edit` - -请求体与新增相同,必须带 `id`: - -```json -{ - "id": 1, - "module": "interview_tips", - "title": "更新后的标题", - "content": "更新后的正文。
", - "status": "1", - "remark": "" -} -``` - -### 5. 上架或下架 - -```http -PUT /api/cms/newsInfo/changeStatus?id=1&status=0 -``` - -权限:`cms:newsInfo:status` - -参数 `status` 只能是 `0`(上架)或 `1`(下架)。接口会同时记录更新人和更新时间。 - -### 6. 删除新闻资讯 - -```http -DELETE /api/cms/newsInfo/{ids} -``` - -权限:`cms:newsInfo:remove` - -`ids` 支持逗号分隔的多个 ID,例如: - -```http -DELETE /api/cms/newsInfo/1,2,3 -``` - -删除使用软删除,数据不会从数据库物理移除。 - -## 公开查询接口 - -### 7. 查询已上架新闻资讯 - -```http -GET /api/app/newsInfo/list -``` - -无需登录。参数与 CMS 列表相同,但服务端始终强制 `status=0`;调用方可使用 `title` 和 `module` 过滤。列表同样不返回正文。 - -### 8. 查询已上架新闻资讯详情 - -```http -GET /api/app/newsInfo/{id} -``` - -无需登录。只有同时满足“未删除、已上架”的记录才会返回;下架或不存在时 `data` 为 `null`。 - -## 业务字典 - -新闻模块选项通过现有接口查询: - -```http -GET /api/cms/dict/data/type/news_module -``` - -典型初始化数据: - -| `dict_value` | `dict_label` | -| --- | --- | -| `job_information` | 求职资讯 | -| `interview_tips` | 面试技巧 | -| `resume_guide` | 简历指南 | -| `industry_guide` | 行业指南 | -| `policy_regulations` | 政策法规 | - -## 图片上传 - -富文本编辑器图片使用现有通用上传接口: - -```http -POST /api/common/upload -Content-Type: multipart/form-data -``` - -表单字段:`file`。响应中的 `url` 用于插入富文本图片。 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppNewsInfoController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppNewsInfoController.java index d2117ec..9a5d73c 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppNewsInfoController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppNewsInfoController.java @@ -26,7 +26,7 @@ public class AppNewsInfoController extends BaseController { @Autowired private INewsInfoService newsInfoService; - @ApiOperation("查询已上架新闻资讯列表") + @ApiOperation("查询已上架新闻资讯列表(支持标题和正文全文关键字 LIKE 查询)") @GetMapping("/list") public TableDataInfo list(NewsInfoQuery query) { startPage(); diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/news/NewsInfoQuery.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/news/NewsInfoQuery.java index 90e3fdb..86dc648 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/news/NewsInfoQuery.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/news/NewsInfoQuery.java @@ -17,9 +17,12 @@ public class NewsInfoQuery { @ApiModelProperty("每页条数") private Integer pageSize = 10; - @ApiModelProperty("标题关键词") + @ApiModelProperty("标题关键词(兼容 CMS 筛选)") private String title; + @ApiModelProperty("全文关键词,匹配标题和正文") + private String keyword; + @ApiModelProperty("资讯模块字典值") private String module; diff --git a/ruoyi-bussiness/src/main/resources/mapper/news/NewsInfoMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/news/NewsInfoMapper.xml index 46f9146..fc98875 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/news/NewsInfoMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/news/NewsInfoMapper.xml @@ -46,6 +46,12 @@