maven
2 天以前 6f8cb882b706f74b4ea00927b0f3d77ab7937aa5
yys  新增设备能耗管理
已修改2个文件
已添加6个文件
415 ■■■■■ 文件已修改
src/main/java/com/ruoyi/device/pojo/DeviceLedger.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/equipmentenergyconsumption/controller/EquipmentEnergyConsumptionController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/equipmentenergyconsumption/mapper/EquipmentEnergyConsumptionMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/equipmentenergyconsumption/pojo/EquipmentEnergyConsumption.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/equipmentenergyconsumption/service/EquipmentEnergyConsumptionService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/equipmentenergyconsumption/service/impl/EquipmentEnergyConsumptionServiceImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/equipmentenergyconsumption/EquipmentEnergyConsumptionMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -17,6 +19,7 @@
 */
@Data
@TableName("device_ledger")
@ApiModel
public class DeviceLedger {
    /**
@@ -28,11 +31,13 @@
    /**
     * è®¾å¤‡åç§°
     */
    @ApiModelProperty("设备名称")
    private String deviceName;
    /**
     * è§„格型号
     */
    @ApiModelProperty("规格型号")
    private String deviceModel;
    /**
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -44,6 +45,11 @@
    @Override
    public AjaxResult saveDeviceLedger(DeviceLedger deviceLedger) {
        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
            return AjaxResult.error("设备型号已存在");
        }
        boolean save = this.save(deviceLedger);
        if (save){
            return AjaxResult.success();
src/main/java/com/ruoyi/equipmentenergyconsumption/controller/EquipmentEnergyConsumptionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.ruoyi.equipmentenergyconsumption.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import com.ruoyi.equipmentenergyconsumption.service.EquipmentEnergyConsumptionService;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/7/29 13:19
 */
@RestController
@Api(tags = "设备能耗")
@RequestMapping("/equipmentEnergyConsumption")
public class EquipmentEnergyConsumptionController extends BaseController {
    @Autowired
    private EquipmentEnergyConsumptionService equipmentEnergyConsumptionService;
    @GetMapping("/listPage")
    @ApiOperation("设备能耗-分页查询")
    @Log(title = "设备能耗-分页查询", businessType = BusinessType.OTHER)
    public AjaxResult listPage(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption) {
        IPage<EquipmentEnergyConsumption> listPage = equipmentEnergyConsumptionService.listPage(page, equipmentEnergyConsumption);
        return AjaxResult.success(listPage);
    }
    @GetMapping("/deviceList")
    @ApiOperation("设备台账-查询")
    @Log(title = "设备台账-查询", businessType = BusinessType.OTHER)
    public AjaxResult deviceList(DeviceLedger deviceLedger) {
        List<DeviceLedger> listPage = equipmentEnergyConsumptionService.deviceList(deviceLedger);
        return AjaxResult.success(listPage);
    }
    @PostMapping("/add")
    @ApiOperation("设备能耗-新增")
    @Log(title = "设备能耗-新增", businessType = BusinessType.INSERT)
    public AjaxResult add(@RequestBody EquipmentEnergyConsumption equipmentEnergyConsumption) {
        boolean save = equipmentEnergyConsumptionService.save(equipmentEnergyConsumption);
        return save ? AjaxResult.success() : AjaxResult.error();
    }
    @PostMapping("/update")
    @ApiOperation("设备能耗-修改")
    @Log(title = "设备能耗-修改", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody EquipmentEnergyConsumption equipmentEnergyConsumption) {
        boolean update = equipmentEnergyConsumptionService.updateById(equipmentEnergyConsumption);
        return update ? AjaxResult.success() : AjaxResult.error();
    }
    @DeleteMapping("/delete")
    @ApiOperation("设备能耗-删除")
    @Log(title = "设备能耗-删除", businessType = BusinessType.DELETE)
    public AjaxResult delete(@RequestBody List<Long> ids) {
        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("请选择至少一条数据");
        boolean remove = equipmentEnergyConsumptionService.removeBatchByIds(ids);
        return remove ? AjaxResult.success() : AjaxResult.error();
    }
    /**
     * å¯¼å…¥è®¾å¤‡èƒ½è€—
     */
    @Log(title = "导入设备能耗", businessType = BusinessType.IMPORT)
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file) throws Exception {
        return equipmentEnergyConsumptionService.importData(file);
    }
    @GetMapping("/listPageByTrend")
    @ApiOperation("设备能耗-能源趋势-分页查询")
    @Log(title = "设备能耗-能源趋势-分页查询", businessType = BusinessType.OTHER)
    public AjaxResult listPageByTrend(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption) {
        IPage<EquipmentEnergyConsumption> listPage = equipmentEnergyConsumptionService.listPageByTrend(page, equipmentEnergyConsumption);
        return AjaxResult.success(listPage);
    }
}
src/main/java/com/ruoyi/equipmentenergyconsumption/mapper/EquipmentEnergyConsumptionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.equipmentenergyconsumption.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import org.apache.ibatis.annotations.Param;
/**
 * @author :yys
 * @date : 2025/7/29 13:16
 */
public interface EquipmentEnergyConsumptionMapper extends BaseMapper<EquipmentEnergyConsumption> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param equipmentEnergyConsumption
     * @return
     */
    IPage<EquipmentEnergyConsumption> listPage(Page page,@Param("req") EquipmentEnergyConsumption equipmentEnergyConsumption);
    IPage<EquipmentEnergyConsumption> listPageByTrend(Page page,@Param("req") EquipmentEnergyConsumption equipmentEnergyConsumption);
}
src/main/java/com/ruoyi/equipmentenergyconsumption/pojo/EquipmentEnergyConsumption.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
package com.ruoyi.equipmentenergyconsumption.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * @author :yys
 * @date : 2025/7/29 13:12
 */
@Data
@TableName("equipment_energy_consumption")
@ApiModel
public class EquipmentEnergyConsumption {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * è®¾å¤‡ç¼–号
     */
    @ApiModelProperty("设备编号")
    @Excel(name = "设备编号")
    private String code;
    /**
     * è®¾å¤‡åç§°
     */
    @ApiModelProperty("设备名称")
    @Excel(name = "设备名称")
    private String name;
    /**
     * é¢å®šåŠŸçŽ‡
     */
    @ApiModelProperty("额定功率")
    @Excel(name = "额定功率")
    private String powerRating;
    /**
     * å®žé™…功率
     */
    @ApiModelProperty("实际功率")
    @Excel(name = "实际功率")
    private String powerActual;
    /**
     * å½“日用电量
     */
    @ApiModelProperty("当日用电量")
    @Excel(name = "当日用电量")
    private BigDecimal dayNum;
    /**
     * æ˜¨ç”¨ç”µé‡
     */
    @ApiModelProperty("昨用电量")
    @TableField(exist = false)
    private BigDecimal toDayNum;
    /**
     * æœ¬æœˆå¹³å‡ç”µé‡ï¼ˆ30天计算)
     */
    @ApiModelProperty("本月平均电量(30天计算)")
    @TableField(exist = false)
    private BigDecimal avgNum;
    /**
     * è¶‹åŠ¿
     */
    @ApiModelProperty("趋势")
    @TableField(exist = false)
    private String trend;
    /**
     * ç´¯è®¡ç”¨ç”µé‡
     */
    @ApiModelProperty("累计用电量")
    @Excel(name = "累计用电量")
    private BigDecimal sumNum;
    /**
     * è¿è¡Œæ—¶é—´
     */
    @ApiModelProperty("运行时间")
    @Excel(name = "运行时间" , width = 30, dateFormat = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate runDate;
    /**
     * æ¯æ—¥é™åˆ¶ç”µé‡
     */
    @ApiModelProperty("每日限制电量")
    @Excel(name = "每日限制电量")
    private BigDecimal everyNum;
    /**
     * åˆ›å»ºè€…
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * ä¿®æ”¹è€…
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     * ä¿®æ”¹æ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    /**
     * ç§Ÿæˆ·ID
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/equipmentenergyconsumption/service/EquipmentEnergyConsumptionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.equipmentenergyconsumption.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import com.ruoyi.framework.web.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/7/29 13:18
 */
public interface EquipmentEnergyConsumptionService extends IService<EquipmentEnergyConsumption> {
    IPage<EquipmentEnergyConsumption> listPage(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption);
    AjaxResult importData(MultipartFile file);
    IPage<EquipmentEnergyConsumption> listPageByTrend(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption);
    List<DeviceLedger> deviceList(DeviceLedger deviceLedger);
}
src/main/java/com/ruoyi/equipmentenergyconsumption/service/impl/EquipmentEnergyConsumptionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.ruoyi.equipmentenergyconsumption.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.equipmentenergyconsumption.mapper.EquipmentEnergyConsumptionMapper;
import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import com.ruoyi.equipmentenergyconsumption.service.EquipmentEnergyConsumptionService;
import com.ruoyi.framework.web.domain.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/7/29 13:18
 */
@Service
@Slf4j
public class EquipmentEnergyConsumptionServiceImpl extends ServiceImpl<EquipmentEnergyConsumptionMapper, EquipmentEnergyConsumption> implements EquipmentEnergyConsumptionService {
    @Autowired
    private EquipmentEnergyConsumptionMapper equipmentEnergyConsumptionMapper;
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
    @Override
    public IPage<EquipmentEnergyConsumption> listPage(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption) {
        return equipmentEnergyConsumptionMapper.listPage(page, equipmentEnergyConsumption);
    }
    @Override
    public AjaxResult importData(MultipartFile file) {
        try {
            ExcelUtil<EquipmentEnergyConsumption> util = new ExcelUtil<EquipmentEnergyConsumption>(EquipmentEnergyConsumption.class);
            List<EquipmentEnergyConsumption> userList = util.importExcel(file.getInputStream());
            if(CollectionUtils.isEmpty(userList)){
                return AjaxResult.warn("模板错误或导入数据为空");
            }
            this.saveOrUpdateBatch(userList);
            return AjaxResult.success(true);
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error("导入失败");
        }
    }
    @Override
    public IPage<EquipmentEnergyConsumption> listPageByTrend(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption) {
        IPage<EquipmentEnergyConsumption> list = equipmentEnergyConsumptionMapper.listPageByTrend(page, equipmentEnergyConsumption);
        if (list.getTotal() > 0){
            // èŽ·å–æœ¬æœˆç¬¬ä¸€å¤©ï¼Œæœ€åŽä¸€å¤©
            LocalDate current = LocalDate.now();
            LocalDate firstDay = LocalDate.of(current.getYear(), current.getMonth(), 1);
            LocalDate lastDay = LocalDate.of(current.getYear(), current.getMonth(), current.lengthOfMonth());
            list.getRecords().forEach(item -> {
                // è®¡ç®—本月平均电量(求和按自然月来,按30天求平均数)
                List<EquipmentEnergyConsumption> eqmList = equipmentEnergyConsumptionMapper.selectList(new LambdaQueryWrapper<EquipmentEnergyConsumption>()
                        .eq(EquipmentEnergyConsumption::getCode, item.getCode())
                        .ge(EquipmentEnergyConsumption::getRunDate, lastDay)
                        .lt(EquipmentEnergyConsumption::getRunDate, firstDay));
                if (!CollectionUtils.isEmpty(eqmList)){
                    BigDecimal avgNum = eqmList.stream().map(EquipmentEnergyConsumption::getDayNum).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal(30), 2, RoundingMode.HALF_UP);
                    item.setAvgNum(avgNum);
                    BigDecimal subtract = item.getToDayNum().subtract(item.getAvgNum());
                    if (subtract.compareTo(BigDecimal.ZERO) > 0){
                        item.setTrend("昨日用电比平均电量多" +  subtract + "度");
                    }else if (subtract.compareTo(BigDecimal.ZERO) < 0){
                        item.setTrend("昨日用电比平均电量少" +  subtract.abs() + "度");
                    }else {
                        item.setTrend("昨日用电和平均电量持平");
                    }
                }
            });
        }
        return list;
    }
    @Override
    public List<DeviceLedger> deviceList(DeviceLedger deviceLedger) {
        return deviceLedgerMapper.selectList(null);
    }
}
src/main/resources/mapper/equipmentenergyconsumption/EquipmentEnergyConsumptionMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.equipmentenergyconsumption.mapper.EquipmentEnergyConsumptionMapper">
    <select id="listPage" resultType="com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption">
        select * from equipment_energy_consumption
        where 1=1
        <if test="req.name != null and req.name != ''">
            and `name` like concat('%',#{req.name},'%')
        </if>
    </select>
    <select id="listPageByTrend" resultType="com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption">
        SELECT
            *,
            day_num as toDayNum
        FROM
            equipment_energy_consumption
        WHERE
            run_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
        GROUP BY
            `code`
        ORDER BY
            update_time DESC;
    </select>
</mapper>