zss
7 小时以前 a6c42f7838229c890df3215362875220afdd7ff4
能耗成本核算---按日月汇总统计
已添加2个文件
已修改7个文件
138 ■■■■■ 文件已修改
src/main/java/com/ruoyi/energy/controller/EnergyConsumptionDetailController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/dto/EnergyAccountDto.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/dto/EnergyAccountTypeDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/mapper/EnergyConsumptionDetailMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/service/EnergyConsumptionDetailService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/energy/service/impl/EnergyConsumptionDetailServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/energy/EnergyConsumptionDetailMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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));
    }
}
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;
}
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;
}
src/main/java/com/ruoyi/energy/dto/EnergyConsumptionDetailDto.java
@@ -32,4 +32,7 @@
    //费用
    private BigDecimal cost;
    //单价
    private BigDecimal unitPrice;
}
src/main/java/com/ruoyi/energy/dto/EnergyStatisticsDto.java
@@ -9,7 +9,7 @@
import java.util.Map;
@Data
@ApiModel("按日月年汇总统计的能耗数据")
@ApiModel("能耗统计---按日月年汇总统计的能耗数据")
public class EnergyStatisticsDto {
    @ApiModelProperty("总耗用量")
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);
}
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);
}
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;
    }
}
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>