feat(ems): 新增能耗统计分析功能

- 新增环比分析、同比分析接口与实现
- 支持按设备、能源类型、区域(含子区域)过滤统计
- 实现日、周、月、年维度的数据汇总与对比计算
- 扩展 Mapper 层支持带设备列表的时间区间查询
- 新增多个 VO 类用于封装分析结果数据结构
- 完善 Controller 接口接收过滤参数并调用服务层
-优化区域递归查找逻辑以支持层级结构查询
- 提供工具方法处理空值与比率计算
- 添加新的 BO 类用于传递查询与范围参数
- 更新配置文件注释但未启用新路由规则
This commit is contained in:
JR
2025-09-30 18:46:57 +08:00
parent 29c0c7bb73
commit c927ce247b
14 changed files with 562 additions and 27 deletions

View File

@@ -13,4 +13,18 @@ public class EmsEnergyConsumptionQueryBo {
* 月份用于按天汇总格式yyyy-MM
*/
private String month;
/** 能源类型ID可选 */
private Long energyTypeId;
/** 计量设备ID可选 */
private Long meterId;
/** 区域ID可选含子区域 */
private Long locationId;
/** 周期类型day/week/month/year用于环比分析 */
private String periodType;
/** 日期关键字:
* day=yyyy-MM-ddweek=年内周数(1-53)month=本年月份(1-12)year=yyyy
*/
private String dateKey;
}

View File

@@ -0,0 +1,13 @@
package com.klp.ems.domain.bo;
import lombok.Data;
import java.util.List;
@Data
public class MeterFilterBo {
private Long energyTypeId;
private List<Long> locationIds;
private Long meterId;
}

View File

@@ -0,0 +1,13 @@
package com.klp.ems.domain.bo;
import lombok.Data;
import java.util.List;
@Data
public class TimeRangeWithMetersBo {
private String start;
private String end;
private List<Long> meterIds;
}

View File

@@ -0,0 +1,23 @@
package com.klp.ems.domain.vo;
import lombok.Data;
import java.util.List;
/**
* 环比分析返回:指定周期(天/周/月/年)本期与上期的序列
*/
@Data
public class ChainAnalysisVo {
/** 周期类型day/week/month/year */
private String periodType;
/** 本期标签(例如当前月的每一天、当前年的每个月等) */
private List<String> currentLabels;
/** 上期标签 */
private List<String> previousLabels;
/** 本期数值 */
private List<Double> currentValues;
/** 上期数值 */
private List<Double> previousValues;
}

View File

@@ -1,16 +1,29 @@
package com.klp.ems.domain.vo;
import lombok.Data;
/**
* 环比概况
*/
@Data
public class EnergyChainRatioVo {
private Double todayUsage; // 今日用能
private Double yesterdayUsage; // 昨日同期
private Double thisMonthUsage; // 当月累计
private Double lastMonthUsage; // 上月同期
private Double lastYearUsage; // 去年同期
/** 今日用能 */
private Double todayUsage;
/** 昨日同期用能(昨日同一时间段累计) */
private Double yesterdayUsage;
/** 当月用能(到当前时刻累计) */
private Double thisMonthUsage;
/** 上月同期用能(上月到同一日同一时刻累计) */
private Double lastMonthUsage;
/** 当前年用能(到当前时刻累计) */
private Double currentYearUsage;
/** 去年同期用能(去年到同一日同一时刻累计) */
private Double lastYearUsage;
private Double dailyChainRate; // 日环比 (%)
private Double monthlyChainRate; // 月环比 (%)
private Double yearOnYearRate; // 年同比 (%)
/** 日环比 (%) = (今日 - 昨日同期) / 昨日同期 * 100 */
private Double dailyChainRate;
/** 月环比 (%) = (当月 - 上月同期) / 上月同期 * 100 */
private Double monthlyChainRate;
/** 年同比 (%) = (当前年 - 去年同期) / 去年同期 * 100 */
private Double yearOnYearRate;
}

View File

@@ -0,0 +1,21 @@
package com.klp.ems.domain.vo;
import lombok.Data;
import java.util.List;
/**
* 同比分析返回
*/
@Data
public class YearOnYearVo {
/** 年份,例如 2025 */
private String year;
/** 上一年,例如 2024 */
private String lastYear;
/** 当年每月总用能长度最多12 */
private List<Double> currentYearMonthly;
/** 上一年每月总用能长度最多12 */
private List<Double> lastYearMonthly;
}