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

105 lines
4.1 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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.klp.ems.mapper.EmsEnergyConsumptionMapper">
<resultMap type="com.klp.ems.domain.EmsEnergyConsumption" id="EmsEnergyConsumptionResult">
<result property="energyConsumptionId" column="energy_consumption_id"/>
<result property="meterId" column="meter_id"/>
<result property="startReading" column="start_reading"/>
<result property="endReading" column="end_reading"/>
<result property="consumption" column="consumption"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="recordedBy" column="recorded_by"/>
<result property="createBy" column="create_by"/>
<result property="updateBy" column="update_by"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
</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>
<!-- 过滤版按设备集合energyTypeId/locationId会先解析出设备集合 -->
<select id="selectDailySummaryWithMeters" parameterType="com.klp.ems.domain.bo.TimeRangeWithMetersBo" 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 #{start} AND #{end}
<if test="meterIds != null and meterIds.size() > 0">
AND meter_id IN
<foreach collection="meterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
GROUP BY DATE(end_time)
ORDER BY day
</select>
<select id="selectMonthlySummaryWithMeters" parameterType="com.klp.ems.domain.bo.TimeRangeWithMetersBo" 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') = #{start}
<if test="meterIds != null and meterIds.size() > 0">
AND meter_id IN
<foreach collection="meterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
GROUP BY DATE_FORMAT(end_time, '%Y-%m')
ORDER BY month
</select>
<select id="sumConsumptionBetween" resultType="java.lang.Double">
SELECT IFNULL(SUM(consumption), 0)
FROM ems_energy_consumption
WHERE end_time &gt;= #{startTime}
AND end_time &lt;= #{endTime}
</select>
<select id="sumConsumptionBetweenWithMeters" parameterType="com.klp.ems.domain.bo.TimeRangeWithMetersBo" resultType="java.lang.Double">
SELECT IFNULL(SUM(consumption), 0)
FROM ems_energy_consumption
WHERE end_time &gt;= #{start}
AND end_time &lt;= #{end}
<if test="meterIds != null and meterIds.size() > 0">
AND meter_id IN
<foreach collection="meterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</select>
</mapper>