feat(ems): 新增能耗统计与环比分析功能- 添加按日和按月汇总能耗数据的接口与实现

- 实现能耗环比概况的数据结构与基础查询逻辑
- 引入新的查询参数类和返回值对象以支持统计功能
- 配置MyBatis XML映射文件以支持能耗统计数据查询
- 控制器层增加获取能耗趋势和环比信息的新端点
This commit is contained in:
JR
2025-09-28 23:51:47 +08:00
parent ef8ba712df
commit 6c483ad6f5
9 changed files with 161 additions and 1 deletions

View File

@@ -3,9 +3,15 @@ package com.klp.ems.controller;
import java.util.List;
import java.util.Arrays;
import com.klp.ems.domain.bo.EmsEnergyConsumptionQueryBo;
import com.klp.ems.domain.vo.EnergyChainRatioVo;
import com.klp.ems.domain.vo.SummaryDailyVo;
import com.klp.ems.domain.vo.SummaryMonthlyVo;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import org.flywaydb.core.internal.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.klp.common.annotation.RepeatSubmit;
@@ -36,6 +42,31 @@ public class EmsEnergyConsumptionController extends BaseController {
private final IEmsEnergyConsumptionService iEmsEnergyConsumptionService;
/**
* 近期能耗趋势(测过了)
*/
@GetMapping("/getEnergySummary")
public R getEnergySummary(EmsEnergyConsumptionQueryBo queryBo){
if (StringUtils.hasText(queryBo.getMonth())) {
List<SummaryDailyVo> data = iEmsEnergyConsumptionService.getEnergySummaryDaily(queryBo.getMonth());
return R.ok(data);
}else if (StringUtils.hasText(queryBo.getYear())) {
List<SummaryMonthlyVo> data = iEmsEnergyConsumptionService.getEnergySummaryMonthly(queryBo.getYear());
return R.ok(data);
} else {
return R.fail("year 或 month 必须提供一个");
}
}
/**
* 获取能耗环比概况(没写完)
*/
@GetMapping("/getEnergyChainRatio")
public R<EnergyChainRatioVo> getEnergyChainRatio() {
EnergyChainRatioVo energyChainRatioVo = iEmsEnergyConsumptionService.getEnergyChainRatio();
return R.ok(energyChainRatioVo);
}
/**
* 查询能耗记录列表
*/

View File

@@ -0,0 +1,16 @@
package com.klp.ems.domain.bo;
import lombok.Data;
@Data
public class EmsEnergyConsumptionQueryBo {
/**
* 年份用于按月汇总格式yyyy
*/
private String year;
/**
* 月份用于按天汇总格式yyyy-MM
*/
private String month;
}

View File

@@ -0,0 +1,16 @@
package com.klp.ems.domain.vo;
/**
* 环比概况
*/
public class EnergyChainRatioVo {
private Double todayUsage; // 今日用能
private Double yesterdayUsage; // 昨日同期
private Double thisMonthUsage; // 当月累计
private Double lastMonthUsage; // 上月同期
private Double lastYearUsage; // 去年同期
private Double dailyChainRate; // 日环比 (%)
private Double monthlyChainRate; // 月环比 (%)
private Double yearOnYearRate; // 年同比 (%)
}

View File

@@ -0,0 +1,11 @@
package com.klp.ems.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SummaryDailyVo {
private String day; // 日期,如 "2025-09-01"
private BigDecimal totalConsumption; // 当日总能耗
}

View File

@@ -0,0 +1,11 @@
package com.klp.ems.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SummaryMonthlyVo {
private String month; // 月份,如 "2025-09"
private BigDecimal totalConsumption; // 当月总能耗
}

View File

@@ -3,6 +3,11 @@ package com.klp.ems.mapper;
import com.klp.ems.domain.EmsEnergyConsumption;
import com.klp.ems.domain.vo.EmsEnergyConsumptionVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import com.klp.ems.domain.vo.SummaryDailyVo;
import com.klp.ems.domain.vo.SummaryMonthlyVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 能耗记录Mapper接口
@@ -12,4 +17,7 @@ import com.klp.common.core.mapper.BaseMapperPlus;
*/
public interface EmsEnergyConsumptionMapper extends BaseMapperPlus<EmsEnergyConsumptionMapper, EmsEnergyConsumption, EmsEnergyConsumptionVo> {
List<SummaryDailyVo> selectDailySummary(@Param("startDate") String startDate, @Param("endDate") String endDate);
List<SummaryMonthlyVo> selectMonthlySummary(@Param("year") String year);
}

View File

@@ -1,10 +1,12 @@
package com.klp.ems.service;
import com.klp.ems.domain.EmsEnergyConsumption;
import com.klp.ems.domain.vo.EmsEnergyConsumptionVo;
import com.klp.ems.domain.bo.EmsEnergyConsumptionBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.klp.ems.domain.vo.EnergyChainRatioVo;
import com.klp.ems.domain.vo.SummaryDailyVo;
import com.klp.ems.domain.vo.SummaryMonthlyVo;
import java.util.Collection;
import java.util.List;
@@ -46,4 +48,10 @@ public interface IEmsEnergyConsumptionService {
* 校验并批量删除能耗记录信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
EnergyChainRatioVo getEnergyChainRatio();
List<SummaryDailyVo> getEnergySummaryDaily(String month);
List<SummaryMonthlyVo> getEnergySummaryMonthly(String year);
}

View File

@@ -6,6 +6,10 @@ import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.ems.domain.bo.EmsEnergyConsumptionQueryBo;
import com.klp.ems.domain.vo.EnergyChainRatioVo;
import com.klp.ems.domain.vo.SummaryDailyVo;
import com.klp.ems.domain.vo.SummaryMonthlyVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.ems.domain.bo.EmsEnergyConsumptionBo;
@@ -14,6 +18,9 @@ import com.klp.ems.domain.EmsEnergyConsumption;
import com.klp.ems.mapper.EmsEnergyConsumptionMapper;
import com.klp.ems.service.IEmsEnergyConsumptionService;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@@ -111,4 +118,30 @@ public class EmsEnergyConsumptionServiceImpl implements IEmsEnergyConsumptionSer
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public EnergyChainRatioVo getEnergyChainRatio() {
EnergyChainRatioVo energyChainRatioVo = new EnergyChainRatioVo();
LocalDateTime now = LocalDateTime.now();
return null;
}
@Override
public List<SummaryDailyVo> getEnergySummaryDaily(String month) {
// 解析 month 为开始和结束时间
LocalDate startDate = LocalDate.parse(month + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate endDate = startDate.withDayOfMonth(startDate.lengthOfMonth());
return baseMapper.selectDailySummary(month + "-01", endDate.toString());
}
@Override
public List<SummaryMonthlyVo> getEnergySummaryMonthly(String year) {
return baseMapper.selectMonthlySummary(year);
}
}