package com.ruoyi.energymeter.mapper;
|
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.ruoyi.energymeter.dto.DailyUsageRow;
|
import com.ruoyi.energymeter.dto.DataRangeRow;
|
import com.ruoyi.energymeter.dto.MeterUsageRow;
|
import com.ruoyi.energymeter.dto.MonthlyUsageRow;
|
import com.ruoyi.energymeter.pojo.EnergyMeterMeasurement;
|
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Select;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* 水电表采集数据 Mapper。
|
*/
|
@Mapper
|
public interface EnergyMeterMeasurementMapper extends BaseMapper<EnergyMeterMeasurement> {
|
|
/**
|
* 按日汇总期间用量。只统计 D 粒度的用量指标,绝不累加 POINT 表码。
|
*/
|
List<DailyUsageRow> sumDailyUsage(@Param("meterIds") Collection<Long> meterIds,
|
@Param("metricCode") String metricCode,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
|
/**
|
* 按设备汇总一段时间内的用量,用于设备列表展示最近一天用量。
|
*/
|
List<MeterUsageRow> sumUsageByMeter(@Param("meterIds") Collection<Long> meterIds,
|
@Param("metricCode") String metricCode,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
|
/**
|
* 按月汇总期间用量。
|
*/
|
List<MonthlyUsageRow> sumMonthlyUsage(@Param("meterIds") Collection<Long> meterIds,
|
@Param("metricCode") String metricCode,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
|
/**
|
* 查询指定设备、指标、粒度在时间区间内已存在的采集点,用于幂等比对。
|
*/
|
List<EnergyMeterMeasurement> selectExistingPoints(@Param("meterId") Long meterId,
|
@Param("metricCode") String metricCode,
|
@Param("granularity") String granularity,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
|
/**
|
* 批量幂等写入,唯一键冲突时更新指标值与采集时间。
|
*/
|
int upsertBatch(@Param("list") List<EnergyMeterMeasurement> list);
|
|
/**
|
* 查询已采集数据的时间范围。
|
*/
|
DataRangeRow selectDataRange(@Param("meterIds") Collection<Long> meterIds,
|
@Param("metricCode") String metricCode);
|
|
/**
|
* 区间合计。
|
*/
|
BigDecimal sumTotal(@Param("meterIds") Collection<Long> meterIds,
|
@Param("metricCode") String metricCode,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
|
@Select("SELECT * FROM energy_meter_measurement WHERE meter_id = #{meterId} AND metric_code = #{metricCode} "
|
+ "ORDER BY measure_time DESC LIMIT 1")
|
EnergyMeterMeasurement selectLatestPoint(@Param("meterId") Long meterId,
|
@Param("metricCode") String metricCode);
|
|
/**
|
* 查询指定时间点之前最近的一条时点示值(手工抄表用于计算期差)。
|
*/
|
@Select("SELECT * FROM energy_meter_measurement WHERE meter_id = #{meterId} AND metric_code = #{metricCode} "
|
+ "AND granularity = 'POINT' AND measure_time < #{time} ORDER BY measure_time DESC LIMIT 1")
|
EnergyMeterMeasurement selectPreviousPoint(@Param("meterId") Long meterId,
|
@Param("metricCode") String metricCode,
|
@Param("time") LocalDateTime time);
|
|
/**
|
* 查询指定时间点之后最近的一条时点示值(补录/删除后重算下一期用量)。
|
*/
|
@Select("SELECT * FROM energy_meter_measurement WHERE meter_id = #{meterId} AND metric_code = #{metricCode} "
|
+ "AND granularity = 'POINT' AND measure_time > #{time} ORDER BY measure_time ASC LIMIT 1")
|
EnergyMeterMeasurement selectNextPoint(@Param("meterId") Long meterId,
|
@Param("metricCode") String metricCode,
|
@Param("time") LocalDateTime time);
|
|
@Select("SELECT COUNT(DISTINCT DATE(measure_time)) FROM energy_meter_measurement "
|
+ "WHERE meter_id = #{meterId} AND metric_code = #{metricCode} AND granularity = 'D' "
|
+ "AND measure_time >= #{start} AND measure_time < #{end}")
|
Integer countCollectedDays(@Param("meterId") Long meterId,
|
@Param("metricCode") String metricCode,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
|
/**
|
* 指定期间内已有日用量数据的设备台数,用于采集页展示“今日已归集”。
|
*/
|
Integer countMetersWithUsage(@Param("meterIds") Collection<Long> meterIds,
|
@Param("metricCode") String metricCode,
|
@Param("start") LocalDateTime start,
|
@Param("end") LocalDateTime end);
|
}
|