package cn.iocoder.yudao.module.bi.dal.mysql.decision; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.bi.dal.dataobject.decision.BiKpiValueHistoryDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.List; /** * KPI历史快照 Mapper * * @author 超级管理员 */ @Mapper public interface BiKpiValueHistoryMapper extends BaseMapperX { /** * 查询指定 KPI 在时间范围内的快照(按时间升序,用于趋势/预测) */ default List selectByKpiCodeAndTimeRange(String kpiCode, LocalDateTime beginTime, LocalDateTime endTime) { return selectList(new LambdaQueryWrapper() .eq(BiKpiValueHistoryDO::getKpiCode, kpiCode) .between(BiKpiValueHistoryDO::getSnapshotTime, beginTime, endTime) .orderByAsc(BiKpiValueHistoryDO::getSnapshotTime)); } /** * 查询指定 KPI 最近 n 条快照(按时间倒序,用于移动平均/趋势研判) */ default List selectRecentByKpiCode(String kpiCode, int limit) { return selectList(new LambdaQueryWrapper() .eq(BiKpiValueHistoryDO::getKpiCode, kpiCode) .orderByDesc(BiKpiValueHistoryDO::getSnapshotTime) .last("LIMIT " + limit)); } /** * 查询指定 KPI 在某整点的快照(用于去重/覆盖) */ default BiKpiValueHistoryDO selectByKpiCodeAndSnapshotTime(String kpiCode, LocalDateTime snapshotTime) { return selectOne(new LambdaQueryWrapper() .eq(BiKpiValueHistoryDO::getKpiCode, kpiCode) .eq(BiKpiValueHistoryDO::getSnapshotTime, snapshotTime) .last("LIMIT 1")); } /** * 查询指定分类在时间范围内的快照 */ default List selectByCategoryAndTimeRange(String category, LocalDateTime beginTime, LocalDateTime endTime) { return selectList(new LambdaQueryWrapper() .eq(BiKpiValueHistoryDO::getCategory, category) .between(BiKpiValueHistoryDO::getSnapshotTime, beginTime, endTime) .orderByAsc(BiKpiValueHistoryDO::getSnapshotTime)); } }