diff --git a/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java b/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java index b960b12..8e586ad 100644 --- a/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java +++ b/os-ems/src/main/java/com/os/ems/record/domain/RecordIotenvInstant.java @@ -89,7 +89,9 @@ public class RecordIotenvInstant extends BaseEntity /** 能源类型 */ private Long monitorType; private String energyName; - + + /** 采样间隔(分钟),用于数据抽稀 */ + private Integer samplingInterval; // // public void setObjid(Long objid) diff --git a/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java b/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java index ece5d00..365d9db 100644 --- a/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java +++ b/os-ems/src/main/java/com/os/ems/record/mapper/RecordIotenvInstantMapper.java @@ -154,4 +154,15 @@ public interface RecordIotenvInstantMapper */ public List selectLatestRecordsByMonitorIdsFromTable(@Param("tableName") String tableName, @Param("monitorIds") List monitorIds); + + /** + * 按时间间隔采样查询:每个时间窗口选择最新的一条数据 + * 用于减少数据点数量,提升前端渲染性能 + * + * @param tableNames 表名列表 + * @param recordIotenvInstant 查询条件(包含samplingInterval采样间隔) + * @return 采样后的物联网数据集合 + */ + List selectRecordIotenvInstantListFromTablesWithSampling(@Param("tableNames") List tableNames, + @Param("recordIotenvInstant") RecordIotenvInstant recordIotenvInstant); } diff --git a/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java b/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java index deb0044..f9d8940 100644 --- a/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/record/service/impl/RecordIotenvInstantServiceImpl.java @@ -72,8 +72,15 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi if (tableNames.isEmpty()) { return new ArrayList<>(); } - // 执行分表查询 - return recordIotenvInstantMapper.selectRecordIotenvInstantListFromTables(tableNames, recordIotenvInstant); + + // 检查是否需要采样 + if (recordIotenvInstant.getSamplingInterval() != null && recordIotenvInstant.getSamplingInterval() > 1) { + // 使用采样查询 + return recordIotenvInstantMapper.selectRecordIotenvInstantListFromTablesWithSampling(tableNames, recordIotenvInstant); + } else { + // 使用普通查询 + return recordIotenvInstantMapper.selectRecordIotenvInstantListFromTables(tableNames, recordIotenvInstant); + } } /** diff --git a/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml b/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml index 8e17207..3a54a4e 100644 --- a/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml +++ b/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml @@ -366,4 +366,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) t2 ON t1.monitorId = t2.monitorId AND t1.objid = t2.max_objid + + + \ No newline at end of file