From 10defcc6a760378564e52f56b5ee12e1bed5e0e0 Mon Sep 17 00:00:00 2001 From: zch Date: Tue, 1 Jul 2025 18:11:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(record):=20=E6=B7=BB=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E8=81=94=E7=BD=91=E6=95=B0=E6=8D=AE=E9=87=87=E6=A0=B7=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 RecordIotenvInstant 模型中添加 samplingInterval 字段 - 在 RecordIotenvInstantMapper 中添加采样查询方法 - 在 RecordIotenvInstantServiceImpl 中实现采样查询逻辑 - 通过分段+聚合的方式提高查询性能,适用于大量数据场景 --- .../record/domain/RecordIotenvInstant.java | 4 +- .../mapper/RecordIotenvInstantMapper.java | 11 ++++++ .../impl/RecordIotenvInstantServiceImpl.java | 11 +++++- .../ems/record/RecordIotenvInstantMapper.xml | 39 +++++++++++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-) 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