From 8546dfc55df24663d18137c83bf490c15b8d46da Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 11 三月 2026 13:03:03 +0800
Subject: [PATCH] 能耗管理的统计
---
src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java | 13 ++
src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java | 10 +-
src/main/java/com/ruoyi/energy/dto/EnergyCostDto.java | 43 ++++++++
src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java | 3
src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java | 36 ++++++
src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java | 23 ++++
src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java | 34 +++++-
src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java | 6 +
src/main/java/com/ruoyi/energy/controller/EnergyController.java | 2
src/main/java/com/ruoyi/energy/dto/EnergyConsumptionTypeDto.java | 22 ++++
src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml | 84 ++++++++++++++++
11 files changed, 255 insertions(+), 21 deletions(-)
diff --git a/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java b/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
index d7db119..10d0701 100644
--- a/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
+++ b/src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java
@@ -3,11 +3,9 @@
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.EnergyStatisticsDto;
-import com.ruoyi.energy.pojo.Energy;
import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
import com.ruoyi.energy.service.EnergyConsumptionDetailService;
-import com.ruoyi.energy.service.EnergyService;
+import com.ruoyi.energy.vo.EnergyStatisticsVo;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.R;
@@ -56,11 +54,13 @@
@Log(title = "鑳借�楁妱琛ㄦ槑缁�-瀵煎叆", businessType = BusinessType.IMPORT)
@PostMapping("/importData")
+ @ApiOperation("鑳借�楁妱琛ㄦ槑缁�-瀵煎叆")
public R importData(MultipartFile file) throws Exception {
return energyConsumptionDetailService.importData(file);
}
@PostMapping("/downloadTemplate")
+ @ApiOperation("鑳借�楁妱琛�-涓嬭浇妯℃澘")
@Log(title = "鑳借�楁妱琛�-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
public void downloadTemplate(HttpServletResponse response) {
ExcelUtil<EnergyConsumptionDetailDto> util = new ExcelUtil<EnergyConsumptionDetailDto>(EnergyConsumptionDetailDto.class);
@@ -78,8 +78,8 @@
@GetMapping("/statistics")
@ApiOperation("鎸夋棩鏈堝勾姹囨�荤粺璁�")
- public R statistics(EnergyStatisticsDto energyStatisticsDto) {
- return R.ok(energyConsumptionDetailService.statistics(energyStatisticsDto));
+ public R statistics(EnergyStatisticsVo energyStatisticsVo) {
+ return R.ok(energyConsumptionDetailService.statistics(energyStatisticsVo));
}
}
diff --git a/src/main/java/com/ruoyi/energy/controller/EnergyController.java b/src/main/java/com/ruoyi/energy/controller/EnergyController.java
index 46bb32a..cd9f8a7 100644
--- a/src/main/java/com/ruoyi/energy/controller/EnergyController.java
+++ b/src/main/java/com/ruoyi/energy/controller/EnergyController.java
@@ -57,11 +57,13 @@
@Log(title = "鑳芥簮绫诲瀷-瀵煎叆", businessType = BusinessType.IMPORT)
@PostMapping("/importData")
+ @ApiOperation("鑳芥簮绫诲瀷-瀵煎叆")
public R importData(MultipartFile file) throws Exception {
return energyService.importData(file);
}
@PostMapping("/downloadTemplate")
+ @ApiOperation("鑳芥簮绫诲瀷-涓嬭浇妯℃澘")
@Log(title = "鑳芥簮绫诲瀷-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
public void downloadTemplate(HttpServletResponse response) {
ExcelUtil<Energy> util = new ExcelUtil<Energy>(Energy.class);
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
index eec50f8..cd712be 100644
--- a/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
@@ -7,6 +7,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
+
//鑳借�楁妱琛ㄦ槑缁�
@Data
@ExcelIgnoreUnannotated
@@ -26,4 +28,8 @@
//鍒涘缓浜�
private String createUserName;
+
+ //璐圭敤
+ private BigDecimal cost;
+
}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionTypeDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionTypeDto.java
new file mode 100644
index 0000000..47b469b
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyConsumptionTypeDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.energy.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("鑳借�楃被鍨嬪崰姣�")
+public class EnergyConsumptionTypeDto {
+
+ @ApiModelProperty("鑳芥簮绫诲瀷")
+ private String energyTyep;
+
+ @ApiModelProperty("鑳借�楃敤閲�")
+ private BigDecimal energyConsumption;
+
+ @ApiModelProperty("鑳借�楄垂鐢�")
+ private BigDecimal energyCost;
+}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyCostDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyCostDto.java
new file mode 100644
index 0000000..c7814fd
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyCostDto.java
@@ -0,0 +1,43 @@
+package com.ruoyi.energy.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.checkerframework.checker.units.qual.A;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+//鑳借�楄垂鐢ㄦ槑缁�
+@Data
+@ApiModel("鑳借�楄垂鐢ㄦ槑缁�")
+public class EnergyCostDto {
+
+ @ApiModelProperty("鏃ユ湡")
+ private LocalDate meterReadingDate;
+
+ @ApiModelProperty("鐢ㄦ按閲�")
+ private BigDecimal waterConsumption;
+
+ @ApiModelProperty("姘磋垂")
+ private BigDecimal waterCost;
+
+ @ApiModelProperty("鐢ㄧ數閲�")
+ private BigDecimal electricityConsumption;
+
+ @ApiModelProperty("鐢佃垂")
+ private BigDecimal electricityCost;
+
+ @ApiModelProperty("鐢ㄦ皵閲�")
+ private BigDecimal gasConsumption;
+
+ @ApiModelProperty("姘旇垂")
+ private BigDecimal gasCost;
+
+ @ApiModelProperty("鍚堣鐢ㄩ噺")
+ private BigDecimal totalConsumption;
+
+ @ApiModelProperty("鍚堣璐圭敤")
+ private BigDecimal totalCost;
+
+}
diff --git a/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java b/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
index 25764b8..810f4c2 100644
--- a/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
+++ b/src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
@@ -1,20 +1,36 @@
package com.ruoyi.energy.dto;
-
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import java.time.LocalDate;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
-//鎸夋棩鏈堝勾姹囨�荤粺璁¤兘鑰楃殑浼犲弬
@Data
+@ApiModel("鎸夋棩鏈堝勾姹囨�荤粺璁$殑鑳借�楁暟鎹�")
public class EnergyStatisticsDto {
- //寮�濮嬫棩鏈�
- private LocalDate startDate;
+ @ApiModelProperty("鎬昏�楃敤閲�")
+ private BigDecimal totalEnergyConsumption;
- //缁撴潫鏃ユ湡
- private LocalDate endDate;
+ @ApiModelProperty("鎬昏兘鑰楄垂鐢�")
+ private BigDecimal totalEnergyCost;
- //鑳借�楀満鏅�(鍔炲叕/鐢熶骇)
- private String type;
+ @ApiModelProperty("骞冲潎鐢ㄩ噺")
+ private BigDecimal averageConsumption;
+
+ @ApiModelProperty("鐜瘮鍙樺寲")
+ private BigDecimal changeVite;
+
+ @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 af10b49..119451e 100644
--- a/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
+++ b/src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java
@@ -3,10 +3,17 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.energy.dto.EnergyConsumptionDetailDto;
+import com.ruoyi.energy.dto.EnergyConsumptionTypeDto;
+import com.ruoyi.energy.dto.EnergyCostDto;
import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.energy.vo.EnergyStatisticsVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -20,4 +27,10 @@
public interface EnergyConsumptionDetailMapper extends BaseMapper<EnergyConsumptionDetail> {
IPage<EnergyConsumptionDetailDto> pageEnergyConsumptionDetail(Page<EnergyConsumptionDetailDto> page, @Param("c") EnergyConsumptionDetailDto energyConsumptionDetailDto);
+
+ Map<String, BigDecimal> calculateEnergy(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+
+ List<EnergyConsumptionTypeDto> energyConsumptionTypeProportion(@Param("c") EnergyStatisticsVo energyStatisticsVo);
+
+ List<EnergyCostDto> energyCostDtos(@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 2e77177..d770f01 100644
--- a/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
+++ b/src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java
@@ -6,6 +6,7 @@
import com.ruoyi.energy.dto.EnergyStatisticsDto;
import com.ruoyi.energy.pojo.EnergyConsumptionDetail;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.energy.vo.EnergyStatisticsVo;
import com.ruoyi.framework.web.domain.R;
import org.springframework.web.multipart.MultipartFile;
@@ -27,6 +28,6 @@
void export(HttpServletResponse response);
- Object statistics(EnergyStatisticsDto energyStatisticsDto);
+ EnergyStatisticsDto statistics(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 ec91e5a..fd0e5e2 100644
--- a/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
+++ b/src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java
@@ -7,6 +7,8 @@
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.mapper.EnergyMapper;
import com.ruoyi.energy.pojo.Energy;
@@ -14,6 +16,7 @@
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;
@@ -21,7 +24,11 @@
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.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -91,7 +98,32 @@
}
@Override
- public Object statistics(EnergyStatisticsDto energyStatisticsDto) {
- return null;
+ 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 changeVite = (map.get("totalEnergyConsumption").subtract(oldmap.get("totalEnergyConsumption"))).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=energyConsumptionDetailMapper.energyCostDtos(energyStatisticsVo);
+ energyStatisticsDto.setEnergyCostDtos(energyCostDtos);
+ return energyStatisticsDto;
}
}
diff --git a/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java b/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java
new file mode 100644
index 0000000..0adf74c
--- /dev/null
+++ b/src/main/java/com/ruoyi/energy/vo/EnergyStatisticsVo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.energy.vo;
+
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+//鎸夋棩鏈堝勾姹囨�荤粺璁¤兘鑰楃殑浼犲弬
+@Data
+public class EnergyStatisticsVo {
+
+ //寮�濮嬫棩鏈�
+ private LocalDate startDate;
+
+ //缁撴潫鏃ユ湡
+ private LocalDate endDate;
+
+ //鏌ヨ闂撮殧澶╂暟
+ private Long days;
+
+ //鑳借�楀満鏅�(鍔炲叕/鐢熶骇)
+ private String type;
+}
diff --git a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
index 2fe5f17..b2cf830 100644
--- a/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
+++ b/src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
@@ -26,16 +26,92 @@
left join energy e on ecd.energy_id = e.id
left join sys_user su on ecd.create_user = su.user_id) A
<where>
- <if test="c.energyTyep != null and c.energyTyep != ''">
+ <if test="c.type != null and c.type != ''">
+ and type =#{c.type}
+ </if>
+ <if test="c.energyTyep != null and c.energyTyep != ''">
and energy_tyep like concat('%',#{c.energyTyep},'%')
- </if>
+ </if>
<if test="c.energyName != null and c.energyName != ''">
and energy_name like concat('%',#{c.energyName},'%')
- </if>
+ </if>
<if test="c.meterReadingDate != null and c.meterReadingDate != ''">
and meter_reading_date =#{c.meterReadingDate}
+ </if>
+ </where>
+ </select>
+ <select id="calculateEnergy" resultType="java.util.Map">
+ 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
+ where ecd.meter_reading_date between #{c.startDate} and #{c.endDate}
+ <if test="c.type != null and c.type != ''">
+ and ecd.type =#{c.type}
</if>
- </where>
+ </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
+ 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}
+ <if test="c.type != null and c.type != ''">
+ and ecd.type =#{c.type}
+ </if>
+ 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 ecd.meter_reading_date,
+ 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 ecd.meter_reading_date)A
+ join
+ (select ecd.meter_reading_date,
+ 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 ecd.meter_reading_date)B
+ on A.meter_reading_date=B.meter_reading_date
+ join
+ (select ecd.meter_reading_date,
+ 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 ecd.meter_reading_date)C
+ on A.meter_reading_date=C.meter_reading_date
+
</select>
</mapper>
--
Gitblit v1.9.3