# 有无畜户数据填报 — 技术方案

> 依据：同目录功能需求；模板 `baqing-admin/src/main/resources/templates/livestock_ownership_household_import_template.xlsx`。对齐牦牛出栏数据填报骨架。

## 1. 架构

Controller `/dataModel/livestockOwnershipHousehold` → Service → Mapper；Excel：`LivestockOwnershipHouseholdExcelParser` / `LivestockOwnershipHouseholdExcelExporter`；校验：`LivestockOwnershipHouseholdValidation`（村反推乡镇）。

## 2. 表 `biz_livestock_ownership_household`

唯一键 `uk_year_month_village (stat_year, stat_month, village_dept_id)`；含乡镇/村冗余及有畜户/无畜户计数字段。DDL：`sql/biz_livestock_ownership_household.sql`。

| 列（Excel 0-based） | 字段 |
| --- | --- |
| 1～2 | 乡镇、村居 |
| 3～6 | 有畜户：户数、人数、有劳力、牲畜数 |
| 7～9 | 无畜户：户数、人数、有劳力 |

主表头行含「乡镇/村居/有畜户」；次表头为其下指标名；**数据起始行 = 主表头行 + 2**。

## 3. 接口

| URI | 说明 |
| --- | --- |
| CRUD `/list` `/{id}` POST/PUT/DELETE | 常规；权限 `dataModel:livestockOwnershipHousehold:*` |
| `/yearOptions` `/monthOptions` `/townOptions` `/villageTree` | 选项 |
| `/importData` | 按唯一键 upsert；任一行失败整批不写 |
| `/importTemplate` | 下载模板 |
| `/export` | 按年月导出；可选 `townDeptId` |

## 4. 导入 / 导出

- 导入：系统选年月 → 解析 → 乡镇/村识别 → 非负校验 → upsert。
- 导出：改标题年月、填表人/时间；写村行；末行「合计」（合并序号～村列）。

## 5. 前端

详见同目录 **[有无畜户数据填报前端技术方案.md](./有无畜户数据填报前端技术方案.md)**。

- 页面：`ruoyi-ui/src/views/dataModel/livestockOwnershipHousehold/index.vue`
- API：`ruoyi-ui/src/api/dataModel/livestockOwnershipHousehold.js`
- 菜单组件：`dataModel/livestockOwnershipHousehold/index`
- i18n：`dataModel.livestockOwnershipHousehold`（zh/bo）

## 6. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版 |
| 1.1 | 补充前端技术方案链接 |
