# 牦牛出栏数据填报 — 技术方案 > 依据:同目录功能需求;模板 `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` | 按唯一键 upsert(存在更新 / 不存在插入) | | `/export` | 按年月导出;可选 `townDeptId`,不传则全部乡镇 | ### Excel 列(0-based) | 列 | 字段 | | --- | --- | | 1~2 | 乡镇、村 | | 3~4 | 户数、人数 | | 5~10 | 六类出栏 | | 11 | 出栏合计(导出算) | | 12~14 | 自食牛/绵羊/山羊 | | 15 | 自食合计(导出算) | 数据起始行:`headerRow + 1`。 ## 4. 前端合计 | 字段 | 计算 | 使用处 | | --- | --- | --- | | 牲畜总出栏数 | 六类出栏 sum | 列表列、详情只读 | | 自食牲畜总数 | 三类自食 sum | 列表列、详情只读 | 新增/修改表单**不渲染**上述两项。 ## 5. 导入 / 导出 - 导入:校验全部成功 → 按 `(年,月,村)` 存在 `update`、不存在 `insert`。 - 导出:写村行 + 行内小计;合计行合并 0~2 列;自户数起求和。 ## 6. 大屏 地图乡镇标注对填报表按 `town_dept_id` **聚合 sum** 后再关联。 ## 8. 修订记录 | 版本 | 说明 | | --- | --- | | 2.0 | 村粒度全量覆盖;列映射对齐交接模板;大屏按乡镇聚合 | | 2.1 | 列表/详情合计字段口径;新增修改不展示合计 | | 2.2 | 导入改为 upsert;导出增加可选乡镇筛选 |