feat(ems): 新增能耗统计与环比分析功能- 添加按日和按月汇总能耗数据的接口与实现
- 实现能耗环比概况的数据结构与基础查询逻辑 - 引入新的查询参数类和返回值对象以支持统计功能 - 配置MyBatis XML映射文件以支持能耗统计数据查询 - 控制器层增加获取能耗趋势和环比信息的新端点
This commit is contained in:
@@ -3,9 +3,15 @@ package com.klp.ems.controller;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Arrays;
|
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 lombok.RequiredArgsConstructor;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
import org.flywaydb.core.internal.util.StringUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import com.klp.common.annotation.RepeatSubmit;
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
@@ -36,6 +42,31 @@ public class EmsEnergyConsumptionController extends BaseController {
|
|||||||
|
|
||||||
private final IEmsEnergyConsumptionService iEmsEnergyConsumptionService;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询能耗记录列表
|
* 查询能耗记录列表
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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; // 年同比 (%)
|
||||||
|
}
|
||||||
@@ -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; // 当日总能耗
|
||||||
|
}
|
||||||
@@ -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; // 当月总能耗
|
||||||
|
}
|
||||||
@@ -3,6 +3,11 @@ package com.klp.ems.mapper;
|
|||||||
import com.klp.ems.domain.EmsEnergyConsumption;
|
import com.klp.ems.domain.EmsEnergyConsumption;
|
||||||
import com.klp.ems.domain.vo.EmsEnergyConsumptionVo;
|
import com.klp.ems.domain.vo.EmsEnergyConsumptionVo;
|
||||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
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接口
|
* 能耗记录Mapper接口
|
||||||
@@ -12,4 +17,7 @@ import com.klp.common.core.mapper.BaseMapperPlus;
|
|||||||
*/
|
*/
|
||||||
public interface EmsEnergyConsumptionMapper extends BaseMapperPlus<EmsEnergyConsumptionMapper, EmsEnergyConsumption, EmsEnergyConsumptionVo> {
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package com.klp.ems.service;
|
package com.klp.ems.service;
|
||||||
|
|
||||||
import com.klp.ems.domain.EmsEnergyConsumption;
|
|
||||||
import com.klp.ems.domain.vo.EmsEnergyConsumptionVo;
|
import com.klp.ems.domain.vo.EmsEnergyConsumptionVo;
|
||||||
import com.klp.ems.domain.bo.EmsEnergyConsumptionBo;
|
import com.klp.ems.domain.bo.EmsEnergyConsumptionBo;
|
||||||
import com.klp.common.core.page.TableDataInfo;
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
import com.klp.common.core.domain.PageQuery;
|
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.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -46,4 +48,10 @@ public interface IEmsEnergyConsumptionService {
|
|||||||
* 校验并批量删除能耗记录信息
|
* 校验并批量删除能耗记录信息
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
EnergyChainRatioVo getEnergyChainRatio();
|
||||||
|
|
||||||
|
List<SummaryDailyVo> getEnergySummaryDaily(String month);
|
||||||
|
|
||||||
|
List<SummaryMonthlyVo> getEnergySummaryMonthly(String year);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ import com.klp.common.core.domain.PageQuery;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
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 lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.klp.ems.domain.bo.EmsEnergyConsumptionBo;
|
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.mapper.EmsEnergyConsumptionMapper;
|
||||||
import com.klp.ems.service.IEmsEnergyConsumptionService;
|
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.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -111,4 +118,30 @@ public class EmsEnergyConsumptionServiceImpl implements IEmsEnergyConsumptionSer
|
|||||||
}
|
}
|
||||||
return baseMapper.deleteBatchIds(ids) > 0;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,5 +21,31 @@
|
|||||||
<result property="remark" column="remark"/>
|
<result property="remark" column="remark"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="selectDailySummary" resultType="com.klp.ems.domain.vo.SummaryDailyVo">
|
||||||
|
SELECT
|
||||||
|
DATE(end_time) AS day,
|
||||||
|
SUM(consumption) AS totalConsumption
|
||||||
|
FROM
|
||||||
|
ems_energy_consumption
|
||||||
|
WHERE
|
||||||
|
DATE(end_time) BETWEEN #{startDate} AND #{endDate}
|
||||||
|
GROUP BY
|
||||||
|
DATE(end_time)
|
||||||
|
ORDER BY
|
||||||
|
day
|
||||||
|
</select>
|
||||||
|
<select id="selectMonthlySummary" resultType="com.klp.ems.domain.vo.SummaryMonthlyVo">
|
||||||
|
SELECT
|
||||||
|
DATE_FORMAT(end_time, '%Y-%m') AS month,
|
||||||
|
SUM(consumption) AS totalConsumption
|
||||||
|
FROM
|
||||||
|
ems_energy_consumption
|
||||||
|
WHERE
|
||||||
|
DATE_FORMAT(end_time, '%Y') = #{year}
|
||||||
|
GROUP BY
|
||||||
|
DATE_FORMAT(end_time, '%Y-%m')
|
||||||
|
ORDER BY
|
||||||
|
month
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user