Bläddra i källkod

可支配收入数据填报

wwh 2 veckor sedan
förälder
incheckning
41489190ae

+ 2 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/industryservice/domain/BizDisposableIncome.java

@@ -22,10 +22,10 @@ public class BizDisposableIncome extends BaseEntity
22 22
     /** 脱贫人口人均纯收入(元) */
23 23
     private BigDecimal povertyNetIncome;
24 24
 
25
-    /** 增幅(元)= 本年可支配收入 - 上年可支配收入,非落库 */
25
+    /** 增幅(元),可选;公式=本年可支配收入-上年可支配收入 */
26 26
     private BigDecimal incomeIncrease;
27 27
 
28
-    /** 增速 = 增幅 / 上年可支配收入,非落库 */
28
+    /** 增速,可选;公式=增幅/上年可支配收入 */
29 29
     private BigDecimal incomeGrowthRate;
30 30
 
31 31
     public Long getId()

+ 7 - 14
baqing-admin/src/main/java/com/ruoyi/web/modules/industryservice/service/impl/BizDisposableIncomeServiceImpl.java

@@ -25,23 +25,13 @@ public class BizDisposableIncomeServiceImpl implements IBizDisposableIncomeServi
25 25
     @Override
26 26
     public BizDisposableIncome selectBizDisposableIncomeById(Long id)
27 27
     {
28
-        BizDisposableIncome row = bizDisposableIncomeMapper.selectBizDisposableIncomeById(id);
29
-        fillGrowth(row);
30
-        return row;
28
+        return bizDisposableIncomeMapper.selectBizDisposableIncomeById(id);
31 29
     }
32 30
 
33 31
     @Override
34 32
     public List<BizDisposableIncome> selectBizDisposableIncomeList(BizDisposableIncome query)
35 33
     {
36
-        List<BizDisposableIncome> list = bizDisposableIncomeMapper.selectBizDisposableIncomeList(query);
37
-        if (list != null)
38
-        {
39
-            for (BizDisposableIncome row : list)
40
-            {
41
-                fillGrowth(row);
42
-            }
43
-        }
44
-        return list;
34
+        return bizDisposableIncomeMapper.selectBizDisposableIncomeList(query);
45 35
     }
46 36
 
47 37
     @Override
@@ -50,6 +40,7 @@ public class BizDisposableIncomeServiceImpl implements IBizDisposableIncomeServi
50 40
     {
51 41
         DisposableIncomeValidation.validateRowForSave(row);
52 42
         assertUniqueYear(row.getStatYear(), null);
43
+        applyMissingGrowth(row);
53 44
         return bizDisposableIncomeMapper.insertBizDisposableIncome(row);
54 45
     }
55 46
 
@@ -64,6 +55,7 @@ public class BizDisposableIncomeServiceImpl implements IBizDisposableIncomeServi
64 55
         DisposableIncomeValidation.validateRowForSave(row);
65 56
         requireExistingRow(row.getId());
66 57
         assertUniqueYear(row.getStatYear(), row.getId());
58
+        applyMissingGrowth(row);
67 59
         return bizDisposableIncomeMapper.updateBizDisposableIncome(row);
68 60
     }
69 61
 
@@ -96,14 +88,15 @@ public class BizDisposableIncomeServiceImpl implements IBizDisposableIncomeServi
96 88
         return YakHerdInventoryYearSupport.resolveYearOptions();
97 89
     }
98 90
 
99
-    private void fillGrowth(BizDisposableIncome row)
91
+    /** 增幅、增速未填时,按上年可支配收入公式补齐 */
92
+    private void applyMissingGrowth(BizDisposableIncome row)
100 93
     {
101 94
         if (row == null || row.getStatYear() == null)
102 95
         {
103 96
             return;
104 97
         }
105 98
         BizDisposableIncome previous = bizDisposableIncomeMapper.selectByStatYear(row.getStatYear() - 1);
106
-        DisposableIncomeGrowthSupport.fillGrowth(row, previous);
99
+        DisposableIncomeGrowthSupport.fillMissingGrowth(row, previous);
107 100
     }
108 101
 
109 102
     private void assertUniqueYear(Integer statYear, Long excludeId)

+ 18 - 9
baqing-admin/src/main/java/com/ruoyi/web/modules/industryservice/support/DisposableIncomeGrowthSupport.java

@@ -5,24 +5,27 @@ import java.math.RoundingMode;
5 5
 import com.ruoyi.web.modules.industryservice.domain.BizDisposableIncome;
6 6
 
7 7
 /**
8
- * 可支配收入增幅、增速计算:增幅=本年-上年;增速=增幅/上年
8
+ * 可支配收入增幅、增速:可选填;未填时按公式补齐。
9
+ * 增幅 = 本年人均可支配收入 - 上年人均可支配收入;
10
+ * 增速 = 增幅 / 上年人均可支配收入。
9 11
  */
10 12
 public final class DisposableIncomeGrowthSupport
11 13
 {
12
-    private static final int RATE_SCALE = 4;
14
+    private static final int RATE_SCALE = 6;
13 15
 
14 16
     private DisposableIncomeGrowthSupport()
15 17
     {
16 18
     }
17 19
 
18
-    public static void fillGrowth(BizDisposableIncome current, BizDisposableIncome previousYear)
20
+    /**
21
+     * 仅对未填写的增幅、增速按上年数据补齐;已填写的保留。
22
+     */
23
+    public static void fillMissingGrowth(BizDisposableIncome current, BizDisposableIncome previousYear)
19 24
     {
20 25
         if (current == null)
21 26
         {
22 27
             return;
23 28
         }
24
-        current.setIncomeIncrease(null);
25
-        current.setIncomeGrowthRate(null);
26 29
         if (current.getRuralDisposableIncome() == null || previousYear == null
27 30
                 || previousYear.getRuralDisposableIncome() == null)
28 31
         {
@@ -30,11 +33,17 @@ public final class DisposableIncomeGrowthSupport
30 33
         }
31 34
         BigDecimal prev = previousYear.getRuralDisposableIncome();
32 35
         BigDecimal increase = current.getRuralDisposableIncome().subtract(prev);
33
-        current.setIncomeIncrease(increase);
34
-        if (prev.compareTo(BigDecimal.ZERO) == 0)
36
+        if (current.getIncomeIncrease() == null)
35 37
         {
36
-            return;
38
+            current.setIncomeIncrease(increase);
39
+        }
40
+        if (current.getIncomeGrowthRate() == null)
41
+        {
42
+            BigDecimal usedIncrease = current.getIncomeIncrease() != null ? current.getIncomeIncrease() : increase;
43
+            if (prev.compareTo(BigDecimal.ZERO) != 0)
44
+            {
45
+                current.setIncomeGrowthRate(usedIncrease.divide(prev, RATE_SCALE, RoundingMode.HALF_UP));
46
+            }
37 47
         }
38
-        current.setIncomeGrowthRate(increase.divide(prev, RATE_SCALE, RoundingMode.HALF_UP));
39 48
     }
40 49
 }

+ 1 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/industryservice/support/DisposableIncomeValidation.java

@@ -44,6 +44,7 @@ public final class DisposableIncomeValidation
44 44
         {
45 45
             throw new ServiceException("脱贫人口人均纯收入不能为负数");
46 46
         }
47
+        // 增幅、增速可选填,无额外必填约束
47 48
         if (StringUtils.isNotEmpty(row.getRemark()) && row.getRemark().length() > 500)
48 49
         {
49 50
             throw new ServiceException("备注不能超过500字");

+ 10 - 3
baqing-admin/src/main/resources/mapper/industryservice/BizDisposableIncomeMapper.xml

@@ -6,6 +6,8 @@
6 6
         <id property="id" column="id"/>
7 7
         <result property="statYear" column="stat_year"/>
8 8
         <result property="ruralDisposableIncome" column="rural_disposable_income"/>
9
+        <result property="incomeIncrease" column="income_increase"/>
10
+        <result property="incomeGrowthRate" column="income_growth_rate"/>
9 11
         <result property="povertyNetIncome" column="poverty_net_income"/>
10 12
         <result property="createBy" column="create_by"/>
11 13
         <result property="createTime" column="create_time"/>
@@ -15,7 +17,8 @@
15 17
     </resultMap>
16 18
 
17 19
     <sql id="selectVo">
18
-        select r.id, r.stat_year, r.rural_disposable_income, r.poverty_net_income,
20
+        select r.id, r.stat_year, r.rural_disposable_income, r.income_increase, r.income_growth_rate,
21
+               r.poverty_net_income,
19 22
                r.create_by, r.create_time, r.update_by, r.update_time, r.remark
20 23
         from biz_disposable_income r
21 24
     </sql>
@@ -49,9 +52,11 @@
49 52
     <insert id="insertBizDisposableIncome" parameterType="com.ruoyi.web.modules.industryservice.domain.BizDisposableIncome"
50 53
             useGeneratedKeys="true" keyProperty="id">
51 54
         insert into biz_disposable_income (
52
-            stat_year, rural_disposable_income, poverty_net_income, create_by, create_time, remark
55
+            stat_year, rural_disposable_income, income_increase, income_growth_rate, poverty_net_income,
56
+            create_by, create_time, remark
53 57
         ) values (
54
-            #{statYear}, #{ruralDisposableIncome}, #{povertyNetIncome}, #{createBy}, sysdate(), #{remark}
58
+            #{statYear}, #{ruralDisposableIncome}, #{incomeIncrease}, #{incomeGrowthRate}, #{povertyNetIncome},
59
+            #{createBy}, sysdate(), #{remark}
55 60
         )
56 61
     </insert>
57 62
 
@@ -59,6 +64,8 @@
59 64
         update biz_disposable_income set
60 65
             stat_year = #{statYear},
61 66
             rural_disposable_income = #{ruralDisposableIncome},
67
+            income_increase = #{incomeIncrease},
68
+            income_growth_rate = #{incomeGrowthRate},
62 69
             poverty_net_income = #{povertyNetIncome},
63 70
             update_by = #{updateBy},
64 71
             update_time = sysdate(),

+ 35 - 10
baqing-admin/src/test/java/com/ruoyi/web/modules/industryservice/support/DisposableIncomeGrowthSupportTest.java

@@ -12,33 +12,58 @@ import com.ruoyi.web.modules.industryservice.domain.BizDisposableIncome;
12 12
 class DisposableIncomeGrowthSupportTest
13 13
 {
14 14
     @Test
15
-    @DisplayName("有上年数据时计算增幅与增速")
16
-    void fillGrowthWithPrevious()
15
+    @DisplayName("未填时按公式补齐增幅与增速")
16
+    void fillMissingWhenEmpty()
17 17
     {
18 18
         BizDisposableIncome current = row(2020, "13346");
19 19
         BizDisposableIncome previous = row(2019, "11886");
20
-        DisposableIncomeGrowthSupport.fillGrowth(current, previous);
20
+        DisposableIncomeGrowthSupport.fillMissingGrowth(current, previous);
21
+        assertEquals(0, new BigDecimal("1460").compareTo(current.getIncomeIncrease()));
22
+        assertEquals(0, new BigDecimal("0.122834").compareTo(current.getIncomeGrowthRate()));
23
+    }
24
+
25
+    @Test
26
+    @DisplayName("已填写时保留手工值")
27
+    void keepManualValues()
28
+    {
29
+        BizDisposableIncome current = row(2020, "13346");
30
+        current.setIncomeIncrease(new BigDecimal("1000"));
31
+        current.setIncomeGrowthRate(new BigDecimal("0.0800"));
32
+        BizDisposableIncome previous = row(2019, "11886");
33
+        DisposableIncomeGrowthSupport.fillMissingGrowth(current, previous);
34
+        assertEquals(new BigDecimal("1000"), current.getIncomeIncrease());
35
+        assertEquals(new BigDecimal("0.0800"), current.getIncomeGrowthRate());
36
+    }
37
+
38
+    @Test
39
+    @DisplayName("仅缺增速时用已填增幅计算")
40
+    void fillRateFromManualIncrease()
41
+    {
42
+        BizDisposableIncome current = row(2020, "13346");
43
+        current.setIncomeIncrease(new BigDecimal("1460"));
44
+        BizDisposableIncome previous = row(2019, "11886");
45
+        DisposableIncomeGrowthSupport.fillMissingGrowth(current, previous);
21 46
         assertEquals(new BigDecimal("1460"), current.getIncomeIncrease());
22
-        assertEquals(new BigDecimal("0.1228"), current.getIncomeGrowthRate());
47
+        assertEquals(0, new BigDecimal("0.122834").compareTo(current.getIncomeGrowthRate()));
23 48
     }
24 49
 
25 50
     @Test
26
-    @DisplayName("无上年数据时增幅增速为空")
27
-    void fillGrowthWithoutPrevious()
51
+    @DisplayName("无上年数据时不补齐")
52
+    void noPreviousKeepsNull()
28 53
     {
29 54
         BizDisposableIncome current = row(2019, "11886");
30
-        DisposableIncomeGrowthSupport.fillGrowth(current, null);
55
+        DisposableIncomeGrowthSupport.fillMissingGrowth(current, null);
31 56
         assertNull(current.getIncomeIncrease());
32 57
         assertNull(current.getIncomeGrowthRate());
33 58
     }
34 59
 
35 60
     @Test
36
-    @DisplayName("上年可支配收入为0时仅填增幅")
37
-    void fillGrowthWhenPreviousZero()
61
+    @DisplayName("上年可支配收入为0时仅补齐增幅")
62
+    void previousZeroOnlyIncrease()
38 63
     {
39 64
         BizDisposableIncome current = row(2021, "100");
40 65
         BizDisposableIncome previous = row(2020, "0");
41
-        DisposableIncomeGrowthSupport.fillGrowth(current, previous);
66
+        DisposableIncomeGrowthSupport.fillMissingGrowth(current, previous);
42 67
         assertEquals(new BigDecimal("100"), current.getIncomeIncrease());
43 68
         assertNull(current.getIncomeGrowthRate());
44 69
     }

+ 9 - 5
doc/产业数据模型及服务/可支配收入数据填报/可支配收入数据填报功能需求.md

@@ -5,7 +5,7 @@
5 5
 | 项 | 说明 |
6 6
 | --- | --- |
7 7
 | 模块名称 | 可支配收入数据填报 |
8
-| 目标 | 按**所属年份**登记农村居民人均可支配收入、脱贫人口人均纯收入;列表展示增幅与增速 |
8
+| 目标 | 按**所属年份**登记农村居民人均可支配收入、脱贫人口人均纯收入;增幅/增速可选填 |
9 9
 | 关联系统 | 业务后台 |
10 10
 | 修订依据 | 交接表 `可支配收入数据填报.xlsx` |
11 11
 
@@ -15,7 +15,10 @@
15 15
 
16 16
 - 一条记录:某一自然年的县级收入快照(无乡镇/村维度)。
17 17
 - 唯一键:所属年份。
18
-- 增幅、增速不落库:增幅 = 本年可支配收入 − 上年可支配收入;增速 = 增幅 / 上年可支配收入。
18
+- **增幅、增速可选填并落库**:
19
+  - 增幅 = 人均可支配收入 − 去年人均可支配收入
20
+  - 增速 = 增幅 / 去年人均可支配收入
21
+  - 保存时若未填且存在上年数据,按公式自动补齐;已填则保留手工值。
19 22
 - 无导入 / 导出。
20 23
 
21 24
 ---
@@ -25,8 +28,8 @@
25 28
 | 能力 | 说明 |
26 29
 | --- | --- |
27 30
 | 分页列表 | 筛选:所属年份;列:年份、农村居民人均可支配收入、增幅、增速、脱贫人口人均纯收入 |
28
-| 新增 / 修改 | 年份、人均可支配收入、人均纯收入、备注;新增默认本年 |
29
-| 详情 | 全部字段含增幅、增速 |
31
+| 新增 / 修改 | 年份、人均可支配收入、增幅(选填)、增速(选填)、人均纯收入、备注;新增默认本年 |
32
+| 详情 | 全部字段 |
30 33
 | 删除 | 物理删除 |
31 34
 
32 35
 ---
@@ -41,4 +44,5 @@
41 44
 
42 45
 | 版本 | 说明 |
43 46
 | --- | --- |
44
-| 1.0 | 首版:县级年度 CRUD;增幅/增速计算展示 |
47
+| 1.0 | 首版:县级年度 CRUD |
48
+| 1.1 | 增幅、增速改为可选填落库;未填按公式补齐 |

+ 2 - 2
doc/产业数据模型及服务/可支配收入数据填报/可支配收入数据填报技术方案.md

@@ -19,11 +19,11 @@
19 19
 | --- | --- |
20 20
 | stat_year | 所属年份,唯一 |
21 21
 | rural_disposable_income | 农村居民人均可支配收入(元) |
22
+| income_increase | 增幅(元),可选;未填时=本年−上年 |
23
+| income_growth_rate | 增速,可选;未填时=增幅/上年 |
22 24
 | poverty_net_income | 脱贫人口人均纯收入(元) |
23 25
 | remark | 备注 |
24 26
 
25
-非落库:`incomeIncrease`、`incomeGrowthRate`(列表/详情按上年记录计算)。
26
-
27 27
 ## 3. 前端
28 28
 
29 29
 - 页面:`ruoyi-ui/src/views/dataModel/disposableIncome/index.vue`

+ 16 - 12
doc/产业数据模型及服务/可支配收入数据填报/可支配收入数据填报测试用例.md

@@ -12,14 +12,15 @@
12 12
 
13 13
 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
14 14
 | --- | --- | --- | --- | --- | --- | --- | --- | --- |
15
-| ZCZX-KZPMSR-UT-001 | 增幅增速 | 有上年数据 | 单元测试 | JUnit5 | 计算逻辑 | 本年 13346、上年 11886 | `DisposableIncomeGrowthSupport.fillGrowth` | 增幅=1460;增速≈0.1228 |
16
-| ZCZX-KZPMSR-UT-002 | 增幅增速 | 无上年数据 | 单元测试 | JUnit5 | 首年无对比 | previous=null | `fillGrowth` | 增幅、增速均为 null |
17
-| ZCZX-KZPMSR-UT-003 | 增幅增速 | 上年为 0 | 单元测试 | JUnit5 | 除零保护 | 上年可支配收入=0 | `fillGrowth` | 增幅有值;增速为 null |
18
-| ZCZX-KZPMSR-UT-004 | 校验 | 必填年份 | 单元测试 | JUnit5 | 保存校验 | 缺 `statYear` | `validateRowForSave` | 抛 `ServiceException` |
19
-| ZCZX-KZPMSR-UT-005 | 校验 | 非法年份 | 单元测试 | JUnit5 | 年份范围 | `statYear=1999` | `validateRowForSave` | 抛「所属年份不在可选范围内」 |
20
-| ZCZX-KZPMSR-UT-006 | 校验 | 负收入拒绝 | 单元测试 | JUnit5 | 非负约束 | 可支配收入=-1 | `validateRowForSave` | 抛 `ServiceException` |
21
-| ZCZX-KZPMSR-UT-007 | 校验 | 备注超长 | 单元测试 | JUnit5 | 长度限制 | remark 长度>500 | `validateRowForSave` | 抛「备注不能超过500字」 |
22
-| ZCZX-KZPMSR-UT-008 | 校验 | 合法保存 | 单元测试 | JUnit5 | 正向 | 本年合法数据 | `validateRowForSave` | 不抛异常 |
15
+| ZCZX-KZPMSR-UT-001 | 增幅增速 | 未填时按公式补齐 | 单元测试 | JUnit5 | 可选填+公式 | 本年 13346、上年 11886 | `fillMissingGrowth` | 增幅=1460;增速≈0.1228 |
16
+| ZCZX-KZPMSR-UT-002 | 增幅增速 | 已填保留手工值 | 单元测试 | JUnit5 | 不覆盖 | 已填增幅/增速 | `fillMissingGrowth` | 仍为手工值 |
17
+| ZCZX-KZPMSR-UT-003 | 增幅增速 | 无上年数据 | 单元测试 | JUnit5 | 首年 | previous=null | `fillMissingGrowth` | 增幅、增速仍为 null |
18
+| ZCZX-KZPMSR-UT-004 | 增幅增速 | 上年为 0 | 单元测试 | JUnit5 | 除零保护 | 上年可支配收入=0 | `fillMissingGrowth` | 仅补齐增幅;增速仍 null |
19
+| ZCZX-KZPMSR-UT-005 | 校验 | 必填年份 | 单元测试 | JUnit5 | 保存校验 | 缺 `statYear` | `validateRowForSave` | 抛 `ServiceException` |
20
+| ZCZX-KZPMSR-UT-006 | 校验 | 非法年份 | 单元测试 | JUnit5 | 年份范围 | `statYear=1999` | `validateRowForSave` | 抛「所属年份不在可选范围内」 |
21
+| ZCZX-KZPMSR-UT-007 | 校验 | 负收入拒绝 | 单元测试 | JUnit5 | 非负约束 | 可支配收入=-1 | `validateRowForSave` | 抛 `ServiceException` |
22
+| ZCZX-KZPMSR-UT-008 | 校验 | 备注超长 | 单元测试 | JUnit5 | 长度限制 | remark 长度>500 | `validateRowForSave` | 抛「备注不能超过500字」 |
23
+| ZCZX-KZPMSR-UT-009 | 校验 | 合法保存 | 单元测试 | JUnit5 | 正向 | 本年合法数据 | `validateRowForSave` | 不抛异常 |
23 24
 
24 25
 对应代码:`DisposableIncomeGrowthSupportTest`、`DisposableIncomeValidationTest`
25 26
 
@@ -31,9 +32,10 @@
31 32
 | --- | --- | --- | --- | --- | --- | --- | --- | --- |
32 33
 | ZCZX-KZPMSR-API-001 | 列表 | 默认分页 | 接口测试 | Postman | 列表 | 有样本 | `GET /list` | `code=200`;含年份、可支配收入、增幅、增速、人均纯收入 |
33 34
 | ZCZX-KZPMSR-API-002 | 列表 | 按年份筛选 | 接口测试 | Postman | 搜索 | 多年数据 | `statYear=2025` | 仅 2025 |
34
-| ZCZX-KZPMSR-API-003 | 列表 | 增幅增速回填 | 接口测试 | Postman | 计算展示 | 连续两年有数据 | `GET /list` | 较新年份带增幅、增速;最早年可为空 |
35
+| ZCZX-KZPMSR-API-003 | 列表 | 展示落库增幅增速 | 接口测试 | Postman | 落库展示 | 记录已含增幅增速 | `GET /list` | 返回库中增幅、增速 |
35 36
 | ZCZX-KZPMSR-API-004 | 详情 | 全字段 | 接口测试 | Postman | 详情 | 有效 id | `GET /{id}` | 含收入字段与增幅、增速 |
36
-| ZCZX-KZPMSR-API-005 | 新增 | 必填成功 | 接口测试 | Postman | 新增 | 该年无记录 | `POST` 含年份+两项收入 | 成功 |
37
+| ZCZX-KZPMSR-API-005 | 新增 | 必填成功 | 接口测试 | Postman | 新增 | 该年无记录 | `POST` 含年份+两项收入 | 成功;有上年时自动补增幅增速 |
38
+| ZCZX-KZPMSR-API-005a | 新增 | 手工填增幅增速 | 接口测试 | Postman | 可选填 | 有上年 | `POST` 同时传自定义增幅增速 | 成功;保留手工值 |
37 39
 | ZCZX-KZPMSR-API-006 | 新增 | 缺年份 | 接口测试 | Postman | 校验 | 已登录 | 缺 `statYear` | 失败 |
38 40
 | ZCZX-KZPMSR-API-007 | 新增 | 缺可支配收入 | 接口测试 | Postman | 校验 | 已登录 | 缺 `ruralDisposableIncome` | 失败 |
39 41
 | ZCZX-KZPMSR-API-008 | 新增 | 重复年份 | 接口测试 | Postman | 唯一键 | 已有同年记录 | 再 `POST` 同年 | 失败「该年份数据已存在」 |
@@ -55,8 +57,9 @@
55 57
 | --- | --- | --- | --- | --- | --- | --- | --- | --- |
56 58
 | ZCZX-KZPMSR-UI-001 | 列表 | 列展示 | 界面测试 | Chrome | 列表 | 有数据 | 打开页面 | 显示年份、可支配收入、增幅、增速、人均纯收入 |
57 59
 | ZCZX-KZPMSR-UI-002 | 列表 | 年份筛选 | 界面测试 | Chrome | 搜索 | 有多年数据 | 选年份→搜索 | 仅该年 |
58
-| ZCZX-KZPMSR-UI-003 | 新增 | 默认本年 | 界面测试 | Chrome | 默认值 | 已登录 | 点新增 | 年份默认当前年 |
59
-| ZCZX-KZPMSR-UI-004 | 新增 | 保存成功 | 界面测试 | Chrome | 新增 | 该年无数据 | 填两项收入→确定 | 提示成功;列表出现 |
60
+| ZCZX-KZPMSR-UI-003 | 新增 | 默认本年 | 界面测试 | Chrome | 默认值 | 已登录 | 点新增 | 年份默认当前年;增幅、增速可空 |
61
+| ZCZX-KZPMSR-UI-004 | 新增 | 保存成功 | 界面测试 | Chrome | 新增 | 该年无数据 | 填两项收入→确定 | 提示成功;有上年则列表显示自动增幅增速 |
62
+| ZCZX-KZPMSR-UI-004a | 新增 | 手工填增幅增速 | 界面测试 | Chrome | 可选填 | 已登录 | 填写增幅、增速后保存 | 列表展示手工值 |
60 63
 | ZCZX-KZPMSR-UI-005 | 新增 | 必填校验 | 界面测试 | Chrome | 校验 | 打开新增 | 不填收入直接确定 | 表单校验提示 |
61 64
 | ZCZX-KZPMSR-UI-006 | 详情 | 只读含增幅增速 | 界面测试 | Chrome | 详情 | 有上年数据 | 点查看 | 展示增幅、增速(百分比) |
62 65
 | ZCZX-KZPMSR-UI-007 | 修改 | 编辑回填 | 界面测试 | Chrome | 修改 | 有效行 | 点编辑 | 表单回填;可保存 |
@@ -70,3 +73,4 @@
70 73
 | 版本 | 说明 |
71 74
 | --- | --- |
72 75
 | 1.0 | 首版:CRUD + 增幅/增速计算;无导入导出用例 |
76
+| 1.1 | 增幅、增速改为可选填落库;未填按公式补齐 |

+ 2 - 0
sql/biz_disposable_income.sql

@@ -4,6 +4,8 @@ CREATE TABLE `biz_disposable_income` (
4 4
   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
5 5
   `stat_year` int(11) NOT NULL COMMENT '所属年份',
6 6
   `rural_disposable_income` decimal(18,2) DEFAULT NULL COMMENT '农村居民人均可支配收入(元)',
7
+  `income_increase` decimal(18,2) DEFAULT NULL COMMENT '增幅(元),可选;公式=本年可支配收入-上年',
8
+  `income_growth_rate` decimal(18,6) DEFAULT NULL COMMENT '增速,可选;公式=增幅/上年可支配收入',
7 9
   `poverty_net_income` decimal(18,2) DEFAULT NULL COMMENT '脱贫人口人均纯收入(元)',
8 10
   `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
9 11
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',