# 养殖产业数据 — 功能需求 ## 1. 文档说明 | 项 | 说明 | | --- | --- | | 模块名称 | 养殖产业数据 | | 目标 | 以**看板**形式集中展示县域(或授权范围内)牦牛养殖与草场资源的关键指标与结构,支撑产业监管、决策研判与日常巡查 | | 关联系统 | 业务后台(单页看板,只读展示) | | 修订依据 | 同目录 `养殖产业数据功能需求-草稿.md`、界面原型(`Snipaste_2026-05-19_12-33-09.jpg`) | 本文档仅描述**功能需求与业务规则**,不涉及库表结构、接口路径、请求参数字段命名、技术栈选型及实现方案。 --- ## 2. 术语与统计口径 ### 2.1 看板与数据性质 - 本模块为**只读数据看板**:不提供指标手工录入、修改、删除;所有数值由关联业务模块台账或同步数据**汇总计算**后展示。 - 页面自上而下分为四个功能区:**产业总览**、**牦牛存栏变动**、**牦牛存栏结构**、**草场类型占比**(与原型布局一致)。 - 指标**非最终版**:草稿说明产业数据可能随第三方对接扩展;新增指标须修订本文档并更新原型。 ### 2.2 统计范围与时间 | 项 | 约定 | | --- | --- | | **空间范围** | 见 **§2.9 数据权限与纳入范围** | | **「当前」时点** | 用户打开或刷新看板时的系统日期(记为 **统计日**);各「当前存栏」类指标按统计日计算 | | **趋势图月份** | 横轴为当前自然年 **1 月~12 月**;**未到来的月份不展示数据点**(折线止于当前月) | | **自然年** | 公历当年 1 月 1 日 0:00~12 月 31 日 23:59:59 | 看板进入时**自动加载**最新统计结果;须提供**刷新**操作重新计算(见 **§5.1**)。页面**不**自动定时刷新(**§8** 扩展项除外)。 ### 2.3 牦牛「存栏」认定 用于存栏总量、性别结构、存栏趋势等(档案口径,预警等仍可能引用;看板主指标见 **§2.11**)。 | 规则 | 说明 | | --- | --- | | 纳入存栏 | 「牦牛资产档案」中档案有效(未逻辑删除),且**资产状态**为 **正常** 的个体 | | 不纳入存栏 | 资产状态为 **死淘**、**丢失**、**出栏** 的个体 | | 性别 | 以档案「性别」为准,分为 **公**、**母**;性别为空或无法映射为公/母的个体**不计入**公、母分项,**计入**存栏总量 | | 月龄 | 优先按档案「月龄」字段;缺失时由「出生日期」与统计日计算**整月龄**(不足 1 月记为 0 月龄) | ### 2.4 牦牛年出栏量 | 规则 | 说明 | | --- | --- | | 统计周期 | **当前自然年** 1 月 1 日 0:00 至统计日 24:00 | | 计数对象 | 资产状态为 **出栏**,且 **状态变更日期** 落在上述周期内的档案(按**头**计,一头一条档案计 1) | | 去重 | 同一牦牛编号仅计 1 次 | | 缺失变更日期 | **状态变更日期为空**的出栏档案**不计入**年出栏量(计入数据质量风险,由档案同步维护解决) | ### 2.5 预警牦牛数量 与「牦牛疾病预警」模块对齐,本看板**只展示结果**,不维护预警。 | 规则 | 说明 | | --- | --- | | 统计周期 | **当前自然年** 1 月 1 日 0:00 至 **统计日** 23:59:59(与「牦牛疾病预警」**§5.6** 一致) | | 计数方式 | 周期内存在**至少 1 条**未逻辑删除预警记录的 **去重牦牛编号** 头数 | | 处置状态 | 本期无预警处置闭环,**不区分**是否已读/已处理,凡在周期内且未删除的预警均参与去重计数 | ### 2.6 牧场与草场(总览用) | 指标 | 规则(默认) | | --- | --- | | 牧场数量 | 「牧场管理」中未逻辑删除,且**经营状态**为 **正常** 的主体条数,单位 **个** | | 草场数量 | 「草场管理」中未逻辑删除的草场条数,单位 **个** | | 草场面积 | 上述有效草场的**面积**字段之和,单位 **亩**;面积为空的不计入求和 | ### 2.7 草场「可用」与「使用中」 用于 **§5.5** 草场类型占比区上部数量展示。 | 分类 | 含义(默认) | | --- | --- | | **可用草场** | 未逻辑删除的草场中,**退化等级**为 **未退化** 或 **轻度** 的条数(视为具备利用或改良潜力的资源) | | **使用中草场** | 未逻辑删除的草场中,**利用类型**为 **全年放牧** 或 **轮牧** 的条数;若利用类型为 **禁牧**,仅当**当前日期不在**该条记录填写的禁牧开始~结束日期闭区间内时,计入「使用中」,否则不计入 | **逻辑关系**:「使用中」为「可用」资源的子集场景之一;**可用 + 使用中** 不宜简单相加为总量(二者有交叉)。界面分别展示两个数字即可(与原型一致)。 **退化等级**取值与「草场管理」**§2.1** 一致:未退化、轻度、中度、重度、极重度。 ### 2.8 草场退化结构占比 对**未逻辑删除**的全部草场,按**退化等级**分组: - 统计各等级的**条数**; - 计算各等级条数占草场总条数的**百分比**(保留 1 位小数或整数百分比,与界面一致); - 五类等级均需展示;某等级为 0 时显示 0 及 0%。 ### 2.9 数据权限与纳入范围 | 对象 | 纳入规则 | | --- | --- | | **牧场** | 未逻辑删除,且经营状态为 **正常**;且落在当前用户**可见牧场**集合内(与项目全局数据权限一致) | | **牦牛** | 未逻辑删除;档案 **pasture_id** 非空且对应牧场在用户可见牧场集合内;**pasture_id 为空**的档案**不参与**看板任何牦牛类统计 | | **草场** | 未逻辑删除;本期按用户**全县(或授权区域)草场台账**统计,**不按**牧场拆分校准(与草场管理台账一致) | | **预警** | 仅统计牦牛编号落在上述「纳入统计的牦牛」集合内的预警记录 | 县级管理员可见全部主体时,等价于全量有效台账统计。 ### 2.10 历史月末存栏还原(趋势图) 折线图各月数值须在**该月最后一日**还原「当日应计入存栏」的个体数(应用 **§2.3** 的存栏语义,按**时点**而非仅看当前状态)。 记 **月末日** 为自然月最后一天。**非正常资产状态**指:死淘(2)、丢失(3)、出栏(4)。 在 **月末日** 时点,档案**计入**当月存栏,当且仅当同时满足: 1. 档案未逻辑删除,且符合 **§2.9** 纳入范围; 2. **不**满足:当前 `asset_status` 为非正常状态 **且** `status_change_date` 不为空 **且** `status_change_date` ≤ 月末日(表示该日或之前已变为死淘/丢失/出栏); 3. `asset_status` 为 **正常(1)**,或虽当前为非正常但 `status_change_date` **晚于** 月末日(月末时尚未发生该次状态变更); 4. `asset_status` 无法识别时,**不计入**。 **当前月**折线点:月末日尚未结束时,以 **统计日** 代替月末日执行上式。 **状态变更日期为空**且当前为非正常状态:该个体在**所有历史月末**均**不计入**存栏趋势。 > **看板说明(v1.5)**:**§5.3 存栏变动**、**§5.4 牦牛存栏结构**及总览存栏/出栏/农牧户/草场面积已改由 **§2.11 填报表** 按所选年统计,**不再**使用本节档案月末还原。本节保留供档案类指标(如预警关联档案)参考。 ### 2.11 存栏出栏填报(看板主口径) 与大屏首页一致,数据来自乡镇填报表: | 指标/图表 | 数据源 | 规则 | | --- | --- | --- | | 总览存栏 | `biz_yak_herd_inventory.yak_total` | 全县合计;**所选年**内最大填报月 | | 总览出栏 | `biz_yak_outbound_report.yak_outbound_count` | 同上;所选年最大填报月 | | 农牧户、草场面积 | `biz_farmer_household` | 所选年最大填报月;`household_count`、`pasture_contract_area`(与大屏一致) | | 公/母牛数量 | `biz_yak_herd_inventory` | 所选年最大填报月全县 `bull_total`、`cow_total`;未标注=`yak−公−母` | | 存栏趋势 | `biz_yak_herd_inventory` | 所选年 1~填报最大月;缺月补 **0**;无填报为空数组 | | 牦牛存栏结构 | `biz_yak_herd_inventory` | 与大屏 `yakInventoryStructure` 一致:所选年最大填报月公牛/母牛/保险及细分 | **默认年份**:进入看板时所选年为**当前自然年**(可切换)。 --- ## 3. 功能范围 **本期实现:** | 能力 | 说明 | | --- | --- | | 产业总览 | 六项指标卡片展示,见 **§5.2** | | 牦牛存栏变动 | 当前公、母牛数量 + 按月存栏趋势图,见 **§5.3** | | 牦牛存栏结构 | 双层饼图(内环公牛·母牛·保险牛,外环细分),与大屏一致,见 **§5.4** | | 草场类型占比 | 可用/使用中数量 + 退化等级数量与占比,见 **§5.5** | | 刷新 | 重新拉取并计算全页指标,见 **§5.1** | **本期不实现:** - 看板内指标的手工维护、阈值配置、报表导出、打印 - 点击指标跳转明细列表(若需下钻,另立需求) - 按牧场、区域、自定义时间段的筛选(见 **§8**) - 与第三方平台的独立同步入口(数据由各业务模块维护/同步后汇总) - 移动端独立看板(若需,另立需求) --- ## 4. 业务流程 ### 4.1 数据汇聚关系 ```mermaid flowchart TB subgraph sources [数据来源模块] A[牧场管理] G[草场管理] Y[牦牛资产档案管理] W[牦牛疾病预警] end subgraph board [养殖产业数据看板] O[产业总览] I[牦牛存栏变动] Age[牦牛存栏结构] Grass[草场类型占比] end A --> O G --> O G --> Grass Y --> O Y --> I Y --> Age W --> O ``` 各业务模块按各自需求维护台账或同步数据;本看板**不写入**业务库,仅读取汇总。 ### 4.2 用户使用路径 ```mermaid flowchart LR Enter[进入菜单] --> Load[自动加载全页指标] Load --> View[浏览四个功能区] View --> Refresh{需要最新数据?} Refresh -->|是| Reload[点击刷新] Reload --> View Refresh -->|否| Exit[离开页面] View --> Exit ``` 1. 授权用户从菜单进入「养殖产业数据」。 2. 系统按 **§2** 口径计算并展示四块内容;加载中显示统一加载态。 3. 用户阅读总览卡片与图表;必要时点击**刷新**更新。 4. 离开页面不保留编辑状态(无表单)。 --- ## 5. 详细功能需求 ### 5.1 页面通用规则 | 项 | 要求 | | --- | --- | | 布局 | 单页纵向滚动;四块标题:产业总览、牦牛存栏变动、牦牛存栏结构、草场类型占比 | | 年份 | 工具栏提供年份选择;**默认当前自然年**;切换后按所选年重算总览填报项、存栏变动、存栏结构(与大屏一致) | | 加载 | 首次进入全页加载;失败时给出明确提示,**不得**展示上一用户缓存数据冒充成功 | | 刷新 | 页面提供「刷新」按钮(位置与全局规范一致,如右上角工具栏);刷新中防重复点击;成功后更新全部指标与图表 | | 空数据 | 某模块无数据时,数字显示 **0** 或「—」,图表展示空态说明,不报错崩溃 | | 单位 | 界面须标注单位:头、个、亩、% 等,与 **§5.2~§5.5** 一致 | | 权限 | 仅**查询/查看**权限;无新增、编辑、删除操作 | ### 5.2 产业总览 以**指标卡片**形式横向排列六项(与原型一致),每项包含指标名称、数值、单位(名称旁或数值旁标注)。 | 序号 | 指标名称 | 单位 | 统计口径 | | --- | --- | --- | --- | | 1 | 牦牛存栏总量 | 头 | `biz_yak_herd_inventory.yak_total` 全县合计;**所选年最大填报月**;接口字段 **`inventoryTotal`** | | 2 | 牦牛年出栏量 | 头 | `biz_yak_outbound_report.yak_outbound_count` 全县合计;**所选年最大填报月**;接口字段 **`annualOutbound`** | | 3 | 预警牦牛数量 | 头 | **§2.5**(档案时点口径) | | 4 | 农牧户 | 户 | `biz_farmer_household.household_count` 全县合计;**所选年最大填报月**;接口字段 **`pastureCount`** | | 5 | 草场数量 | 个 | **§2.6**(台账块数) | | 6 | 草场面积 | 亩 | `biz_farmer_household.pasture_contract_area` 全县合计;**所选年最大填报月**;接口字段 **`grasslandAreaMu`** | **展示规则:** - 数值为非负整数(面积可为小数,保留位数与「草场管理」录入一致,默认最多 2 位小数)。 - 卡片仅展示,**本期**不提供点击跳转。 - 六项宜在同一屏首屏可见或略经滚动可见(以实现为准)。 ### 5.3 牦牛存栏变动 #### 5.3.1 当前性别结构(数字) 在趋势图上方展示两个指标(与原型一致): | 指标 | 单位 | 口径 | | --- | --- | --- | | 公牛数量 | 头 | `biz_yak_herd_inventory.bull_total` 全县合计;取**所选年最大填报月** | | 母牛数量 | 头 | `biz_yak_herd_inventory.cow_total` 全县合计;同上 | 接口另回传 `unknownGenderCount = max(0, yak−bull−cow)`(与大屏一致;页面可不展示)。 #### 5.3.2 存栏趋势(折线图) | 项 | 要求 | | --- | --- | | 图表类型 | 折线图(**公牛**、**母牛**两系列) | | 数据范围 | **所选年** 1~填报最大月(与大屏「牦牛存栏变动」一致);无填报为空 | | 横轴 | 按月刻度,**仅显示月份**;悬停展示 **YYYY年M月** | | 纵轴 | 存栏数量,单位 **头** | | 接口字段 | `monthlyTrend[]` 含 `statYear`、`month`、`bullCount`、`cowCount`;区间内缺月补 **0** | ### 5.4 牦牛存栏结构 | 项 | 要求 | | --- | --- | | 图表类型 | 双层饼图(内环大类、外环细分;与大屏「牦牛存栏结构」一致) | | 统计对象 | 存栏填报**所选年最大填报月**全县合计 | | 内环 | 公牛 / 母牛 / 保险牛 | | 外环 | 种公牛、公牛/阉畜、0~1.5岁、1.5岁以上、保险 | | 接口字段 | `yakInventoryStructure[]`(与大屏同结构) | | 默认年份 | **当前自然年** | | 展示 | 内环/外环均展示头数与占比(%);占比按牦牛总量(公牛+母牛+保险)计算 | ### 5.5 草场类型占比 本区上下两部分(与原型一致)。 #### 5.5.1 利用状态数量 | 指标 | 单位 | 口径 | | --- | --- | --- | | 可用草场 | 个 | **§2.7** | | 使用中草场 | 个 | **§2.7** | #### 5.5.2 退化等级分布 | 项 | 要求 | | --- | --- | | 图表 | 环形图 + 列表(或表格)并列展示,与原型一致 | | 维度 | 未退化、轻度、中度、重度、极重度 | | 列表列 | 至少包含:**退化等级名称**、**数量(个)**、**占比(%)** | | 占比 | **§2.8**;列表与图表数据一致 | | 合计 | 五档数量之和 = **§5.2** 草场数量(在统计范围一致的前提下) | --- ## 6. 与其他模块的关系 | 模块 | 关系 | | --- | --- | | 牧场管理 | 提供牧场数量;经营状态、逻辑删除规则影响是否计入 | | 草场管理 | 提供草场数量、面积、退化等级、利用类型、禁牧日期;驱动可用/使用中及退化占比 | | 牦牛资产档案管理 | 预警等仍关联档案;存栏变动/年龄已改填报表 **§2.11** | | 牦牛存栏数据填报 | 驱动总览存栏、公母数量、趋势、存栏结构 | | 牦牛出栏数据填报 | 驱动总览出栏、农牧户 | | 牦牛疾病预警 | 提供预警牦牛数量;周期与去重规则见 **§2.5**、该模块 **§5.6** | | 草畜平衡计算 | 本期看板**不展示**平衡指数;若后续纳入须修订本文档 | **依赖顺序(业务理解):** 看板数据正确性依赖各台账模块数据完整;档案未同步、草场未录入会导致对应指标偏低或为 0,界面**不**区分「真零」与「未录入」,必要时在 **§7** 用加载失败或运维提示说明。 --- ## 7. 权限与提示 ### 7.1 权限 | 操作 | 要求 | | --- | --- | | 查看看板 | 具备本模块菜单及查询权限 | | 刷新 | 与查看一致,或单独「刷新」权限(默认与查看合并) | | 维护业务数据 | 在各自业务模块进行,本模块无维护入口 | 数据权限规则见 **§2.9**;过滤后各指标仅统计纳入范围内的牧场、牦牛、草场与预警。 ### 7.2 提示场景 采用项目统一提示方式,**不约定**技术字段形态。 | 场景 | 提示方向(示例) | | --- | --- | | 加载成功 | 无打扰式展示数据;可选轻提示「数据已更新」 | | 加载失败 | 加载失败,请稍后重试 | | 刷新中 | 正在刷新… | | 无权限 | 无权限访问 | | 部分模块无数据 | 不单独弹窗;对应区域空态或 0 | --- ## 8. 非功能需求(建议) | 类别 | 建议 | | --- | --- | | 性能 | 全页汇总宜在可接受时间内完成(如 ≤5 秒,视数据量评审);大数据量时可分批渲染四块 | | 一致性 | 刷新后四块数据同一统计时点 | | 扩展 | 支持按牧场、乡镇、自定义年份筛选;支持导出 PNG/PDF | | 下钻 | 点击「预警牦牛数量」跳转预警列表并带筛选条件 | | 历史趋势 | 支持选择历年对比存栏曲线 | | 双语 | 界面 i18n(汉语 + 藏文) | --- ## 9. 相对草稿的修订说明 | 草稿问题 | 处理 | | --- | --- | | 缺页面结构、刷新与加载 | **§5.1**、**§4.2** | | 指标无统计口径 | **§2** 分节定义;**§5.2~§5.5** 引用 | | 存栏趋势「按月」未说明横轴与序列 | **§5.3.2**、**§2.11** 滚动 12 月;横轴仅月、悬停显年月 | | 年龄分档边界 | **§5.4** 母牛四档(与大屏一致) | | 草场可用/使用中含义模糊 | **§2.7** 与草场管理字段挂钩 | | 退化占比分母 | **§2.8** 有效草场总条数 | | 技术栈、code/msg/data | 已移除 | | 未写数据来源 | **§4.1**、**§6** | | 预警/出栏/性别等待定口径 | **§2.4~§2.5**、**§2.11**、**§5.3.1** 已固化为填报表 + 预警档案口径 | --- ## 10. 需求追溯 | 能力 | 章节 | | --- | --- | | 产业总览六项 | §5.2、§2.3~§2.6、§2.11 | | 公母牛数量 + 月趋势 | §5.3、§2.11 | | 牦牛存栏结构双层饼 | §5.4、§2.11 | | 草场可用/使用中 + 退化占比 | §5.5、§2.7、§2.8 | | 只读看板 | §3、§5.1 | --- ## 11. 修订记录 | 版本 | 日期 | 说明 | | --- | --- | --- | | 1.5 | 2026-07-24 | 原「年龄结构」改为「牦牛存栏结构」,与大屏 `yakInventoryStructure` 双层饼口径一致;默认当前年 | | 1.4 | 2026-07-24 | 产业总量/存栏变动/年龄与大屏按所选年对齐;默认当前年;农牧户与草场面积改农牧户填报 | | 1.3 | 2026-07-17 | 年龄结构改为母牛两档(0~1.5 / 1.5+),与存栏填报、大屏对齐 | | 1.2 | 2026-07-04 | 存栏变动/年龄/总览三项改填报表;滚动 12 月;母牛四档;与大屏对齐 | | 1.1 | (既有) | 总览存栏/出栏/农牧户改填报合计 |