From e1896ac86aba7cb6e0faea90c9a054f62e7e71c5 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Mon, 20 Apr 2026 09:44:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=AE=BE=E5=A4=87=E7=94=B5=E8=AF=9D?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=92=8C=E5=91=8A=E8=AD=A6=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E8=AE=BE=E5=A4=87=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87=E6=9C=89=E6=95=88?= =?UTF-8?q?=E6=9C=9F=E5=88=A4=E6=96=AD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../intc/iot/handler/DeviceDataHandler.java | 43 +++++++++++++++++-- .../tdengine/mapper/DeviceExpireMapper.java | 29 +++++++++++++ .../service/impl/DeviceSensorDataService.java | 12 ++++++ .../mapper/tdengine/DeviceExpireMapper.xml | 10 +++++ 4 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/mapper/DeviceExpireMapper.java create mode 100644 intc-modules/intc-tdengine/src/main/resources/mapper/tdengine/DeviceExpireMapper.xml diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java index aa6e11d..0aa0449 100644 --- a/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java +++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java @@ -412,6 +412,12 @@ public class DeviceDataHandler { return; } + // 设备已过期,不触发告警 + if (device.getDeadTime() != null && device.getDeadTime().before(new java.util.Date())) { + log.debug("[告警] 设备已过期,跳过告警检查: {}", deviceName); + return; + } + Long deviceId = device.getId(); Long userId = device.getUserId(); @@ -1183,6 +1189,8 @@ public class DeviceDataHandler { Device device = deviceMapper.selectOne( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() .eq(Device::getSerialNum, deviceName) + .select(Device::getId, Device::getSerialNum, Device::getDeviceName, + Device::getPondId, Device::getUserId, Device::getDeadTime) .last("LIMIT 1") ); if (device == null) { @@ -1190,6 +1198,12 @@ public class DeviceDataHandler { return; } + // 设备已过期,不触发故障告警 + if (device.getDeadTime() != null && device.getDeadTime().before(new java.util.Date())) { + log.debug("[设备故障] 设备已过期,跳过故障告警: {}", deviceName); + return; + } + Long deviceId = device.getId(); Long userId = device.getUserId(); if (userId == null) { @@ -1326,12 +1340,20 @@ public class DeviceDataHandler { Device device = deviceMapper.selectOne( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() .eq(Device::getSerialNum, deviceName) + .select(Device::getId, Device::getSerialNum, Device::getDeviceName, Device::getWarnCode, + Device::getPondId, Device::getUserId, Device::getDeadTime) .last("LIMIT 1") ); if (device == null) { return; } + // 设备已过期,不处理故障码 + if (device.getDeadTime() != null && device.getDeadTime().before(new java.util.Date())) { + log.debug("[故障码] 设备已过期,跳过处理: {}", deviceName); + return; + } + if (errorCode == 0) { // 清除所有故障码 clearErrorCodeRecords(device); @@ -1795,17 +1817,23 @@ public class DeviceDataHandler { } int sensorErrorCode = rawCode; - // 查询设备,需要 id / warnCode / isOxygenUsed / pondId + // 查询设备,需要 id / warnCode / isOxygenUsed / pondId / deadTime Device device = deviceMapper.selectOne( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() .eq(Device::getSerialNum, deviceName) - .select(Device::getId, Device::getWarnCode, Device::getIsOxygenUsed, Device::getPondId) + .select(Device::getId, Device::getWarnCode, Device::getIsOxygenUsed, Device::getPondId, Device::getDeadTime) .last("LIMIT 1") ); if (device == null) { return; } + // 设备已过期,不处理探头错误码 + if (device.getDeadTime() != null && device.getDeadTime().before(new java.util.Date())) { + log.debug("[探头错误码] 设备已过期,跳过处理: {}", deviceName); + return; + } + int currentCode = device.getWarnCode() != null ? device.getWarnCode() : 0; int newCode = currentCode; @@ -2269,18 +2297,25 @@ public class DeviceDataHandler { */ private void handleLinkedCtrl(String deviceName, double dissolvedOxygen) { try { - // 查询当前设备(需要 id、iotId、pondId) + // 查询当前设备(需要 id、iotId、pondId、deadTime) Device currentDevice = deviceMapper.selectOne( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() .eq(Device::getSerialNum, deviceName) .select(Device::getId, Device::getIotId, Device::getSerialNum, Device::getDeviceName, - Device::getPondId, Device::getValueDissolvedOxygen, Device::getUserId) + Device::getPondId, Device::getValueDissolvedOxygen, Device::getUserId, + Device::getDeadTime) .last("LIMIT 1") ); if (currentDevice == null || currentDevice.getId() == null) { return; } + // 设备已过期,不执行联动控制 + if (currentDevice.getDeadTime() != null && currentDevice.getDeadTime().before(new java.util.Date())) { + log.debug("[联动控制] 设备已过期,跳过处理: {}", deviceName); + return; + } + // 先更新当前设备的实时溶解氧(确保后续取最低值时已包含本次上报值) // 注意:updateDeviceRealTimeData 在 handleLinkedCtrl 调用前已执行,此处直接使用传入值 diff --git a/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/mapper/DeviceExpireMapper.java b/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/mapper/DeviceExpireMapper.java new file mode 100644 index 0000000..974cfdd --- /dev/null +++ b/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/mapper/DeviceExpireMapper.java @@ -0,0 +1,29 @@ +package com.intc.tdengine.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.Date; + +/** + * 设备到期信息Mapper(查询MySQL主库) + * + * @author intc + */ +@Repository +@Mapper +public interface DeviceExpireMapper { + + /** + * 根据设备序列号查询服务到期时间 + * + * @param serialNum 设备序列号 + * @return 服务到期时间,设备不存在时返回null + */ + @DS("master") + @InterceptorIgnore(tenantLine = "true") + Date getDeadTimeBySerialNum(@Param("serialNum") String serialNum); +} diff --git a/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java b/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java index 07077d1..8a2b2c3 100644 --- a/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java +++ b/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java @@ -2,6 +2,7 @@ package com.intc.tdengine.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.intc.tdengine.domain.DeviceSensorData; +import com.intc.tdengine.mapper.DeviceExpireMapper; import com.intc.tdengine.mapper.DeviceSensorDataMapper; import com.intc.tdengine.service.IDeviceSensorDataService; import jakarta.annotation.Resource; @@ -9,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Date; import java.util.List; @Slf4j @@ -17,6 +19,9 @@ import java.util.List; public class DeviceSensorDataService implements IDeviceSensorDataService { @Resource private DeviceSensorDataMapper deviceSensorDataMapper; + + @Resource + private DeviceExpireMapper deviceExpireMapper; /** * 已创建的子表缓存(设备序列号) @@ -203,6 +208,13 @@ public class DeviceSensorDataService implements IDeviceSensorDataService { public List getHistoryDataList(String serialNum, String startTime, String endTime, Integer intervalType) { List list = new ArrayList<>(); try { + // 检查设备是否已过期 + Date deadTime = deviceExpireMapper.getDeadTimeBySerialNum(serialNum); + if (deadTime != null && deadTime.before(new Date())) { + log.info("设备已过期,不返回历史数据: serialNum={}, deadTime={}", serialNum, deadTime); + return list; + } + // 默认为原始数据 if (intervalType == null) { intervalType = 1; diff --git a/intc-modules/intc-tdengine/src/main/resources/mapper/tdengine/DeviceExpireMapper.xml b/intc-modules/intc-tdengine/src/main/resources/mapper/tdengine/DeviceExpireMapper.xml new file mode 100644 index 0000000..f33ff9b --- /dev/null +++ b/intc-modules/intc-tdengine/src/main/resources/mapper/tdengine/DeviceExpireMapper.xml @@ -0,0 +1,10 @@ + + + + + + + +