From 7184485ba26cf8759ee65d69b2722a7685cf3502 Mon Sep 17 00:00:00 2001 From: zch Date: Mon, 26 May 2025 15:31:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(record):=20=E6=B7=BB=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=89=80=E6=9C=89=E8=AE=BE=E5=A4=87=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增接口和方法获取所有设备的最新数据 - 实现了批量查询多个设备在指定表中的最新记录 - 优化了查询效率,减少了数据库访问次数 - 增加了对分表不存在情况的处理 --- .../EmsRecordAlarmRuleController.java | 12 +++ .../RecordIotenvInstantController.java | 15 ++++ .../mapper/RecordIotenvInstantMapper.java | 20 +++++ .../service/IRecordIotenvInstantService.java | 3 + .../impl/RecordIotenvInstantServiceImpl.java | 84 +++++++++++++++++-- .../ems/record/RecordIotenvInstantMapper.xml | 34 +++++++- 6 files changed, 161 insertions(+), 7 deletions(-) diff --git a/os-ems/src/main/java/com/os/ems/record/controller/EmsRecordAlarmRuleController.java b/os-ems/src/main/java/com/os/ems/record/controller/EmsRecordAlarmRuleController.java index c252d6e..3295c60 100644 --- a/os-ems/src/main/java/com/os/ems/record/controller/EmsRecordAlarmRuleController.java +++ b/os-ems/src/main/java/com/os/ems/record/controller/EmsRecordAlarmRuleController.java @@ -103,4 +103,16 @@ public class EmsRecordAlarmRuleController extends BaseController { return toAjax(emsRecordAlarmRuleService.deleteEmsRecordAlarmRuleByObjIds(objIds)); } + + + /** + * 查询异常告警规则列表 + */ + @PreAuthorize("@ss.hasPermi('ems/record:recordAlarmRule:list')") + @GetMapping("/getEmsRecordAlarmRuleList") + public AjaxResult getEmsRecordAlarmRuleList(EmsRecordAlarmRule emsRecordAlarmRule) + { + List list = emsRecordAlarmRuleService.selectEmsRecordAlarmRuleList(emsRecordAlarmRule); + return success(list); + } } diff --git a/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java b/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java index 44579a5..e6a464e 100644 --- a/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java +++ b/os-ems/src/main/java/com/os/ems/record/controller/RecordIotenvInstantController.java @@ -113,4 +113,19 @@ public class RecordIotenvInstantController extends BaseController List recordIotenvInstants = recordIotenvInstantService.selectRecordIotenvInstantList(recordIotenvInstant); return success(recordIotenvInstants); } + + /** + * 获取所有设备的最新数据(用于首页展示) + */ + @GetMapping("/getLatestRecords") + public AjaxResult getLatestRecords() + { + try { + List latestRecords = recordIotenvInstantService.selectRecordList(new RecordIotenvInstant()); + return success(latestRecords); + } catch (Exception e) { + logger.error("获取设备最新数据失败", e); + return error("获取设备最新数据失败:" + e.getMessage()); + } + } } 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 7396918..ece5d00 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 @@ -134,4 +134,24 @@ public interface RecordIotenvInstantMapper */ public List selectRecentRecordsFromTable(@Param("tableName") String tableName, @Param("startTime") java.util.Date startTime); + + /** + * 根据设备编号从指定表查询最新一条记录 + * + * @param tableName 表名 + * @param monitorId 设备编号 + * @return 最新记录 + */ + public RecordIotenvInstant selectLatestRecordByMonitorIdFromTable(@Param("tableName") String tableName, + @Param("monitorId") String monitorId); + + /** + * 批量查询多个设备在指定表中的最新记录 + * + * @param tableName 表名 + * @param monitorIds 设备编号列表 + * @return 最新记录列表 + */ + public List selectLatestRecordsByMonitorIdsFromTable(@Param("tableName") String tableName, + @Param("monitorIds") List monitorIds); } diff --git a/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java b/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java index 42f5133..18345f5 100644 --- a/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java +++ b/os-ems/src/main/java/com/os/ems/record/service/IRecordIotenvInstantService.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; import com.os.common.core.page.TableDataInfo; +import com.os.ems.base.domain.EmsBaseMonitorInfo; import com.os.ems.record.domain.RecordIotenvInstant; /** @@ -73,4 +74,6 @@ public interface IRecordIotenvInstantService */ public TableDataInfo selectRecordIotenvInstantListWithPage(RecordIotenvInstant recordIotenvInstant, int pageNum, int pageSize) throws ParseException; + public List selectRecordList(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 a923874..89da9d5 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 @@ -2,6 +2,8 @@ package com.os.ems.record.service.impl; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -53,12 +55,6 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi * @param recordIotenvInstant 物联网数据 * @return 物联网数据 */ -// @Override -// public List selectRecordIotenvInstantList(RecordIotenvInstant recordIotenvInstant) -// { -// Map params = recordIotenvInstant.getParams(); -// return recordIotenvInstantMapper.selectRecordIotenvInstantList(recordIotenvInstant); -// } @Override public List selectRecordIotenvInstantList(RecordIotenvInstant recordIotenvInstant) throws ParseException { Map params = recordIotenvInstant.getParams(); @@ -297,6 +293,82 @@ public class RecordIotenvInstantServiceImpl implements IRecordIotenvInstantServi return result; } + @Override + public List selectRecordList(RecordIotenvInstant recordIotenvInstant) + { + List result = new ArrayList<>(); + + // 获取当天日期对应的分表名 + String todayTableName = getTodayTableName(); + + // 检查当天分表是否存在 + boolean tableExists = isTableExists(todayTableName); + + // 获取所有设备信息 + List baseMonitorInfos = emsBaseMonitorInfoMapper.selectEmsBaseMonitorInfoList(new EmsBaseMonitorInfo()); + //获取所有能源类型 + if (tableExists) { + // 如果分表存在,批量查询所有设备的最新数据 + List monitorCodes = new ArrayList<>(); + for (EmsBaseMonitorInfo baseMonitorInfo : baseMonitorInfos) { + monitorCodes.add(baseMonitorInfo.getMonitorCode()); + } + + // 批量查询最新记录 + List latestRecords = recordIotenvInstantMapper + .selectLatestRecordsByMonitorIdsFromTable(todayTableName, monitorCodes); + + // 创建设备编号到最新记录的映射 + Map recordMap = new HashMap<>(); + for (RecordIotenvInstant record : latestRecords) { + recordMap.put(record.getMonitorId(), record); + } + + // 遍历所有设备,构建返回结果 + for (EmsBaseMonitorInfo baseMonitorInfo : baseMonitorInfos) { + String monitorCode = baseMonitorInfo.getMonitorCode(); + String monitorName = baseMonitorInfo.getMonitorName(); + Long monitorType = baseMonitorInfo.getMonitorType(); + + RecordIotenvInstant iotenvInstant = recordMap.get(monitorCode); + if (iotenvInstant == null) { + // 如果没有找到记录,创建一个空记录 + iotenvInstant = new RecordIotenvInstant(); + iotenvInstant.setMonitorId(monitorCode); + } + + // 设置设备基本信息 + iotenvInstant.setMonitorName(monitorName); + iotenvInstant.setMonitorCode(monitorCode); + + result.add(iotenvInstant); + } + } else { + // 如果分表不存在,返回所有设备的空记录 + for (EmsBaseMonitorInfo baseMonitorInfo : baseMonitorInfos) { + RecordIotenvInstant iotenvInstant = new RecordIotenvInstant(); + iotenvInstant.setMonitorId(baseMonitorInfo.getMonitorCode()); + iotenvInstant.setMonitorName(baseMonitorInfo.getMonitorName()); + iotenvInstant.setMonitorCode(baseMonitorInfo.getMonitorCode()); + // 数据值字段保持null,前端会显示"无最新数据" + result.add(iotenvInstant); + } + } + + return result; + } + + /** + * 获取当天日期对应的分表名 + * + * @return 分表名 + */ + private String getTodayTableName() { + LocalDate today = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + String dateSuffix = today.format(formatter); + return "record_iotenv_instant_" + dateSuffix; + } } 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 d1aa592..762e82e 100644 --- a/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml +++ b/os-ems/src/main/resources/mapper/ems/record/RecordIotenvInstantMapper.xml @@ -174,7 +174,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" t.collectTime, t.recodeTime, ebmi.monitor_name FROM ${tableName} t - left join ems_base_monitor_info ebmi on t.monitorId = ebmi.obj_id + left join ems_base_monitor_info ebmi on t.monitorId = ebmi.monitor_code and monitorId = #{recordIotenvInstant.monitorId} and temperature = #{recordIotenvInstant.temperature} @@ -316,4 +316,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ORDER BY recodeTime DESC + + + + + + \ No newline at end of file