# 隔离巡查登记 — 功能需求 ## 1. 文档说明 | 项 | 说明 | | --- | --- | | 模块名称 | 隔离巡查登记(交易市场平台) | | 目标 | 在业务后台按次登记**隔离圈位日常巡查**结果(时间、圈位、病死病害数量、关联耳标、巡查结论与处理意见、现场照片),形成可查询、可维护的巡查台账,支撑隔离期监管与异常处置追溯 | | 关联系统 | 业务后台;**隔离圈位管理**(圈位主数据);**入场隔离登记**(分圈后在栏耳标、在栏状态) | | 修订依据 | 同目录 `隔离巡查登记-草稿.md`、界面原型(`隔离巡查登记.png`) | 本文档**仅描述功能需求与业务规则**,不涉及数据库表结构、接口路径、请求体字段命名、HTTP 报文及技术栈选型。 --- ## 2. 术语与业务对象 ### 2.1 巡查记录(一条台账) - 表示对**某一个已分圈隔离圈位**在**某一时刻**开展的一次**现场巡查**登记。 - 由运营人员在后台**新增与维护**;保存成功后出现在巡查记录列表,供查询、修改、删除及后续统计引用。 - 单条记录包含:**巡查时间**、**圈位编号**、**病死病害数量**、**耳标号集合**(异常时)、**巡查内容描述**、**处理情况**、**巡查照片**及审计信息(创建人、时间等,与项目其他台账一致)。 ### 2.2 巡查时间 - **必填**;格式 **YYYY-MM-DD HH:mm:ss**(日期时间选择器)。 - **新增默认值**:系统**当前时间**;用户可改选其他合法时间。 - **不宜**选择未来时间(**默认建议**禁止或提示「巡查时间不能晚于当前时间」)。 - 列表、筛选中的「巡查日期」取本字段的**日期部分**(`YYYY-MM-DD`)。 ### 2.3 圈位编号(已分圈圈位) - **必填**;**单选**下拉。 - 选项范围:**已分圈且仍有在栏牲畜**的隔离圈位,即来源于 **入场隔离登记** 中、当前**尚未出圈/解除隔离**的分圈明细所涉及的圈位编号;**未分圈、已空圈、已逻辑删除**的圈位**不出现在下拉中**。 - 展示与保存值与 **隔离圈位管理** 中的 2 位数字圈位编号一致(如 `01`、`02`),**不可手工输入**编号。 - 若当前无任何可用圈位,新增时应提示「暂无在栏圈位,请先在入场隔离登记中完成分圈」。 ### 2.4 病死病害数量(头) - **必填**;单位固定为 **头**;取值为**非负整数**(≥0)。 - **新增默认值**:**0**。 - 业务含义:本次巡查在该圈位内发现的**病死或病害牲畜头数**(按现场认定登记,本期不区分病死与病害子类)。 - 本字段为**核心驱动字段**,联动 **§2.5~§2.7** 的默认文案、耳标展示与保存校验。 ### 2.5 巡查内容描述 - **必填**;多行或单行文本,**支持手工修改**。 - **随病死病害数量联动的默认文案**(用户修改数量后宜**自动带出**,用户可立即改回): | 病死病害数量 | 默认文案 | | --- | --- | | **= 0** | 巡查结果正常 | | **> 0** | 巡查结果异常 | - **默认建议**长度 **1~200** 字(去除首尾空白后计数);仅空白视为未填。 ### 2.6 处理情况 - **必填**;多行或单行文本,**支持手工修改**。 - **随病死病害数量联动的默认文案**: | 病死病害数量 | 默认文案 | | --- | --- | | **= 0** | 无需处理 | | **> 0** | 需要处理 | - **默认建议**长度 **1~200** 字;仅空白视为未填。 ### 2.7 耳标号(异常时登记) | 场景 | 规则 | | --- | --- | | 病死病害数量 **= 0** | 表单**不展示**耳标号区域;保存时**不要求**耳标;列表耳标列展示「—」或留空 | | 病死病害数量 **> 0** | **必填**;**多选**下拉(或等效多选器) | | 选项来源 | 当前所选**圈位编号**下、**仍在栏未出圈**的耳标号(与入场隔离登记分圈明细一致;已出圈耳标不可选) | | 选择个数 | 已选耳标个数 **必须等于** 病死病害数量(见 **§2.8**) | | 展示 | 列表、详情多个耳标以逗号、顿号拼接;过长省略,详情可看全文 | - 耳标号字符规则与 **入场隔离登记** **§2.3** 一致(单段 **1~32** 字符等)。 ### 2.8 病死病害数量与耳标一致性(核心规则) 保存(新增/修改)前必须满足: | 编号 | 规则 | | --- | --- | | P1 | 病死病害数量 **= 0** 时:耳标集合为空(不校验耳标) | | P2 | 病死病害数量 **> 0** 时:至少选择 **1** 个耳标,且 **已选耳标个数 = 病死病害数量** | | P3 | 所选耳标均须属于当前圈位在栏集合,且**同一记录内耳标不可重复** | 不满足时拒绝保存,并提示(示例见 **§8**)。 ### 2.9 巡查照片 - **单张**图片上传(非多图)。 - 允许后缀:**jpg、jpeg、png**(大小写不敏感)。 - 单文件大小 **≤ 10 MB**。 - **是否必填**:**默认建议选填**(无照片也可保存;有异常时建议上传现场照片,可在界面提示文案体现)。 - 列表宜展示缩略图或「查看」入口;详情支持预览/下载(与项目文件预览惯例一致)。 ### 2.10 删除与可见性 - 删除采用与项目其他业务台账一致的**逻辑删除**:删除后默认不在列表与常规查询中展示,数据保留供审计。 - **本期不提供**回收站。 - **本期不限制**删除后是否影响入场隔离登记(巡查为记录型下游;入场登记删除约束见该模块需求,**不因本模块单独禁止删除入场登记**)。 ### 2.11 列表筛选项与记录字段的关系 | 筛选项 | 与记录字段关系 | | --- | --- | | 巡查日期 | 选填;对「巡查时间」的**日期部分**做**闭区间**范围匹配(开始日期 ≤ 记录日期 ≤ 结束日期);仅填开始或仅填结束按项目日期区间惯例处理(**默认建议**缺省结束视为开始当日,或结束不得早于开始) | | 圈位编号 | 选填;对「圈位编号」**模糊**匹配(包含输入片段即可,与项目全局模糊查询一致) | 支持多条件**组合筛选**(同时满足)。 --- ## 3. 功能范围 ### 3.1 本期实现 | 能力 | 说明 | | --- | --- | | 巡查记录列表 | 巡查日期范围、圈位编号筛选;分页;**§5.2** | | 新增巡查记录 | 表单联动与一致性校验;**§5.1** | | 修改巡查记录 | 各字段均可修改;校验同新增;**§5.3** | | 查看巡查记录 | 只读展示全部字段;**§5.4** | | 删除巡查记录 | 单条逻辑删除;**§5.5** | | 工具栏 | 搜索、重置、新增 | ### 3.2 本期不实现(除非后续单独立项) - 移动端现场扫码巡查、GPS 定位、巡查任务自动下发与到期提醒 - 巡查记录批量导入/导出、审批流、签字确认 - 与病死无害化处理、出圈指令的自动联动(本期仅登记结论与处理意见文本) - 按耳标号、按供应商的列表筛选(原型未要求) - 视频、多图附件 --- ## 4. 业务流程概览 ### 4.1 总览 ```mermaid flowchart TD A[进入隔离巡查登记] --> B{用户操作} B -->|查询| C[设置巡查日期范围/圈位编号] C --> D[搜索刷新列表] B -->|新增| E[打开新增巡查记录] E --> F[选择圈位与时间] F --> G[填写病死病害数量] G --> H{数量是否大于0?} H -->|否| I[带出正常/无需处理默认文案] H -->|是| J[带出异常/需要处理默认文案] J --> K[多选耳标且个数等于数量] I --> L[可选上传巡查照片] K --> L L --> M{保存前校验 P1~P3} M -->|通过| N[保存并刷新列表] M -->|未通过| E B -->|查看/编辑/删除| O[行内或详情操作] O --> D ``` ### 4.2 典型使用顺序 1. 牲畜经 **入场隔离登记** 完成分圈后,圈位进入「在栏」状态。 2. 巡检员进入本模块,按 **巡查日期**、**圈位编号** 查询历史记录。 3. 点击 **新增**,选择 **圈位编号** 与 **巡查时间**,填写 **病死病害数量**。 4. 系统按数量带出 **巡查内容描述**、**处理情况** 默认文案,巡检员可据实修改。 5. 若数量 **> 0**,在 **耳标号** 中勾选对应头数的在栏耳标,必要时上传 **巡查照片**,保存。 6. 发现登记错误时 **修改**;误登记录 **删除**(逻辑删除)。 ### 4.3 与关联模块的关系 | 关联模块 | 本模块用法 | | --- | --- | | **隔离圈位管理** | 圈位编号展示与主数据一致;仅作编号参照,本模块不维护圈位台账 | | **入场隔离登记** | 提供「已分圈在栏」圈位及每圈在栏耳标;出圈或登记删除后,对应圈位/耳标不再出现在本模块下拉中 | | **下游(规划)** | 监管报表、异常统计、隔离期满判定等可引用本台账;集成规则另文档约定 | --- ## 5. 详细功能需求 ### 5.1 新增巡查记录 #### 5.1.1 业务字段 | 字段 | 必填 | 规则摘要 | | --- | --- | --- | | 巡查时间 | 是 | **§2.2**;默认当前时间 | | 圈位编号 | 是 | **§2.3**;单选已分圈在栏圈位 | | 病死病害数量(头) | 是 | **§2.4**;非负整数,默认 0 | | 巡查内容描述 | 是 | **§2.5**;随数量默认,可改 | | 处理情况 | 是 | **§2.6**;随数量默认,可改 | | 耳标号 | 条件必填 | **§2.7、§2.8**;数量 > 0 时必填且个数一致 | | 巡查照片 | 否 | **§2.9**;单图 jpg/jpeg/png,≤10MB | #### 5.1.2 表单联动(新增/修改共用) | 触发 | 行为 | | --- | --- | | 变更 **圈位编号** | 清空已选耳标;耳标下拉选项切换为**新圈位**在栏耳标 | | 变更 **病死病害数量** | 按 **§2.5、§2.6** 刷新默认文案;若数量变为 0,隐藏耳标区并清空已选耳标 | | 变更 **病死病害数量** 且 > 0 | 若已选耳标个数 **大于** 新数量,宜提示并清空或要求用户减选至相等(**默认建议**保存前校验,不等则拒绝) | #### 5.1.3 保存与取消 | 操作 | 行为 | | --- | --- | | **确定** | 通过 **§2.8** 及字段校验后保存;关闭弹窗并**刷新列表** | | **取消** | 关闭弹窗,不保存 | #### 5.1.4 校验摘要 | 规则 | 说明 | | --- | --- | | 巡查时间 | 为空、格式非法、晚于当前时间(若启用)时拒绝保存 | | 圈位 | 未选择或圈位已非在栏时拒绝保存 | | 病死病害数量 | 非整数、负数时拒绝保存 | | 文案长度 | 巡查内容描述、处理情况超过约定字数拒绝保存 | | P1~P3 | **§2.8** 耳标与数量一致性 | | 照片 | 超大小、格式不符时拒绝保存 | --- ### 5.2 查询巡查记录列表 #### 5.2.1 筛选 | 条件 | 规则 | | --- | --- | | 巡查日期 | 选填;**起止日期**区间(`daterange`,**§2.11**);与项目其他模块日期区间组件一致 | | 圈位编号 | 选填;**模糊**匹配 | #### 5.2.2 列表规则 - 默认每页 **20** 条。 - 默认排序:**巡查时间降序**(最近一次巡查在前)。 - 工具栏:**搜索**、**重置**、**新增**。 #### 5.2.3 展示列(与原型一致) 巡查时间、圈位编号、巡查照片、巡查内容描述、处理情况、病死病害数量(头)、耳标号、操作。 | 列 | 展示说明 | | --- | --- | | 巡查时间 | `YYYY-MM-DD HH:mm:ss` | | 圈位编号 | 2 位数字编号 | | 巡查照片 | 有图:缩略图或「查看」;无图:「—」或留空 | | 巡查内容描述 | 过长省略;详情全文 | | 处理情况 | 过长省略;详情全文 | | 病死病害数量(头) | 非负整数 + 单位「头」 | | 耳标号 | 数量 = 0 时「—」;> 0 时拼接展示 | | 操作 | 查看、编辑、删除(权限见 **§6**) | --- ### 5.3 修改巡查记录 | 项 | 要求 | | --- | --- | | 入口 | 列表「编辑」;详情可提供「编辑」 | | 可改范围 | **全部业务字段**均可修改(含圈位、时间、数量、耳标、文案、照片) | | 圈位/数量变更 | 联动规则同 **§5.1.2** | | 照片 | 可重新上传替换;宜支持清除已传照片(与项目上传组件惯例一致) | | 校验 | 同 **§5.1.4** | | 保存 | **确定** 保存并刷新列表;**取消** 放弃 | > **说明:** 修改时若所选圈位、耳标在保存瞬间已出圈,应拒绝保存并提示「圈位或耳标状态已变更,请重新选择」。 --- ### 5.4 查看巡查记录详情 | 项 | 要求 | | --- | --- | | 展示内容 | **§5.1.1** 全部字段;耳标、照片完整展示 | | 只读 | 全部不可编辑 | | 操作 | 可提供 **编辑**、**删除**(与列表权限一致);**关闭** 返回列表 | | 审计信息 | 宜含创建人、创建时间、修改人、修改时间(与项目其他台账一致) | --- ### 5.5 删除巡查记录 | 项 | 要求 | | --- | --- | | 入口 | 列表「删除」;详情可提供「删除」 | | 确认 | 删除前**二次确认**(宜展示巡查时间、圈位编号) | | 删除方式 | **逻辑删除**(**§2.10**) | | 批量删除 | **本期不提供** | --- ## 6. 操作与权限矩阵(汇总) 在**已授权**前提下: | 操作 | 列表/详情/弹窗 | 说明 | | --- | --- | --- | | 查询列表、筛选 | 列表页 | 需列表查询权限 | | 新增巡查记录 | 「新增」 | 需新增权限 | | 查看 | 行内/详情 | 需查看权限 | | 修改 | 行内/详情 | 需修改权限 | | 删除 | 行内/详情 | 需删除权限 | 无权限的按钮**不展示或禁用**(与若依按钮权限惯例一致)。 --- ## 7. 与同类模块对照(便于评审) | 维度 | 入场隔离登记 | 隔离巡查登记(本模块) | | --- | --- | --- | | 业务性质 | 进场、分圈、隔离期 | 对在栏圈位的**巡检记录** | | 时间字段 | 进场时间 | 巡查时间 | | 圈位 | 分圈明细多行 | 单条记录对应**一个**圈位 | | 耳标 | 主表 + 分圈分配 | 仅异常时按头数勾选在栏耳标 | | 数量含义 | 进场总头数 | 病死病害头数 | | 核心一致性 | R1~R5 分圈与耳标 | P1~P3 数量与耳标 | | 附件 | 检疫证文档 | 现场照片(单图) | | 列表筛选 | 进场日期、检疫证号、供应商 | 巡查日期、圈位编号 | --- ## 8. 异常与提示(业务侧) | 场景 | 提示方向(示例) | | --- | --- | | 无在栏圈位 | 暂无在栏圈位,请先在入场隔离登记中完成分圈 | | 巡查时间为空 | 请选择巡查时间 | | 巡查时间晚于当前 | 巡查时间不能晚于当前时间 | | 未选圈位 | 请选择圈位编号 | | 数量非法 | 请输入正确的病死病害数量(非负整数) | | 耳标个数不一致 | 病死病害数量与已勾选耳标号数量不一致 | | 未选耳标(数量>0) | 请选择耳标号 | | 耳标不在栏 | 耳标 {tag} 不在当前圈位或已出圈 | | 文案超长 | 巡查内容描述/处理情况长度不能超过 N 个字符 | | 照片格式/大小 | 仅支持 jpg、jpeg、png,且不超过 10MB | | 圈位状态变更 | 圈位或耳标状态已变更,请重新选择 | **本期不涉及** HTTP 响应结构、错误码表等技术约定(草稿中的统一返回格式由技术方案另行描述)。 --- ## 9. 非功能需求(摘要) | 项 | 要求 | | --- | --- | | 易用性 | 数量 = 0 时隐藏耳标,避免误填;数量变更时默认文案与原型橙色说明一致 | | 一致性 | 逻辑删除、分页、日期区间筛选、模糊查询、校验风格与交易市场平台其他台账模块一致 | | 数据可信 | 保存前前端预校验 **§2.8**,服务端须再次校验,防止绕过 | | 可追溯 | 异常记录宜鼓励上传巡查照片;列表可快速识别「数量 > 0」记录 | --- ## 10. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:依据草稿与原型;巡查记录 CRUD;数量驱动文案与耳标联动;已分圈在栏圈位/耳标范围;剔除库表、接口、技术栈与 HTTP 约定 |