# 牦牛出栏数据填报 — 测试用例

> 依据：`牦牛出栏数据填报功能需求.md`、`牦牛出栏数据填报技术方案.md`  
> **接口 Base Path**：`/dataModel/yakOutboundReport`  
> **模板**：`yak_outbound_report_import_template.xlsx` / 测试样例 `yak_outbound_report_2026.xlsx`

**通用前置**：已登录且具备模块权限；`sys_dept` 已导入乡镇与村。

---

## 一、单元测试用例（摘要）

| 用例编号 | 测试项 | 预期结果 |
| --- | --- | --- |
| ZCZX-MYCNCL-UT-001 | 年份选项 | 当年起前 5 年共 6 个 |
| ZCZX-MYCNCL-UT-003 | 缺村校验 | 抛异常 |
| ZCZX-MYCNCL-UT-004 | 负数拒绝 | 校验失败 |
| ZCZX-MYCNCL-UT-005 | 同年同月同村唯一 | 失败「该年该月该村已填报」 |
| ZCZX-MYCNCL-UT-006 | 新增成功 | 乡镇由村反推 |
| ZCZX-MYCNCL-UT-007～011 | 解析表头/村行/跳过合计 | 与新模板列一致 |
| ZCZX-MYCNCL-UT-013 | 导入全量覆盖 | `deleteByYearMonth` 后 insert |
| ZCZX-MYCNCL-UT-018 | 自食大于出栏 | 警告不阻断 |
| ZCZX-MYCNCL-UT-019 | 导出合计求和 | 合计行数值正确 |

---

## 二、接口测试用例（摘要）

| 用例编号 | 测试项 | 预期结果 |
| --- | --- | --- |
| ZCZX-MYCNCL-API-001 | 列表 | 返回明细字段（合计由前端算） |
| ZCZX-MYCNCL-API-003a | 按村筛选 | `villageDeptId` 精确 |
| ZCZX-MYCNCL-API-005 | 详情 | 含全部明细；乡镇/村齐全 |
| ZCZX-MYCNCL-API-006～009 | 新增 | 必填村；同村重复失败 |
| ZCZX-MYCNCL-API-013a | 村树 | `GET /villageTree` |
| ZCZX-MYCNCL-API-014～015 | 导入 | 全量覆盖；无有效行报错 |
| ZCZX-MYCNCL-API-021 | 导出 | 按年月 xlsx |

---

## 三、界面测试用例（摘要）

| 用例编号 | 测试项 | 预期结果 |
| --- | --- | --- |
| ZCZX-MYCNCL-UI-001 | 列表列 | 含年/月/乡镇/村/农牧户数/农牧人数/牦牛出栏/牲畜总出栏数/自食牛数/自食牲畜总数 |
| ZCZX-MYCNCL-UI-006 | 新增村树 | 仅可选村叶子 |
| ZCZX-MYCNCL-UI-007 | 新增表单 | 可填全部明细；**不出现**牲畜总出栏数、自食牲畜总数 |
| ZCZX-MYCNCL-UI-010 | 详情 | 全部明细 + 两项合计只读 |
| ZCZX-MYCNCL-UI-011 | 导入 | 全量覆盖成功摘要 |

---

## 四、覆盖对照

| 需求章节 | 要点 | 主要用例 |
| --- | --- | --- |
| §2.5 合计 | 不入库；列表/详情展示；表单不展示 | UI-001、007、010 |
| §5.1 列表 | 十数据列 | UI-001；API-001 |
| §5.2 新增修改 | 只选村；无合计输入 | UI-006～007 |
| §5.3 详情 | 明细+合计 | UI-010；API-005 |
| §5.4～5.5 导入导出 | 全量覆盖、合计行 | UT-013、019；API-014、021 |

---

## 五、修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0～1.x | 乡镇粒度、upsert、七列列表等历史版本 |
| 2.0 | 村粒度、全量覆盖、新模板列 |
| 2.1 | 列表十列含两项合计；新增/修改不展示合计；详情含合计 |
