wwh 1 tydzień temu
rodzic
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
 import java.util.List;
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
 public class AchievementAnnualReportVo implements Serializable
14
 public class AchievementAnnualReportVo implements Serializable
10
 {
15
 {
11
     private static final long serialVersionUID = 1L;
16
     private static final long serialVersionUID = 1L;
12
 
17
 
18
+    /** 统计年份 */
13
     private Integer statYear;
19
     private Integer statYear;
14
 
20
 
21
+    /** 该年是否存在 ≥1 条成果台账 */
15
     private Boolean hasData;
22
     private Boolean hasData;
16
 
23
 
24
+    /** 总览指标;无数据时为 null(勿展示全 0) */
17
     private AchievementAnnualSummaryVo summary;
25
     private AchievementAnnualSummaryVo summary;
18
 
26
 
27
+    /** 按月序列(长度 = 最大统计月);无数据时为空列表 */
19
     private List<AchievementMonthlyVo> monthly;
28
     private List<AchievementMonthlyVo> monthly;
20
 
29
 
21
     public Integer getStatYear()
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
 import java.math.BigDecimal;
4
 import java.math.BigDecimal;
5
 
5
 
6
 /**
6
 /**
7
- * 年度报告 — 年度总览汇总。
7
+ * 成果总览指标(管理端年度报告 / 大屏总览与数字赋能)。
8
+ * <p>当前口径:所选年台账<strong>最大统计月</strong>的单月值(非全年加总)。</p>
8
  */
9
  */
9
 public class AchievementAnnualSummaryVo implements Serializable
10
 public class AchievementAnnualSummaryVo implements Serializable
10
 {
11
 {
11
     private static final long serialVersionUID = 1L;
12
     private static final long serialVersionUID = 1L;
12
 
13
 
14
+    /** 集体经济收入(万元) */
13
     private BigDecimal collectiveEconomyIncome;
15
     private BigDecimal collectiveEconomyIncome;
14
 
16
 
17
+    /** 带动就业人数(人) */
15
     private Integer employmentDrivenCount;
18
     private Integer employmentDrivenCount;
16
 
19
 
20
+    /** 新增就业岗位(个) */
17
     private Integer newJobPositions;
21
     private Integer newJobPositions;
18
 
22
 
23
+    /** 环境治理项目数(个) */
19
     private Integer envProjectCount;
24
     private Integer envProjectCount;
20
 
25
 
26
+    /** 新增绿化面积(亩) */
21
     private BigDecimal newGreenArea;
27
     private BigDecimal newGreenArea;
22
 
28
 
29
+    /** 文化传承人数(人) */
23
     private Integer culturalHeritageCount;
30
     private Integer culturalHeritageCount;
24
 
31
 
32
+    /** 民族融合项目数(个) */
25
     private Integer ethnicIntegrationProjectCount;
33
     private Integer ethnicIntegrationProjectCount;
26
 
34
 
35
+    /** 民族团结活动数(个) */
27
     private Integer ethnicUnityActivityCount;
36
     private Integer ethnicUnityActivityCount;
28
 
37
 
38
+    /** 数字平台使用率(0~1) */
29
     private BigDecimal digitalPlatformUsageRate;
39
     private BigDecimal digitalPlatformUsageRate;
30
 
40
 
41
+    /** 区域公共品牌数(个) */
31
     private Integer regionalPublicBrandCount;
42
     private Integer regionalPublicBrandCount;
32
 
43
 
44
+    /** 品牌产品溢价率(0~1) */
33
     private BigDecimal brandPremiumRate;
45
     private BigDecimal brandPremiumRate;
34
 
46
 
35
     public BigDecimal getCollectiveEconomyIncome()
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
 import java.math.BigDecimal;
4
 import java.math.BigDecimal;
5
 
5
 
6
 /**
6
 /**
7
- * 年度报告 — 单月指标序列项。
7
+ * 成果按月序列单项(管理端图表 / 大屏按月图表)。
8
+ * <p>序列长度为所选年最大统计月 N,{@code month} 为 1~N;缺月指标为 0。</p>
8
  */
9
  */
9
 public class AchievementMonthlyVo implements Serializable
10
 public class AchievementMonthlyVo implements Serializable
10
 {
11
 {
11
     private static final long serialVersionUID = 1L;
12
     private static final long serialVersionUID = 1L;
12
 
13
 
14
+    /** 所属年(与 statPeriod 前四位一致) */
13
     private Integer statYear;
15
     private Integer statYear;
14
 
16
 
17
+    /** 月份 1~12 */
15
     private Integer month;
18
     private Integer month;
16
 
19
 
20
+    /** 统计范围 yyyy-MM */
17
     private String statPeriod;
21
     private String statPeriod;
18
 
22
 
23
+    /** 集体经济收入(万元) */
19
     private BigDecimal collectiveEconomyIncome;
24
     private BigDecimal collectiveEconomyIncome;
20
 
25
 
26
+    /** 带动就业人数 */
21
     private Integer employmentDrivenCount;
27
     private Integer employmentDrivenCount;
22
 
28
 
29
+    /** 新增就业岗位 */
23
     private Integer newJobPositions;
30
     private Integer newJobPositions;
24
 
31
 
32
+    /** 环境治理项目数 */
25
     private Integer envProjectCount;
33
     private Integer envProjectCount;
26
 
34
 
35
+    /** 新增绿化面积(亩) */
27
     private BigDecimal newGreenArea;
36
     private BigDecimal newGreenArea;
28
 
37
 
38
+    /** 文化传承人数 */
29
     private Integer culturalHeritageCount;
39
     private Integer culturalHeritageCount;
30
 
40
 
41
+    /** 民族融合项目数 */
31
     private Integer ethnicIntegrationProjectCount;
42
     private Integer ethnicIntegrationProjectCount;
32
 
43
 
44
+    /** 民族团结活动数 */
33
     private Integer ethnicUnityActivityCount;
45
     private Integer ethnicUnityActivityCount;
34
 
46
 
47
+    /** 数字平台使用率(0~1) */
35
     private BigDecimal digitalPlatformUsageRate;
48
     private BigDecimal digitalPlatformUsageRate;
36
 
49
 
50
+    /** 区域公共品牌数 */
37
     private Integer regionalPublicBrandCount;
51
     private Integer regionalPublicBrandCount;
38
 
52
 
53
+    /** 品牌产品溢价率(0~1) */
39
     private BigDecimal brandPremiumRate;
54
     private BigDecimal brandPremiumRate;
40
 
55
 
41
     public Integer getStatYear()
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
 import java.util.List;
3
 import java.util.List;
4
 import org.springframework.beans.factory.annotation.Autowired;
4
 import org.springframework.beans.factory.annotation.Autowired;
5
-import org.springframework.security.access.prepost.PreAuthorize;
6
 import org.springframework.web.bind.annotation.GetMapping;
5
 import org.springframework.web.bind.annotation.GetMapping;
7
 import org.springframework.web.bind.annotation.RequestMapping;
6
 import org.springframework.web.bind.annotation.RequestMapping;
8
 import org.springframework.web.bind.annotation.RequestParam;
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
  * <p>
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
  * @see ICommonProsperityScreenService
27
  * @see ICommonProsperityScreenService
23
  */
28
  */
@@ -29,9 +34,15 @@ public class CommonProsperityScreenController extends BaseController
29
     private ICommonProsperityScreenService commonProsperityScreenService;
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
     @GetMapping("/dashboard")
47
     @GetMapping("/dashboard")
37
     public AjaxResult dashboard(@RequestParam("statYear") String statYear)
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
     @GetMapping("/projects")
59
     @GetMapping("/projects")
46
     public TableDataInfo projects(@RequestParam("statYear") String statYear)
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
 import java.io.Serializable;
3
 import java.io.Serializable;
4
 import java.util.List;
4
 import java.util.List;
5
 import com.ruoyi.web.modules.prosperity.domain.vo.AchievementAnnualReportVo;
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
 public class CommonProsperityScreenDashboardVo implements Serializable
14
 public class CommonProsperityScreenDashboardVo implements Serializable
10
 {
15
 {
11
     private static final long serialVersionUID = 1L;
16
     private static final long serialVersionUID = 1L;
12
-    /** 统计年份 */
17
+
18
+    /** 回显的统计年份 Y */
13
     private Integer statYear;
19
     private Integer statYear;
14
-    /** 成果/项目数据涉及年份 */
20
+
21
+    /** 可选年份(成果台账年 ∪ 已发布项目实施年 ∪ 当前自然年),降序,供年份选择器 */
15
     private List<Integer> availableYears;
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
     private AchievementAnnualReportVo achievement;
28
     private AchievementAnnualReportVo achievement;
18
-    /** 已发布项目类型占比 */
29
+
30
+    /**
31
+     * 共富项目分类饼图:固定 3 项(类型 1/2/3);无项目时 count、ratio 均为 0。
32
+     */
19
     private List<ProjectTypeStatVo> projectTypeStats;
33
     private List<ProjectTypeStatVo> projectTypeStats;
20
-    /** 当年是否有已发布且周期交集的项目 */
34
+
35
+    /** 该年是否存在 ≥1 条符合筛选的已发布项目(驱动饼图/列表空态) */
21
     private Boolean hasProjectData;
36
     private Boolean hasProjectData;
22
 
37
 
23
     public Integer getStatYear()
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
 import java.io.Serializable;
3
 import java.io.Serializable;
4
 import java.math.BigDecimal;
4
 import java.math.BigDecimal;
5
+
5
 /**
6
 /**
6
- * 共富项目类型统计项。
7
+ * 大屏共富项目分类饼图单项(固定输出类型 1/2/3)。
8
+ * <p>展示名:1 和美乡村建设项目;2 人居环境整治提升项目;3 其他项目投入。</p>
7
  */
9
  */
8
 public class ProjectTypeStatVo implements Serializable
10
 public class ProjectTypeStatVo implements Serializable
9
 {
11
 {
10
     private static final long serialVersionUID = 1L;
12
     private static final long serialVersionUID = 1L;
11
-    /** 类型 1共富 2农文旅 3认养 */
13
+
14
+    /** 项目类型:1 / 2 / 3 */
12
     private Integer projectType;
15
     private Integer projectType;
13
-    /** 类型名称 */
16
+
17
+    /** 类型展示名称 */
14
     private String projectTypeName;
18
     private String projectTypeName;
15
-    /** 项目数 */
19
+
20
+    /** 该类型项目数 */
16
     private Integer count;
21
     private Integer count;
17
-    /** 占比(%) */
22
+
23
+    /** 占已发布项目总数的比例,0~1(四位小数);无项目时为 0 */
18
     private BigDecimal ratio;
24
     private BigDecimal ratio;
19
 
25
 
20
     public Integer getProjectType()
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
 import java.util.List;
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
 public class ScreenProjectListItemVo implements Serializable
11
 public class ScreenProjectListItemVo implements Serializable
11
 {
12
 {
@@ -13,12 +14,15 @@ public class ScreenProjectListItemVo implements Serializable
13
 
14
 
14
     private Long id;
15
     private Long id;
15
 
16
 
17
+    /** 项目类型 1/2/3 */
16
     private Integer projectType;
18
     private Integer projectType;
17
 
19
 
20
+    /** 类型展示名 */
18
     private String projectTypeName;
21
     private String projectTypeName;
19
 
22
 
20
     private String projectName;
23
     private String projectName;
21
 
24
 
25
+    /** 项目简介 */
22
     private String introduction;
26
     private String introduction;
23
 
27
 
24
     /** 建设规模及内容 */
28
     /** 建设规模及内容 */
@@ -33,12 +37,16 @@ public class ScreenProjectListItemVo implements Serializable
33
     /** 实施情况 */
37
     /** 实施情况 */
34
     private String implStatus;
38
     private String implStatus;
35
 
39
 
40
+    /** 封面图 URL */
36
     private String coverFileUrl;
41
     private String coverFileUrl;
37
 
42
 
43
+    /** 视频 URL */
38
     private String videoFileUrl;
44
     private String videoFileUrl;
39
 
45
 
46
+    /** 发布时间 yyyy-MM-dd HH:mm:ss */
40
     private String publishTime;
47
     private String publishTime;
41
 
48
 
49
+    /** 运营图片(已按 sortOrder 排序) */
42
     private List<ScreenProjectOpImageVo> operationImages;
50
     private List<ScreenProjectOpImageVo> operationImages;
43
 
51
 
44
     public Long getId()
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
 public interface ICommonProsperityScreenService
14
 public interface ICommonProsperityScreenService
11
 {
15
 {
12
-    /** 年度成果 + 已发布项目类型统计 */
16
+    /**
17
+     * 加载看板:成果(总览 + 1~最大月序列)+ 项目类型占比 + 可选年份。
18
+     *
19
+     * @param statYear 统计年份(四位),非法时抛业务异常
20
+     */
13
     CommonProsperityScreenDashboardVo loadDashboard(String statYear);
21
     CommonProsperityScreenDashboardVo loadDashboard(String statYear);
14
 
22
 
15
-    /** 当年已发布项目列表(含运营图片) */
23
+    /**
24
+     * 已发布且实施周期与统计年有交集的项目列表(含运营图片)。
25
+     *
26
+     * @param statYear 统计年份(四位)
27
+     */
16
     List<ScreenProjectListItemVo> listPublishedProjects(String statYear);
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
  * <p>
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
 @Service
34
 @Service
30
 public class CommonProsperityScreenServiceImpl implements ICommonProsperityScreenService
35
 public class CommonProsperityScreenServiceImpl implements ICommonProsperityScreenService
@@ -38,23 +43,34 @@ public class CommonProsperityScreenServiceImpl implements ICommonProsperityScree
38
     @Autowired
43
     @Autowired
39
     private BizCommonProsperityProjectOpImageMapper opImageMapper;
44
     private BizCommonProsperityProjectOpImageMapper opImageMapper;
40
 
45
 
46
+    /**
47
+     * {@inheritDoc}
48
+     * <p>步骤:校验年份 → 按年查成果并组装报告 → 查已发布项目做分类统计 → 合并可选年份。</p>
49
+     */
41
     @Override
50
     @Override
42
     public CommonProsperityScreenDashboardVo loadDashboard(String statYear)
51
     public CommonProsperityScreenDashboardVo loadDashboard(String statYear)
43
     {
52
     {
44
         int year = AchievementReportValidation.parseStatYear(statYear);
53
         int year = AchievementReportValidation.parseStatYear(statYear);
45
         CommonProsperityScreenDashboardVo vo = new CommonProsperityScreenDashboardVo();
54
         CommonProsperityScreenDashboardVo vo = new CommonProsperityScreenDashboardVo();
46
         vo.setStatYear(year);
55
         vo.setStatYear(year);
56
+        // 成果:summary=最大月单月;monthly=1~最大月
47
         List<BizCommonProsperityAchievement> rows = safeAchievementsByYear(year);
57
         List<BizCommonProsperityAchievement> rows = safeAchievementsByYear(year);
48
         vo.setAchievement(AchievementReportAggregator.buildReport(year, rows));
58
         vo.setAchievement(AchievementReportAggregator.buildReport(year, rows));
59
+        // 项目分类饼图 + 是否有项目数据
49
         List<BizCommonProsperityProject> projects = safePublishedForScreen(year);
60
         List<BizCommonProsperityProject> projects = safePublishedForScreen(year);
50
         vo.setHasProjectData(!projects.isEmpty());
61
         vo.setHasProjectData(!projects.isEmpty());
51
         vo.setProjectTypeStats(CommonProsperityScreenSupport.buildProjectTypeStats(projects));
62
         vo.setProjectTypeStats(CommonProsperityScreenSupport.buildProjectTypeStats(projects));
63
+        // 年份下拉:成果年 ∪ 已发布项目实施年 ∪ 当前自然年,降序
52
         vo.setAvailableYears(CommonProsperityScreenSupport.buildAvailableYears(
64
         vo.setAvailableYears(CommonProsperityScreenSupport.buildAvailableYears(
53
                 achievementMapper.selectDistinctStatYears(),
65
                 achievementMapper.selectDistinctStatYears(),
54
                 projectMapper.selectDistinctStatYearsFromPublished()));
66
                 projectMapper.selectDistinctStatYearsFromPublished()));
55
         return vo;
67
         return vo;
56
     }
68
     }
57
 
69
 
70
+    /**
71
+     * {@inheritDoc}
72
+     * <p>先查项目主表,再按 ID 批量查运营图并按 {@code sort_order} 组装到行内。</p>
73
+     */
58
     @Override
74
     @Override
59
     public List<ScreenProjectListItemVo> listPublishedProjects(String statYear)
75
     public List<ScreenProjectListItemVo> listPublishedProjects(String statYear)
60
     {
76
     {
@@ -71,12 +87,14 @@ public class CommonProsperityScreenServiceImpl implements ICommonProsperityScree
71
         return CommonProsperityScreenSupport.toListItems(projects, byProject);
87
         return CommonProsperityScreenSupport.toListItems(projects, byProject);
72
     }
88
     }
73
 
89
 
90
+    /** 大屏已发布项目(实施周期与统计年交集);Mapper 返回 null 时转空列表 */
74
     private List<BizCommonProsperityProject> safePublishedForScreen(int statYear)
91
     private List<BizCommonProsperityProject> safePublishedForScreen(int statYear)
75
     {
92
     {
76
         List<BizCommonProsperityProject> list = projectMapper.selectPublishedForScreen(statYear);
93
         List<BizCommonProsperityProject> list = projectMapper.selectPublishedForScreen(statYear);
77
         return list != null ? list : new ArrayList<>();
94
         return list != null ? list : new ArrayList<>();
78
     }
95
     }
79
 
96
 
97
+    /** 所选年成果台账({@code stat_period like 'Y-%'});null 转空列表 */
80
     private List<BizCommonProsperityAchievement> safeAchievementsByYear(int statYear)
98
     private List<BizCommonProsperityAchievement> safeAchievementsByYear(int statYear)
81
     {
99
     {
82
         List<BizCommonProsperityAchievement> list = achievementMapper.selectByStatYear(String.valueOf(statYear));
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
 public final class CommonProsperityScreenSupport
29
 public final class CommonProsperityScreenSupport
26
 {
30
 {
27
     private static final String DATETIME_FMT = "yyyy-MM-dd HH:mm:ss";
31
     private static final String DATETIME_FMT = "yyyy-MM-dd HH:mm:ss";
28
 
32
 
29
-    /** 1 和美乡村建设;2 人居环境整治提升;3 其他项目投入 */
33
+    /** 下标 1~3 对应项目类型展示名 */
30
     private static final String[] TYPE_NAMES = {
34
     private static final String[] TYPE_NAMES = {
31
             null, "和美乡村建设项目", "人居环境整治提升项目", "其他项目投入"
35
             null, "和美乡村建设项目", "人居环境整治提升项目", "其他项目投入"
32
     };
36
     };
@@ -35,6 +39,7 @@ public final class CommonProsperityScreenSupport
35
     {
39
     {
36
     }
40
     }
37
 
41
 
42
+    /** 解析项目类型展示名;非法类型返回空串 */
38
     public static String resolveProjectTypeName(Integer projectType)
43
     public static String resolveProjectTypeName(Integer projectType)
39
     {
44
     {
40
         if (projectType == null || projectType < 1 || projectType > 3)
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
     public static boolean matchesStatYear(BizCommonProsperityProject project, int statYear)
57
     public static boolean matchesStatYear(BizCommonProsperityProject project, int statYear)
51
     {
58
     {
@@ -62,6 +69,9 @@ public final class CommonProsperityScreenSupport
62
         return matchesStatYear(project, statYear);
69
         return matchesStatYear(project, statYear);
63
     }
70
     }
64
 
71
 
72
+    /**
73
+     * 项目分类占比:固定输出类型 1/2/3 三项;{@code ratio = count/total}(无项目时全 0)。
74
+     */
65
     public static List<ProjectTypeStatVo> buildProjectTypeStats(List<BizCommonProsperityProject> projects)
75
     public static List<ProjectTypeStatVo> buildProjectTypeStats(List<BizCommonProsperityProject> projects)
66
     {
76
     {
67
         int c1 = 0;
77
         int c1 = 0;
@@ -115,6 +125,9 @@ public final class CommonProsperityScreenSupport
115
         return stats;
125
         return stats;
116
     }
126
     }
117
 
127
 
128
+    /**
129
+     * 可选年份并集:成果台账年 + 已发布项目实施年 + 当前自然年,降序。
130
+     */
118
     public static List<Integer> buildAvailableYears(List<String> achievementYearStrs,
131
     public static List<Integer> buildAvailableYears(List<String> achievementYearStrs,
119
             List<String> projectYearStrs)
132
             List<String> projectYearStrs)
120
     {
133
     {
@@ -141,6 +154,7 @@ public final class CommonProsperityScreenSupport
141
         }
154
         }
142
     }
155
     }
143
 
156
 
157
+    /** 项目主表 → 大屏列表行(含运营图 URL 列表) */
144
     public static List<ScreenProjectListItemVo> toListItems(List<BizCommonProsperityProject> projects,
158
     public static List<ScreenProjectListItemVo> toListItems(List<BizCommonProsperityProject> projects,
145
             Map<Long, List<BizCommonProsperityProjectOpImage>> imagesByProjectId)
159
             Map<Long, List<BizCommonProsperityProjectOpImage>> imagesByProjectId)
146
     {
160
     {
@@ -172,6 +186,7 @@ public final class CommonProsperityScreenSupport
172
         return list;
186
         return list;
173
     }
187
     }
174
 
188
 
189
+    /** 运营图按 projectId 分组,组内按 sortOrder 升序 */
175
     public static Map<Long, List<BizCommonProsperityProjectOpImage>> groupImagesByProjectId(
190
     public static Map<Long, List<BizCommonProsperityProjectOpImage>> groupImagesByProjectId(
176
             List<BizCommonProsperityProjectOpImage> images)
191
             List<BizCommonProsperityProjectOpImage> images)
177
     {
192
     {