# 畜牧科技资源管理 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 畜牧科技资源管理（牧业养殖科技服务） |
| 目标 | 在业务后台统一维护**专家、技术成果、共享仪器、视频课程**四类科技资源，支持分库检索、发布至移动端展示，并为科技咨询预约、仪器借用、在线学习及专家端登录等下游能力提供主数据 |
| 关联系统 | 业务后台；移动端资源展示；平台账号体系 |
| 修订依据 | 同目录 `畜牧科技资源管理功能需求-草稿.md`、界面原型（列表 Tab、新增动态表单） |

本文档**仅描述功能需求与业务规则**，不涉及数据库表结构、接口路径、请求体字段命名、HTTP 报文、权限标识命名及技术栈选型。

---

## 2. 术语与业务对象

### 2.1 科技资源（一条台账记录）

- 表示可在后台登记、经发布后在移动端对外展示的一类**牧业养殖科技服务资源**。  
- 由授权用户在后台**手工维护**；外部系统自动落账可在实施阶段扩展，**本期默认手工登记为主**。  
- 每条记录归属**唯一资源类型**；类型在首次保存后**不可变更**（若需改类型，应删除后按新类型重新登记）。

### 2.2 资源类型（固定四类）

类型编码来自资讯类别 **`parentCode=004`、`categoryType=7`**（接口 `GET /category/informationCategory/children`），落库字段 `resource_type` 为 **varchar**，存叶子 **`code`**。

| `code` | 类型名称 | 业务定位 | 典型用途 |
| --- | --- | --- | --- |
| `004005` | **专家** | 个体科技服务专家 | 展示专业能力与服务时段；支持分配登录账号 |
| `004006` | **技术成果** | 科研成果或适用技术条目 | 展示研究方向、技术要点与优势，供浏览与引用 |
| `004007` | **共享仪器** | 可预约借用的仪器设备 | 展示仪器信息、地点、预约流程与借用计费 |
| `004008` | **视频课程** | 在线培训课程 | 提供课程简介与视频内容，供移动端学习 |

用户**不可**自定义第五类或修改上述类型含义（扩展须单独立项；须在 `biz_information_category` 维护后由接口返回）。

### 2.3 界面组织方式

| 形态 | 规则 |
| --- | --- |
| **分库列表** | 四个 **Tab**：专家库、技术成果库、共享仪器库、视频课程库；**切换 Tab 即切换当前资源类型**，列表仅展示该类型 |
| **资源类型筛选** | 顶部下拉与 **Tab 联动**：切换 Tab 时下拉同步；在下拉选择类型时切换到对应 Tab |
| **动态表单** | 新增/编辑时按资源类型**切换字段集**；不得混用其他类型的必填项 |

### 2.4 发布状态与移动端

用**发布状态**控制移动端是否展示，并与后台「能否改删」绑定（见 **§6**）。

| 状态 | 含义 | 移动端 | 后台维护（摘要） |
| --- | --- | --- | --- |
| **未发布** | 已保存，未对外开放 | 不可见 | 可查看、编辑、删除、发布；专家可「分配账号」（未分配过） |
| **已发布** | 已对移动端生效 | 可见、可被下游引用 | **仅可查看、下架**；不可编辑、删除、新分配账号 |
| **已下架** | 曾发布，已撤回对外展示 | 不可见 | **权限同未发布**：可编辑、删除、再次发布；列表宜显示「已下架」标签 |

**允许的状态迁移：**

```mermaid
stateDiagram-v2
    [*] --> 未发布: 新增保存
    未发布 --> 已发布: 发布
    已发布 --> 已下架: 下架
    已下架 --> 已发布: 再次发布
```

> **已发布**期间：修改、删除、分配账号均应拒绝，并提示先下架。

### 2.5 删除与可见性

- 采用**逻辑删除**：删除后默认不在列表展示，数据保留供审计；**本期无**回收站。  
- **已发布**须先**下架**再删除。  
- **已分配账号**（专家）：删除资源时**同时删除**关联的平台用户账号（与草稿 §10 一致）。  
- 若存在有效预约、借用或学习记录等下游引用，**宜禁止删除**并提示「存在关联业务，无法删除」（默认建议）。

### 2.6 列表筛选

| 筛选项 | 规则 |
| --- | --- |
| 资源类型 | 与当前 **Tab** 一致；精确匹配 |
| 资源名称 | 选填；对展示名称（专家姓名/成果名称/仪器名称/课程标题）**模糊**匹配 |
| 发布状态 | 选填；**未发布 / 已发布 / 已下架** 精确筛选；空则不过滤 |

---

## 3. 功能范围

### 3.1 本期实现

| 能力 | 说明 |
| --- | --- |
| 四类资源 Tab 列表 | 分页、筛选；**§5.1** |
| 新增 | 动态表单；保存为 **未发布**；**§5.2～§5.7** |
| 修改 | 仅 **未发布、已下架**；**§5.8** |
| 查看 | 全状态只读；**§5.9** |
| 逻辑删除 | 仅 **未发布、已下架**；**§5.10** |
| 发布 / 下架 | 同步/撤回移动端；**§5.11** |
| 分配账号 | 仅专家；每条仅成功一次；**§5.12** |
| 附件上传 | 图片、视频按类型要求；**§5.2** |

### 3.2 本期不实现

- **地图标点**（共享仪器库原型有入口，本期隐藏或置灰并说明后续提供）  
- 移动端页面本身、仪器借用执行、视频播放统计、专家排班自动调度  
- 技术成果 / 共享仪器 / 视频课程的账号分配  
- 批量导入导出、资源类型自定义  

---

## 4. 业务流程

### 4.1 模块总览

```mermaid
flowchart TD
    A[进入模块] --> B[选择 Tab / 资源类型]
    B --> C[列表查询]
    C --> D{操作}
    D --> E[新增 → 未发布]
    D --> F[查看]
    D --> G[编辑]
    D --> H[删除]
    D --> I[发布]
    D --> J[下架]
    D --> K[分配账号]
    G --> L{未发布或已下架?}
    L -->|否| M[拒绝]
    L -->|是| N[保存]
    H --> O{未发布或已下架?}
    O -->|否| P[拒绝]
    O -->|是| Q[逻辑删除]
    I --> R[已发布 → 同步移动端]
    J --> S[已下架 → 撤回移动端]
```

### 4.2 典型运营顺序

1. 在对应 Tab **新增**，上传照片/视频/封面（如有）→ 保存为 **未发布**。  
2. （可选）专家 **分配账号**。  
3. **发布** → 移动端可见。  
4. 内容需调整 → **下架** → **编辑** → **再次发布**。  
5. 废弃资源 → 若仍 **已发布** 则先 **下架** → **删除**。

### 4.3 新增流程

用户点击 **新增** → **必选资源类型** → 展示对应字段集 → 校验通过 → 保存为 **未发布**（类型保存后不可改）。

---

## 5. 详细功能需求

### 5.1 列表与查询

| 项 | 规则 |
| --- | --- |
| Tab | 四个固定 Tab，与四类资源一一对应 |
| 分页 | 默认每页 **20** 条 |
| 排序 | 默认 **创建时间倒序** |
| 展示列 | **通用**：资源类型、展示名称、发布状态、创建时间、操作。**分类型**（与原型一致，长文本可省略）：专家介绍、联系方式、隶属单位、详细地址、研究方向、仪器型号、课程主题等 |
| 工具栏 | **搜索**、**重置**、**新增** |
| 操作列 | 见 **§6**；各状态均宜有 **查看** |

---

### 5.2 新增（通用规则）

| 项 | 规则 |
| --- | --- |
| 资源类型 | **必选**；决定表单字段；保存后**不可改** |
| 初始状态 | **未发布** |
| 图片 | 单图；**jpg / jpeg / png**；**≤ 10MB**（专家照片、仪器照片、技术成果封面、课程封面等适用） |
| 视频 | 仅视频课程：单文件；**mp4**；**≤ 30MB** |
| 联系方式 | 该类型要求的字段 **必填**，且符合**大陆手机号**格式 |
| 文本 | 字数按**字符**计；提交前 trim；空字符串视为未填 |

---

### 5.3 字段适用矩阵

| 业务字段 | 专家 | 技术成果 | 共享仪器 | 视频课程 |
| --- | --- | --- | --- | --- |
| 展示名称 | ✓ | ✓ | ✓ | ✓ |
| 主图/照片 | ✓ | — | ✓ | — |
| 封面 | — | ○ | — | ○ |
| 介绍/摘要类长文本 | ✓ | ✓（多项） | ✓ | ✓ |
| 联系方式 | ✓ | — | ✓ | — |
| 隶属单位 | ✓ | — | ✓ | — |
| 详细地址 | ✓ | — | — | — |
| 服务区域 | ✓ | — | — | — |
| 收费标准/借用金额（元/小时，正数） | ✓ | — | ✓ | — |
| 服务时段 / 服务周日 | ✓ | — | ✓ | — |
| 研究方向 | — | ✓ | — | — |
| 关键技术原理 / 技术优势 | — | ✓ | — | — |
| 完成单位 | — | ✓ | — | — |
| 仪器型号 | — | — | ✓ | — |
| 存放地点 / 预约流程 / 负责人 | — | — | ✓ | — |
| 课程主题 | — | — | — | ✓ |
| 视频文件 | — | — | — | ✓ |

> **○** 表示选填；**✓** 表示该类型下必填（若列有对应字段）。

---

### 5.4 专家

| 字段 | 规则 |
| --- | --- |
| 专家姓名 | **必填**；**1～10** 字 |
| 专家照片 | **必填**；**§5.2** 图片规则 |
| 专家介绍 | **必填**；**1～500** 字；宜包含资质、从业年限、专业领域、研究方向、技术特长等 |
| 联系方式 | **必填**；手机号 |
| 隶属单位 | **必填**；**1～20** 字 |
| 详细地址 | **必填**；**1～100** 字 |
| 服务区域 | **必填**；**1～100** 字 |
| 收费标准 | **必填**；**正数**；单位 **元/小时** |
| 服务时段 | **必填**；**HH:mm** 起止；结束时间 **≥** 开始时间 |
| 服务周日 | **必填**；**多选** 周一至周日；至少选一天 |

---

### 5.5 技术成果

| 字段 | 规则 |
| --- | --- |
| 成果名称 | **必填**；**1～20** 字 |
| 研究方向 | **必填**；**可输入下拉**；预设：**繁育、饲养、防疫、粪污处理**；可输入其他方向；**1～20** 字 |
| 成果摘要 | **必填**；**1～500** 字 |
| 关键技术原理 | **必填**；**1～500** 字 |
| 技术优势 | **必填**；**1～500** 字 |
| 完成单位 | **必填**；**1～20** 字 |
| 封面 | **选填**；**§5.2** 图片规则 |

---

### 5.6 共享仪器

| 字段 | 规则 |
| --- | --- |
| 仪器名称 | **必填**；**1～10** 字 |
| 仪器型号 | **必填**；**1～10** 字 |
| 仪器照片 | **必填**；**§5.2** 图片规则 |
| 仪器介绍 | **必填**；**1～500** 字 |
| 隶属单位 | **必填**；**1～20** 字 |
| 存放地点 | **必填**；**1～100** 字 |
| 预约流程 | **必填**；**1～500** 字 |
| 负责人 | **必填**；**1～10** 字 |
| 联系方式 | **必填**；手机号 |
| 借用金额 | **必填**；**正数**；单位 **元/小时** |
| 服务时段 | **必填**；**HH:mm** 起止；结束时间 **≥** 开始时间 |
| 服务周日 | **必填**；**多选** 周一至周日；至少选一天 |

---

### 5.7 视频课程

| 字段 | 规则 |
| --- | --- |
| 课程标题 | **必填**；**1～20** 字 |
| 课程简介 | **必填**；**1～500** 字 |
| 课程主题 | **必填**；**下拉单选**；选项来自 `GET /category/informationCategory/children?parentCode=005&categoryType=8`（展示 `name`，落库 `code`，如 `005001` 基础养殖） |
| 视频文件 | **必填**；**§5.2** 视频规则 |
| 封面 | **选填**；**§5.2** 图片规则 |

---

### 5.8 修改

| 项 | 规则 |
| --- | --- |
| 允许 | **未发布**、**已下架** |
| 拒绝 | **已发布** → 「已发布资源请先下架后再编辑」 |
| 范围 | 除资源类型外，该类型全部字段可改；校验同新增 |
| 保存后 | **不自动发布**；替换图片/视频/封面时，旧附件按平台文件管理惯例处理 |

---

### 5.9 查看

- **任意状态**可查看；只读展示该类型全部业务字段、发布状态、是否已分配账号（专家）、创建/更新等审计信息。  
- **已发布**：不提供编辑入口；**未发布 / 已下架** 可提供「编辑」。

---

### 5.10 逻辑删除

| 项 | 规则 |
| --- | --- |
| 允许 | **未发布**、**已下架** |
| 拒绝 | **已发布** → 须先下架 |
| 方式 | **本期单条**；二次确认；确认文案展示资源名称 |
| 副作用 | `del_flag` 置删除；删除照片/封面/视频物理文件；**若专家 `account_assigned=已分配`**，同步删除 `sys_user` 对应账号 |

---

### 5.11 发布与下架

| 操作 | 前置 | 结果 |
| --- | --- | --- |
| **发布** | **未发布** 或 **已下架**；数据完整且校验通过 | **已发布**；**同步移动端** |
| **发布**（拒绝） | 当前已为 **已发布** | 「该资源已发布」 |
| **下架** | 当前为 **已发布** | **已下架**；**撤回移动端** |
| **下架**（拒绝） | **未发布** 或 **已下架** | 「仅已发布资源可下架」 |

发布、下架操作宜二次确认。**已下架** 记录允许 **再次发布**。

---

### 5.12 分配账号（专家）

| 项 | 规则 |
| --- | --- |
| 范围 | **仅** 专家库 |
| 次数 | **每条仅成功分配一次**；已分配后不可重复 |
| 默认登录名 | **专家姓名**汉语拼音（全拼、小写、无空格）+ **该条资源唯一业务编号** |
| 默认角色 | 预置专家端角色（草稿约定：**编号 101**）；以系统实际角色配置为准 |
| 与发布状态 | **未发布**、**已下架** 且未分配时可操作；**已发布** 不可新分配 |
| 失败处理 | 返回明确原因；**不**记为已分配，在满足前置条件下可重试（仍仅允许一次成功） |

---

### 5.13 地图标点（本期不实现）

共享仪器库原型含「地图标点」入口；**本期不提供**。预留：后续维护地理坐标，与存放地点信息并存。

---

## 6. 操作与权限矩阵

| 操作 | 未发布 | 已发布 | 已下架 |
| --- | --- | --- | --- |
| 查看 | ✓ | ✓ | ✓ |
| 编辑 | ✓ | — | ✓ |
| 删除 | ✓ | — | ✓ |
| 发布 | ✓ | — | ✓ |
| 下架 | — | ✓ | — |
| 分配账号 | ✓（未分配） | — | ✓（未分配） |

列表级 **新增**、**搜索**、**重置** 需具备对应操作权限；无权限时按钮不展示或禁用。

---

## 7. 与下游衔接

| 下游能力 | 本模块提供 |
| --- | --- |
| 移动端资源展示 | 仅 **已发布** 且未删除的记录 |
| 科技咨询 / 专家预约 | 专家的服务时段、服务周日、收费标准 |
| 仪器借用预约 | 共享仪器的服务时段、服务周日、借用金额、预约流程说明 |
| 在线学习 | 已发布视频课程的视频与课程信息 |
| 专家端登录 | 「分配账号」产生的平台账号 |

---

## 8. 提示约定（示例）

| 场景 | 示例文案 |
| --- | --- |
| 必填 / 超长 | 「请填写【成果名称】」「【专家介绍】不能超过 500 字」 |
| 手机号 / 时段 / 金额 | 「联系方式格式不正确」「结束时间不能早于开始时间」「收费标准须为正数」 |
| 附件格式 / 大小 | 「仅支持 jpg/jpeg/png，且不超过 10MB」「仅支持 mp4，且不超过 30MB」 |
| 发布状态 | 「已发布资源请先下架后再操作」「该资源已发布」「仅已发布资源可下架」 |
| 账号 | 「该资源已分配账号，不可重复分配」「账号创建失败：{原因}」 |

---

## 9. 非功能建议

- 按按钮粒度控制操作权限。  
- 发布、下架、分配账号、删除等关键操作记录审计日志。  
- 四类分库列表在常规数据量下分页响应可接受。  
- 界面用语与原型、移动端保持一致；支持国际化扩展。

---

## 10. 修订记录

| 版本 | 说明 |
| --- | --- |
| 2.0 | 依据草稿与原型整理：发布状态机、操作矩阵、字段矩阵、业务流程图；明确发布/下架同步移动端；Tab 与筛选联动；专家分配角色 101；地图标点本期不做；剔除技术栈、接口与数据库相关表述 |
| 2.1 | 对齐草稿 §10：逻辑删除时联动删除专家已分配平台账号；§11 明确仅专家库分配账号 |
