# 牦牛出栏数据填报 — 技术方案 > 依据:同目录功能需求;模板 `baqing-admin/src/main/resources/templates/yak_outbound_report_import_template.xlsx`。 ## 1. 架构 Controller `/dataModel/yakOutboundReport` → Service → Mapper;Excel:`YakOutboundReportExcelParser` / `YakOutboundReportExcelExporter`;校验:`YakOutboundReportValidation`(村反推乡镇)。 ## 2. 表 `biz_yak_outbound_report` 唯一键 `uk_year_month_village (stat_year, stat_month, village_dept_id)`;含 `town_*`、`village_*` 及出栏/自食明细字段。DDL:`sql/biz_yak_outbound_report.sql`(`DROP` 全量重建)。 ## 3. 接口 | URI | 说明 | | --- | --- | | CRUD `/list` `/{id}` POST/PUT/DELETE | 同常规 | | `/villageTree` | 县→乡镇→村 | | `/importData` | 年月全量覆盖 | | `/export` | 按年月导出已填报村数据 | ### Excel 列(0-based) | 列 | 字段 | | --- | --- | | 1~2 | 乡镇、村 | | 3~4 | 户数、人数 | | 5~10 | 六类出栏 | | 11 | 出栏合计(导出算) | | 12~14 | 自食牛/绵羊/山羊 | | 15 | 自食合计(导出算) | 数据起始行:`headerRow + 1`(表头为含「乡镇」「村」「户数」「牦牛」的行)。 ## 4. 导入 / 导出 - 导入:校验全部成功 → `deleteByYearMonth` → 批量 insert。 - 导出:写村行 + 行内小计;合计行合并 0~2 列;自户数起求和;标题年/月与填表人/填表时间更新。 ## 5. 大屏 地图乡镇标注对 `biz_yak_outbound_report` / `biz_yak_herd_inventory` 按 `town_dept_id` **聚合 sum** 后再关联。 ## 8. 修订记录 | 版本 | 说明 | | --- | --- | | 2.0 | 村粒度全量覆盖;列映射对齐交接模板;大屏按乡镇聚合 |