wwh 1 settimana fa
parent
commit
f76ddbca1f

+ 2 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/domain/BizCommonProsperityProject.java

@@ -29,8 +29,8 @@ public class BizCommonProsperityProject extends BaseEntity
29 29
     @Size(max = 50, message = "项目简介长度不能超过50个字符")
30 30
     private String introduction;
31 31
 
32
-    @NotBlank(message = "建设规模及内容不能为空")
33
-    @Size(min = 1, max = 500, message = "建设规模及内容长度为1到500个字符")
32
+    /** 选填 */
33
+    @Size(max = 500, message = "建设规模及内容长度不能超过500个字符")
34 34
     private String projectContent;
35 35
 
36 36
     /** 投资金额(万元) */

+ 3 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/support/CommonProsperityProjectRules.java

@@ -9,6 +9,9 @@ public final class CommonProsperityProjectRules
9 9
     {
10 10
     }
11 11
 
12
+    /** 实施年限可选:当前年向前回看年数(含当前年共 LOOKBACK+1=5 个自然年) */
13
+    public static final int IMPL_YEAR_LOOKBACK = 4;
14
+
12 15
     public static boolean canEdit(Integer publishStatus)
13 16
     {
14 17
         return publishStatus != null && publishStatus == 0;

+ 12 - 5
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/support/CommonProsperityProjectValidation.java

@@ -37,7 +37,8 @@ public final class CommonProsperityProjectValidation
37 37
         }
38 38
         if (row.getProjectContent() != null)
39 39
         {
40
-            row.setProjectContent(row.getProjectContent().trim());
40
+            String content = row.getProjectContent().trim();
41
+            row.setProjectContent(StringUtils.isEmpty(content) ? null : content);
41 42
         }
42 43
         if (row.getImplStatus() != null)
43 44
         {
@@ -109,11 +110,16 @@ public final class CommonProsperityProjectValidation
109 110
         }
110 111
     }
111 112
 
113
+    /** 选填;有值时长度不超过 500 */
112 114
     public static void validateProjectContent(String projectContent)
113 115
     {
114
-        if (StringUtils.isEmpty(projectContent) || projectContent.length() < 1 || projectContent.length() > 500)
116
+        if (StringUtils.isEmpty(projectContent))
115 117
         {
116
-            throw new ServiceException("建设规模及内容须为1~500个字符");
118
+            return;
119
+        }
120
+        if (projectContent.length() > 500)
121
+        {
122
+            throw new ServiceException("建设规模及内容不能超过500个字符");
117 123
         }
118 124
     }
119 125
 
@@ -140,9 +146,10 @@ public final class CommonProsperityProjectValidation
140 146
             throw new ServiceException("实施年限不能为空");
141 147
         }
142 148
         int current = Calendar.getInstance().get(Calendar.YEAR);
143
-        if (implYear < 2000 || implYear > current)
149
+        int minYear = current - CommonProsperityProjectRules.IMPL_YEAR_LOOKBACK;
150
+        if (implYear < minYear || implYear > current)
144 151
         {
145
-            throw new ServiceException("实施年限不合法");
152
+            throw new ServiceException("实施年限须为当前年及向前共5个自然年");
146 153
         }
147 154
     }
148 155
 

+ 5 - 2
baqing-admin/src/test/java/com/ruoyi/web/modules/prosperity/support/CommonProsperityProjectValidationTest.java

@@ -50,7 +50,8 @@ class CommonProsperityProjectValidationTest
50 50
         assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateIntroduction(null));
51 51
         assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateIntroduction(""));
52 52
         assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateIntroduction(longStr(51)));
53
-        assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateProjectContent(""));
53
+        assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateProjectContent(null));
54
+        assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateProjectContent(""));
54 55
         assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateProjectContent(longStr(501)));
55 56
         assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateIntroduction("简介"));
56 57
         assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateProjectContent("内容"));
@@ -61,10 +62,12 @@ class CommonProsperityProjectValidationTest
61 62
     void ut008_implYear()
62 63
     {
63 64
         int current = Calendar.getInstance().get(Calendar.YEAR);
65
+        int minYear = current - CommonProsperityProjectRules.IMPL_YEAR_LOOKBACK;
64 66
         assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateImplYear(null));
65
-        assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateImplYear(1999));
67
+        assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateImplYear(minYear - 1));
66 68
         assertThrows(ServiceException.class, () -> CommonProsperityProjectValidation.validateImplYear(current + 1));
67 69
         assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateImplYear(current));
70
+        assertDoesNotThrow(() -> CommonProsperityProjectValidation.validateImplYear(minYear));
68 71
     }
69 72
 
70 73
     @Test

+ 3 - 3
doc/共同富裕/共同富裕项目/共同富裕项目前端技术方案.md

@@ -8,10 +8,10 @@
8 8
 
9 9
 ## 表单
10 10
 
11
-- 必填:名称、类型、建设规模及内容、实施年限、运营图片 1~3
12
-- 选填:简介、投资金额、实施情况、视频、封面
11
+- 必填:名称、类型、实施年限、运营图片 1~3
12
+- 选填:简介、建设规模及内容、投资金额、实施情况、视频、封面
13 13
 - 新增默认 `implYear = 当前年`
14
-- 年份下拉:`[当前年-5, 当前年]`(**上限为当前年**,不含未来年)
14
+- 年份下拉:当前年及向前共 5 年(`[当前年-4, 当前年]`,不含未来年)
15 15
 
16 16
 ## 筛选 / 列表
17 17
 

+ 3 - 2
doc/共同富裕/共同富裕项目/共同富裕项目功能需求.md

@@ -29,9 +29,9 @@
29 29
 | 项目名称 | 必填;1~20 字 |
30 30
 | 项目类型 | 必填;上表三类 |
31 31
 | 项目简介 | **选填**;≤50 字 |
32
-| 建设规模及内容 | 必填;1~500 字(原「项目内容」更名) |
32
+| 建设规模及内容 | **选填**;≤500 字(原「项目内容」更名) |
33 33
 | 投资金额 | 选填;万元;≥0 |
34
-| 实施年限 | 必填;自然年;**新增默认本年**;可选范围上限为**当前年**(不可选未来年) |
34
+| 实施年限 | 必填;自然年;**新增默认本年**;可选范围为**当前年及向前共 5 个自然年**(不可选未来年) |
35 35
 | 实施情况 | 选填;≤500 字 |
36 36
 | 运营图片 | 必填;1~3 张;jpg/jpeg/png |
37 37
 | 运营视频 | 选填;mp4 |
@@ -50,5 +50,6 @@
50 50
 
51 51
 | 版本 | 说明 |
52 52
 | --- | --- |
53
+| 2.2 | 建设规模及内容改选填;实施年限可选为当前年向前共 5 年 |
53 54
 | 2.1 | 实施年限可选上限改为当前年(不可选未来年) |
54 55
 | 2.0 | 全量覆盖:类型枚举更换;简介改选填;实施起止日→实施年限;新增投资金额、实施情况 |

+ 2 - 2
doc/共同富裕/共同富裕项目/共同富裕项目技术方案.md

@@ -10,9 +10,9 @@
10 10
 | --- | --- |
11 11
 | `project_type` | 1 和美乡村建设 / 2 人居环境整治提升 / 3 其他项目投入 |
12 12
 | `introduction` | 选填 |
13
-| `project_content` | 建设规模及内容 |
13
+| `project_content` | 建设规模及内容(选填) |
14 14
 | `investment_amount` | 投资金额(万元) |
15
-| `impl_year` | 实施年限(校验:≥2000 且 ≤当前年) |
15
+| `impl_year` | 实施年限(校验:当前年及向前共 5 个自然年) |
16 16
 | `impl_status` | 实施情况 |
17 17
 
18 18
 运营图片子表不变:`biz_common_prosperity_project_op_image`。

+ 1 - 1
doc/共同富裕/共同富裕项目/共同富裕项目管理测试用例.md

@@ -7,7 +7,7 @@
7 7
 | UT-005 | 项目名称长度 | 空/超 20 失败;1~20 通过 |
8 8
 | UT-006 | 项目类型 | 仅 1~3 |
9 9
 | UT-007 | 简介选填 / 内容必填 | 简介可空;内容 1~500 |
10
-| UT-008 | 实施年限 | 必填;`<2000` 或 `>当前年` 失败;当前年通过 |
10
+| UT-008 | 实施年限 | 必填;`<当前年-4` 或 `>当前年` 失败;边界通过 |
11 11
 | UT-008b | 投资金额 | 可空;负数失败 |
12 12
 | UT-009 | 运营图片 | 1~3 张 |
13 13
 | API-001 | 列表筛选 | 支持 `implYear` |

+ 1 - 1
sql/biz_common_prosperity_project.sql

@@ -6,7 +6,7 @@ CREATE TABLE `biz_common_prosperity_project` (
6 6
   `project_name` varchar(64) NOT NULL COMMENT '项目名称',
7 7
   `project_type` tinyint(4) NOT NULL COMMENT '1和美乡村建设 2人居环境整治提升 3其他项目投入',
8 8
   `introduction` varchar(200) DEFAULT NULL COMMENT '项目简介(选填)',
9
-  `project_content` varchar(600) NOT NULL COMMENT '建设规模及内容',
9
+  `project_content` varchar(600) DEFAULT NULL COMMENT '建设规模及内容(选填)',
10 10
   `investment_amount` decimal(18,4) DEFAULT NULL COMMENT '投资金额(万元)',
11 11
   `impl_year` int(11) NOT NULL COMMENT '实施年限(年)',
12 12
   `impl_status` varchar(500) DEFAULT NULL COMMENT '实施情况',