From 9c685df2670f9536d1adf9dfb1c0e95a7d5f9c53 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 28 三月 2026 14:04:08 +0800
Subject: [PATCH] 关于能耗的统计调整

---
 src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java            |   14 +++
 src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java |   45 ++++++++++
 src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java                           |    3 
 src/main/java/com/ruoyi/energy/dto/EnergyCollectDto.java                            |    2 
 src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml                  |  148 +++++++++++++++++++++++++++++++++++-
 5 files changed, 202 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyCollectDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyCollectDto.java
index a84b10f..f3c49d5 100644
--- a/src/main/java/com/ruoyi/energy/dto/EnergyCollectDto.java
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyCollectDto.java
@@ -15,5 +15,7 @@
     @ApiModelProperty("鑳借�楃被鍨嬪崰姣�")
     private List<EnergyConsumptionTypeDto> energyConsumptionTypeProportion;
 
+    @ApiModelProperty("鑳借�楀崟鑰楄秼鍔�")
+    private List<EnergyCostDto> energyCostDtos;
 
 }
diff --git a/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
index f982bd1..c226aea 100644
--- a/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
+++ b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
@@ -32,7 +32,17 @@
 
     List<EnergyConsumptionTypeDto> energyConsumptionTypeProportion(@Param("c") EnergyStatisticsVo energyStatisticsVo);
 
-    List<EnergyCostDto> energyCostDtos(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+    //鏃ヨ兘鑰楁槑缁�
+    List<EnergyCostDto> energyCostDtos1(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+    //鏈堣兘鑰楁槑缁�
+    List<EnergyCostDto> energyCostDtos2(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+    //骞磋兘鑰楁槑缁�
+    List<EnergyCostDto> energyCostDtos3(@Param("c") EnergyStatisticsVo energyStatisticsVo);
 
-    List<EnergyConsumptionDetailDto> energyConsumptionDetailDtos(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+    //鏃ヨ兘鑰楃被鍨嬫槑缁�
+    List<EnergyConsumptionDetailDto> energyConsumptionDetailDtos1(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+    //鏈堣兘鑰楃被鍨嬫槑缁�
+    List<EnergyConsumptionDetailDto> energyConsumptionDetailDtos2(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+    //骞磋兘鑰楃被鍨嬫槑缁�
+    List<EnergyConsumptionDetailDto> energyConsumptionDetailDtos3(@Param("c") EnergyStatisticsVo energyStatisticsVo);
 }
diff --git a/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
index 58dc509..ae6b522 100644
--- a/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
+++ b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
@@ -24,6 +24,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -123,7 +124,19 @@
         List<EnergyConsumptionTypeDto> energyConsumptionTypeDtos=energyConsumptionDetailMapper.energyConsumptionTypeProportion(energyStatisticsVo);
         energyStatisticsDto.setEnergyConsumptionTypeProportion(energyConsumptionTypeDtos);
         //鑳借�楁槑缁�
-        List<EnergyCostDto> energyCostDtos=energyConsumptionDetailMapper.energyCostDtos(energyStatisticsVo);
+        List<EnergyCostDto> energyCostDtos=new ArrayList<>();
+        //鍒ゆ柇鏃�/鏈�/骞�
+        switch (energyStatisticsVo.getState()){
+            case "鏃�":
+                energyCostDtos=energyConsumptionDetailMapper.energyCostDtos1(energyStatisticsVo);
+                break;
+            case "鏈�":
+                energyCostDtos=energyConsumptionDetailMapper.energyCostDtos2(energyStatisticsVo);
+                break;
+            case "骞�":
+                energyCostDtos=energyConsumptionDetailMapper.energyCostDtos3(energyStatisticsVo);
+                break;
+        }
         energyStatisticsDto.setEnergyCostDtos(energyCostDtos);
         return energyStatisticsDto;
     }
@@ -147,7 +160,19 @@
         List<EnergyConsumptionTypeDto> energyConsumptionTypeDtos=energyConsumptionDetailMapper.energyConsumptionTypeProportion(energyStatisticsVo);
         energyAccountDto.setEnergyConsumptionTypeProportion(energyConsumptionTypeDtos);
         //鑳借�楃被鍨嬫槑缁�
-        List<EnergyConsumptionDetailDto> energyConsumptionDetailDtoList=energyConsumptionDetailMapper.energyConsumptionDetailDtos(energyStatisticsVo);
+        List<EnergyConsumptionDetailDto> energyConsumptionDetailDtoList = new ArrayList<>();
+        //鍒ゆ柇鏃�/鏈�/骞�
+        switch (energyStatisticsVo.getState()){
+            case "鏃�":
+                energyConsumptionDetailDtoList=energyConsumptionDetailMapper.energyConsumptionDetailDtos1(energyStatisticsVo);
+                break;
+            case "鏈�":
+                energyConsumptionDetailDtoList=energyConsumptionDetailMapper.energyConsumptionDetailDtos2(energyStatisticsVo);
+                break;
+            case "骞�":
+                energyConsumptionDetailDtoList=energyConsumptionDetailMapper.energyConsumptionDetailDtos3(energyStatisticsVo);
+                break;
+        }
         energyAccountDto.setEnergyConsumptionDetailDtoList(energyConsumptionDetailDtoList);
         return energyAccountDto;
     }
@@ -158,7 +183,21 @@
         //鑳借�楀崟鑰楁暟鎹�
         List<EnergyConsumptionTypeDto> energyConsumptionTypeDtos=energyConsumptionDetailMapper.energyConsumptionTypeProportion(energyStatisticsVo);
         energyCollectDto.setEnergyConsumptionTypeProportion(energyConsumptionTypeDtos);
-        //鑳借�楀崟鑰楄秼鍔�(寰呭疄鐜�)
+        //鑳借�楀崟鑰楄秼鍔�
+        List<EnergyCostDto> energyCostDtos=new ArrayList<>();
+        //鍒ゆ柇鏃�/鏈�/骞�
+        switch (energyStatisticsVo.getState()){
+            case "鏃�":
+                energyCostDtos=energyConsumptionDetailMapper.energyCostDtos1(energyStatisticsVo);
+                break;
+            case "鏈�":
+                energyCostDtos=energyConsumptionDetailMapper.energyCostDtos2(energyStatisticsVo);
+                break;
+            case "骞�":
+                energyCostDtos=energyConsumptionDetailMapper.energyCostDtos3(energyStatisticsVo);
+                break;
+        }
+        energyCollectDto.setEnergyCostDtos(energyCostDtos);
         return energyCollectDto;
     }
 }
diff --git a/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java b/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java
index cf59db0..09f8a21 100644
--- a/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java
+++ b/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java
@@ -29,4 +29,7 @@
 
     //鑳借�楃被鍨�(姘�/鐢�/姘�)
     private String energyName;
+
+    //鏃�/鏈�/骞�
+    private String state;
 }
diff --git a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
index cbbbd18..9feaab6 100644
--- a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
+++ b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
@@ -66,8 +66,8 @@
             </if>
             group by e.energy_tyep
     </select>
-    <select id="energyCostDtos" resultType="com.ruoyi.energy.dto.EnergyCostDto">
-   select  z.meter_reading_date,
+    <select id="energyCostDtos1" resultType="com.ruoyi.energy.dto.EnergyCostDto">
+    select  z.meter_reading_date,
            COALESCE(A.waterConsumption, 0) waterConsumption,
            COALESCE(A.waterCost, 0) waterCost,
            COALESCE(B.electricityConsumption, 0) electricityConsumption,
@@ -118,8 +118,111 @@
         on z.meter_reading_date=C.meter_reading_date
     order by z.meter_reading_date
     </select>
-    <select id="energyConsumptionDetailDtos"
-            resultType="com.ruoyi.energy.dto.EnergyConsumptionDetailDto">
+    <select id="energyCostDtos2" resultType="com.ruoyi.energy.dto.EnergyCostDto">
+    select DATE_FORMAT(z.meter_reading_date, '%Y-%m') AS meterReadingDate ,
+           COALESCE(A.waterConsumption, 0) waterConsumption,
+           COALESCE(A.waterCost, 0) waterCost,
+           COALESCE(B.electricityConsumption, 0) electricityConsumption,
+           COALESCE(B.electricityCost, 0) electricityCost,
+           COALESCE(C.gasConsumption, 0) gasConsumption,
+           COALESCE(C.gasCost, 0) gasCost,
+		   COALESCE(A.waterConsumption, 0)+ COALESCE(B.electricityConsumption, 0)+ COALESCE(C.gasConsumption, 0) totalConsumption,
+		   COALESCE(A.waterCost, 0)+ COALESCE(B.electricityCost, 0)+ COALESCE(C.gasCost, 0) totalCost
+    from   energy_consumption_detail z
+    left join
+    (select    DATE_FORMAT(ecd.meter_reading_date, '%Y-%m') AS meterReadingDate ,
+               sum(ecd.dosage) waterConsumption,
+               sum(ecd.dosage * e1.unit_price) waterCost
+            from energy_consumption_detail ecd
+            left join  energy e1 on ecd.energy_id = e1.id
+            where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+            and e1.energy_tyep='姘�'
+            <if test="c.type != null and c.type != ''">
+                and ecd.type =#{c.type}
+            </if>
+            group by DATE_FORMAT(ecd.meter_reading_date, '%Y-%m'))A
+        on DATE_FORMAT(z.meter_reading_date, '%Y-%m')=A.meterReadingDate
+    left join
+    (select    DATE_FORMAT(ecd.meter_reading_date, '%Y-%m') AS meterReadingDate,
+               sum(ecd.dosage) electricityConsumption,
+               sum(ecd.dosage * e2.unit_price) electricityCost
+            from energy_consumption_detail ecd
+            left join  energy e2 on ecd.energy_id = e2.id
+            where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+            and e2.energy_tyep='鐢�'
+            <if test="c.type != null and c.type != ''">
+                and ecd.type =#{c.type}
+            </if>
+            group by DATE_FORMAT(ecd.meter_reading_date, '%Y-%m'))B
+        on DATE_FORMAT(z.meter_reading_date, '%Y-%m')=B.meterReadingDate
+    left join
+    (select    DATE_FORMAT(ecd.meter_reading_date, '%Y-%m') AS meterReadingDate,
+               sum(ecd.dosage) gasConsumption,
+               sum(ecd.dosage * e3.unit_price) gasCost
+            from energy_consumption_detail ecd
+            left join  energy e3 on ecd.energy_id = e3.id
+            where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+            and e3.energy_tyep='姘�'
+            <if test="c.type != null and c.type != ''">
+                and ecd.type =#{c.type}
+            </if>
+            group by DATE_FORMAT(ecd.meter_reading_date, '%Y-%m'))C
+        on DATE_FORMAT(z.meter_reading_date, '%Y-%m')=C.meterReadingDate
+    order by DATE_FORMAT(z.meter_reading_date, '%Y-%m')
+    </select>
+    <select id="energyCostDtos3" resultType="com.ruoyi.energy.dto.EnergyCostDto">
+    select  DATE_FORMAT(z.meter_reading_date, '%Y') AS  meterReadingDate,
+           COALESCE(A.waterConsumption, 0) waterConsumption,
+           COALESCE(A.waterCost, 0) waterCost,
+           COALESCE(B.electricityConsumption, 0) electricityConsumption,
+           COALESCE(B.electricityCost, 0) electricityCost,
+           COALESCE(C.gasConsumption, 0) gasConsumption,
+           COALESCE(C.gasCost, 0) gasCost,
+		   COALESCE(A.waterConsumption, 0)+ COALESCE(B.electricityConsumption, 0)+ COALESCE(C.gasConsumption, 0) totalConsumption,
+		   COALESCE(A.waterCost, 0)+ COALESCE(B.electricityCost, 0)+ COALESCE(C.gasCost, 0) totalCost
+    from   energy_consumption_detail z
+    left join
+    (select   DATE_FORMAT(ecd.meter_reading_date, '%Y') AS meterReadingDate,
+               sum(ecd.dosage) waterConsumption,
+               sum(ecd.dosage * e1.unit_price) waterCost
+            from energy_consumption_detail ecd
+            left join  energy e1 on ecd.energy_id = e1.id
+            where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+            and e1.energy_tyep='姘�'
+            <if test="c.type != null and c.type != ''">
+                and ecd.type =#{c.type}
+            </if>
+            group by DATE_FORMAT(ecd.meter_reading_date, '%Y'))A
+        on DATE_FORMAT(z.meter_reading_date, '%Y')=A.meterReadingDate
+    left join
+    (select DATE_FORMAT(ecd.meter_reading_date, '%Y') AS meterReadingDate,
+               sum(ecd.dosage) electricityConsumption,
+               sum(ecd.dosage * e2.unit_price) electricityCost
+            from energy_consumption_detail ecd
+            left join  energy e2 on ecd.energy_id = e2.id
+            where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+            and e2.energy_tyep='鐢�'
+            <if test="c.type != null and c.type != ''">
+                and ecd.type =#{c.type}
+            </if>
+            group by DATE_FORMAT(ecd.meter_reading_date, '%Y'))B
+        on DATE_FORMAT(z.meter_reading_date, '%Y')=B.meterReadingDate
+    left join
+    (select DATE_FORMAT(ecd.meter_reading_date, '%Y') AS meterReadingDate,
+               sum(ecd.dosage) gasConsumption,
+               sum(ecd.dosage * e3.unit_price) gasCost
+            from energy_consumption_detail ecd
+            left join  energy e3 on ecd.energy_id = e3.id
+            where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+            and e3.energy_tyep='姘�'
+            <if test="c.type != null and c.type != ''">
+                and ecd.type =#{c.type}
+            </if>
+            group by DATE_FORMAT(ecd.meter_reading_date, '%Y'))C
+        on DATE_FORMAT(z.meter_reading_date, '%Y')=C.meterReadingDate
+    order by DATE_FORMAT(z.meter_reading_date, '%Y')
+    </select>
+    <select id="energyConsumptionDetailDtos1" resultType="com.ruoyi.energy.dto.EnergyConsumptionDetailDto">
         select ecd.meter_reading_date,
                e.energy_tyep,
                ecd.type,
@@ -137,5 +240,40 @@
                      e.unit_price
         order by ecd.meter_reading_date
     </select>
-
+    <select id="energyConsumptionDetailDtos2" resultType="com.ruoyi.energy.dto.EnergyConsumptionDetailDto">
+        select DATE_FORMAT(ecd.meter_reading_date, '%Y-%m') AS meterReadingDate ,
+               e.energy_tyep,
+               ecd.type,
+               e.unit,
+               e.unit_price,
+               sum(ecd.dosage) dosage,
+               sum(ecd.dosage * e.unit_price) cost
+        from energy_consumption_detail ecd
+                 left join  energy e on ecd.energy_id = e.id
+        where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+        group by DATE_FORMAT(ecd.meter_reading_date, '%Y-%m'),
+                 e.energy_tyep,
+                 ecd.type,
+                 e.unit,
+                 e.unit_price
+        order by DATE_FORMAT(ecd.meter_reading_date, '%Y-%m')
+    </select>
+    <select id="energyConsumptionDetailDtos3" resultType="com.ruoyi.energy.dto.EnergyConsumptionDetailDto">
+        select DATE_FORMAT(ecd.meter_reading_date, '%Y') AS meterReadingDate,
+               e.energy_tyep,
+               ecd.type,
+               e.unit,
+               e.unit_price,
+               sum(ecd.dosage) dosage,
+               sum(ecd.dosage * e.unit_price) cost
+        from energy_consumption_detail ecd
+                 left join  energy e on ecd.energy_id = e.id
+        where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+        group by DATE_FORMAT(ecd.meter_reading_date, '%Y'),
+                 e.energy_tyep,
+                 ecd.type,
+                 e.unit,
+                 e.unit_price
+        order by DATE_FORMAT(ecd.meter_reading_date, '%Y')
+    </select>
 </mapper>

--
Gitblit v1.9.3