wwh 1 settimana fa
parent
commit
e3cb322c8f

+ 10 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/domain/vo/AchievementAnnualReportVo.java

@@ -4,18 +4,27 @@ import java.io.Serializable;
4 4
 import java.util.List;
5 5
 
6 6
 /**
7
- * 共同富裕成果年度报告响应。
7
+ * 共同富裕成果年度报告 / 大屏成果区块响应。
8
+ * <p>
9
+ * 口径(管理端与大屏共用):
10
+ * {@code summary} = 所选年最大统计月单月值;
11
+ * {@code monthly} = 该年 1~最大月(缺月补 0);无台账时 {@code hasData=false}。
12
+ * </p>
8 13
  */
9 14
 public class AchievementAnnualReportVo implements Serializable
10 15
 {
11 16
     private static final long serialVersionUID = 1L;
12 17
 
18
+    /** 统计年份 */
13 19
     private Integer statYear;
14 20
 
21
+    /** 该年是否存在 ≥1 条成果台账 */
15 22
     private Boolean hasData;
16 23
 
24
+    /** 总览指标;无数据时为 null(勿展示全 0) */
17 25
     private AchievementAnnualSummaryVo summary;
18 26
 
27
+    /** 按月序列(长度 = 最大统计月);无数据时为空列表 */
19 28
     private List<AchievementMonthlyVo> monthly;
20 29
 
21 30
     public Integer getStatYear()

+ 13 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/domain/vo/AchievementAnnualSummaryVo.java

@@ -4,32 +4,44 @@ import java.io.Serializable;
4 4
 import java.math.BigDecimal;
5 5
 
6 6
 /**
7
- * 年度报告 — 年度总览汇总。
7
+ * 成果总览指标(管理端年度报告 / 大屏总览与数字赋能)。
8
+ * <p>当前口径:所选年台账<strong>最大统计月</strong>的单月值(非全年加总)。</p>
8 9
  */
9 10
 public class AchievementAnnualSummaryVo implements Serializable
10 11
 {
11 12
     private static final long serialVersionUID = 1L;
12 13
 
14
+    /** 集体经济收入(万元) */
13 15
     private BigDecimal collectiveEconomyIncome;
14 16
 
17
+    /** 带动就业人数(人) */
15 18
     private Integer employmentDrivenCount;
16 19
 
20
+    /** 新增就业岗位(个) */
17 21
     private Integer newJobPositions;
18 22
 
23
+    /** 环境治理项目数(个) */
19 24
     private Integer envProjectCount;
20 25
 
26
+    /** 新增绿化面积(亩) */
21 27
     private BigDecimal newGreenArea;
22 28
 
29
+    /** 文化传承人数(人) */
23 30
     private Integer culturalHeritageCount;
24 31
 
32
+    /** 民族融合项目数(个) */
25 33
     private Integer ethnicIntegrationProjectCount;
26 34
 
35
+    /** 民族团结活动数(个) */
27 36
     private Integer ethnicUnityActivityCount;
28 37
 
38
+    /** 数字平台使用率(0~1) */
29 39
     private BigDecimal digitalPlatformUsageRate;
30 40
 
41
+    /** 区域公共品牌数(个) */
31 42
     private Integer regionalPublicBrandCount;
32 43
 
44
+    /** 品牌产品溢价率(0~1) */
33 45
     private BigDecimal brandPremiumRate;
34 46
 
35 47
     public BigDecimal getCollectiveEconomyIncome()

+ 16 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/domain/vo/AchievementMonthlyVo.java

@@ -4,38 +4,53 @@ import java.io.Serializable;
4 4
 import java.math.BigDecimal;
5 5
 
6 6
 /**
7
- * 年度报告 — 单月指标序列项。
7
+ * 成果按月序列单项(管理端图表 / 大屏按月图表)。
8
+ * <p>序列长度为所选年最大统计月 N,{@code month} 为 1~N;缺月指标为 0。</p>
8 9
  */
9 10
 public class AchievementMonthlyVo implements Serializable
10 11
 {
11 12
     private static final long serialVersionUID = 1L;
12 13
 
14
+    /** 所属年(与 statPeriod 前四位一致) */
13 15
     private Integer statYear;
14 16
 
17
+    /** 月份 1~12 */
15 18
     private Integer month;
16 19
 
20
+    /** 统计范围 yyyy-MM */
17 21
     private String statPeriod;
18 22
 
23
+    /** 集体经济收入(万元) */
19 24
     private BigDecimal collectiveEconomyIncome;
20 25
 
26
+    /** 带动就业人数 */
21 27
     private Integer employmentDrivenCount;
22 28
 
29
+    /** 新增就业岗位 */
23 30
     private Integer newJobPositions;
24 31
 
32
+    /** 环境治理项目数 */
25 33
     private Integer envProjectCount;
26 34
 
35
+    /** 新增绿化面积(亩) */
27 36
     private BigDecimal newGreenArea;
28 37
 
38
+    /** 文化传承人数 */
29 39
     private Integer culturalHeritageCount;
30 40
 
41
+    /** 民族融合项目数 */
31 42
     private Integer ethnicIntegrationProjectCount;
32 43
 
44
+    /** 民族团结活动数 */
33 45
     private Integer ethnicUnityActivityCount;
34 46
 
47
+    /** 数字平台使用率(0~1) */
35 48
     private BigDecimal digitalPlatformUsageRate;
36 49
 
50
+    /** 区域公共品牌数 */
37 51
     private Integer regionalPublicBrandCount;
38 52
 
53
+    /** 品牌产品溢价率(0~1) */
39 54
     private BigDecimal brandPremiumRate;
40 55
 
41 56
     public Integer getStatYear()

+ 20 - 6
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/controller/CommonProsperityScreenController.java

@@ -2,7 +2,6 @@ package com.ruoyi.web.modules.screen.controller;
2 2
 
3 3
 import java.util.List;
4 4
 import org.springframework.beans.factory.annotation.Autowired;
5
-import org.springframework.security.access.prepost.PreAuthorize;
6 5
 import org.springframework.web.bind.annotation.GetMapping;
7 6
 import org.springframework.web.bind.annotation.RequestMapping;
8 7
 import org.springframework.web.bind.annotation.RequestParam;
@@ -16,8 +15,14 @@ import com.ruoyi.web.modules.screen.service.ICommonProsperityScreenService;
16 15
 /**
17 16
  * 大屏 — 共同富裕统计(只读)。
18 17
  * <p>
19
- * 数据来源:年度成果报告({@code biz_common_prosperity_achievement})、
20
- * 已发布共富项目({@code biz_common_prosperity_project})及运营图片。
18
+ * 提供看板聚合与共富项目分页列表。看板含:成果总览 / 数字赋能、按月趋势图、项目分类饼图。
19
+ * </p>
20
+ * <p>
21
+ * 数据来源:{@code biz_common_prosperity_achievement}(成果台账)、
22
+ * {@code biz_common_prosperity_project}(已发布项目)、运营图片子表。
23
+ * 成果口径与管理端「共同富裕成果年度报告」一致(共用 {@code AchievementReportAggregator})。
24
+ * </p>
25
+ * <p>权限标识示例:{@code bigScreen:commonProsperity:query}。</p>
21 26
  *
22 27
  * @see ICommonProsperityScreenService
23 28
  */
@@ -29,9 +34,15 @@ public class CommonProsperityScreenController extends BaseController
29 34
     private ICommonProsperityScreenService commonProsperityScreenService;
30 35
 
31 36
     /**
32
-     * 共富看板:年度成果摘要 + 当年已发布项目类型占比。
37
+     * 共同富裕看板一屏数据。
38
+     * <p>
39
+     * 成果:总览 / 数字赋能取所选年<strong>最大统计月</strong>单月值;
40
+     * {@code monthly} 为该年 1~最大月(缺月补 0)。
41
+     * 项目:仅 {@code publish_status=1} 且实施周期与统计年 Y 有交集。
42
+     * </p>
33 43
      *
34
-     * @param statYear 统计年份;项目筛选为实施周期与 Y 有交集且已发布
44
+     * @param statYear 统计年份,如 {@code 2026}
45
+     * @return {@code data} 为 {@link com.ruoyi.web.modules.screen.domain.vo.CommonProsperityScreenDashboardVo}
35 46
      */
36 47
     @GetMapping("/dashboard")
37 48
     public AjaxResult dashboard(@RequestParam("statYear") String statYear)
@@ -40,7 +51,10 @@ public class CommonProsperityScreenController extends BaseController
40 51
     }
41 52
 
42 53
     /**
43
-     * 当年已发布共富项目分页列表(含运营图片)。
54
+     * 共富项目分页列表(行内含运营图,无单独详情接口)。
55
+     * <p>筛选口径同看板项目:已发布且实施周期与 {@code statYear} 有交集;配合 PageHelper。</p>
56
+     *
57
+     * @param statYear 统计年份,如 {@code 2026}
44 58
      */
45 59
     @GetMapping("/projects")
46 60
     public TableDataInfo projects(@RequestParam("statYear") String statYear)

+ 21 - 6
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/domain/vo/CommonProsperityScreenDashboardVo.java

@@ -3,21 +3,36 @@ package com.ruoyi.web.modules.screen.domain.vo;
3 3
 import java.io.Serializable;
4 4
 import java.util.List;
5 5
 import com.ruoyi.web.modules.prosperity.domain.vo.AchievementAnnualReportVo;
6
+
6 7
 /**
7
- * 大屏共同富裕看板({@code GET /bigScreen/commonProsperity/dashboard})。
8
+ * 大屏共同富裕看板响应({@code GET /bigScreen/commonProsperity/dashboard})。
9
+ * <p>
10
+ * {@code achievement} 结构同管理端年度报告 VO:
11
+ * {@code summary} 为最大统计月单月值;{@code monthly} 为所选年 1~最大月。
12
+ * </p>
8 13
  */
9 14
 public class CommonProsperityScreenDashboardVo implements Serializable
10 15
 {
11 16
     private static final long serialVersionUID = 1L;
12
-    /** 统计年份 */
17
+
18
+    /** 回显的统计年份 Y */
13 19
     private Integer statYear;
14
-    /** 成果/项目数据涉及年份 */
20
+
21
+    /** 可选年份(成果台账年 ∪ 已发布项目实施年 ∪ 当前自然年),降序,供年份选择器 */
15 22
     private List<Integer> availableYears;
16
-    /** 年度成果报告摘要 */
23
+
24
+    /**
25
+     * 成果区块:{@code hasData} / {@code summary}(总览+数字赋能)/ {@code monthly}(按月图表)。
26
+     * 无台账时 {@code hasData=false}、{@code summary=null}、{@code monthly=[]}。
27
+     */
17 28
     private AchievementAnnualReportVo achievement;
18
-    /** 已发布项目类型占比 */
29
+
30
+    /**
31
+     * 共富项目分类饼图:固定 3 项(类型 1/2/3);无项目时 count、ratio 均为 0。
32
+     */
19 33
     private List<ProjectTypeStatVo> projectTypeStats;
20
-    /** 当年是否有已发布且周期交集的项目 */
34
+
35
+    /** 该年是否存在 ≥1 条符合筛选的已发布项目(驱动饼图/列表空态) */
21 36
     private Boolean hasProjectData;
22 37
 
23 38
     public Integer getStatYear()

+ 11 - 5
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/domain/vo/ProjectTypeStatVo.java

@@ -2,19 +2,25 @@ package com.ruoyi.web.modules.screen.domain.vo;
2 2
 
3 3
 import java.io.Serializable;
4 4
 import java.math.BigDecimal;
5
+
5 6
 /**
6
- * 共富项目类型统计项。
7
+ * 大屏共富项目分类饼图单项(固定输出类型 1/2/3)。
8
+ * <p>展示名:1 和美乡村建设项目;2 人居环境整治提升项目;3 其他项目投入。</p>
7 9
  */
8 10
 public class ProjectTypeStatVo implements Serializable
9 11
 {
10 12
     private static final long serialVersionUID = 1L;
11
-    /** 类型 1共富 2农文旅 3认养 */
13
+
14
+    /** 项目类型:1 / 2 / 3 */
12 15
     private Integer projectType;
13
-    /** 类型名称 */
16
+
17
+    /** 类型展示名称 */
14 18
     private String projectTypeName;
15
-    /** 项目数 */
19
+
20
+    /** 该类型项目数 */
16 21
     private Integer count;
17
-    /** 占比(%) */
22
+
23
+    /** 占已发布项目总数的比例,0~1(四位小数);无项目时为 0 */
18 24
     private BigDecimal ratio;
19 25
 
20 26
     public Integer getProjectType()

+ 9 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/domain/vo/ScreenProjectListItemVo.java

@@ -5,7 +5,8 @@ import java.math.BigDecimal;
5 5
 import java.util.List;
6 6
 
7 7
 /**
8
- * 共富项目列表项(分页 {@code /bigScreen/commonProsperity/projects})。
8
+ * 共富项目列表项(分页 {@code GET /bigScreen/commonProsperity/projects})。
9
+ * <p>详情不另开接口,行内一次返回封面、视频、运营图等字段。</p>
9 10
  */
10 11
 public class ScreenProjectListItemVo implements Serializable
11 12
 {
@@ -13,12 +14,15 @@ public class ScreenProjectListItemVo implements Serializable
13 14
 
14 15
     private Long id;
15 16
 
17
+    /** 项目类型 1/2/3 */
16 18
     private Integer projectType;
17 19
 
20
+    /** 类型展示名 */
18 21
     private String projectTypeName;
19 22
 
20 23
     private String projectName;
21 24
 
25
+    /** 项目简介 */
22 26
     private String introduction;
23 27
 
24 28
     /** 建设规模及内容 */
@@ -33,12 +37,16 @@ public class ScreenProjectListItemVo implements Serializable
33 37
     /** 实施情况 */
34 38
     private String implStatus;
35 39
 
40
+    /** 封面图 URL */
36 41
     private String coverFileUrl;
37 42
 
43
+    /** 视频 URL */
38 44
     private String videoFileUrl;
39 45
 
46
+    /** 发布时间 yyyy-MM-dd HH:mm:ss */
40 47
     private String publishTime;
41 48
 
49
+    /** 运营图片(已按 sortOrder 排序) */
42 50
     private List<ScreenProjectOpImageVo> operationImages;
43 51
 
44 52
     public Long getId()

+ 14 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/ICommonProsperityScreenService.java

@@ -6,12 +6,24 @@ import com.ruoyi.web.modules.screen.domain.vo.ScreenProjectListItemVo;
6 6
 
7 7
 /**
8 8
  * 大屏共同富裕统计服务(只读)。
9
+ * <p>
10
+ * 成果组装复用 {@link com.ruoyi.web.modules.prosperity.support.AchievementReportAggregator},
11
+ * 与管理端年度报告口径一致。
12
+ * </p>
9 13
  */
10 14
 public interface ICommonProsperityScreenService
11 15
 {
12
-    /** 年度成果 + 已发布项目类型统计 */
16
+    /**
17
+     * 加载看板:成果(总览 + 1~最大月序列)+ 项目类型占比 + 可选年份。
18
+     *
19
+     * @param statYear 统计年份(四位),非法时抛业务异常
20
+     */
13 21
     CommonProsperityScreenDashboardVo loadDashboard(String statYear);
14 22
 
15
-    /** 当年已发布项目列表(含运营图片) */
23
+    /**
24
+     * 已发布且实施周期与统计年有交集的项目列表(含运营图片)。
25
+     *
26
+     * @param statYear 统计年份(四位)
27
+     */
16 28
     List<ScreenProjectListItemVo> listPublishedProjects(String statYear);
17 29
 }

+ 20 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/impl/CommonProsperityScreenServiceImpl.java

@@ -23,8 +23,13 @@ import com.ruoyi.web.modules.screen.support.CommonProsperityScreenSupport;
23 23
 /**
24 24
  * 大屏共同富裕统计服务实现。
25 25
  * <p>
26
- * 成果口径与管理端年度报告一致:总览为所选年<strong>最大统计月</strong>单月值;
27
- * 按月图表为该年 1~最大月(缺月补 0);项目列表仅含已发布且实施周期与统计年有交集的记录。
26
+ * 成果口径(与管理端年度报告一致,见 {@link AchievementReportAggregator#buildReport}):
27
+ * <ul>
28
+ *   <li>总览 / 数字赋能:所选年台账中<strong>最大统计月</strong>的单月指标</li>
29
+ *   <li>按月图表:该年 <strong>1~最大月</strong>,区间内缺月补 0;无台账则 {@code monthly} 为空</li>
30
+ * </ul>
31
+ * 项目:仅已发布且实施周期与统计年有交集;分类占比固定三类(缺类 count=0)。
32
+ * </p>
28 33
  */
29 34
 @Service
30 35
 public class CommonProsperityScreenServiceImpl implements ICommonProsperityScreenService
@@ -38,23 +43,34 @@ public class CommonProsperityScreenServiceImpl implements ICommonProsperityScree
38 43
     @Autowired
39 44
     private BizCommonProsperityProjectOpImageMapper opImageMapper;
40 45
 
46
+    /**
47
+     * {@inheritDoc}
48
+     * <p>步骤:校验年份 → 按年查成果并组装报告 → 查已发布项目做分类统计 → 合并可选年份。</p>
49
+     */
41 50
     @Override
42 51
     public CommonProsperityScreenDashboardVo loadDashboard(String statYear)
43 52
     {
44 53
         int year = AchievementReportValidation.parseStatYear(statYear);
45 54
         CommonProsperityScreenDashboardVo vo = new CommonProsperityScreenDashboardVo();
46 55
         vo.setStatYear(year);
56
+        // 成果:summary=最大月单月;monthly=1~最大月
47 57
         List<BizCommonProsperityAchievement> rows = safeAchievementsByYear(year);
48 58
         vo.setAchievement(AchievementReportAggregator.buildReport(year, rows));
59
+        // 项目分类饼图 + 是否有项目数据
49 60
         List<BizCommonProsperityProject> projects = safePublishedForScreen(year);
50 61
         vo.setHasProjectData(!projects.isEmpty());
51 62
         vo.setProjectTypeStats(CommonProsperityScreenSupport.buildProjectTypeStats(projects));
63
+        // 年份下拉:成果年 ∪ 已发布项目实施年 ∪ 当前自然年,降序
52 64
         vo.setAvailableYears(CommonProsperityScreenSupport.buildAvailableYears(
53 65
                 achievementMapper.selectDistinctStatYears(),
54 66
                 projectMapper.selectDistinctStatYearsFromPublished()));
55 67
         return vo;
56 68
     }
57 69
 
70
+    /**
71
+     * {@inheritDoc}
72
+     * <p>先查项目主表,再按 ID 批量查运营图并按 {@code sort_order} 组装到行内。</p>
73
+     */
58 74
     @Override
59 75
     public List<ScreenProjectListItemVo> listPublishedProjects(String statYear)
60 76
     {
@@ -71,12 +87,14 @@ public class CommonProsperityScreenServiceImpl implements ICommonProsperityScree
71 87
         return CommonProsperityScreenSupport.toListItems(projects, byProject);
72 88
     }
73 89
 
90
+    /** 大屏已发布项目(实施周期与统计年交集);Mapper 返回 null 时转空列表 */
74 91
     private List<BizCommonProsperityProject> safePublishedForScreen(int statYear)
75 92
     {
76 93
         List<BizCommonProsperityProject> list = projectMapper.selectPublishedForScreen(statYear);
77 94
         return list != null ? list : new ArrayList<>();
78 95
     }
79 96
 
97
+    /** 所选年成果台账({@code stat_period like 'Y-%'});null 转空列表 */
80 98
     private List<BizCommonProsperityAchievement> safeAchievementsByYear(int statYear)
81 99
     {
82 100
         List<BizCommonProsperityAchievement> list = achievementMapper.selectByStatYear(String.valueOf(statYear));

+ 17 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/support/CommonProsperityScreenSupport.java

@@ -21,12 +21,16 @@ import com.ruoyi.web.modules.screen.domain.vo.ScreenProjectOpImageVo;
21 21
 
22 22
 /**
23 23
  * 大屏共同富裕 — 项目筛选、分类统计、列表组装(纯逻辑,便于单测)。
24
+ * <p>
25
+ * 项目纳入规则由 Mapper SQL 保证:已发布 + 实施周期与统计年交集;
26
+ * 本类负责类型名解析、三类占比、可选年份并集、列表 VO 与运营图分组排序。
27
+ * </p>
24 28
  */
25 29
 public final class CommonProsperityScreenSupport
26 30
 {
27 31
     private static final String DATETIME_FMT = "yyyy-MM-dd HH:mm:ss";
28 32
 
29
-    /** 1 和美乡村建设;2 人居环境整治提升;3 其他项目投入 */
33
+    /** 下标 1~3 对应项目类型展示名 */
30 34
     private static final String[] TYPE_NAMES = {
31 35
             null, "和美乡村建设项目", "人居环境整治提升项目", "其他项目投入"
32 36
     };
@@ -35,6 +39,7 @@ public final class CommonProsperityScreenSupport
35 39
     {
36 40
     }
37 41
 
42
+    /** 解析项目类型展示名;非法类型返回空串 */
38 43
     public static String resolveProjectTypeName(Integer projectType)
39 44
     {
40 45
         if (projectType == null || projectType < 1 || projectType > 3)
@@ -45,7 +50,9 @@ public final class CommonProsperityScreenSupport
45 50
     }
46 51
 
47 52
     /**
48
-     * 已发布且实施年限等于统计年 Y。
53
+     * 是否纳入大屏统计:已发布(publish_status=1)且实施年限等于统计年 Y。
54
+     * <p>注:列表/分类实际筛选以 Mapper {@code selectPublishedForScreen} 的周期交集为准;
55
+     * 本方法用于单测与 impl_year 精确匹配场景。</p>
49 56
      */
50 57
     public static boolean matchesStatYear(BizCommonProsperityProject project, int statYear)
51 58
     {
@@ -62,6 +69,9 @@ public final class CommonProsperityScreenSupport
62 69
         return matchesStatYear(project, statYear);
63 70
     }
64 71
 
72
+    /**
73
+     * 项目分类占比:固定输出类型 1/2/3 三项;{@code ratio = count/total}(无项目时全 0)。
74
+     */
65 75
     public static List<ProjectTypeStatVo> buildProjectTypeStats(List<BizCommonProsperityProject> projects)
66 76
     {
67 77
         int c1 = 0;
@@ -115,6 +125,9 @@ public final class CommonProsperityScreenSupport
115 125
         return stats;
116 126
     }
117 127
 
128
+    /**
129
+     * 可选年份并集:成果台账年 + 已发布项目实施年 + 当前自然年,降序。
130
+     */
118 131
     public static List<Integer> buildAvailableYears(List<String> achievementYearStrs,
119 132
             List<String> projectYearStrs)
120 133
     {
@@ -141,6 +154,7 @@ public final class CommonProsperityScreenSupport
141 154
         }
142 155
     }
143 156
 
157
+    /** 项目主表 → 大屏列表行(含运营图 URL 列表) */
144 158
     public static List<ScreenProjectListItemVo> toListItems(List<BizCommonProsperityProject> projects,
145 159
             Map<Long, List<BizCommonProsperityProjectOpImage>> imagesByProjectId)
146 160
     {
@@ -172,6 +186,7 @@ public final class CommonProsperityScreenSupport
172 186
         return list;
173 187
     }
174 188
 
189
+    /** 运营图按 projectId 分组,组内按 sortOrder 升序 */
175 190
     public static Map<Long, List<BizCommonProsperityProjectOpImage>> groupImagesByProjectId(
176 191
             List<BizCommonProsperityProjectOpImage> images)
177 192
     {