# 畜牧资源 — 接口说明 > 数据视图:`v_livestock_resource`(DDL 见 `sql/biz_v_livestock_resource.sql`)。 > 后端包:`com.ruoyi.web.modules.news`;接口:`BizAppLivestockResourceController`。 > 医疗资源类型编码与 `biz_medical_resource.resource_type`(资讯类别 `parentCode=004`、`categoryType=6`);科技资源与 `biz_tech_resource.resource_type`(`categoryType=7`)一致。 --- ## 1. 视图 `v_livestock_resource` 仅聚合 **`publish_status = 1`(已发布)** 记录,字段统一如下: | 视图列 | 说明 | | --- | --- | | `id` | 源表主键(`biz_medical_resource.id` 或 `biz_tech_resource.id`) | | `source_type` | 来源表:`1` = 医疗资源,`2` = 科技资源 | | `title` | 资源名称 | | `introduction` | 简介 | | `type` | 资源类型编码(`resource_type`) | | `cover_file_url` | 封面/主图访问 URL | | `content_file_url` | 视频/附件访问 URL(可为 `null`) | | `publish_time` | 发布时间 | **唯一标识**:列表项以 **`source_type` + `id`** 组合区分(两源表主键可能重复)。 ### 1.1 数据来源(UNION) | 来源表 | `source_type` | `type` | 说明 | | --- | --- | --- | --- | | `biz_medical_resource` | `1` | `004002` | 专家团队 | | `biz_tech_resource` | `2` | `004006` | 技术成果 | | `biz_tech_resource` | `2` | `004008` | 视频课程 | | `biz_tech_resource` | `2` | `004007` | 共享仪器 | ### 1.2 移动端 Tab 与 `type` 畜牧资源页 4 个 Tab 与类型编码一一对应: | Tab | `type` | | --- | --- | | 专家团队 | `004002` | | 技术成果 | `004006` | | 共享仪器 | `004007` | | 视频课程 | `004008` | --- ## 2. 列表接口 ### 2.1 请求 | 项 | 值 | | --- | --- | | **Method** | `GET` | | **URI** | `/app/livestockResource/list` | | **鉴权** | 移动端登录态(与 `/app/*` 其它接口一致) | **Query 参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `type` | string | **是** | 资源类型编码,须为 **§1.2** 中四种之一 | | `title` | string | 否 | 标题关键字,对 `title` 列模糊匹配 | | `pageNum` | int | 否 | 页码,默认 **1**;小于 1 时按 1 处理 | | `pageSize` | int | 否 | 每页条数,默认 **10**;小于 1 时按 10 处理;**最大 50** | 示例: ```http GET /app/livestockResource/list?type=004006&pageNum=1&pageSize=10 GET /app/livestockResource/list?type=004008&title=养殖 ``` ### 2.2 响应 RuoYi 分页 `TableDataInfo`:`code`、`msg`、`rows`(当前页数据)、`total`(符合条件的总条数)。排序固定为 `publish_time` 降序。 **`rows[]` 单条字段(驼峰)** | 字段 | 类型 | 说明 | | --- | --- | --- | | `id` | long | 源表主键 | | `sourceType` | int | `1` 医疗 / `2` 科技 | | `title` | string | 标题 | | `introduction` | string | 简介 | | `type` | string | 资源类型编码 | | `coverFileUrl` | string | 封面 URL,可空 | | `contentFileUrl` | string | 视频/附件 URL,可空 | | `publishTime` | string | 发布日期,`yyyy-MM-dd` | **示例** ```json { "code": 200, "msg": "查询成功", "total": 1, "rows": [ { "id": 101, "sourceType": 2, "title": "高原牦牛繁育技术成果", "introduction": "成果简介示例", "type": "004006", "coverFileUrl": "/profile/upload/cover.png", "contentFileUrl": "/profile/upload/demo.mp4", "publishTime": "2026-05-10" } ] } ``` ### 2.3 业务校验 | 场景 | 结果 | | --- | --- | | `type` 为空 | 「资源类型不能为空」 | | `type` 非视图涵盖的四种编码 | 「资源类型无效,请选择畜牧资源支持的类型」 | 校验实现:`LivestockResourceTypeValidator`(`LivestockResourceRules`:`004002`、`004006`、`004007`、`004008`)。 --- ## 3. 详情接口 ### 3.1 请求 | 项 | 值 | | --- | --- | | **Method** | `GET` | | **URI** | `/app/livestockResource/{id}` | | **鉴权** | 移动端登录态 | **路径 / Query 参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `id` | long | **是** | 源表主键(与列表项 `id` 一致) | | `type` | int | **是** | 来源表:`1` = `biz_medical_resource`,`2` = `biz_tech_resource`(与列表项 `sourceType` 一致) | > **注意**:详情接口的 `type` 表示**来源表**(1/2);列表接口的 `type` 表示**资源类型编码**(如 `004006`),二者含义不同。 示例: ```http GET /app/livestockResource/101?type=2 GET /app/livestockResource/11?type=1 ``` ### 3.2 响应 标准 `AjaxResult`:`code`、`msg`、`data`。 | `type` | `data` 类型 | 说明 | | --- | --- | --- | | `1` | `BizMedicalResource` | `biz_medical_resource` **全部字段**(驼峰 JSON) | | `2` | `BizTechResource` | `biz_tech_resource` **全部字段**(驼峰 JSON;不含 `expertRating`) | 仅返回 **已发布**(`publish_status=1`)、**未删除**且纳入 `v_livestock_resource` 的资源: - 医疗:`resource_type = 004002` - 科技:`resource_type ∈ {004006, 004007, 004008}` 医疗实体含 `consultModes` / `consultModesList`、`serviceWeekdays` / `serviceWeekdaysList` 等;科技实体含 `serviceWeekdays` / `serviceWeekdaysList` 等,字段定义见管理端「畜牧医疗资源」「畜牧科技资源」模块。 **示例(type=2,节选)** ```json { "code": 200, "msg": "操作成功", "data": { "id": 101, "resourceType": "004006", "resourceName": "高原牦牛繁育技术成果", "introduction": "成果简介示例", "coverFileUrl": "/profile/upload/cover.png", "videoFileUrl": "/profile/upload/demo.mp4", "publishStatus": 1, "publishTime": "2026-05-10 08:00:00" } } ``` ### 3.3 业务校验 | 场景 | 结果 | | --- | --- | | `type` 为空 | 「来源类型不能为空」 | | `type` 非 1/2 | 「来源类型无效,请使用 1(医疗)或 2(科技)」 | | 记录不存在 / 未发布 / 非视图范围 | 「该资源已下线或不存在」 | --- ## 4. 前端(小程序)对接要点 | 能力 | 说明 | | --- | --- | | 列表唯一键 | 优先 `sourceType + '-' + id`;虚拟列表 `key-field="id"` 使用合成键 | | 列表缩略图 | `coverFileUrl` | | 视频/附件 | `contentFileUrl`(为空则不展示;专家团队 `004002` 视图侧 `content_file_url` 为 `null`) | | 分类筛选 | 请求参数 `type` = Tab 对应编码 | | 分类名称展示 | 医疗:`GET /category/informationCategory/children?parentCode=004&categoryType=6`(`004001`~`004004`);科技:`categoryType=7`(`004005`~`004008`)取 `name` | | 分页 / 上拉加载 | 首屏 `pageNum=1`;加载更多时 `pageNum++`,当 `rows.length < pageSize` 或已加载条数 ≥ `total` 时无更多数据 | | 详情跳转 | `GET /app/livestockResource/{id}?type={sourceType}` 拉取源表全字段;列表项 `sourceType`+`id` 传参 | 页面参考:`ruoyi-ui-app/package-a/livestock-resources/index.vue`。 --- ## 5. 修订记录 | 日期 | 说明 | | --- | --- | | 2026-05-20 | 初版:`GET /app/livestockResource/list`;视图 `v_livestock_resource` 与四类 Tab | | 2026-06-09 | 视图新增 `id`、`source_type`;列表响应增加 `id`、`sourceType` | | 2026-06-09 | 新增 `GET /app/livestockResource/{id}?type=1\|2` 详情,按源表返回全字段 |