From 7d45b1aa345be565648f9ae01cd200631eb008a2 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 18 三月 2026 13:30:53 +0800
Subject: [PATCH] 生产计划的下发状态逻辑调整+能耗统计查询sql优化

---
 src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml |   41 +++++++++++++++++++++++------------------
 1 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
index b2cf830..50f4e2f 100644
--- a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
+++ b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
@@ -41,7 +41,9 @@
          </where>
     </select>
     <select id="calculateEnergy" resultType="java.util.Map">
-        select SUM(ecd.dosage) totalEnergyConsumption,
+        select  COALESCE(t.totalEnergyConsumption, 0) AS totalEnergyConsumption,
+                COALESCE(t.totalEnergyCost, 0) AS totalEnergyCost
+        from (select SUM(ecd.dosage) totalEnergyConsumption,
                SUM(ecd.dosage * e.unit_price) totalEnergyCost
             from energy_consumption_detail ecd
             left join  energy e on ecd.energy_id = e.id
@@ -49,12 +51,13 @@
             <if test="c.type != null and c.type != ''">
                 and ecd.type =#{c.type}
             </if>
+        )t
     </select>
     <select id="energyConsumptionTypeProportion"
             resultType="com.ruoyi.energy.dto.EnergyConsumptionTypeDto">
          select e.energy_tyep,
-                SUM(ecd.dosage) energyConsumption,
-               SUM(ecd.dosage * e.unit_price) energyCost
+                SUM(COALESCE(ecd.dosage, 0)) energyConsumption,
+               SUM(COALESCE(ecd.dosage, 0) * e.unit_price) energyCost
             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}
@@ -64,16 +67,17 @@
             group by e.energy_tyep
     </select>
     <select id="energyCostDtos" resultType="com.ruoyi.energy.dto.EnergyCostDto">
-    select A.meter_reading_date,
-           A.waterConsumption,
-           A.waterCost,
-           B.electricityConsumption,
-           B.electricityCost,
-           C.gasConsumption,
-           C.gasCost,
-           sum(A.waterConsumption+B.electricityConsumption+C.gasConsumption) totalConsumption,
-           sum(A.waterCost+B.electricityCost+C.gasCost) totalCost
-    from
+   select  z.meter_reading_date,
+           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 ecd.meter_reading_date,
                sum(ecd.dosage) waterConsumption,
                sum(ecd.dosage * e1.unit_price) waterCost
@@ -85,7 +89,8 @@
                 and ecd.type =#{c.type}
             </if>
             group by ecd.meter_reading_date)A
-    join
+        on z.meter_reading_date=A.meter_reading_date
+    left join
     (select ecd.meter_reading_date,
                sum(ecd.dosage) electricityConsumption,
                sum(ecd.dosage * e2.unit_price) electricityCost
@@ -97,8 +102,8 @@
                 and ecd.type =#{c.type}
             </if>
             group by ecd.meter_reading_date)B
-        on A.meter_reading_date=B.meter_reading_date
-    join
+        on z.meter_reading_date=B.meter_reading_date
+    left join
     (select ecd.meter_reading_date,
                sum(ecd.dosage) gasConsumption,
                sum(ecd.dosage * e3.unit_price) gasCost
@@ -110,8 +115,8 @@
                 and ecd.type =#{c.type}
             </if>
             group by ecd.meter_reading_date)C
-        on A.meter_reading_date=C.meter_reading_date
-        
+        on z.meter_reading_date=C.meter_reading_date
+    order by z.meter_reading_date
     </select>
 
 </mapper>

--
Gitblit v1.9.3