# 养殖标准管理 — 功能需求 ## 1. 文档说明 | 项 | 说明 | | --- | --- | | 模块名称 | 养殖标准管理 | | 目标 | 对养殖标准进行增删改查、附件与封面管理,并与知识库同步、发布生命周期衔接 | | 关联系统 | 业务后台(RuoYi)、知识库 | | 流程修订依据 | 同目录 `养殖标准管理功能需求-草稿.md`:下架回流、删除与知识库通知等 | --- ## 2. 术语与状态 ### 2.1 标准类型(资讯类别编码,单选) 标准类型持久化与接口传参均为 **资讯类别编码**(`varchar`)。可选范围由资讯类别子节点维护,本模块取 `parentCode=001`、`categoryType=1`: | 编码 | 名称(示例) | | --- | --- | | `001001` | 繁育作业 | | `001002` | 饲养工作 | | `001003` | 免疫程序 | | `001004` | 环境调控 | 新增/修改保存时编码须在上述有效集合内;列表筛选为 **编码精确匹配**。 ### 2.2 业务状态(便于实现状态机与权限) 业务状态宜拆成 **两个正交维度**(可用两个字段分别持久化,字段名与现有表结构对齐即可),避免出现「单枚举无法表达」的组合。 #### 2.2.1 上架状态(互斥,单值) | 取值 | 含义概要 | | --- | --- | | **未发布** | 未对外发布阶段:含「新建草稿」「**未同步下编辑**」「**已从已发布下架回流**」等场景;**仅未发布且未同步**时可编辑;同步/移出/发布/删除规则见 **第 4~5 节** | | **已发布** | 对外可见或可检索(与产品定义一致);**不允许修改**;不可直接删除,须先执行 **下架** | **下架与「已下架」:** 执行「下架」后,业务侧**不再将本条持久化为单独的「已下架」终态**(与历史「下架即终态」方案区分)。下架完成后,上架状态回到 **未发布**,知识库同步状态为 **已同步**(见 **4.8**)。**产品定论:** 下架后知识库内**仍保留**与本标准对应的条目副本(条目不删除,可与「对外发布/检索可见」解耦),故业务侧维持 **未发布 + 已同步**,允许**直接再次发布**;若需改内容须先 **移出知识库** → 未同步下编辑 → 再同步,**无须新建**一条养殖标准。 > 若库表仍保留「已下架」枚举值仅作兼容或审计展示,应在实现与数据字典中注明其与上述流程的关系,避免与「下架回流 = 未发布 + 已同步」冲突。 #### 2.2.2 知识库同步状态(与上架状态正交,单值) | 取值 | 含义概要 | | --- | --- | | **未同步** | 知识库中无对应有效条目(或已移出);可执行手动「同步知识库」(仅当上架状态为 **未发布** 时,见 **4.6**) | | **已同步** | 知识库侧**已有**与本条对应的条目;业务侧**禁止编辑**(须先移出后再改);**未发布**时可 **发布**、**移出知识库** | **已同步状态下若要改内容:** 须 **移出知识库** → **未同步** 下完成修改 → 再 **同步知识库** → **已同步**。禁止在「已同步」下直接改业务数据。 「移出知识库」见 **4.7**:执行后须将本维度置为 **未同步**。 #### 2.2.3 合法组合(上架 × 知识库) 以下组合**允许作为稳态存在**;其余组合(如 **已发布 + 未同步**)视为 **非法**,不得在数据层出现,接口须校验。 | 上架状态 | 知识库同步 | 说明 | | --- | --- | --- | | 未发布 | 未同步 | 初始或移出后;可手动同步、可编辑;**未同步**条件下允许删除(见 **4.4**) | | 未发布 | 已同步 | 已入库(含手动同步、或**已发布下架回流**);**不可编辑**、可发布、可移出;删除规则见 **4.4** | | 已发布 | 已同步 | 发布的前提为已同步(**4.8**);对外展示中,不可改、不可删,仅可下架 | **说明:** 按 **4.8**,下架完成后目标稳态为 **未发布 + 已同步**:库内保留可编辑副本,**不再**单独保留「已下架 + 未同步」作为业务必经终态。与「移出知识库」(**4.7**,删除/下线库侧条目并置 **未同步**)区分实现。 **操作权限与按钮矩阵仍以第 5 节为准**;本节用于库表设计与状态校验。 --- ## 3. 功能范围 - 养殖标准的新增、修改、删除、分页列表查询、详情查看 - 标准正文附件(非结构化文档)与封面图的上传、替换、展示及删除时联动清理存储 - 与知识库的同步、移出 - 发布、下架及与知识库的一致性处理 - 接口异常返回统一结构 --- ## 4. 详细功能需求 ### 4.1 新增养殖标准 | 字段 | 规则 | | --- | --- | | 标准名称 | 必填;长度 1~20 个字符(字符计数规则与项目全局一致,如按 Unicode 长度或字节需单独约定) | | 标准类型 | 必填;单选,取值须为第 **2.1** 节所列资讯类别编码之一 | | 标准简介 | **选填**;若有内容,长度不超过 **50 字**(字数口径与项目全局一致,如是否含标点、中英文计数方式) | | 标准内容 | **必填**;通过**单个**附件上传;允许后缀:`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`pptx`;单文件 ≤ **30 MB** | | 封面 | 通过**单个**图片上传;允许后缀:`jpg`、`jpeg`、`png`(若有 `webp` 等产品需求可追加);单文件 ≤ **10 MB** | **必填字段汇总:** 标准名称、标准类型、标准内容。 **校验:** 服务端需校验 MIME/后缀与白名单一致,大小超限返回明确错误码与提示;同名策略(全局唯一或租户内唯一)若业务需要应在本节补充。 --- ### 4.2 查询养殖标准列表 - **关键字:** 对「标准名称」或「标准简介」**模糊**匹配(OR 关系)。 - **标准类型:** **精确**匹配筛选。 - **分页:** 支持分页;默认 **每页 20 条**(`pageSize=20`),默认首页 `pageNum=1`;单页条数上限若需限制可与 RuoYi 列表规范对齐(例如上限 100)。 - **排序:** 默认按 **创建时间倒序**(最新创建的在前);次要排序键若需约定(如 `id` 倒序)可在接口文档中写明。 --- ### 4.3 修改养殖标准 - **状态约束:** **仅未发布且未同步**(`publish_status=0` 且 `kb_sync_status=0`)允许修改。**已发布**或 **已同步** 状态下**不允许修改**(列表/详情不提供编辑入口或仅为只读;调用修改类接口须返回明确业务错误,如「知识库已同步状态不允许修改」)。 - 可修改项:**标准名称、标准类型、标准简介、标准内容(附件)、封面**。 - **保存约束:** **标准名称、标准类型、标准内容** 始终保持必填(提交时不得为空、不得删除附件导致无正文);**标准简介**仍为选填。 - **与知识库一致性:** **未同步**状态下修改保存仅更新业务侧,不自动写入知识库,仍依赖用户触发 **4.6** 的「同步知识库」。**已同步**须先 **移出知识库**(**4.7**)后再编辑。 --- ### 4.4 删除养殖标准 - 删除数据库记录时,**同步删除**关联存储中的标准内容文件与封面文件(对象存储或本地路径需与现有框架一致);并**通知知识库删除**对应养殖标准条目(与对接文档一致,避免孤儿数据)。 - **允许删除(与草稿对齐):** **未同步**的养殖标准允许删除(含「未发布 + 未同步」等情形)。 - **不允许删除:** **已发布**的养殖标准;须先执行「下架」(见 **4.8**),回到 **未发布** 后再按本条及「未发布且已同步」规则处理。 - **未发布且已同步:** **不得在无知识库处理的前提下直接删除**;须先 **移出知识库**(见 **4.7**)使标准变为未同步后,再执行删除;或在删除接口内 **原子联动移出/删除知识库条目** 后删除本地记录与文件,避免知识库孤儿条目。 --- ### 4.5 查看养殖标准详情 - 展示:**标准名称、标准类型、标准简介、标准内容(附件下载或预览入口)、正文附件原始名称(与上传文件名一致,便于识别)、封面**。**已发布**或 **已同步** 场景下详情为 **只读**(无保存类编辑);**未发布且未同步** 在具备编辑权限时可进入编辑流程。 - 预览能力(仅 PDF、图片在线预览等)若需要,可作为迭代项单列。 --- ### 4.6 同步至知识库(手动) - **适用:** 养殖标准为**未发布**且**未同步**(或等价状态)时,由用户点击「同步知识库」,将当前标准**首次**写入知识库(或对接语义下的首次挂载)。**已发布**记录不适用本手动入口(须先下架回到未发布后再视同步维度操作)。 - **结果:** 手动同步成功后,标准进入「已同步」状态(或等价标记),为后续发布做准备;此后若需改内容须先 **移出知识库**(**4.7**)。 - **失败:** 网络或知识库返回错误时,`code`、`msg` 明确可区分,支持用户重试。 --- ### 4.7 移出知识库 - **语义区分:** 「移出知识库」为**主动**删除或下线知识库侧对应条目;与「下架」(**4.8**)不同——**下架不删除库内副本**,库内保留可编辑条目,业务侧仍为 **已同步**。 - **前置:** 仅 **未发布** 且 **已同步** 时可提供「移出知识库」(与 **第 5 节**矩阵一致)。**已发布**记录不提供「移出」入口;须先 **下架** 回到 **未发布 + 已同步** 后,用户再按需点击「移出知识库」(并非下架动作自动移出)。 - **结果:** 知识库侧对应条目删除或下线后,业务侧「知识库同步」维度须置为 **未同步**;合法组合与后续操作见 **第 5 节**矩阵。 --- ### 4.8 发布与下架 - **发布:** - **仅当**养殖标准**已同步知识库**且上架状态为 **未发布**时,允许执行「发布」(与草稿「只有已同步才能发布」一致)。 - 发布后上架状态为 **已发布**。 - **下架:** - **已发布**的养殖标准可「下架」。 - 下架时须完成与知识库的一致性处理:**结束对外发布/对外检索可见等**,但**不删除**知识库内与本标准对应的条目——库内**保留可编辑副本**,以便后续修改与再次发布(具体接口语义如「可见性开关 / 发布状态」以《技术方案》与对接文档为准)。 - **下架完成后的业务状态:** 上架状态置为 **未发布**,知识库同步状态为 **已同步**(与「库内仍保留副本」一致);允许用户 **直接再次发布**;若需改内容须先 **移出知识库** 再编辑、同步,**无须新建**养殖标准。 - 若需从库内**彻底清除**条目,须由用户在回到 **未发布 + 已同步** 后主动执行 **移出知识库**(**4.7**),而非由下架子流程替代。 --- ## 5. 状态与操作矩阵(汇总) 以下便于开发与测试用例编写(具体 boolean 以实现为准)。**已移除「已下架」作为独立矩阵行**:下架完成后回到 **未发布且已同步**(**库内保留可编辑副本**),与第二行合并理解。 | 当前状态(示意) | 修改 | 同步知识库 | 移出知识库 | 发布 | 下架 | 删除 | | --- | --- | --- | --- | --- | --- | --- | | 未发布且未同步 | ✓ | ✓ | — | — | — | ✓(未同步允许删) | | 未发布且已同步 | ✗ | — | ✓ | ✓ | — | ✗(须先移出变为未同步,或删除时联动移出/删库) | | 已发布 | ✗ | — | — | — | ✓(回流为未发布+已同步) | ✗ | **补充:** 从「已发布」下架后,记录进入 **未发布且已同步**,操作权限按上表第二行执行(不可改、可发布、可移出;删除规则同 **4.4**)。 --- ## 6. 接口与异常 - **异常返回:** 统一结构:`code`、`msg`、`data`(与现有 RuoYi / 全局规范一致)。 - **文件相关错误:** 单独错误码或 `msg` 区分格式不支持、大小超限、上传失败等。 --- ## 7. 技术栈约束 - **后端框架:** RuoYi **v3.9.2**,分支 **springboot2** - **数据库:** MySQL **5.7.39** --- ## 8. 非功能需求(建议补充) | 类别 | 建议 | | --- | --- | | 权限 | 菜单与按钮级权限:新增、编辑、删除、发布、下架、同步、移出等是否分角色 | | 审计 | 关键操作记操作日志(发布、下架、手动同步、移出、删除) | | 安全 | 上传文件类型校验、存储路径不可预测、下载鉴权 | | 性能 | 列表接口避免 N+1;大附件走直传或分片若后续有需要再扩展 | --- ## 9. 修订说明(相对原版) - **2.2** 将业务状态拆为 **上架状态** 与 **知识库同步状态** 两维,并给出 **合法组合表**;非法组合(如已发布+未同步)禁止落库。 - 拆分章节:术语、字段校验、列表、生命周期(同步 / 发布 / 下架 / 删除)分层描述,便于评审与测试用例映射。 - 修正原版第 9 条末尾多余字符。 - 对「删除」「发布」「下架与移出知识库」的关系做了矩阵汇总;**允许删除**与 `养殖标准管理功能需求-草稿.md` 对齐:**未同步**允许删除;**未发布且已同步**须先移出或删除联动知识库处理。 - 补充分页、排序等实现要点;**已发布**与 **已同步** 均不允许修改;**下架后回流为「未发布 + 已同步」**,可再次发布,改内容须先移出(**替代**原「已下架终态、须新建重来」及「已同步保存自动推库」描述)。 - **下架 vs 移出(产品定论):** 下架**不删除**知识库条目,库内**保留条目副本**,故业务 **`kb_sync_status` 仍为已同步**;彻底清除库侧条目须用户主动 **移出知识库**(非下架自动完成)。 - **删除**补充:**通知知识库删除**对应条目(与草稿一致)。 - **标准简介**明确为选填;填写时仍受 50 字上限约束。 - **标准名称、标准类型、标准内容**明确为必填(新增与修改保存均适用)。 - 列表分页默认 **每页 20 条**;列表默认 **创建时间倒序**。 - **已同步**禁止编辑,与休药期/药物禁配等模块对齐;改内容须 **移出 → 修改 → 再同步**。 - **标准名称**长度由 **3~20** 调整为 **1~20** 个字符,与 `养殖标准管理功能需求-草稿.md` 及饲喂/疫病/生长出栏等标准模块字段规则对齐。 - **标准内容**正文附件白名单调整为:`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`pptx`(不再支持旧版 `ppt`);与 `BreedingStandardRules`、前端 `contentFileExts` 及通用上传白名单(含 `md`)一致。