wwh 12 часов назад
Родитель
Сommit
e9dfa19f11
22 измененных файлов с 128 добавлено и 121 удалено
  1. 2 2
      baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/mapper/BizCommonProsperityProjectMapper.java
  2. 1 1
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/controller/CommonProsperityScreenController.java
  3. 8 8
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/controller/HomeScreenController.java
  4. 5 5
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/controller/LivestockResourceScreenController.java
  5. 1 1
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/ICommonProsperityScreenService.java
  6. 3 3
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/IHomeScreenService.java
  7. 3 3
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/ILivestockResourceScreenService.java
  8. 2 4
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/impl/CommonProsperityScreenServiceImpl.java
  9. 8 16
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/impl/HomeScreenServiceImpl.java
  10. 9 11
      baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/impl/LivestockResourceScreenServiceImpl.java
  11. 2 0
      baqing-admin/src/main/resources/mapper/prosperity/BizCommonProsperityProjectMapper.xml
  12. 2 2
      baqing-admin/src/test/java/com/ruoyi/web/modules/screen/controller/CommonProsperityScreenControllerApiTest.java
  13. 4 6
      baqing-admin/src/test/java/com/ruoyi/web/modules/screen/service/impl/CommonProsperityScreenServiceImplTest.java
  14. 24 32
      baqing-admin/src/test/java/com/ruoyi/web/modules/screen/service/impl/HomeScreenServiceImplTest.java
  15. 22 2
      baqing-admin/src/test/java/com/ruoyi/web/modules/screen/service/impl/LivestockResourceScreenServiceImplTest.java
  16. 3 2
      doc/大屏/共同富裕/大屏共同富裕功能需求.md
  17. 2 1
      doc/大屏/共同富裕/大屏共同富裕技术方案.md
  18. 2 1
      doc/大屏/共同富裕/大屏共同富裕测试用例.md
  19. 6 5
      doc/大屏/畜牧资源/大屏畜牧资源技术方案.md
  20. 3 2
      doc/大屏/首页/大屏首页功能需求.md
  21. 7 6
      doc/大屏/首页/大屏首页技术方案.md
  22. 9 8
      doc/大屏/首页/大屏首页测试用例.md

+ 2 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/prosperity/mapper/BizCommonProsperityProjectMapper.java

@@ -33,8 +33,8 @@ public interface BizCommonProsperityProjectMapper
33 33
     /**
34 34
      * 大屏:共富项目分类情况明细(按实施年限聚合类型数量;年份倒序)。
35 35
      *
36
-     * @param statYear 所属年份(实施年限),必填
36
+     * @param statYear 所属年份(实施年限),可选;未传不过滤
37 37
      */
38 38
     List<CommonProsperityProjectTypeDetailVo> selectPublishedTypeDetailsByYear(
39
-            @Param("statYear") int statYear);
39
+            @Param("statYear") Integer statYear);
40 40
 }

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

@@ -73,7 +73,7 @@ public class CommonProsperityScreenController extends BaseController
73 73
      * {@code publish_status=1},按 {@code impl_year}、{@code project_type} 聚合。
74 74
      * </p>
75 75
      *
76
-     * @param statYear 所属年份;未传默认当前自然年
76
+     * @param statYear 所属年份;未传不过滤
77 77
      */
78 78
     @GetMapping("/projectTypeDetails")
79 79
     public TableDataInfo projectTypeDetails(

+ 8 - 8
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/controller/HomeScreenController.java

@@ -97,7 +97,7 @@ public class HomeScreenController extends BaseController
97 97
 
98 98
     /**
99 99
      * 人均收入情况明细(分页);按所属年份倒序。
100
-     * <p>查询条件:所属年份(可选,未传默认当前自然年)。数据源 {@code biz_disposable_income}。</p>
100
+     * <p>查询条件:所属年份(可选,未传不过滤)。数据源 {@code biz_disposable_income}。</p>
101 101
      */
102 102
     @GetMapping("/perCapitaIncomes")
103 103
     public TableDataInfo perCapitaIncomes(
@@ -110,7 +110,7 @@ public class HomeScreenController extends BaseController
110 110
 
111 111
     /**
112 112
      * 农牧户数据明细(分页);按年、月倒序。草场面积数据明细复用本接口。
113
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
113
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
114 114
      * 数据源 {@code biz_farmer_household},返回全部业务字段(含 {@code pastureContractArea} 等)。</p>
115 115
      */
116 116
     @GetMapping("/farmerHouseholds")
@@ -128,7 +128,7 @@ public class HomeScreenController extends BaseController
128 128
 
129 129
     /**
130 130
      * 合作社发展数据明细(分页);按年、月倒序。
131
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
131
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
132 132
      * 数据源 {@code biz_cooperative_development}。</p>
133 133
      */
134 134
     @GetMapping("/cooperativeDevelopments")
@@ -146,7 +146,7 @@ public class HomeScreenController extends BaseController
146 146
 
147 147
     /**
148 148
      * 家庭牧场数据明细(分页);按年、月倒序。
149
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
149
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
150 150
      * 数据源 {@code biz_family_ranch}。</p>
151 151
      */
152 152
     @GetMapping("/familyRanches")
@@ -164,7 +164,7 @@ public class HomeScreenController extends BaseController
164 164
 
165 165
     /**
166 166
      * 养殖大户数据明细(分页);按年、月倒序。
167
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
167
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
168 168
      * 数据源 {@code biz_large_livestock_farmer}。</p>
169 169
      */
170 170
     @GetMapping("/largeLivestockFarmers")
@@ -182,7 +182,7 @@ public class HomeScreenController extends BaseController
182 182
 
183 183
     /**
184 184
      * 牦牛出栏数据明细(分页);按年、月倒序。对应牲畜出栏/自食情况明细。
185
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
185
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
186 186
      * 数据源 {@code biz_yak_outbound_report}。</p>
187 187
      */
188 188
     @GetMapping("/yakOutboundReports")
@@ -200,7 +200,7 @@ public class HomeScreenController extends BaseController
200 200
 
201 201
     /**
202 202
      * 牦牛存栏数据明细(分页);按年、月倒序。对应畜群存栏/牦牛存栏结构明细。
203
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
203
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
204 204
      * 数据源 {@code biz_yak_herd_inventory}。</p>
205 205
      */
206 206
     @GetMapping("/yakHerdInventories")
@@ -218,7 +218,7 @@ public class HomeScreenController extends BaseController
218 218
 
219 219
     /**
220 220
      * 有无畜户数据明细(分页);按年、月倒序。
221
-     * <p>查询条件:所属年份(可选,默认当前年)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
221
+     * <p>查询条件:所属年份(可选,未传不过滤)、所属月份(可选,未传不过滤)、所属乡镇、所属村。
222 222
      * 数据源 {@code biz_livestock_ownership_household}。</p>
223 223
      */
224 224
     @GetMapping("/livestockOwnershipHouseholds")

+ 5 - 5
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/controller/LivestockResourceScreenController.java

@@ -53,7 +53,7 @@ public class LivestockResourceScreenController extends BaseController
53 53
      * 乡镇/村下拉可复用首页 {@code /bigScreen/home/townOptions}、{@code /villageTree}。
54 54
      * </p>
55 55
      *
56
-     * @param statYear      所属年份;未传默认当前自然年;按上报时间落在该年 1-1~12-31
56
+     * @param statYear      所属年份;未传不过滤(不按上报时间窗限制)
57 57
      * @param townDeptId    所属乡镇部门 ID,可选
58 58
      * @param villageDeptId 所属村部门 ID,可选
59 59
      */
@@ -73,8 +73,8 @@ public class LivestockResourceScreenController extends BaseController
73 73
      * 畜牧产品产量数据明细(分页);按 {@code stat_year}、{@code stat_month} 倒序。
74 74
      * <p>数据源 {@code biz_livestock_product_output};大屏全县口径。</p>
75 75
      *
76
-     * @param statYear      所属年份;未传默认当前自然年
77
-     * @param statMonth     所属月份;未传不过滤(该年全年,按月倒序)
76
+     * @param statYear      所属年份;未传不过滤
77
+     * @param statMonth     所属月份;未传不过滤
78 78
      * @param townDeptId    所属乡镇,可选
79 79
      * @param villageDeptId 所属村,可选
80 80
      */
@@ -95,8 +95,8 @@ public class LivestockResourceScreenController extends BaseController
95 95
      * 疫苗接种情况明细(分页);按 {@code stat_year}、{@code stat_month} 倒序。
96 96
      * <p>数据源 {@code biz_vaccination_data};大屏全县口径;免疫率优先用落库值。</p>
97 97
      *
98
-     * @param statYear      所属年份;未传默认当前自然年
99
-     * @param statMonth     所属月份;未传不过滤(该年全年,按月倒序)
98
+     * @param statYear      所属年份;未传不过滤
99
+     * @param statMonth     所属月份;未传不过滤
100 100
      * @param townDeptId    所属乡镇,可选
101 101
      * @param villageDeptId 所属村,可选
102 102
      */

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

@@ -31,7 +31,7 @@ public interface ICommonProsperityScreenService
31 31
     /**
32 32
      * 共富项目分类情况明细(按实施年限聚合各类型数量;分页由 Controller 启 PageHelper)。
33 33
      *
34
-     * @param statYear 所属年份;{@code null} 时默认当前自然年
34
+     * @param statYear 所属年份;{@code null} 时不过滤(跨年按实施年限倒序)
35 35
      */
36 36
     List<CommonProsperityProjectTypeDetailVo> listProjectTypeDetails(Integer statYear);
37 37
 }

+ 3 - 3
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/IHomeScreenService.java

@@ -61,7 +61,7 @@ public interface IHomeScreenService
61 61
     /**
62 62
      * 人均收入情况明细(分页由 Controller {@code startPage} 控制;按所属年份倒序)。
63 63
      *
64
-     * @param statYear 所属年份,可选;未传时默认当前自然年
64
+     * @param statYear 所属年份,可选;未传不过滤(跨年按年倒序)
65 65
      */
66 66
     List<HomeScreenPerCapitaIncomeListItemVo> listPerCapitaIncomes(Integer statYear);
67 67
 
@@ -69,8 +69,8 @@ public interface IHomeScreenService
69 69
      * 农牧户数据明细(分页由 Controller {@code startPage} 控制;按年、月倒序)。
70 70
      * 草场面积数据明细复用本方法,不另开接口。
71 71
      *
72
-     * @param statYear      所属年份,可选;未传默认当前自然年
73
-     * @param statMonth     所属月份,可选;未传不过滤月份(该年全年,按月倒序)
72
+     * @param statYear      所属年份,可选;未传不过滤
73
+     * @param statMonth     所属月份,可选;未传不过滤
74 74
      * @param townDeptId    所属乡镇,可选
75 75
      * @param villageDeptId 所属村,可选
76 76
      */

+ 3 - 3
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/ILivestockResourceScreenService.java

@@ -26,7 +26,7 @@ public interface ILivestockResourceScreenService
26 26
     /**
27 27
      * 三资具体问题上报明细(配合 Controller {@code startPage} 分页;按上报时间倒序)。
28 28
      *
29
-     * @param statYear      所属年份,null 则当前自然年
29
+     * @param statYear      所属年份,可选;未传不过滤
30 30
      * @param townDeptId    乡镇,可选
31 31
      * @param villageDeptId 村,可选
32 32
      */
@@ -36,7 +36,7 @@ public interface ILivestockResourceScreenService
36 36
     /**
37 37
      * 畜牧产品产量数据明细(配合分页;按所属年月倒序)。
38 38
      *
39
-     * @param statYear      所属年份,null 则当前自然年
39
+     * @param statYear      所属年份,可选;未传不过滤
40 40
      * @param statMonth     所属月份,null 则不过滤月份
41 41
      * @param townDeptId    乡镇,可选
42 42
      * @param villageDeptId 村,可选
@@ -47,7 +47,7 @@ public interface ILivestockResourceScreenService
47 47
     /**
48 48
      * 疫苗接种情况明细(配合分页;按所属年月倒序)。
49 49
      *
50
-     * @param statYear      所属年份,null 则当前自然年
50
+     * @param statYear      所属年份,可选;未传不过滤
51 51
      * @param statMonth     所属月份,null 则不过滤月份
52 52
      * @param townDeptId    乡镇,可选
53 53
      * @param villageDeptId 村,可选

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

@@ -20,7 +20,6 @@ import com.ruoyi.web.modules.screen.domain.vo.CommonProsperityScreenDashboardVo;
20 20
 import com.ruoyi.web.modules.screen.domain.vo.ScreenProjectListItemVo;
21 21
 import com.ruoyi.web.modules.screen.service.ICommonProsperityScreenService;
22 22
 import com.ruoyi.web.modules.screen.support.CommonProsperityScreenSupport;
23
-import com.ruoyi.web.modules.screen.support.HomeScreenSupport;
24 23
 
25 24
 /**
26 25
  * 大屏共同富裕统计服务实现。
@@ -91,14 +90,13 @@ public class CommonProsperityScreenServiceImpl implements ICommonProsperityScree
91 90
 
92 91
     /**
93 92
      * {@inheritDoc}
94
-     * <p>口径:{@code publish_status=1},按 {@code impl_year} 聚合;未传年份默认当前自然年。</p>
93
+     * <p>口径:{@code publish_status=1},按 {@code impl_year} 聚合;未传年份不过滤。</p>
95 94
      */
96 95
     @Override
97 96
     public List<CommonProsperityProjectTypeDetailVo> listProjectTypeDetails(Integer statYear)
98 97
     {
99
-        int year = statYear != null ? statYear : HomeScreenSupport.currentYearMonth().getYear();
100 98
         List<CommonProsperityProjectTypeDetailVo> list =
101
-                projectMapper.selectPublishedTypeDetailsByYear(year);
99
+                projectMapper.selectPublishedTypeDetailsByYear(statYear);
102 100
         return list != null ? list : new ArrayList<>();
103 101
     }
104 102
 

+ 8 - 16
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/impl/HomeScreenServiceImpl.java

@@ -3,7 +3,6 @@ package com.ruoyi.web.modules.screen.service.impl;
3 3
 import java.math.BigDecimal;
4 4
 import java.math.RoundingMode;
5 5
 import java.time.LocalDate;
6
-import java.time.YearMonth;
7 6
 import java.time.ZoneId;
8 7
 import java.util.Collections;
9 8
 import java.util.Date;
@@ -371,7 +370,7 @@ public class HomeScreenServiceImpl implements IHomeScreenService
371 370
     public List<HomeScreenPerCapitaIncomeListItemVo> listPerCapitaIncomes(Integer statYear)
372 371
     {
373 372
         BizDisposableIncome query = new BizDisposableIncome();
374
-        query.setStatYear(statYear != null ? statYear : HomeScreenSupport.currentYearMonth().getYear());
373
+        query.setStatYear(statYear);
375 374
         List<BizDisposableIncome> rows = bizDisposableIncomeMapper.selectBizDisposableIncomeList(query);
376 375
         return HomeScreenSupport.buildPerCapitaIncomeListItems(rows);
377 376
     }
@@ -380,9 +379,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
380 379
     public List<HomeScreenFarmerHouseholdListItemVo> listFarmerHouseholds(
381 380
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
382 381
     {
383
-        YearMonth now = HomeScreenSupport.currentYearMonth();
384 382
         BizFarmerHousehold query = new BizFarmerHousehold();
385
-        query.setStatYear(statYear != null ? statYear : now.getYear());
383
+        query.setStatYear(statYear);
386 384
         query.setStatMonth(statMonth);
387 385
         query.setTownDeptId(townDeptId);
388 386
         query.setVillageDeptId(villageDeptId);
@@ -396,9 +394,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
396 394
     public List<HomeScreenCooperativeDevelopmentListItemVo> listCooperativeDevelopments(
397 395
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
398 396
     {
399
-        YearMonth now = HomeScreenSupport.currentYearMonth();
400 397
         BizCooperativeDevelopment query = new BizCooperativeDevelopment();
401
-        query.setStatYear(statYear != null ? statYear : now.getYear());
398
+        query.setStatYear(statYear);
402 399
         query.setStatMonth(statMonth);
403 400
         query.setTownDeptId(townDeptId);
404 401
         query.setVillageDeptId(villageDeptId);
@@ -412,9 +409,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
412 409
     public List<HomeScreenFamilyRanchListItemVo> listFamilyRanches(
413 410
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
414 411
     {
415
-        YearMonth now = HomeScreenSupport.currentYearMonth();
416 412
         BizFamilyRanch query = new BizFamilyRanch();
417
-        query.setStatYear(statYear != null ? statYear : now.getYear());
413
+        query.setStatYear(statYear);
418 414
         query.setStatMonth(statMonth);
419 415
         query.setTownDeptId(townDeptId);
420 416
         query.setVillageDeptId(villageDeptId);
@@ -427,9 +423,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
427 423
     public List<HomeScreenLargeLivestockFarmerListItemVo> listLargeLivestockFarmers(
428 424
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
429 425
     {
430
-        YearMonth now = HomeScreenSupport.currentYearMonth();
431 426
         BizLargeLivestockFarmer query = new BizLargeLivestockFarmer();
432
-        query.setStatYear(statYear != null ? statYear : now.getYear());
427
+        query.setStatYear(statYear);
433 428
         query.setStatMonth(statMonth);
434 429
         query.setTownDeptId(townDeptId);
435 430
         query.setVillageDeptId(villageDeptId);
@@ -443,9 +438,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
443 438
     public List<HomeScreenYakOutboundReportListItemVo> listYakOutboundReports(
444 439
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
445 440
     {
446
-        YearMonth now = HomeScreenSupport.currentYearMonth();
447 441
         BizYakOutboundReport query = new BizYakOutboundReport();
448
-        query.setStatYear(statYear != null ? statYear : now.getYear());
442
+        query.setStatYear(statYear);
449 443
         query.setStatMonth(statMonth);
450 444
         query.setTownDeptId(townDeptId);
451 445
         query.setVillageDeptId(villageDeptId);
@@ -458,9 +452,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
458 452
     public List<HomeScreenYakHerdInventoryListItemVo> listYakHerdInventories(
459 453
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
460 454
     {
461
-        YearMonth now = HomeScreenSupport.currentYearMonth();
462 455
         BizYakHerdInventory query = new BizYakHerdInventory();
463
-        query.setStatYear(statYear != null ? statYear : now.getYear());
456
+        query.setStatYear(statYear);
464 457
         query.setStatMonth(statMonth);
465 458
         query.setTownDeptId(townDeptId);
466 459
         query.setVillageDeptId(villageDeptId);
@@ -473,9 +466,8 @@ public class HomeScreenServiceImpl implements IHomeScreenService
473 466
     public List<HomeScreenLivestockOwnershipHouseholdListItemVo> listLivestockOwnershipHouseholds(
474 467
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
475 468
     {
476
-        YearMonth now = HomeScreenSupport.currentYearMonth();
477 469
         BizLivestockOwnershipHousehold query = new BizLivestockOwnershipHousehold();
478
-        query.setStatYear(statYear != null ? statYear : now.getYear());
470
+        query.setStatYear(statYear);
479 471
         query.setStatMonth(statMonth);
480 472
         query.setTownDeptId(townDeptId);
481 473
         query.setVillageDeptId(villageDeptId);

+ 9 - 11
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/service/impl/LivestockResourceScreenServiceImpl.java

@@ -2,7 +2,6 @@ package com.ruoyi.web.modules.screen.service.impl;
2 2
 
3 3
 import java.time.LocalDate;
4 4
 import java.time.LocalDateTime;
5
-import java.time.YearMonth;
6 5
 import java.time.ZoneId;
7 6
 import java.util.Collections;
8 7
 import java.util.Date;
@@ -121,15 +120,16 @@ public class LivestockResourceScreenServiceImpl implements ILivestockResourceScr
121 120
     public List<LivestockResourceThreeAssetsProblemListItemVo> listThreeAssetsProblemReports(
122 121
             Integer statYear, Long townDeptId, Long villageDeptId)
123 122
     {
124
-        int year = statYear != null ? statYear : HomeScreenSupport.currentYearMonth().getYear();
125
-        LocalDate yearStart = LocalDate.of(year, 1, 1);
126
-        LocalDate yearEnd = LocalDate.of(year, 12, 31);
127
-
128 123
         BizThreeAssetsProblemReport query = new BizThreeAssetsProblemReport();
129 124
         query.setTownDeptId(townDeptId);
130 125
         query.setVillageDeptId(villageDeptId);
131
-        query.setBeginReportTime(toDate(yearStart));
132
-        query.setEndReportTime(toDate(yearEnd));
126
+        if (statYear != null)
127
+        {
128
+            LocalDate yearStart = LocalDate.of(statYear, 1, 1);
129
+            LocalDate yearEnd = LocalDate.of(statYear, 12, 31);
130
+            query.setBeginReportTime(toDate(yearStart));
131
+            query.setEndReportTime(toDate(yearEnd));
132
+        }
133 133
         // 大屏全县口径,清空 dataScope
134 134
         query.getParams().put("dataScope", "");
135 135
         List<BizThreeAssetsProblemReport> rows =
@@ -141,9 +141,8 @@ public class LivestockResourceScreenServiceImpl implements ILivestockResourceScr
141 141
     public List<LivestockResourceProductOutputListItemVo> listProductOutputs(
142 142
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
143 143
     {
144
-        YearMonth current = HomeScreenSupport.currentYearMonth();
145 144
         BizLivestockProductOutput query = new BizLivestockProductOutput();
146
-        query.setStatYear(statYear != null ? statYear : current.getYear());
145
+        query.setStatYear(statYear);
147 146
         query.setStatMonth(statMonth);
148 147
         query.setTownDeptId(townDeptId);
149 148
         query.setVillageDeptId(villageDeptId);
@@ -158,9 +157,8 @@ public class LivestockResourceScreenServiceImpl implements ILivestockResourceScr
158 157
     public List<LivestockResourceVaccinationListItemVo> listVaccinationData(
159 158
             Integer statYear, Integer statMonth, Long townDeptId, Long villageDeptId)
160 159
     {
161
-        YearMonth current = HomeScreenSupport.currentYearMonth();
162 160
         BizVaccinationData query = new BizVaccinationData();
163
-        query.setStatYear(statYear != null ? statYear : current.getYear());
161
+        query.setStatYear(statYear);
164 162
         query.setStatMonth(statMonth);
165 163
         query.setTownDeptId(townDeptId);
166 164
         query.setVillageDeptId(villageDeptId);

+ 2 - 0
baqing-admin/src/main/resources/mapper/prosperity/BizCommonProsperityProjectMapper.xml

@@ -143,7 +143,9 @@
143 143
                sum(case when p.project_type = 3 then 1 else 0 end) as otherProjectCount
144 144
         from biz_common_prosperity_project p
145 145
         where p.publish_status = 1
146
+          <if test="statYear != null">
146 147
           and p.impl_year = #{statYear}
148
+          </if>
147 149
         group by p.impl_year
148 150
         order by p.impl_year desc
149 151
     </select>

+ 2 - 2
baqing-admin/src/test/java/com/ruoyi/web/modules/screen/controller/CommonProsperityScreenControllerApiTest.java

@@ -196,8 +196,8 @@ class CommonProsperityScreenControllerApiTest
196 196
     }
197 197
 
198 198
     @Test
199
-    @DisplayName("GET projectTypeDetails 缺年份传 null 由服务默认当前年")
200
-    void api_projectTypeDetails_defaultYear() throws Exception
199
+    @DisplayName("GET projectTypeDetails 缺年份传 null 由服务不过滤年份")
200
+    void api_projectTypeDetails_noYearFilter() throws Exception
201 201
     {
202 202
         when(commonProsperityScreenService.listProjectTypeDetails(null)).thenReturn(Collections.emptyList());
203 203
         mockMvc.perform(get("/bigScreen/commonProsperity/projectTypeDetails"))

+ 4 - 6
baqing-admin/src/test/java/com/ruoyi/web/modules/screen/service/impl/CommonProsperityScreenServiceImplTest.java

@@ -27,7 +27,6 @@ import com.ruoyi.web.modules.prosperity.mapper.BizCommonProsperityProjectMapper;
27 27
 import com.ruoyi.web.modules.prosperity.mapper.BizCommonProsperityProjectOpImageMapper;
28 28
 import com.ruoyi.web.modules.screen.domain.vo.CommonProsperityProjectTypeDetailVo;
29 29
 import com.ruoyi.web.modules.screen.domain.vo.CommonProsperityScreenDashboardVo;
30
-import com.ruoyi.web.modules.screen.support.HomeScreenSupport;
31 30
 
32 31
 /**
33 32
  * DP-GTFY-UT-014、015
@@ -164,16 +163,15 @@ class CommonProsperityScreenServiceImplTest
164 163
     }
165 164
 
166 165
     @Test
167
-    @DisplayName("分类明细:未传年份默认当前自然年")
168
-    void listProjectTypeDetails_defaultCurrentYear()
166
+    @DisplayName("分类明细:未传年份不过滤")
167
+    void listProjectTypeDetails_noYearFilter()
169 168
     {
170
-        int currentYear = HomeScreenSupport.currentYearMonth().getYear();
171
-        when(projectMapper.selectPublishedTypeDetailsByYear(currentYear)).thenReturn(Collections.emptyList());
169
+        when(projectMapper.selectPublishedTypeDetailsByYear(null)).thenReturn(Collections.emptyList());
172 170
 
173 171
         List<CommonProsperityProjectTypeDetailVo> list = service.listProjectTypeDetails(null);
174 172
         assertNotNull(list);
175 173
         assertTrue(list.isEmpty());
176
-        verify(projectMapper).selectPublishedTypeDetailsByYear(currentYear);
174
+        verify(projectMapper).selectPublishedTypeDetailsByYear(null);
177 175
     }
178 176
 
179 177
     private static BizCommonProsperityAchievement sampleAchievementRow()

+ 24 - 32
baqing-admin/src/test/java/com/ruoyi/web/modules/screen/service/impl/HomeScreenServiceImplTest.java

@@ -203,14 +203,13 @@ class HomeScreenServiceImplTest
203 203
     }
204 204
 
205 205
     @Test
206
-    @DisplayName("DP-SY-UT-031b 人均收入明细未传年份默认当前年")
207
-    void ut031b_perCapitaIncomesDefaultCurrentYear()
206
+    @DisplayName("DP-SY-UT-031b 人均收入明细未传年份不过滤")
207
+    void ut031b_perCapitaIncomesNoYearFilter()
208 208
     {
209
-        int currentYear = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth().getYear();
210 209
         when(bizDisposableIncomeMapper.selectBizDisposableIncomeList(any(BizDisposableIncome.class)))
211 210
                 .thenAnswer(invocation -> {
212 211
                     BizDisposableIncome q = invocation.getArgument(0);
213
-                    assertEquals(currentYear, q.getStatYear().intValue());
212
+                    assertNull(q.getStatYear());
214 213
                     return Collections.emptyList();
215 214
                 });
216 215
 
@@ -252,14 +251,13 @@ class HomeScreenServiceImplTest
252 251
     }
253 252
 
254 253
     @Test
255
-    @DisplayName("DP-SY-UT-032b 农牧户明细未传年默认当前年,未传月不过滤")
256
-    void ut032b_farmerHouseholdsDefaultCurrentYearNoMonth()
254
+    @DisplayName("DP-SY-UT-032b 农牧户明细未传年月不过滤")
255
+    void ut032b_farmerHouseholdsNoYearMonthFilter()
257 256
     {
258
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
259 257
         when(bizFarmerHouseholdMapper.selectBizFarmerHouseholdList(any(BizFarmerHousehold.class)))
260 258
                 .thenAnswer(invocation -> {
261 259
                     BizFarmerHousehold q = invocation.getArgument(0);
262
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
260
+                    assertNull(q.getStatYear());
263 261
                     assertNull(q.getStatMonth());
264 262
                     return Collections.emptyList();
265 263
                 });
@@ -295,14 +293,13 @@ class HomeScreenServiceImplTest
295 293
     }
296 294
 
297 295
     @Test
298
-    @DisplayName("DP-SY-UT-033b 合作社明细未传年默认当前年,未传月不过滤")
299
-    void ut033b_cooperativeDevelopmentsDefaultCurrentYearNoMonth()
296
+    @DisplayName("DP-SY-UT-033b 合作社明细未传年月不过滤")
297
+    void ut033b_cooperativeDevelopmentsNoYearMonthFilter()
300 298
     {
301
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
302 299
         when(bizCooperativeDevelopmentMapper.selectBizCooperativeDevelopmentList(any(BizCooperativeDevelopment.class)))
303 300
                 .thenAnswer(invocation -> {
304 301
                     BizCooperativeDevelopment q = invocation.getArgument(0);
305
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
302
+                    assertNull(q.getStatYear());
306 303
                     assertNull(q.getStatMonth());
307 304
                     return Collections.emptyList();
308 305
                 });
@@ -333,14 +330,13 @@ class HomeScreenServiceImplTest
333 330
     }
334 331
 
335 332
     @Test
336
-    @DisplayName("DP-SY-UT-034b 家庭牧场明细未传年默认当前年,未传月不过滤")
337
-    void ut034b_familyRanchesDefaultCurrentYearNoMonth()
333
+    @DisplayName("DP-SY-UT-034b 家庭牧场明细未传年月不过滤")
334
+    void ut034b_familyRanchesNoYearMonthFilter()
338 335
     {
339
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
340 336
         when(bizFamilyRanchMapper.selectBizFamilyRanchList(any(BizFamilyRanch.class)))
341 337
                 .thenAnswer(invocation -> {
342 338
                     BizFamilyRanch q = invocation.getArgument(0);
343
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
339
+                    assertNull(q.getStatYear());
344 340
                     assertNull(q.getStatMonth());
345 341
                     return Collections.emptyList();
346 342
                 });
@@ -372,14 +368,13 @@ class HomeScreenServiceImplTest
372 368
     }
373 369
 
374 370
     @Test
375
-    @DisplayName("DP-SY-UT-035b 养殖大户明细未传年默认当前年,未传月不过滤")
376
-    void ut035b_largeLivestockFarmersDefaultCurrentYearNoMonth()
371
+    @DisplayName("DP-SY-UT-035b 养殖大户明细未传年月不过滤")
372
+    void ut035b_largeLivestockFarmersNoYearMonthFilter()
377 373
     {
378
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
379 374
         when(bizLargeLivestockFarmerMapper.selectBizLargeLivestockFarmerList(any(BizLargeLivestockFarmer.class)))
380 375
                 .thenAnswer(invocation -> {
381 376
                     BizLargeLivestockFarmer q = invocation.getArgument(0);
382
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
377
+                    assertNull(q.getStatYear());
383 378
                     assertNull(q.getStatMonth());
384 379
                     return Collections.emptyList();
385 380
                 });
@@ -412,14 +407,13 @@ class HomeScreenServiceImplTest
412 407
     }
413 408
 
414 409
     @Test
415
-    @DisplayName("DP-SY-UT-036b 牦牛出栏明细未传年默认当前年,未传月不过滤")
416
-    void ut036b_yakOutboundReportsDefaultCurrentYearNoMonth()
410
+    @DisplayName("DP-SY-UT-036b 牦牛出栏明细未传年月不过滤")
411
+    void ut036b_yakOutboundReportsNoYearMonthFilter()
417 412
     {
418
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
419 413
         when(bizYakOutboundReportMapper.selectBizYakOutboundReportList(any(BizYakOutboundReport.class)))
420 414
                 .thenAnswer(invocation -> {
421 415
                     BizYakOutboundReport q = invocation.getArgument(0);
422
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
416
+                    assertNull(q.getStatYear());
423 417
                     assertNull(q.getStatMonth());
424 418
                     return Collections.emptyList();
425 419
                 });
@@ -451,14 +445,13 @@ class HomeScreenServiceImplTest
451 445
     }
452 446
 
453 447
     @Test
454
-    @DisplayName("DP-SY-UT-037b 牦牛存栏明细未传年默认当前年,未传月不过滤")
455
-    void ut037b_yakHerdInventoriesDefaultCurrentYearNoMonth()
448
+    @DisplayName("DP-SY-UT-037b 牦牛存栏明细未传年月不过滤")
449
+    void ut037b_yakHerdInventoriesNoYearMonthFilter()
456 450
     {
457
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
458 451
         when(bizYakHerdInventoryMapper.selectBizYakHerdInventoryList(any(BizYakHerdInventory.class)))
459 452
                 .thenAnswer(invocation -> {
460 453
                     BizYakHerdInventory q = invocation.getArgument(0);
461
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
454
+                    assertNull(q.getStatYear());
462 455
                     assertNull(q.getStatMonth());
463 456
                     return Collections.emptyList();
464 457
                 });
@@ -491,15 +484,14 @@ class HomeScreenServiceImplTest
491 484
     }
492 485
 
493 486
     @Test
494
-    @DisplayName("DP-SY-UT-038b 有无畜户明细未传年默认当前年,未传月不过滤")
495
-    void ut038b_livestockOwnershipHouseholdsDefaultCurrentYearNoMonth()
487
+    @DisplayName("DP-SY-UT-038b 有无畜户明细未传年月不过滤")
488
+    void ut038b_livestockOwnershipHouseholdsNoYearMonthFilter()
496 489
     {
497
-        java.time.YearMonth now = com.ruoyi.web.modules.screen.support.HomeScreenSupport.currentYearMonth();
498 490
         when(bizLivestockOwnershipHouseholdMapper.selectBizLivestockOwnershipHouseholdList(
499 491
                 any(BizLivestockOwnershipHousehold.class)))
500 492
                 .thenAnswer(invocation -> {
501 493
                     BizLivestockOwnershipHousehold q = invocation.getArgument(0);
502
-                    assertEquals(now.getYear(), q.getStatYear().intValue());
494
+                    assertNull(q.getStatYear());
503 495
                     assertNull(q.getStatMonth());
504 496
                     return Collections.emptyList();
505 497
                 });

+ 22 - 2
baqing-admin/src/test/java/com/ruoyi/web/modules/screen/service/impl/LivestockResourceScreenServiceImplTest.java

@@ -2,6 +2,7 @@ package com.ruoyi.web.modules.screen.service.impl;
2 2
 
3 3
 import static org.junit.jupiter.api.Assertions.assertEquals;
4 4
 import static org.junit.jupiter.api.Assertions.assertNotNull;
5
+import static org.junit.jupiter.api.Assertions.assertNull;
5 6
 import static org.mockito.ArgumentMatchers.any;
6 7
 import static org.mockito.ArgumentMatchers.anyInt;
7 8
 import static org.mockito.ArgumentMatchers.eq;
@@ -180,7 +181,7 @@ class LivestockResourceScreenServiceImplTest
180 181
     }
181 182
 
182 183
     @Test
183
-    @DisplayName("三资问题上报明细默认当前年并组装字段")
184
+    @DisplayName("三资问题上报明细按年过滤并组装字段")
184 185
     void listThreeAssetsProblemReports()
185 186
     {
186 187
         BizThreeAssetsProblemReport row = new BizThreeAssetsProblemReport();
@@ -190,7 +191,12 @@ class LivestockResourceScreenServiceImplTest
190 191
         row.setProblemDetail("道路硬化问题");
191 192
         row.setHandleResult("已整改");
192 193
         when(bizThreeAssetsProblemReportMapper.selectBizThreeAssetsProblemReportList(any()))
193
-                .thenReturn(Collections.singletonList(row));
194
+                .thenAnswer(invocation -> {
195
+                    BizThreeAssetsProblemReport q = invocation.getArgument(0);
196
+                    assertNotNull(q.getBeginReportTime());
197
+                    assertNotNull(q.getEndReportTime());
198
+                    return Collections.singletonList(row);
199
+                });
194 200
 
195 201
         java.util.List<LivestockResourceThreeAssetsProblemListItemVo> list =
196 202
                 service.listThreeAssetsProblemReports(2026, 101L, 201L);
@@ -203,6 +209,20 @@ class LivestockResourceScreenServiceImplTest
203 209
         assertEquals("已整改", list.get(0).getHandleResult());
204 210
     }
205 211
 
212
+    @Test
213
+    @DisplayName("三资问题上报明细未传年份不过滤上报时间窗")
214
+    void listThreeAssetsProblemReports_noYearFilter()
215
+    {
216
+        when(bizThreeAssetsProblemReportMapper.selectBizThreeAssetsProblemReportList(any()))
217
+                .thenAnswer(invocation -> {
218
+                    BizThreeAssetsProblemReport q = invocation.getArgument(0);
219
+                    assertNull(q.getBeginReportTime());
220
+                    assertNull(q.getEndReportTime());
221
+                    return Collections.emptyList();
222
+                });
223
+        assertEquals(0, service.listThreeAssetsProblemReports(null, null, null).size());
224
+    }
225
+
206 226
     @Test
207 227
     @DisplayName("DP-XM-UT-009 产量明细分页")
208 228
     void listProductOutputs()

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

@@ -246,7 +246,7 @@ flowchart TD
246 246
 
247 247
 | 项 | 规则 |
248 248
 | --- | --- |
249
-| 筛选 | **所属年份**(实施年限);未选时默认**当前自然年** |
249
+| 筛选 | **所属年份**(实施年限);未选时**不过滤**(跨年按实施年限倒序) |
250 250
 | 数据口径 | 已发布项目(`publish_status=1`),按所属年份聚合;与饼图纳入规则一致 |
251 251
 | 列表字段 | **所属年份**、**项目总数**、**和美乡村建设项目数**、**人居环境整治提升项目数**、**其他项目投入数**(单位:个) |
252 252
 | 排序 | 按所属年份**倒序** |
@@ -359,7 +359,7 @@ flowchart TD
359 359
 | DP-08 | 项目列表 | 分页正常;行内可见类型、名称、简介、内容、周期、图视;无单独详情页跳转 |
360 360
 | DP-09 | 后台补录后刷新 | 补录某月成果或发布项目后,大屏刷新可见新数据 |
361 361
 | DP-10 | 下架项目 | 已下架项目不再出现在分类与列表 |
362
-| DP-11 | 分类明细 | 明细弹窗按所属年展示总数及三类数量;默认当前年;支持分页;年份倒序 |
362
+| DP-11 | 分类明细 | 明细弹窗按所属年展示总数及三类数量;未选年可跨年分页;支持分页;年份倒序 |
363 363
 
364 364
 ---
365 365
 
@@ -372,6 +372,7 @@ flowchart TD
372 372
 | 1.2 | 2026-07-24 | **总览与按月图表**统一按所选年 **Y** 的 1~12 月取数;取消滚动 12 月窗口 |
373 373
 | 1.3 | 2026-07-24 | **总览 / 数字赋能**改为所选年台账**最大统计月**的单月数据;按月图表仍为该年 1~12 月 |
374 374
 | 1.4 | 2026-07-24 | 按月图表改为所选年 **1~最大月**;与管理端年度报告口径一致 |
375
+| 1.6 | 2026-08-18 | §5.10.1 / DP-11:分类明细未选年份不过滤 |
375 376
 | 1.5 | 2026-07-24 | 新增 **§5.10.1** 共富项目分类情况明细(下钻);验收 DP-11 |
376 377
 
377 378
 ---

+ 2 - 1
doc/大屏/共同富裕/大屏共同富裕技术方案.md

@@ -233,7 +233,7 @@
233 233
 
234 234
 | 参数 | 类型 | 必填 | 说明 |
235 235
 | --- | --- | --- | --- |
236
-| `statYear` | int | N | 所属年份(实施年限);**未传默认当前自然年** |
236
+| `statYear` | int | N | 所属年份(实施年限);**未传不过滤(跨年按实施年限倒序)** |
237 237
 | `pageNum` | int | N | 默认 `1` |
238 238
 | `pageSize` | int | N | 默认若依分页 |
239 239
 
@@ -286,4 +286,5 @@ SQL 示例:`sql/big_screen_common_prosperity_perm.sql`(挂载「大屏」父
286 286
 | 1.1 | 2026-07-24 | 看板 `monthly` 改回所选年 1~12 月(与 `summary` 同源),不再覆盖为滚动 12 月 |
287 287
 | 1.2 | 2026-07-24 | 看板 `summary` 改为所选年**最大统计月**单月值;`monthly` 仍为该年 1~12 月 |
288 288
 | 1.3 | 2026-07-24 | `monthly` 改为所选年 1~最大月;与管理端年度报告共用 Aggregator 口径 |
289
+| 1.5 | 2026-08-18 | `/projectTypeDetails`:年份未传不过滤(跨年按实施年限倒序聚合) |
289 290
 | 1.4 | 2026-07-24 | 新增共富项目分类情况明细 `GET /projectTypeDetails`(分页、按年聚合) |

+ 2 - 1
doc/大屏/共同富裕/大屏共同富裕测试用例.md

@@ -82,7 +82,7 @@
82 82
 | DP-GTFY-API-027 | 权限 | 有大屏无成果写 | 接口测试 | Postman | 只读 | 仅有 query | `GET` 成功;`POST /commonProsperity/achievement` 失败 | 大屏可读;台账不可写 |
83 83
 | DP-GTFY-API-028 | 一致性 | 切年数据不串 | 接口测试 | Postman | DP-02 | 2025、2026 各不同数据 | 分别 `statYear=2025/2026` | 各年 `monthly`/项目集合互不混入 |
84 84
 | DP-GTFY-API-029 | 分类明细 | 指定年有数据 | 接口测试 | Postman | DP-11、§5.10.1 | 2026 已发布三类项目 | `GET .../projectTypeDetails?statYear=2026` | `code` 成功;`rows[0].statYear=2026`;`totalCount`=三类之和;各类型 count 正确 |
85
-| DP-GTFY-API-030 | 分类明细 | 缺年份默认当前年 | 接口测试 | Postman | §5.10.1 | 已登录;当前年有/无项目均可 | 不传 `statYear` | 成功;按当前自然年聚合(无数据则 `rows=[]`) |
85
+| DP-GTFY-API-030 | 分类明细 | 缺年份不过滤 | 接口测试 | Postman | §5.10.1 | 已登录;库中有多年项目 | 不传 `statYear` | 成功;按实施年限倒序返回多年聚合行(无数据则 `rows=[]`) |
86 86
 | DP-GTFY-API-031 | 分类明细 | 未发布不计 | 接口测试 | Postman | 业务约束 | 该年仅未发布项目 | `GET projectTypeDetails` | `rows=[]` 或无该年行 |
87 87
 | DP-GTFY-API-032 | 分类明细 | 分页参数 | 接口测试 | Postman | 分页 | 已登录 | `pageNum=1&pageSize=10` | 成功;`total`/`rows` 符合 PageHelper |
88 88
 
@@ -182,4 +182,5 @@ await expect(page.locator('[data-chart]')).toHaveCount(6); // 集体经济/就
182 182
 | 版本 | 说明 |
183 183
 | --- | --- |
184 184
 | 1.0 | 初版:单元 18、接口 28、UI 25;覆盖 DP-01~10 与正常/异常/约束;Playwright+Chrome;Base `/bigScreen/commonProsperity` |
185
+| 1.2 | 分类明细缺年份改为不过滤(API-030) |
185 186
 | 1.1 | 增补分类情况明细 API-029~032(DP-11);成果口径改为最大月 / 1~最大月 |

+ 6 - 5
doc/大屏/畜牧资源/大屏畜牧资源技术方案.md

@@ -436,7 +436,7 @@ XML:`mapper/screen/LivestockResourceScreenMapper.xml`。
436 436
 
437 437
 | 参数 | 类型 | 必填 | 说明 |
438 438
 | --- | --- | --- | --- |
439
-| `statYear` | int | N | 所属年份;未传默认**当前自然年**;按 `report_time` 落在该年 1-1~12-31 |
439
+| `statYear` | int | N | 所属年份;**未传不过滤**;传入则按 `report_time` 落在该年 1-1~12-31 |
440 440
 | `townDeptId` | long | N | 所属乡镇 |
441 441
 | `villageDeptId` | long | N | 所属村 |
442 442
 | `pageNum` / `pageSize` | int | N | 分页 |
@@ -467,8 +467,8 @@ XML:`mapper/screen/LivestockResourceScreenMapper.xml`。
467 467
 
468 468
 | 参数 | 类型 | 必填 | 说明 |
469 469
 | --- | --- | --- | --- |
470
-| `statYear` | int | N | 所属年份;未传默认**当前自然年** |
471
-| `statMonth` | int | N | 所属月份;未传不过滤(该年全年,按月倒序) |
470
+| `statYear` | int | N | 所属年份;**未传不过滤(支持跨多年全量翻页)** |
471
+| `statMonth` | int | N | 所属月份;未传不过滤 |
472 472
 | `townDeptId` | long | N | 所属乡镇 |
473 473
 | `villageDeptId` | long | N | 所属村 |
474 474
 | `pageNum` / `pageSize` | int | N | 分页 |
@@ -498,8 +498,8 @@ XML:`mapper/screen/LivestockResourceScreenMapper.xml`。
498 498
 
499 499
 | 参数 | 类型 | 必填 | 说明 |
500 500
 | --- | --- | --- | --- |
501
-| `statYear` | int | N | 所属年份;未传默认**当前自然年** |
502
-| `statMonth` | int | N | 所属月份;未传不过滤(该年全年,按月倒序) |
501
+| `statYear` | int | N | 所属年份;**未传不过滤(支持跨多年全量翻页)** |
502
+| `statMonth` | int | N | 所属月份;未传不过滤 |
503 503
 | `townDeptId` | long | N | 所属乡镇 |
504 504
 | `villageDeptId` | long | N | 所属村 |
505 505
 | `pageNum` / `pageSize` | int | N | 分页 |
@@ -570,6 +570,7 @@ SQL 示例:`sql/big_screen_livestock_resource_perm.sql`(挂载「大屏」
570 570
 
571 571
 | 版本 | 日期 | 说明 |
572 572
 | --- | --- | --- |
573
+| 1.17 | 2026-08-18 | 明细分页年份未传一律不过滤:`/threeAssetsProblemReports`、`/productOutputs`、`/vaccinationData` |
573 574
 | 1.16 | 2026-08-18 | `/productOutputs`、`/vaccinationData`:月份未传不过滤(该年全年);年份未传仍默认当前年 |
574 575
 | 1.15 | 2026-07-24 | 新增兽医数量明细分页接口 `/vetCounts`(按乡镇汇总) |
575 576
 | 1.13 | 2026-07-24 | 新增畜牧产品产量数据明细分页接口 `/productOutputs` |

+ 3 - 2
doc/大屏/首页/大屏首页功能需求.md

@@ -89,8 +89,8 @@
89 89
 | **合作社经营模式分类** | 所选年 **Y** 内 `biz_cooperative_development` 最大填报月按 `business_model` 计数(整村/股份/联合/多种经营/公司型/其他);饼图;单位**个**;字段 **`cooperativeBusinessModel`** |
90 90
 | **农牧户分类** | 所选年 **Y** 内 `biz_farmer_household` 最大填报月各分类标记为「是」的村级记录数(纯牧户/无畜户/绝户/超载牧户/需要封顶/需要保底);柱状图;单位**个**;字段 **`farmerHouseholdClassification`** |
91 91
 | **人均收入** | `biz_disposable_income` 以库中**最大所属年**为终点向前共 5 年双折线:农村居民人均可支配收入、脱贫人口人均纯收入;缺年补 0;无数据则空;单位**元**;**不随所选年 Y 切换**;字段 **`perCapitaIncomeTrend`** |
92
-| **人均收入明细** | 独立接口分页查询 `biz_disposable_income`;条件:所属年份(可选,**默认当前年**);按**所属年份倒序**;返回年份、农村居民人均可支配收入、增幅、增速、脱贫人口人均纯收入 |
93
-| **农牧户数据明细** | 独立接口分页查询 `biz_farmer_household`;条件:年(可选,**默认当前年**)、月(可选,**未传不过滤**)、乡镇、村;按**年、月倒序**;返回全部业务列表字段 |
92
+| **人均收入明细** | 独立接口分页查询 `biz_disposable_income`;条件:所属年份(可选,**未传不过滤**);按**所属年份倒序**;返回年份、农村居民人均可支配收入、增幅、增速、脱贫人口人均纯收入 |
93
+| **农牧户数据明细** | 独立接口分页查询 `biz_farmer_household`;条件:年(可选,**未传不过滤**)、月(可选,**未传不过滤**)、乡镇、村;按**年、月倒序**;返回全部业务列表字段 |
94 94
 | **草场面积数据明细** | **复用**农牧户数据明细接口(同表同条件;面积字段含 `pasture_contract_area` 等);**不另开**独立接口 |
95 95
 | **合作社数据明细** | 独立接口分页查询 `biz_cooperative_development`;条件同农牧户明细;按**年、月倒序**;返回全部业务列表字段 |
96 96
 | **家庭牧场数据明细** | 独立接口分页查询 `biz_family_ranch`;条件同农牧户明细;按**年、月倒序**;返回全部业务列表字段 |
@@ -503,6 +503,7 @@ flowchart TB
503 503
 
504 504
 | 版本 | 日期 | 说明 |
505 505
 | --- | --- | --- |
506
+| 1.22 | 2026-08-18 | 大屏明细分页:年份未传一律不过滤(跨年全量翻页);含人均收入/农牧户/合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户 |
506 507
 | 1.21 | 2026-08-18 | 大屏明细分页:月份未传一律不过滤(该年全年);年份未传仍默认当前年。含合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户 |
507 508
 | 1.19 | 2026-07-24 | 人均收入趋势改为以库中最大所属年为终点的最近 5 年 |
508 509
 | 1.18 | 2026-07-24 | 牦牛月度出栏趋势改为按填报最大月 N 输出 1~N 月(区间缺月补 0) |

+ 7 - 6
doc/大屏/首页/大屏首页技术方案.md

@@ -488,7 +488,7 @@
488 488
 
489 489
 | 参数 | 类型 | 必填 | 说明 |
490 490
 | --- | --- | --- | --- |
491
-| `statYear` | int | N | 所属年份;**未传默认当前自然年** |
491
+| `statYear` | int | N | 所属年份;**未传不过滤(跨年按年倒序)** |
492 492
 | `pageNum` / `pageSize` | int | N | 分页(PageHelper) |
493 493
 
494 494
 排序:`stat_year DESC, id DESC`。
@@ -515,8 +515,8 @@
515 515
 
516 516
 | 参数 | 类型 | 必填 | 说明 |
517 517
 | --- | --- | --- | --- |
518
-| `statYear` | int | N | 所属年份;**未传默认当前自然年** |
519
-| `statMonth` | int | N | 所属月份;**未传不过滤(该年全年按月倒序)** |
518
+| `statYear` | int | N | 所属年份;**未传不过滤(支持跨多年全量翻页)** |
519
+| `statMonth` | int | N | 所属月份;**未传不过滤** |
520 520
 | `townDeptId` | long | N | 所属乡镇 |
521 521
 | `villageDeptId` | long | N | 所属村 |
522 522
 | `pageNum` / `pageSize` | int | N | 分页(PageHelper) |
@@ -537,8 +537,8 @@
537 537
 
538 538
 | 参数 | 类型 | 必填 | 说明 |
539 539
 | --- | --- | --- | --- |
540
-| `statYear` | int | N | 所属年份;**未传默认当前自然年** |
541
-| `statMonth` | int | N | 所属月份;**未传不过滤(该年全年按月倒序)** |
540
+| `statYear` | int | N | 所属年份;**未传不过滤(支持跨多年全量翻页)** |
541
+| `statMonth` | int | N | 所属月份;**未传不过滤** |
542 542
 | `townDeptId` | long | N | 所属乡镇 |
543 543
 | `villageDeptId` | long | N | 所属村 |
544 544
 | `pageNum` / `pageSize` | int | N | 分页(PageHelper) |
@@ -554,7 +554,7 @@
554 554
 | 3.11 | `/yakHerdInventories` | `biz_yak_herd_inventory` | 全部业务字段(含公母牛/奶牛/羊/保险等) |
555 555
 | 3.12 | `/livestockOwnershipHouseholds` | `biz_livestock_ownership_household` | 全部业务字段(有畜/无畜户数人数劳动力等) |
556 556
 
557
-查询条件与 3.6 相同:年未传默认当前年,月未传不过滤,乡镇/村可选;按年、月倒序;全县口径清空 dataScope。
557
+查询条件与 3.6 相同:年/月未传不过滤,乡镇/村可选;按年、月倒序;全县口径清空 dataScope。
558 558
 
559 559
 ### 3.13 牦牛存出栏情况明细
560 560
 
@@ -665,6 +665,7 @@ SQL 示例:`sql/big_screen_home_perm.sql`(挂载「大屏」父菜单下)
665 665
 
666 666
 | 版本 | 日期 | 说明 |
667 667
 | --- | --- | --- |
668
+| 1.25 | 2026-08-18 | 首页明细分页:年份未传一律不过滤(跨年全量翻页);含人均收入/农牧户/合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户 |
668 669
 | 1.24 | 2026-08-18 | 首页明细分页:月份未传一律不过滤;含合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户(农牧户已在 1.23) |
669 670
 | 1.23 | 2026-08-18 | `/farmerHouseholds`:月份未传不过滤(该年全年按月倒序);年份未传仍默认当前年 |
670 671
 | 1.21 | 2026-07-24 | 看板屏蔽:`subsidy`、`grassland`、`outboundMonthly`、`inventoryChange` |

+ 9 - 8
doc/大屏/首页/大屏首页测试用例.md

@@ -83,14 +83,14 @@
83 83
 | DP-SY-UT-028 | 产业总览 | 农牧户合计 | 单元测试 | JUnit5 | §5.2 | Mock `biz_farmer_household` 所选年最大月 | `loadDashboard(Y)` | `pastureCount` 为该年月全县村级 `household_count` 合计 |
84 84
 | DP-SY-UT-029 | 产业总览 | 合作社等计数 | 单元测试 | JUnit5 | §5.2 | Mock 三表所选年最大月 | `loadDashboard(Y)` | `cooperativeCount`/`familyRanchCount`/`largeLivestockFarmerCount` 为该年月记录条数 |
85 85
 | DP-SY-UT-030 | 产业总览 | 有畜户/草场面积 | 单元测试 | JUnit5 | §5.2 | Mock 有无畜户与农牧户面积 | `loadDashboard(Y)` | `withLivestockHouseholdCount`/`grasslandAreaMu` 取所选年最大月合计 |
86
-| DP-SY-UT-031 | 人均收入明细 | 字段映射与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_disposable_income` | `listPerCapitaIncomes(2025)` / `null` | 字段完整;未传年默认当前年 |
87
-| DP-SY-UT-032 | 农牧户明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_farmer_household` | `listFarmerHouseholds(...)` / `null,null` | 字段完整;未传年默认当前年;未传月不过滤 |
88
-| DP-SY-UT-033 | 合作社明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_cooperative_development` | `listCooperativeDevelopments(...)` | 字段完整;未传年默认当前年;未传月不过滤 |
89
-| DP-SY-UT-034 | 家庭牧场明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_family_ranch` | `listFamilyRanches(...)` | 字段完整;未传年默认当前年;未传月不过滤 |
90
-| DP-SY-UT-035 | 养殖大户明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_large_livestock_farmer` | `listLargeLivestockFarmers(...)` | 字段完整;未传年默认当前年;未传月不过滤 |
91
-| DP-SY-UT-036 | 牦牛出栏明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_yak_outbound_report` | `listYakOutboundReports(...)` | 字段完整;未传年默认当前年;未传月不过滤 |
92
-| DP-SY-UT-037 | 牦牛存栏明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_yak_herd_inventory` | `listYakHerdInventories(...)` | 字段完整;未传年默认当前年;未传月不过滤 |
93
-| DP-SY-UT-038 | 有无畜户明细 | 条件过滤与默认年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_livestock_ownership_household` | `listLivestockOwnershipHouseholds(...)` | 字段完整;未传年默认当前年;未传月不过滤 |
86
+| DP-SY-UT-031 | 人均收入明细 | 字段映射与未传年 | 单元测试 | JUnit5 | §2.5 | Mock `biz_disposable_income` | `listPerCapitaIncomes(2025)` / `null` | 字段完整;未传年不过滤 |
87
+| DP-SY-UT-032 | 农牧户明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_farmer_household` | `listFarmerHouseholds(...)` / `null,null` | 字段完整;未传年月不过滤 |
88
+| DP-SY-UT-033 | 合作社明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_cooperative_development` | `listCooperativeDevelopments(...)` | 字段完整;未传年月不过滤 |
89
+| DP-SY-UT-034 | 家庭牧场明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_family_ranch` | `listFamilyRanches(...)` | 字段完整;未传年月不过滤 |
90
+| DP-SY-UT-035 | 养殖大户明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_large_livestock_farmer` | `listLargeLivestockFarmers(...)` | 字段完整;未传年月不过滤 |
91
+| DP-SY-UT-036 | 牦牛出栏明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_yak_outbound_report` | `listYakOutboundReports(...)` | 字段完整;未传年月不过滤 |
92
+| DP-SY-UT-037 | 牦牛存栏明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_yak_herd_inventory` | `listYakHerdInventories(...)` | 字段完整;未传年月不过滤 |
93
+| DP-SY-UT-038 | 有无畜户明细 | 条件过滤与未传年月 | 单元测试 | JUnit5 | §2.5 | Mock `biz_livestock_ownership_household` | `listLivestockOwnershipHouseholds(...)` | 字段完整;未传年月不过滤 |
94 94
 | DP-SY-UT-039 | 存出栏情况明细 | 关联与跨年全量 | 单元测试 | JUnit5 | §2.5 | Mock `selectYakInventoryOutboundList` | `listYakInventoryOutbounds(...)` | 返回存栏/出栏;未传年月不过滤(传 null) |
95 95
 | DP-SY-UT-040 | 养殖主体数量明细 | 关联计数与跨年全量 | 单元测试 | JUnit5 | §2.5 | Mock `selectBreedingEntityQuantityList` | `listBreedingEntityQuantities(...)` | 返回四类数量;未传年月不过滤 |
96 96
 | DP-SY-UT-041 | 乡镇列表 | 全县口径 | 单元测试 | JUnit5 | §2.5 | Mock `toAllOptionList` | `listTownOptions()` | 返回乡镇选项 |
@@ -268,6 +268,7 @@ await page.route('**/bigScreen/home/dashboard**', route =>
268 268
 
269 269
 | 版本 | 说明 |
270 270
 | --- | --- |
271
+| 1.8 | 明细分页:年份未传不过滤(UT-031~038) |
271 272
 | 1.7 | 新增大屏乡镇列表、村树接口(UT-041~042、API-050~051) |
272 273
 | 1.6 | 新增养殖主体数量明细接口(UT-040、API-049) |
273 274
 | 1.5 | 存出栏明细:年月未传不过滤,支持跨年全量翻页(UT-039) |