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)); } } 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); 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; } 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; } 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; } 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; } 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); } 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); } 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; } } 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; } src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml
@@ -26,6 +26,9 @@ 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.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> @@ -37,5 +40,78 @@ </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> </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>