# 养殖资讯 — 接口说明

> 数据视图：`v_farming_news`（DDL 见 `sql/biz_v_farming_news.sql`）。  
> 后端包：`com.ruoyi.web.modules.news`；接口：`BizAppFarmingNewsController`。  
> 资讯类别编码见 [资讯类别接口说明](../资讯类别/资讯类别接口说明.md)。

---

## 1. 视图 `v_farming_news`

仅聚合 **`publish_status = 1`（已发布）** 记录，字段统一如下：

| 视图列 | 说明 |
| --- | --- |
| `title` | 标题（标准名/项目名/政策名等） |
| `introduction` | 简介 |
| `type` | 资讯类别编码（与 `biz_information_category` 叶子 `code` 一致） |
| `cover_file_url` | 封面图访问 URL |
| `content_file_url` | 正文/附件访问 URL（部分来源可为空字符串） |
| `publish_time` | 发布时间 |

### 1.1 数据来源（UNION）

| 来源表 | `type` | `cover_file_url` | `content_file_url` |
| --- | --- | --- | --- |
| `biz_breeding_standard` | `standard_type` | `cover_file_url` | `content_file_url` |
| `biz_feeding_standard` | `standard_type` | `cover_file_url` | `content_file_url` |
| `biz_equipment_work_standard` | `standard_type` | `cover_file_url` | `content_file_url` |
| `biz_growth_slaughter_standard` | `standard_type` | `cover_file_url` | `content_file_url` |
| `biz_tech_project_guide` | `project_type` | `cover_file_url` | `attachment_file_url` |
| `biz_industry_policy_publicity` | 固定 `003001` | `cover_file_url` | `policy_file_url` |
| `biz_subsidy_project` | 固定 `003002` | `cover_file_url` | 空（无正文附件） |
| `biz_subsidy_matter` | 固定 `003003` | `cover_file_url` | `detail_file_url` |
| `biz_common_prosperity_project` | 固定 `003004` | `cover_file_url` | `video_file_url` |

**说明**：视图不含 `id`；列表项无全局唯一主键，详情页若需跳转源业务，须按 `type` + 业务规则另行约定或扩展视图。

### 1.2 移动端分类 Tab 与 `type`

养殖资讯页 20 个 Tab 与资讯类别叶子编码一一对应（`001001`～`001012`、`002001`～`002004`、`003001`～`003004`），调用列表接口时传对应 `type`。

---

## 2. 列表接口

### 2.1 请求

| 项 | 值 |
| --- | --- |
| **Method** | `GET` |
| **URI** | `/app/farmingNews/list` |
| **鉴权** | 移动端登录态（与 `/app/*` 其它接口一致） |

**Query 参数**

| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `type` | string | **是** | 资讯类别编码，须为 [资讯类别](../资讯类别/资讯类别接口说明.md) 中养殖资讯涉及的叶子 `code` |
| `title` | string | 否 | 标题关键字，对 `title` 列模糊匹配 |
| `pageNum` | int | 否 | 页码，默认 **1**；小于 1 时按 1 处理 |
| `pageSize` | int | 否 | 每页条数，默认 **10**；小于 1 时按 10 处理；**最大 50** |

示例：

```http
GET /app/farmingNews/list?type=001001&pageNum=1&pageSize=10
GET /app/farmingNews/list?type=002002&title=科技
```

### 2.2 响应

RuoYi 分页 `TableDataInfo`：`code`、`msg`、`rows`（当前页数据）、`total`（符合条件的总条数）。排序固定为 `publish_time` 降序（与视图查询一致）。

**`rows[]` 单条字段（驼峰）**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `title` | string | 标题 |
| `introduction` | string | 简介 |
| `type` | string | 资讯类别编码 |
| `coverFileUrl` | string | 封面 URL，可空 |
| `contentFileUrl` | string | 正文/附件 URL，可空或 `""` |
| `publishTime` | string | 发布日期，`yyyy-MM-dd` |

**示例**

```json
{
  "code": 200,
  "msg": "查询成功",
  "total": 1,
  "rows": [
    {
      "title": "繁育作业标准示例",
      "introduction": "简介示例",
      "type": "001001",
      "coverFileUrl": "/profile/upload/cover.png",
      "contentFileUrl": "/profile/upload/standard.pdf",
      "publishTime": "2026-05-10"
    }
  ]
}
```

### 2.3 业务校验

| 场景 | 结果 |
| --- | --- |
| `type` 为空 | 「资讯类型不能为空」 |
| `type` 非资讯类别有效叶子编码 | 「资讯类型无效，请选择资讯类别中的类型」 |

校验实现：`FarmingNewsTypeValidator`（`001` 下 `categoryType` 1～4、`002`/`003` 子项，与视图涵盖范围一致）。

---

## 3. 前端（小程序）对接要点

| 能力 | 字段 |
| --- | --- |
| 列表缩略图 | `coverFileUrl` |
| 详情正文/附件预览或下载 | `contentFileUrl`（为空则不展示附件入口） |
| 分类筛选 | 请求参数 `type` = Tab 对应资讯类别 `code` |
| 分类名称展示 | 调用 `GET /category/informationCategory/children` 或 `/tree` 取 `name` |
| 分页 / 上拉加载 | 首屏 `pageNum=1`；加载更多时 `pageNum++`，当 `rows.length < pageSize` 或已加载条数 ≥ `total` 时无更多数据 |

页面参考：`ruoyi-ui-app/package-a/breeding-news/index.vue`（列表数据源待接本接口）。

---

## 4. 修订记录

| 日期 | 说明 |
| --- | --- |
| 2026-05-20 | 初版：列表接口；视图字段 `cover_file_url`、`content_file_url`（替代原单列 `url`） |
| 2026-05-20 | 补充视图 UNION 来源与响应字段说明 |
| 2026-05-20 | 明确分页参数默认值与 `pageSize` 上限 50；Controller 使用 PageHelper 返回 `total` |
