From 6f8cb882b706f74b4ea00927b0f3d77ab7937aa5 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期二, 29 七月 2025 16:04:00 +0800 Subject: [PATCH] yys 新增设备能耗管理 --- src/main/java/com/ruoyi/device/pojo/DeviceLedger.java | 5 src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java | 6 src/main/resources/mapper/equipmentenergyconsumption/EquipmentEnergyConsumptionMapper.xml | 25 +++ src/main/java/com/ruoyi/equipmentenergyconsumption/service/EquipmentEnergyConsumptionService.java | 27 +++ src/main/java/com/ruoyi/equipmentenergyconsumption/pojo/EquipmentEnergyConsumption.java | 138 +++++++++++++++++++ src/main/java/com/ruoyi/equipmentenergyconsumption/controller/EquipmentEnergyConsumptionController.java | 94 +++++++++++++ src/main/java/com/ruoyi/equipmentenergyconsumption/mapper/EquipmentEnergyConsumptionMapper.java | 23 +++ src/main/java/com/ruoyi/equipmentenergyconsumption/service/impl/EquipmentEnergyConsumptionServiceImpl.java | 97 +++++++++++++ 8 files changed, 415 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java index 597e51b..01233be 100644 --- a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java +++ b/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; /** diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java index 913156c..0687aad 100644 --- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java +++ b/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(); diff --git a/src/main/java/com/ruoyi/equipmentenergyconsumption/controller/EquipmentEnergyConsumptionController.java b/src/main/java/com/ruoyi/equipmentenergyconsumption/controller/EquipmentEnergyConsumptionController.java new file mode 100644 index 0000000..429423f --- /dev/null +++ b/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); + } + + + +} diff --git a/src/main/java/com/ruoyi/equipmentenergyconsumption/mapper/EquipmentEnergyConsumptionMapper.java b/src/main/java/com/ruoyi/equipmentenergyconsumption/mapper/EquipmentEnergyConsumptionMapper.java new file mode 100644 index 0000000..ba75dd9 --- /dev/null +++ b/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); +} diff --git a/src/main/java/com/ruoyi/equipmentenergyconsumption/pojo/EquipmentEnergyConsumption.java b/src/main/java/com/ruoyi/equipmentenergyconsumption/pojo/EquipmentEnergyConsumption.java new file mode 100644 index 0000000..4ed1aff --- /dev/null +++ b/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; + +} diff --git a/src/main/java/com/ruoyi/equipmentenergyconsumption/service/EquipmentEnergyConsumptionService.java b/src/main/java/com/ruoyi/equipmentenergyconsumption/service/EquipmentEnergyConsumptionService.java new file mode 100644 index 0000000..830e808 --- /dev/null +++ b/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); +} diff --git a/src/main/java/com/ruoyi/equipmentenergyconsumption/service/impl/EquipmentEnergyConsumptionServiceImpl.java b/src/main/java/com/ruoyi/equipmentenergyconsumption/service/impl/EquipmentEnergyConsumptionServiceImpl.java new file mode 100644 index 0000000..53214cc --- /dev/null +++ b/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); + } +} diff --git a/src/main/resources/mapper/equipmentenergyconsumption/EquipmentEnergyConsumptionMapper.xml b/src/main/resources/mapper/equipmentenergyconsumption/EquipmentEnergyConsumptionMapper.xml new file mode 100644 index 0000000..18a5700 --- /dev/null +++ b/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> \ No newline at end of file -- Gitblit v1.9.3