From 0eb8ae4ac14cb560a1cdb4a161c93ea54a5949df Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Wed, 25 Mar 2026 09:46:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9gc=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/service/device/TDengineService.java | 87 ++++++++++--------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java index 9ead153e6..bb6532f15 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java @@ -1685,54 +1685,59 @@ public class TDengineService { return Collections.emptyList(); } - List params = new ArrayList<>(); - StringBuilder sql = new StringBuilder( - "SELECT * FROM besure_server.iot_device_operation_record " + - "WHERE deleted = 0 AND device_id IN (" - ); + // 优化:分组查询每个设备的最新记录 + List allResults = new ArrayList<>(); - for (int i = 0; i < deviceIds.size(); i++) { - if (i > 0) sql.append(", "); - sql.append("?"); - params.add(deviceIds.get(i)); - } - sql.append(") "); + for (Long deviceId : deviceIds) { + StringBuilder sql = new StringBuilder( + "SELECT * FROM besure_server.iot_device_operation_record " + + "WHERE deleted = 0 AND device_id = ? " + ); - if (CollectionUtils.isNotEmpty(ruleCodes)) { - sql.append("AND rule IN ("); - for (int i = 0; i < ruleCodes.size(); i++) { - if (i > 0) sql.append(", "); - sql.append("?"); - params.add(ruleCodes.get(i)); + List params = new ArrayList<>(); + params.add(deviceId); + + if (CollectionUtils.isNotEmpty(ruleCodes)) { + sql.append("AND rule IN ("); + for (int i = 0; i < ruleCodes.size(); i++) { + if (i > 0) sql.append(", "); + sql.append("?"); + params.add(ruleCodes.get(i)); + } + sql.append(") "); } - sql.append(") "); - } - sql.append("ORDER BY create_time DESC"); + sql.append("ORDER BY create_time DESC LIMIT 1"); // 每个设备只取最新1条 - try { - return jdbcTemplate.query(sql.toString(), params.toArray(), (rs, rowNum) -> { - DeviceOperationRecordDO d = new DeviceOperationRecordDO(); -// d.setTs(rs.getTimestamp("ts") != null ? rs.getTimestamp("ts").toLocalDateTime() : null); -// d.setId(rs.getLong("id")); - d.setDeviceId(rs.getLong("device_id")); - d.setModelId(rs.getLong("model_id")); - d.setRule(rs.getString("rule")); - d.setAddressValue(rs.getString("address_value")); - d.setCreator(rs.getString("creator")); - d.setCreateTime(rs.getTimestamp("create_time") != null ? rs.getTimestamp("create_time").toLocalDateTime() : null); - d.setUpdater(rs.getString("updater")); - d.setUpdateTime(rs.getTimestamp("update_time") != null ? rs.getTimestamp("update_time").toLocalDateTime() : null); - d.setDeleted(rs.getBoolean("deleted")); - d.setTenantId(String.valueOf(rs.getLong("tenant_id"))); - d.setRuleId(rs.getLong("rule_id")); - return d; - }); + try { + List deviceResults = jdbcTemplate.query( + sql.toString(), + params.toArray(), + (rs, rowNum) -> { + DeviceOperationRecordDO d = new DeviceOperationRecordDO(); + d.setDeviceId(rs.getLong("device_id")); + d.setModelId(rs.getLong("model_id")); + d.setRule(rs.getString("rule")); + d.setAddressValue(rs.getString("address_value")); + d.setCreator(rs.getString("creator")); + d.setCreateTime(rs.getTimestamp("create_time") != null ? rs.getTimestamp("create_time").toLocalDateTime() : null); + d.setUpdater(rs.getString("updater")); + d.setUpdateTime(rs.getTimestamp("update_time") != null ? rs.getTimestamp("update_time").toLocalDateTime() : null); + d.setDeleted(rs.getBoolean("deleted")); + d.setTenantId(String.valueOf(rs.getLong("tenant_id"))); + d.setRuleId(rs.getLong("rule_id")); + return d; + }); + + allResults.addAll(deviceResults); + + } catch (Exception e) { + log.error("查询设备{}的最新记录失败", deviceId, e); + } - } catch (Exception e) { - log.error("查询失败", e); - return Collections.emptyList(); } + + return allResults; } /**