瀏覽代碼

大屏查询

wwh 13 小時之前
父節點
當前提交
d1370c9d5b

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

@@ -33,8 +33,12 @@ public class HomeScreenDashboardVo
33 33
     private HomeScreenEnterpriseFinanceVo largeLivestockFarmerFinance;
34 34
     /** 合作社经营模式分类 */
35 35
     private List<HomeScreenNamedCountItemVo> cooperativeBusinessModel;
36
-    /** 农牧户分类 */
37
-    private List<HomeScreenNamedCountItemVo> farmerHouseholdClassification;
36
+    // /** 农牧户分类(本期首页不展示) */
37
+    // private List<HomeScreenNamedCountItemVo> farmerHouseholdClassification;
38
+    /**
39
+     * 各乡镇农牧户补助合计:所选年最大填报月,按乡镇汇总各村 {@code subsidy_total}(补助合计金额)。
40
+     */
41
+    private List<HomeScreenTownSubsidyItemVo> townSubsidyTotals;
38 42
     /** 人均收入:以库中最大所属年为终点的最近 5 年趋势(农村可支配收入 / 脱贫人均纯收入) */
39 43
     private List<HomeScreenPerCapitaIncomeYearVo> perCapitaIncomeTrend;
40 44
 
@@ -158,14 +162,24 @@ public class HomeScreenDashboardVo
158 162
         this.cooperativeBusinessModel = cooperativeBusinessModel;
159 163
     }
160 164
 
161
-    public List<HomeScreenNamedCountItemVo> getFarmerHouseholdClassification()
165
+    // public List<HomeScreenNamedCountItemVo> getFarmerHouseholdClassification()
166
+    // {
167
+    //     return farmerHouseholdClassification;
168
+    // }
169
+    //
170
+    // public void setFarmerHouseholdClassification(List<HomeScreenNamedCountItemVo> farmerHouseholdClassification)
171
+    // {
172
+    //     this.farmerHouseholdClassification = farmerHouseholdClassification;
173
+    // }
174
+
175
+    public List<HomeScreenTownSubsidyItemVo> getTownSubsidyTotals()
162 176
     {
163
-        return farmerHouseholdClassification;
177
+        return townSubsidyTotals;
164 178
     }
165 179
 
166
-    public void setFarmerHouseholdClassification(List<HomeScreenNamedCountItemVo> farmerHouseholdClassification)
180
+    public void setTownSubsidyTotals(List<HomeScreenTownSubsidyItemVo> townSubsidyTotals)
167 181
     {
168
-        this.farmerHouseholdClassification = farmerHouseholdClassification;
182
+        this.townSubsidyTotals = townSubsidyTotals;
169 183
     }
170 184
 
171 185
     public List<HomeScreenPerCapitaIncomeYearVo> getPerCapitaIncomeTrend()

+ 9 - 3
baqing-admin/src/main/java/com/ruoyi/web/modules/screen/mapper/HomeScreenStatsMapper.java

@@ -15,7 +15,6 @@ import com.ruoyi.web.modules.screen.domain.dto.HomeScreenHerdYakStructureSumDto;
15 15
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenCoopBusinessModelSumDto;
16 16
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenDisposableIncomeYearDto;
17 17
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenEnterpriseFinanceSumDto;
18
-import com.ruoyi.web.modules.screen.domain.dto.HomeScreenFarmerHouseholdClassSumDto;
19 18
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenMonthCountDto;
20 19
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenOutboundSpeciesSumDto;
21 20
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenSelfConsumptionSumDto;
@@ -23,6 +22,7 @@ import com.ruoyi.web.modules.screen.domain.dto.HomeScreenStatPeriodDto;
23 22
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenSubsidyTypeSumDto;
24 23
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenTrainingMonthDto;
25 24
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownMapMarkerVo;
25
+import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownSubsidyItemVo;
26 26
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenBreedingEntityQuantityListItemVo;
27 27
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenYakInventoryOutboundListItemVo;
28 28
 
@@ -219,8 +219,14 @@ public interface HomeScreenStatsMapper
219 219
     HomeScreenCoopBusinessModelSumDto countCooperativeBusinessModelByStatYearMonth(
220 220
             @Param("statYear") int statYear, @Param("statMonth") int statMonth);
221 221
 
222
-    /** 指定年月农牧户分类计数(各「是」标记记录数) */
223
-    HomeScreenFarmerHouseholdClassSumDto countFarmerHouseholdClassByStatYearMonth(
222
+    // /** 指定年月农牧户分类计数(各「是」标记记录数) */
223
+    // HomeScreenFarmerHouseholdClassSumDto countFarmerHouseholdClassByStatYearMonth(
224
+    //         @Param("statYear") int statYear, @Param("statMonth") int statMonth);
225
+
226
+    /**
227
+     * 指定年月各乡镇农牧户补助合计金额(各村 {@code subsidy_total} 之和)。
228
+     */
229
+    List<HomeScreenTownSubsidyItemVo> sumFarmerHouseholdSubsidyTotalByTownStatYearMonth(
224 230
             @Param("statYear") int statYear, @Param("statMonth") int statMonth);
225 231
 
226 232
     /** 指定年份区间可支配收入(含起止年) */

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

@@ -45,6 +45,7 @@ import com.ruoyi.web.modules.screen.domain.vo.HomeScreenPerCapitaIncomeListItemV
45 45
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenStandardListItemVo;
46 46
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownMapMarkerVo;
47 47
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownMapVo;
48
+import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownSubsidyItemVo;
48 49
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenYakHerdInventoryListItemVo;
49 50
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenBreedingEntityQuantityListItemVo;
50 51
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenYakInventoryOutboundListItemVo;
@@ -195,7 +196,7 @@ public class HomeScreenServiceImpl implements IHomeScreenService
195 196
                     homeScreenStatsMapper.sumLargeLivestockFarmerFinanceByStatYearMonth(
196 197
                             yearLargeFarmer.getStatYear(), yearLargeFarmer.getStatMonth())));
197 198
         }
198
-        // 合作社经营模式 / 农牧户分类:所选年最大填报月
199
+        // 合作社经营模式:所选年最大填报月
199 200
         if (yearCooperative == null)
200 201
         {
201 202
             vo.setCooperativeBusinessModel(HomeScreenSupport.buildCooperativeBusinessModel(null));
@@ -206,15 +207,28 @@ public class HomeScreenServiceImpl implements IHomeScreenService
206 207
                     homeScreenStatsMapper.countCooperativeBusinessModelByStatYearMonth(
207 208
                             yearCooperative.getStatYear(), yearCooperative.getStatMonth())));
208 209
         }
210
+        // 农牧户分类(本期不展示,改回乡镇补助合计)
211
+        // if (yearFarmerHousehold == null)
212
+        // {
213
+        //     vo.setFarmerHouseholdClassification(HomeScreenSupport.buildFarmerHouseholdClassification(null));
214
+        // }
215
+        // else
216
+        // {
217
+        //     vo.setFarmerHouseholdClassification(HomeScreenSupport.buildFarmerHouseholdClassification(
218
+        //             homeScreenStatsMapper.countFarmerHouseholdClassByStatYearMonth(
219
+        //                     yearFarmerHousehold.getStatYear(), yearFarmerHousehold.getStatMonth())));
220
+        // }
221
+        // 各乡镇补助合计:所选年农牧户最大填报月,按乡镇汇总各村 subsidy_total
209 222
         if (yearFarmerHousehold == null)
210 223
         {
211
-            vo.setFarmerHouseholdClassification(HomeScreenSupport.buildFarmerHouseholdClassification(null));
224
+            vo.setTownSubsidyTotals(Collections.emptyList());
212 225
         }
213 226
         else
214 227
         {
215
-            vo.setFarmerHouseholdClassification(HomeScreenSupport.buildFarmerHouseholdClassification(
216
-                    homeScreenStatsMapper.countFarmerHouseholdClassByStatYearMonth(
217
-                            yearFarmerHousehold.getStatYear(), yearFarmerHousehold.getStatMonth())));
228
+            List<HomeScreenTownSubsidyItemVo> townSubsidies =
229
+                    homeScreenStatsMapper.sumFarmerHouseholdSubsidyTotalByTownStatYearMonth(
230
+                            yearFarmerHousehold.getStatYear(), yearFarmerHousehold.getStatMonth());
231
+            vo.setTownSubsidyTotals(townSubsidies != null ? townSubsidies : Collections.emptyList());
218 232
         }
219 233
         // 人均收入:以库中最大所属年为终点,向前共 5 年(与所选年无关)
220 234
         Integer incomeEndYear = homeScreenStatsMapper.selectLatestDisposableIncomeStatYear();

+ 13 - 0
baqing-admin/src/main/resources/mapper/screen/HomeScreenStatsMapper.xml

@@ -539,6 +539,19 @@
539 539
           and stat_month = #{statMonth}
540 540
     </select>
541 541
 
542
+    <!-- 所选年月各乡镇补助合计金额(村级 subsidy_total 之和) -->
543
+    <select id="sumFarmerHouseholdSubsidyTotalByTownStatYearMonth"
544
+            resultType="com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownSubsidyItemVo">
545
+        select town_dept_id as townDeptId,
546
+               max(town_name) as townName,
547
+               coalesce(sum(subsidy_total), 0) as subsidyTotal
548
+        from biz_farmer_household
549
+        where stat_year = #{statYear}
550
+          and stat_month = #{statMonth}
551
+        group by town_dept_id
552
+        order by town_dept_id asc
553
+    </select>
554
+
542 555
     <select id="selectDisposableIncomeByYearRange"
543 556
             resultType="com.ruoyi.web.modules.screen.domain.dto.HomeScreenDisposableIncomeYearDto">
544 557
         select stat_year as statYear,

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

@@ -509,7 +509,8 @@ class HomeScreenControllerApiTest
509 509
         vo.setFamilyRanchFinance(new com.ruoyi.web.modules.screen.domain.vo.HomeScreenEnterpriseFinanceVo());
510 510
         vo.setLargeLivestockFarmerFinance(new com.ruoyi.web.modules.screen.domain.vo.HomeScreenEnterpriseFinanceVo());
511 511
         vo.setCooperativeBusinessModel(new ArrayList<>());
512
-        vo.setFarmerHouseholdClassification(new ArrayList<>());
512
+        // vo.setFarmerHouseholdClassification(new ArrayList<>());
513
+        vo.setTownSubsidyTotals(new ArrayList<>());
513 514
         vo.setPerCapitaIncomeTrend(new ArrayList<>());
514 515
         return vo;
515 516
     }

+ 2 - 0
baqing-admin/src/test/java/com/ruoyi/web/modules/screen/mapper/HomeScreenStatsMapperXmlTest.java

@@ -35,6 +35,8 @@ class HomeScreenStatsMapperXmlTest
35 35
         assertTrue(xml.contains("sumLargeLivestockFarmerFinanceByStatYearMonth"));
36 36
         assertTrue(xml.contains("countCooperativeBusinessModelByStatYearMonth"));
37 37
         assertTrue(xml.contains("countFarmerHouseholdClassByStatYearMonth"));
38
+        assertTrue(xml.contains("sumFarmerHouseholdSubsidyTotalByTownStatYearMonth"));
39
+        assertTrue(xml.contains("subsidy_total"));
38 40
         assertTrue(xml.contains("selectDisposableIncomeByYearRange"));
39 41
         assertTrue(xml.contains("selectLatestDisposableIncomeStatYear"));
40 42
         assertTrue(xml.contains("biz_disposable_income"));

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

@@ -37,7 +37,6 @@ import com.ruoyi.web.modules.industryservice.mapper.BizYakOutboundReportMapper;
37 37
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenCoopBusinessModelSumDto;
38 38
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenDisposableIncomeYearDto;
39 39
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenEnterpriseFinanceSumDto;
40
-import com.ruoyi.web.modules.screen.domain.dto.HomeScreenFarmerHouseholdClassSumDto;
41 40
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenHerdSpeciesSumDto;
42 41
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenHerdYakStructureSumDto;
43 42
 import com.ruoyi.web.modules.screen.domain.dto.HomeScreenOutboundSpeciesSumDto;
@@ -56,6 +55,7 @@ import com.ruoyi.web.modules.screen.domain.vo.HomeScreenYakInventoryOutboundList
56 55
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenYakOutboundReportListItemVo;
57 56
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownMapMarkerVo;
58 57
 import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownMapVo;
58
+import com.ruoyi.web.modules.screen.domain.vo.HomeScreenTownSubsidyItemVo;
59 59
 import com.ruoyi.web.modules.screen.mapper.HomeScreenStandardMapper;
60 60
 import com.ruoyi.web.modules.screen.mapper.HomeScreenStatsMapper;
61 61
 import com.ruoyi.web.modules.industryservice.support.TownDeptSupport;
@@ -741,8 +741,8 @@ class HomeScreenServiceImplTest
741 741
     }
742 742
 
743 743
     @Test
744
-    @DisplayName("DP-SY-UT-036 合作社经营模式与农牧户分类取所选年最大填报月")
745
-    void ut036_coopModelAndFarmerClass()
744
+    @DisplayName("DP-SY-UT-036 合作社经营模式与乡镇补助合计取所选年最大填报月")
745
+    void ut036_coopModelAndTownSubsidy()
746 746
     {
747 747
         stubGrasslandAndReport();
748 748
         stubOtherBlocks();
@@ -758,22 +758,21 @@ class HomeScreenServiceImplTest
758 758
         coop.setCompanyTypeCount(0);
759 759
         coop.setOtherCount(1);
760 760
         when(homeScreenStatsMapper.countCooperativeBusinessModelByStatYearMonth(2024, 7)).thenReturn(coop);
761
-        HomeScreenFarmerHouseholdClassSumDto farmer = new HomeScreenFarmerHouseholdClassSumDto();
762
-        farmer.setPureHerderCount(8);
763
-        farmer.setNoLivestockCount(4);
764
-        farmer.setExtinctHouseholdCount(1);
765
-        farmer.setOverloadHerderCount(2);
766
-        farmer.setNeedCapCount(3);
767
-        farmer.setNeedFloorCount(5);
768
-        when(homeScreenStatsMapper.countFarmerHouseholdClassByStatYearMonth(2024, 5)).thenReturn(farmer);
761
+        HomeScreenTownSubsidyItemVo town = new HomeScreenTownSubsidyItemVo();
762
+        town.setTownDeptId(101L);
763
+        town.setTownName("巴青镇");
764
+        town.setSubsidyTotal(new BigDecimal("12345.67"));
765
+        when(homeScreenStatsMapper.sumFarmerHouseholdSubsidyTotalByTownStatYearMonth(2024, 5))
766
+                .thenReturn(Collections.singletonList(town));
769 767
 
770 768
         HomeScreenDashboardVo vo = service.loadDashboard("2024");
771 769
 
772 770
         assertEquals(6, vo.getCooperativeBusinessModel().size());
773 771
         assertEquals(3, vo.getCooperativeBusinessModel().get(0).getCount());
774
-        assertEquals(6, vo.getFarmerHouseholdClassification().size());
775
-        assertEquals(8, vo.getFarmerHouseholdClassification().get(0).getCount());
776
-        assertEquals(5, vo.getFarmerHouseholdClassification().get(5).getCount());
772
+        assertEquals(1, vo.getTownSubsidyTotals().size());
773
+        assertEquals(101L, vo.getTownSubsidyTotals().get(0).getTownDeptId().longValue());
774
+        assertEquals("巴青镇", vo.getTownSubsidyTotals().get(0).getTownName());
775
+        assertEquals(0, new BigDecimal("12345.67").compareTo(vo.getTownSubsidyTotals().get(0).getSubsidyTotal()));
777 776
     }
778 777
 
779 778
     @Test

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

@@ -87,7 +87,8 @@
87 87
 | **企业年度收入与补助-家庭牧场** | 所选年 **Y** 内 `biz_family_ranch` 最大填报月全县 `income`/`expense`/`profit`/`subsidy_amount` 合计;柱状图;单位**万元**;字段 **`familyRanchFinance`** |
88 88
 | **企业年度收入与补助-养殖大户** | 所选年 **Y** 内 `biz_large_livestock_farmer` 最大填报月全县同上四项合计;柱状图;单位**万元**;字段 **`largeLivestockFarmerFinance`** |
89 89
 | **合作社经营模式分类** | 所选年 **Y** 内 `biz_cooperative_development` 最大填报月按 `business_model` 计数(整村/股份/联合/多种经营/公司型/其他);饼图;单位**个**;字段 **`cooperativeBusinessModel`** |
90
-| **农牧户分类** | 所选年 **Y** 内 `biz_farmer_household` 最大填报月各分类标记为「是」的村级记录数(纯牧户/无畜户/绝户/超载牧户/需要封顶/需要保底);柱状图;单位**个**;字段 **`farmerHouseholdClassification`** |
90
+| ~~**农牧户分类**~~ | ~~所选年 **Y** 内 `biz_farmer_household` 最大填报月各分类标记为「是」的村级记录数;本期首页不展示~~ |
91
+| **补助奖励资金(按乡镇列表)** | 所选年 **Y** 内 `biz_farmer_household` **最大填报月**,按乡镇汇总各村 `subsidy_total`(补助合计金额 = 补助奖励总资金 + 封顶保底后享受补助奖励总资金 + 村级草原监督员补助);首页标题「补助奖励资金」,列表展示乡镇名与金额;字段 **`townSubsidyTotals`**(`townDeptId` / `townName` / `subsidyTotal`) |
91 92
 | **人均收入** | `biz_disposable_income` 以库中**最大所属年**为终点向前共 5 年双折线:农村居民人均可支配收入、脱贫人口人均纯收入;缺年补 0;无数据则空;单位**元**;**不随所选年 Y 切换**;字段 **`perCapitaIncomeTrend`** |
92 93
 | **人均收入明细** | 独立接口分页查询 `biz_disposable_income`;条件:所属年份(可选,**未传不过滤**);按**所属年份倒序**;返回年份、农村居民人均可支配收入、增幅、增速、脱贫人口人均纯收入 |
93 94
 | **农牧户数据明细** | 独立接口分页查询 `biz_farmer_household`;条件:年(可选,**未传不过滤**)、月(可选,**未传不过滤**)、乡镇、村;按**年、月倒序**;返回全部业务列表字段 |
@@ -503,6 +504,7 @@ flowchart TB
503 504
 
504 505
 | 版本 | 日期 | 说明 |
505 506
 | --- | --- | --- |
507
+| 1.23 | 2026-08-18 | 首页屏蔽农牧户分类展示;新增 `townSubsidyTotals`(所选年最大月按乡镇汇总补助合计金额 `subsidy_total`) |
506 508
 | 1.22 | 2026-08-18 | 大屏明细分页:年份未传一律不过滤(跨年全量翻页);含人均收入/农牧户/合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户 |
507 509
 | 1.21 | 2026-08-18 | 大屏明细分页:月份未传一律不过滤(该年全年);年份未传仍默认当前年。含合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户 |
508 510
 | 1.19 | 2026-07-24 | 人均收入趋势改为以库中最大所属年为终点的最近 5 年 |

+ 4 - 1
doc/大屏/首页/大屏首页技术方案.md

@@ -242,7 +242,9 @@
242 242
 | `livestockOutboundStructure` | array | 牲畜出栏结构 |
243 243
 | `selfConsumption` | object | 自食情况 |
244 244
 | `familyRanchFinance` / `largeLivestockFarmerFinance` | object | 企业年度收入与补助 |
245
-| `cooperativeBusinessModel` / `farmerHouseholdClassification` | array | 合作社模式 / 农牧户分类 |
245
+| `cooperativeBusinessModel` | array | 合作社经营模式分类 |
246
+| `townSubsidyTotals` | array | 各乡镇补助合计:`townDeptId` / `townName` / `subsidyTotal`(所选年最大填报月,村级 `subsidy_total` 按乡镇求和;单位元) |
247
+| ~~`farmerHouseholdClassification`~~ | ~~array~~ | ~~农牧户分类(本期不返回)~~ |
246 248
 | `perCapitaIncomeTrend` | array | 人均收入近 5 年 |
247 249
 
248 250
 > **已屏蔽(不再返回):** `inventoryChange`(牦牛存栏变动)、`outboundMonthly`(牦牛出栏月度)、`grassland`(草场类型占比)、`subsidy`(惠农补贴发放);产业总览内 `supplierCount`/`distributorCount`/`tradeMarketCount`/`grasslandCount`;以及此前迁出的预约/农技课堂/培训。
@@ -665,6 +667,7 @@ SQL 示例:`sql/big_screen_home_perm.sql`(挂载「大屏」父菜单下)
665 667
 
666 668
 | 版本 | 日期 | 说明 |
667 669
 | --- | --- | --- |
670
+| 1.26 | 2026-08-18 | 屏蔽 `farmerHouseholdClassification`;新增看板 `townSubsidyTotals`(所选年最大月按乡镇汇总 `subsidy_total`) |
668 671
 | 1.25 | 2026-08-18 | 首页明细分页:年份未传一律不过滤(跨年全量翻页);含人均收入/农牧户/合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户 |
669 672
 | 1.24 | 2026-08-18 | 首页明细分页:月份未传一律不过滤;含合作社/家庭牧场/养殖大户/出栏/存栏/有无畜户(农牧户已在 1.23) |
670 673
 | 1.23 | 2026-08-18 | `/farmerHouseholds`:月份未传不过滤(该年全年按月倒序);年份未传仍默认当前年 |