From a6c42f7838229c890df3215362875220afdd7ff4 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 18 三月 2026 16:19:02 +0800
Subject: [PATCH] 能耗成本核算---按日月汇总统计
---
src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java | 5 +
src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java | 9 ++
src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java | 2
src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java | 39 +++++++++++--
src/main/java/com/ruoyi/energy/dto/EnergyAccountDto.java | 34 +++++++++++
src/main/java/com/ruoyi/energy/dto/EnergyAccountTypeDto.java | 19 ++++++
src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java | 2
src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java | 3 +
src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml | 25 ++++++++
9 files changed, 130 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java b/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
index 10d0701..b6bd886 100644
--- a/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
+++ b/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
@@ -77,9 +77,16 @@
/*******************************************姹囨�荤粺璁�*****************************************************************************************************************************************************************************/
@GetMapping("/statistics")
- @ApiOperation("鎸夋棩鏈堝勾姹囨�荤粺璁�")
+ @ApiOperation("鑳借�楃粺璁�---鎸夋棩鏈堝勾姹囨�荤粺璁�")
public R statistics(EnergyStatisticsVo energyStatisticsVo) {
return R.ok(energyConsumptionDetailService.statistics(energyStatisticsVo));
}
+ @GetMapping("/account")
+ @ApiOperation("鑳借�楁垚鏈牳绠�---鎸夋棩鏈堟眹鎬荤粺璁�")
+ public R account(EnergyStatisticsVo energyStatisticsVo) {
+ energyStatisticsVo.setType(null);
+ return R.ok(energyConsumptionDetailService.account(energyStatisticsVo));
+ }
+
}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyAccountDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyAccountDto.java
new file mode 100644
index 0000000..e2a747e
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyAccountDto.java
@@ -0,0 +1,34 @@
+package com.ruoyi.energy.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel("鑳借�楁垚鏈牳绠�---鎸夋棩鏈堟眹鎬荤粺璁�")
+public class EnergyAccountDto {
+
+ @ApiModelProperty("鎬昏兘鑰楁垚鏈�")
+ private BigDecimal totalEnergyCost;
+
+ @ApiModelProperty("鐢熶骇鑳借�楁垚鏈�")
+ private BigDecimal productEnergyCost;
+
+ @ApiModelProperty("鍔炲叕鑳借�楁垚鏈�")
+ private BigDecimal officeEnergyCost;
+
+ @ApiModelProperty("骞冲潎鎴愭湰")
+ private BigDecimal averageEnergyCost;
+
+ @ApiModelProperty("鑳借�楁垚鏈秼鍔�")
+ private List<EnergyAccountTypeDto> energyAccountTypeDtos;
+
+ @ApiModelProperty("鑳借�楃被鍨嬫垚鏈崰姣�")
+ private List<EnergyConsumptionTypeDto> energyConsumptionTypeProportion;
+
+ @ApiModelProperty("鑳借�楃被鍨嬫槑缁�")
+ private List<EnergyConsumptionDetailDto> energyConsumptionDetailDtoList;
+}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyAccountTypeDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyAccountTypeDto.java
new file mode 100644
index 0000000..d8105fb
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyAccountTypeDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.energy.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("鑳借�楁垚鏈秼鍔�")
+public class EnergyAccountTypeDto {
+
+ //"鍔炲叕/鐢熶骇"
+ @ApiModelProperty("鑳借�楀満鏅�")
+ private String energyAccountType;
+
+ @ApiModelProperty("鑳借�楁垚鏈�")
+ private BigDecimal energyAccount;
+}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
index cd712be..2621465 100644
--- a/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
@@ -32,4 +32,7 @@
//璐圭敤
private BigDecimal cost;
+ //鍗曚环
+ private BigDecimal unitPrice;
+
}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
index 810f4c2..f4f5ee9 100644
--- a/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
@@ -9,7 +9,7 @@
import java.util.Map;
@Data
-@ApiModel("鎸夋棩鏈堝勾姹囨�荤粺璁$殑鑳借�楁暟鎹�")
+@ApiModel("鑳借�楃粺璁�---鎸夋棩鏈堝勾姹囨�荤粺璁$殑鑳借�楁暟鎹�")
public class EnergyStatisticsDto {
@ApiModelProperty("鎬昏�楃敤閲�")
diff --git a/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
index 119451e..d29bfa5 100644
--- a/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
+++ b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.energy.dto.EnergyAccountTypeDto;
import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
import com.ruoyi.energy.dto.EnergyConsumptionTypeDto;
import com.ruoyi.energy.dto.EnergyCostDto;
@@ -33,4 +34,8 @@
List<EnergyConsumptionTypeDto> energyConsumptionTypeProportion(@Param("c") EnergyStatisticsVo energyStatisticsVo);
List<EnergyCostDto> energyCostDtos(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+
+ List<EnergyAccountTypeDto> energyAccountTypeDtos(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+
+ List<EnergyConsumptionDetailDto> energyConsumptionDetailDtos(@Param("c") EnergyStatisticsVo energyStatisticsVo);
}
diff --git a/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java b/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
index d770f01..6d263c2 100644
--- a/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
+++ b/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.energy.dto.EnergyAccountDto;
import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
import com.ruoyi.energy.dto.EnergyStatisticsDto;
import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
@@ -30,4 +31,5 @@
EnergyStatisticsDto statistics(EnergyStatisticsVo energyStatisticsVo);
+ EnergyAccountDto account(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 d7dd4a2..60bbcd3 100644
--- a/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
+++ b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
@@ -6,10 +6,7 @@
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.EnergyConsumptionTypeDto;
-import com.ruoyi.energy.dto.EnergyCostDto;
-import com.ruoyi.energy.dto.EnergyStatisticsDto;
+import com.ruoyi.energy.dto.*;
import com.ruoyi.energy.mapper.EnergyMapper;
import com.ruoyi.energy.pojo.Energy;
import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
@@ -102,7 +99,6 @@
EnergyStatisticsDto energyStatisticsDto = new EnergyStatisticsDto();
//璁$畻鎬昏�楃敤閲�+鎬昏兘鑰楄垂鐢�
Map<String, BigDecimal> map=energyConsumptionDetailMapper.calculateEnergy(energyStatisticsVo);
-
energyStatisticsDto.setTotalEnergyConsumption(map.get("totalEnergyConsumption"));
energyStatisticsDto.setTotalEnergyCost(map.get("totalEnergyCost"));
//骞冲潎鐢ㄩ噺
@@ -116,7 +112,11 @@
oldenergyStatisticsVo.setEndDate(masDays);
Map<String, BigDecimal> oldmap=energyConsumptionDetailMapper.calculateEnergy(oldenergyStatisticsVo);
if (ObjectUtils.isNotEmpty(oldmap)) {
- BigDecimal changeVite = (map.get("totalEnergyConsumption").subtract(oldmap.get("totalEnergyConsumption"))).divide(oldmap.get("totalEnergyConsumption"), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+ 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);
}
//鑳借�楃被鍨嬪崰姣�
@@ -127,4 +127,31 @@
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<EnergyAccountTypeDto> energyAccountTypeDtos=energyConsumptionDetailMapper.energyAccountTypeDtos(energyStatisticsVo);
+ energyAccountDto.setEnergyAccountTypeDtos(energyAccountTypeDtos);
+ //鑳借�楃被鍨嬫垚鏈崰姣�
+ List<EnergyConsumptionTypeDto> energyConsumptionTypeDtos=energyConsumptionDetailMapper.energyConsumptionTypeProportion(energyStatisticsVo);
+ energyAccountDto.setEnergyConsumptionTypeProportion(energyConsumptionTypeDtos);
+ //鑳借�楃被鍨嬫槑缁�
+ List<EnergyConsumptionDetailDto> energyConsumptionDetailDtoList=energyConsumptionDetailMapper.energyConsumptionDetailDtos(energyStatisticsVo);
+ energyAccountDto.setEnergyConsumptionDetailDtoList(energyConsumptionDetailDtoList);
+ return energyAccountDto;
+ }
}
diff --git a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
index 50f4e2f..227474c 100644
--- a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
+++ b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
@@ -118,5 +118,30 @@
on z.meter_reading_date=C.meter_reading_date
order by z.meter_reading_date
</select>
+ <select id="energyAccountTypeDtos" resultType="com.ruoyi.energy.dto.EnergyAccountTypeDto">
+ select ecd.type energyAccountType,
+ SUM(COALESCE(ecd.dosage, 0) * e.unit_price) energyAccount
+ 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 ecd.type
+ </select>
+ <select id="energyConsumptionDetailDtos"
+ resultType="com.ruoyi.energy.dto.EnergyConsumptionDetailDto">
+ select ecd.meter_reading_date,
+ e.energy_tyep,
+ ecd.type,
+ 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 ecd.meter_reading_date,
+ e.energy_tyep,
+ ecd.type,
+ e.unit_price
+ order by ecd.meter_reading_date
+ </select>
</mapper>
--
Gitblit v1.9.3