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 implements EquipmentEnergyConsumptionService { @Autowired private EquipmentEnergyConsumptionMapper equipmentEnergyConsumptionMapper; @Autowired private DeviceLedgerMapper deviceLedgerMapper; @Override public IPage listPage(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption) { return equipmentEnergyConsumptionMapper.listPage(page, equipmentEnergyConsumption); } @Override public AjaxResult importData(MultipartFile file) { try { ExcelUtil util = new ExcelUtil(EquipmentEnergyConsumption.class); List 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 listPageByTrend(Page page, EquipmentEnergyConsumption equipmentEnergyConsumption) { IPage 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 eqmList = equipmentEnergyConsumptionMapper.selectList(new LambdaQueryWrapper() .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 deviceList(DeviceLedger deviceLedger) { return deviceLedgerMapper.selectList(null); } }