西藏巴青项目

牦牛出栏数据填报功能需求.md 12KB

牦牛出栏数据填报 — 功能需求

1. 文档说明

说明
模块名称 牦牛出栏数据填报
目标 乡镇 × 所属年份填报、导入、维护县域农牧户牲畜出栏及自食统计数据,支撑养殖产业监管报表及历史年度对比
关联系统 业务后台(增删改查、Excel 导入);组织机构 sys_dept(乡镇字典)
修订依据 业务模板 牲畜数据.xlsx6 个 Sheet(如「2026年度农牧户牲畜出栏及自食情况统计表」,附表 5);用户填报诉求

本文档仅描述功能需求与业务规则,不涉及库表字段命名、接口路径、技术栈选型及实现细节(见同目录技术方案)。


2. 术语与统计口径

2.1 填报粒度

  • 一条记录表示:某一自然年、某一乡镇的牲畜出栏及自食汇总数据(不按村居拆行)。
  • 同一「所属年份 + 所属乡镇」在系统中仅允许一条记录(物理删除后可重新填报)。

2.2 所属年份

规则 说明
可选范围 当前自然年起向前共 6 个自然年(含当年),即「当年、前 1 年 … 前 5 年」
示例 若统计日为 2026 年,可选:2026、2025、2024、2023、2022、2021
展示 列表、表单、导入时均以四位年份展示与存储

2.3 所属乡镇

规则 说明
数据来源 sys_dept 组织树二级节点
纳入条件 parent_id 为县级根节点(与现有数据一致时为 100),且 order_num > 12,且 del_flag = '0'status = '0'
展示名 使用 sys_dept.dept_name(如「巴青乡」「杂色镇」等)
必填 新增、修改、导入时必须能解析到有效乡镇

本期乡镇名单与 sql/sys_dept_import_town.sql 一致(10 个乡镇/镇)。

2.4 出栏及自食指标含义

各数量字段均为非负整数,允许为空(未填报);若填写则 ≥ 0

业务字段 单位 说明
农牧户户数 纳入统计的农牧户数量
农牧户人数 纳入统计的农牧户人口数
牦牛出栏数 当年牦牛出栏合计
黄牛/奶牛/犏牛出栏数 黄牛、奶牛、犏牛出栏合计
绵羊出栏数 绵羊出栏合计
山羊出栏数 山羊出栏合计
马骡出栏数 马、骡出栏合计
驴出栏数 驴出栏合计
自食牛头数 其中自食情况 — 牛
自食绵羊只数 其中自食情况 — 绵羊
自食山羊只数 其中自食情况 — 山羊

说明:模板中「出栏小计(头只匹)」「自食小计」为汇总列,不入库;系统可按需在前端或导出时计算展示,不作为持久化字段。

交叉校验(建议,非阻断):自食牛/绵羊/山羊之和宜不超过对应出栏数;不一致时允许保存,导入结果可提示警告。


3. 功能范围

本期实现:

能力 说明
分页列表 按所属年份、所属乡镇筛选;见 §5.1
新增 手工填报一条乡镇年度数据;见 §5.2
修改 编辑已有记录;见 §5.3
删除 物理删除;见 §5.4
详情 查看指定展示字段;见 §5.5
Excel 导入 按模板批量导入指定填报年份下所有乡镇出栏数据;见 §5.6
Excel 导出 指定所属年份导出巴青县全部乡镇出栏数据;见 §5.7
乡镇下拉 sys_dept 动态加载合法乡镇;见 §5.2
年份下拉 当前年起向前 5 年;见 §2.2

本期不实现:

  • 按村居维度的多行填报、审批流、版本对比
  • 逻辑删除

4. 业务流程

flowchart TD
    A[选择所属年份] --> B{录入方式}
    B -->|手工| C[选择乡镇并填写指标]
    B -->|导入| D[上传 Excel 模板]
    B -->|导出| X[下载全县乡镇 Excel]
    C --> E[保存]
    D --> F[解析并匹配乡镇]
    F --> G{同年同乡镇是否存在}
    G -->|否| H[新增]
    G -->|是| I[更新覆盖]
    E --> J[列表查询/详情]
    H --> J
    I --> J
    X --> J

5. 详细功能需求

5.1 列表查询

筛选

条件 规则
所属年份 选填;精确匹配;下拉范围为 §2.2
所属乡镇 选填;精确匹配 dept_id

列表规则

  • 默认每页 20 条;排序:所属年份倒序,同年内按乡镇 order_num 升序(或乡镇名称拼音)。
  • 支持重置筛选。

列表展示列

列名 说明
所属年份 自然年
所属乡镇 town_name
农牧户户数
农牧户人数
牦牛出栏数
自食情况(牛) 自食牛头数(头)
操作 查看、修改、删除

5.2 新增

要求
必填 所属年份所属乡镇
选填 农牧户户数、农牧户人数、各出栏数、各自食数、备注
乡镇 下拉仅含 §2.3 合法乡镇
唯一性 同年同乡镇已存在记录时禁止新增,提示「该年份该乡镇已填报」
数字 选填项若填写须为非负整数

5.3 修改

要求
可改字段 除主键外均可改;所属年份、所属乡镇修改后仍须满足唯一性
必填 所属年份、所属乡镇保持必填
表单 展示 §2.4 全部可填指标(含黄牛/犏牛、绵羊、山羊、马骡、驴及自食绵羊/山羊等列表未展示字段)

5.4 删除

要求
方式 物理删除(记录从库中移除,不做逻辑删除
确认 删除前二次确认
效果 同年同乡镇可重新新增或导入

5.5 详情

要求
入口 列表「查看」
展示字段 所属年份所属乡镇农牧户户数农牧户人数牦牛出栏数自食情况(牛)(即自食牛头数)
模式 只读

列表未展示的出栏分项(黄牛/犏牛、绵羊、山羊等)通过「修改」入口维护;若业务需要详情页展示全部指标,可在实施阶段扩展,本期以用户指定 6 项为准


5.6 Excel 导入

要求
模板来源 牲畜数据.xlsx6 个 Sheet(年度出栏及自食统计表,如「那曲市巴青县2026年度农牧户牲畜出栏及自食情况统计表」)
填报年份 导入前用户必须选择「填报年份」(范围 §2.2);Sheet 标题中年份与所选年份不一致时,以用户所选填报年份为准写入 stat_year
解析范围 从数据区首行(乡镇列有值且为合法乡镇名)起,至「合计」行或乡镇为空的行结束;跳过标题、表头、填表单位等说明行
乡镇匹配 Excel「乡镇」列与 sys_dept.dept_name 精确匹配(trim 后);模板中若为「扎色镇」,宜按 §8 同义映射为「杂色镇」
唯一键 所属年份 + 所属乡镇(town_dept_id
合并策略 upsert:已存在 → 全量覆盖更新;不存在 → 新增
重复导入 允许对同一模板多次导入;已有乡镇行均为更新
结果反馈 返回 insertCountupdateCount、失败条数及失败明细(行号、乡镇、原因)
文件限制 .xlsx;大小上限与项目统一上传限制一致

模板列映射(第 6 个 Sheet,0-based 列号以实施对照模板冻结)

列号 Excel 列 表头(约) 映射字段
1 B 乡镇 所属乡镇
2 C 户数 农牧户户数
3 D 人数 农牧户人数
4 E 牦牛(头) 牦牛出栏数
5 F 黄牛、奶牛、犏牛(头) 黄牛/奶牛/犏牛出栏数
6 G 绵羊(只) 绵羊出栏数
7 H 山羊(只) 山羊出栏数
8 I 马骡(匹) 马骡出栏数
9 J 驴(头) 驴出栏数
10 K 小计(头只匹) 忽略(汇总列)
11 L 牛(头) 自食牛头数
12 M 绵羊(只) 自食绵羊只数
13 N 山羊(只) 自食山羊只数
14 O 自食小计 忽略(汇总列)
15 P 备注 remark

数据区起始行:表头含「乡镇」「户数」「牦牛(头)」的下一行(模板存在合并单元格,实施时按代码常量定位,参考 §8)。


5.7 Excel 导出

要求
入口 列表页「按年份导出」
导出年份 用户必须选择筛选条件中的「所属年份」(范围 §2.2);未选择时前端提示
导出范围 巴青县全部乡镇§2.3 合法乡镇,按 order_num 排序),不受「所属乡镇」筛选限制
模板 与导入共用:baqing-admin/src/main/resources/templates/yak_outbound_report_import_template.xlsx(业务源文件 牲畜数据.xlsx 第 6 Sheet)
填充规则 表头标题、表头「年牲畜出栏数」区块及 Sheet 页签中的年份均替换为所选年份;每个乡镇一行;有填报数据的乡镇填入全部指标;未填报乡镇仅保留乡镇名称,指标为空
合计行 数据区末行输出「合计」,对已填报乡镇的数值列求和;出栏小计(K 列)、自食小计(O 列)由分项加总后写入
文件格式 .xlsx;文件名示例:2026年牦牛出栏数据.xlsx
与导入关系 导出文件列结构与导入模板一致,可再次导入(同年将 upsert)

与「下载模板」区别:「下载模板」为空白模板;「按年份导出」为按库内数据填充后的全县报表。


6. 权限矩阵

操作 建议权限
列表查询 dataModel:yakOutboundReport:list
详情 dataModel:yakOutboundReport:query
新增 dataModel:yakOutboundReport:add
修改 dataModel:yakOutboundReport:edit
删除 dataModel:yakOutboundReport:remove
导入 dataModel:yakOutboundReport:import
导出 dataModel:yakOutboundReport:export

数据权限:县级管理员可见全县;乡镇账号仅可见本乡镇数据(若启用部门数据权限,按 town_dept_id 与登录用户 dept_id 过滤)。


7. 提示与错误约定

  • 必填项未填、年份/乡镇不合法、同年同乡镇重复新增
  • 导入:文件格式错误、乡镇无法匹配、数字非整数、行为空
  • 导出:未选年份、年份不在可选范围
  • 删除成功/失败、导入部分失败(展示明细)

采用项目统一 AjaxResult 文案风格。


8. 非功能需求(建议)

类别 建议
性能 列表分页;导入单次 ≤ 20 行(10 乡镇 + 合计行跳过)
审计 记录创建人、创建时间、更新人、更新时间
模板差异 业务源文件 牲畜数据.xlsx 第 6 Sheet 乡镇「扎色镇」与 sys_dept「杂色镇」同义,导入宜做别名映射
扩展 与「养殖产业数据」看板联动

9. 需求追溯

能力 章节
表字段与必填 §2、§5.2
年份向前 5 年 §2.2
乡镇 sys_dept §2.3
增删改查 §5.1~5.5
物理删除 §5.4
Excel 导入第 6 Sheet §5.6
Excel 按年份导出 §5.7
列表/详情字段 §5.1、§5.5

10. 修订记录

版本 说明
1.0 初稿:出栏及自食指标、乡镇年度填报、Excel 导入、物理删除
1.1 增加 §5.7 按年份导出 全县乡镇 Excel;权限 export