# 可支配收入数据填报 — 技术方案 ## 1. 接口 | 方法 | 路径 | 权限 | | --- | --- | --- | | GET | `/dataModel/disposableIncome/list` | list | | GET | `/dataModel/disposableIncome/{id}` | query | | POST | `/dataModel/disposableIncome` | add | | PUT | `/dataModel/disposableIncome` | edit | | DELETE | `/dataModel/disposableIncome/{ids}` | remove | | GET | `/dataModel/disposableIncome/yearOptions` | list | 年份选项:与存栏等模块一致,当前年起向前 5 年共 6 个(`YakHerdInventoryYearSupport`)。 --- ## 2. 表结构 表名:`biz_disposable_income`(见 `sql/biz_disposable_income.sql`) | 字段 | 说明 | | --- | --- | | stat_year | 所属年份,唯一 | | rural_disposable_income | 农村居民人均可支配收入(元) | | income_increase | 增幅(元),可选可空 | | income_growth_rate | 增速(百分数值,如 12.28),可选可空 | | poverty_net_income | 脱贫人口人均纯收入(元) | | remark | 备注 | --- ## 3. 增幅 / 增速计算 实现:`DisposableIncomeGrowthSupport`、`BizDisposableIncomeServiceImpl.applyGrowthForSave` | 场景 | 行为 | | --- | --- | | 新增,增幅/增速未填 | `fillMissingGrowth`:有上年则补齐 | | 修改,年份与可支配收入未变 | `fillMissingGrowth`:仅补齐未填项,保留手工值 | | 修改,年份或可支配收入变更 | `recalculateGrowth`:清空后按公式强制重算 | | 无上年 / 上年可支配收入为 0 | 增幅可算则写入;增速在除零场景保持 `null` | 公式: - 增幅 = 本年 `rural_disposable_income` − 上年同字段 - 增速 = (增幅 ÷ 上年 `rural_disposable_income`) × 100,保留 2 位小数 --- ## 4. 后端要点 | 项 | 路径 | | --- | --- | | Domain | `BizDisposableIncome` | | Mapper | `BizDisposableIncomeMapper` / XML | | Service | `IBizDisposableIncomeService` / `BizDisposableIncomeServiceImpl` | | Controller | `BizDisposableIncomeController` → `/dataModel/disposableIncome` | | 校验 | `DisposableIncomeValidation` | | 单元测试 | `DisposableIncomeGrowthSupportTest`、`DisposableIncomeValidationTest` | --- ## 5. 前端 | 项 | 说明 | | --- | --- | | 页面 | `ruoyi-ui/src/views/dataModel/disposableIncome/index.vue` | | API | `ruoyi-ui/src/api/dataModel/disposableIncome.js` | | i18n | `ruoyi-ui/src/lang/zh/dataModel.js`、`bo/dataModel.js` → `disposableIncome` | | 菜单组件路径 | `dataModel/disposableIncome/index` | | 增幅/增速表单 | 普通输入框(支持空值);提交空 → `null`,避免 `el-input-number` 把 null 显示/提交成 0 | | 改年份或可支配收入 | 前端清空增幅/增速,后端强制重算 | | 列表 / 详情展示 | `formatIncrease` / `formatGrowthRate`:库中 `null` 显示为 `0.00` / `0.00%` |