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

---
 src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java |  116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 114 insertions(+), 2 deletions(-)

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 305ad75..50e280a 100644
--- a/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
+++ b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
@@ -6,13 +6,14 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
+import com.ruoyi.energy.dto.*;
 import com.ruoyi.energy.mapper.EnergyMapper;
 import com.ruoyi.energy.pojo.Energy;
 import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
 import com.ruoyi.energy.mapper.EnergyConsumptionDetailMapper;
 import com.ruoyi.energy.service.EnergyConsumptionDetailService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.energy.vo.EnergyStatisticsVo;
 import com.ruoyi.framework.web.domain.R;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,7 +21,12 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+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;
 
 /**
@@ -81,11 +87,117 @@
 
     @Override
     public void export(HttpServletResponse response) {
-        List<EnergyConsumptionDetailDto> list = energyConsumptionDetailMapper.pageEnergyConsumptionDetail(new Page<>(-1,-1),null).getRecords();
+        List<EnergyConsumptionDetailDto> list = energyConsumptionDetailMapper.pageEnergyConsumptionDetail(new Page<>(-1,-1),new EnergyConsumptionDetailDto()).getRecords();
         if(CollectionUtils.isEmpty(list)){
             throw new RuntimeException("鏃犲鍑烘暟鎹�");
         }
         ExcelUtil<EnergyConsumptionDetailDto> util = new ExcelUtil<>(EnergyConsumptionDetailDto.class);
         util.exportExcel(response, list, "鑳借�楁妱琛�");
     }
+
+    @Override
+    public EnergyStatisticsDto statistics(EnergyStatisticsVo energyStatisticsVo) {
+        EnergyStatisticsDto energyStatisticsDto = new EnergyStatisticsDto();
+        //璁$畻鎬昏�楃敤閲�+鎬昏兘鑰楄垂鐢�
+        Map<String, BigDecimal> map=energyConsumptionDetailMapper.calculateEnergy(energyStatisticsVo);
+        energyStatisticsDto.setTotalEnergyConsumption(map.get("totalEnergyConsumption"));
+        energyStatisticsDto.setTotalEnergyCost(map.get("totalEnergyCost"));
+        //骞冲潎鐢ㄩ噺
+        energyStatisticsDto.setAverageConsumption(energyStatisticsDto.getTotalEnergyConsumption().divide(new BigDecimal(energyStatisticsVo.getDays()),2, RoundingMode.HALF_UP));
+        //鐜瘮鍙樺寲=(鏈湡鍊� - 涓婃湡鍊�) / 涓婃湡鍊� * 100
+        LocalDate minDays = energyStatisticsVo.getStartDate().minusDays(energyStatisticsVo.getDays());
+        LocalDate masDays = energyStatisticsVo.getEndDate().minusDays(energyStatisticsVo.getDays());
+        EnergyStatisticsVo oldenergyStatisticsVo = new EnergyStatisticsVo();
+        BeanUtils.copyProperties(energyStatisticsVo,oldenergyStatisticsVo);
+        oldenergyStatisticsVo.setStartDate(minDays);
+        oldenergyStatisticsVo.setEndDate(masDays);
+        Map<String, BigDecimal> oldmap=energyConsumptionDetailMapper.calculateEnergy(oldenergyStatisticsVo);
+        if (ObjectUtils.isNotEmpty(oldmap)) {
+            BigDecimal subtract = map.get("totalEnergyConsumption").subtract(oldmap.get("totalEnergyConsumption"));
+            BigDecimal changeVite=BigDecimal.ZERO;
+            if (oldmap.get("totalEnergyConsumption").compareTo(BigDecimal.ZERO)>0){
+                changeVite = (subtract).divide(oldmap.get("totalEnergyConsumption"), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            }
+            energyStatisticsDto.setChangeVite(changeVite);
+        }
+        //鑳借�楃被鍨嬪崰姣�
+        List<EnergyConsumptionTypeDto> energyConsumptionTypeDtos=energyConsumptionDetailMapper.energyConsumptionTypeProportion(energyStatisticsVo);
+        energyStatisticsDto.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;
+        }
+        energyStatisticsDto.setEnergyCostDtos(energyCostDtos);
+        return energyStatisticsDto;
+    }
+
+    @Override
+    public EnergyAccountDto account(EnergyStatisticsVo energyStatisticsVo) {
+        EnergyAccountDto energyAccountDto = new EnergyAccountDto();
+        //璁$畻鎬昏兘鑰楁垚鏈�+鐢熶骇鑳借�楁垚鏈�+鍔炲叕鑳借�楁垚鏈�
+        Map<String, BigDecimal> map=energyConsumptionDetailMapper.calculateEnergy(energyStatisticsVo);
+        energyAccountDto.setTotalEnergyCost(map.get("totalEnergyCost"));//鎬昏兘鑰楁垚鏈�
+        energyStatisticsVo.setType("鐢熶骇");
+        Map<String, BigDecimal> map1=energyConsumptionDetailMapper.calculateEnergy(energyStatisticsVo);
+        energyAccountDto.setProductEnergyCost(map1.get("totalEnergyCost"));//鐢熶骇鑳借�楁垚鏈�
+        energyStatisticsVo.setType("鍔炲叕");
+        Map<String, BigDecimal> map2=energyConsumptionDetailMapper.calculateEnergy(energyStatisticsVo);
+        energyAccountDto.setOfficeEnergyCost(map2.get("totalEnergyCost"));//鍔炲叕鑳借�楁垚鏈�
+        energyStatisticsVo.setType(null);//鎭㈠鏌ヨ鍏ㄩ儴
+        //骞冲潎鎴愭湰
+        energyAccountDto.setAverageEnergyCost(energyAccountDto.getTotalEnergyCost().divide(new BigDecimal(energyStatisticsVo.getDays()),2, RoundingMode.HALF_UP));
+        //鑳借�楃被鍨嬫垚鏈崰姣�
+        List<EnergyConsumptionTypeDto> energyConsumptionTypeDtos=energyConsumptionDetailMapper.energyConsumptionTypeProportion(energyStatisticsVo);
+        energyAccountDto.setEnergyConsumptionTypeProportion(energyConsumptionTypeDtos);
+        //鑳借�楃被鍨嬫槑缁�
+        List<EnergyDetailDto> energyDetailDtos = new ArrayList<>();
+        //鍒ゆ柇鏃�/鏈�/骞�
+        switch (energyStatisticsVo.getState()){
+            case "鏃�":
+                energyDetailDtos=energyConsumptionDetailMapper.energyConsumptionDetailDtos1(energyStatisticsVo);
+                break;
+            case "鏈�":
+                energyDetailDtos=energyConsumptionDetailMapper.energyConsumptionDetailDtos2(energyStatisticsVo);
+                break;
+            case "骞�":
+                energyDetailDtos=energyConsumptionDetailMapper.energyConsumptionDetailDtos3(energyStatisticsVo);
+                break;
+        }
+        energyAccountDto.setEnergyConsumptionDetailDtoList(energyDetailDtos);
+        return energyAccountDto;
+    }
+
+    @Override
+    public EnergyCollectDto collectEnergy(EnergyStatisticsVo energyStatisticsVo) {
+        EnergyCollectDto energyCollectDto = new EnergyCollectDto();
+        //鑳借�楀崟鑰楁暟鎹�
+        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;
+    }
 }

--
Gitblit v1.9.3