From 9c830759b349652d88280dabc7c5245ba9b96e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Mon, 19 May 2025 10:00:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9C=A8=E7=BA=BF=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DeviceIotServiceImpl.java | 25 ++++++++++++------- .../ruoyi/bst/device/utils/DeviceUtil.java | 16 ++++++++++++ .../service/impl/IotReceiveServiceImpl.java | 6 +---- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java index 073a00d..0f562a6 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java @@ -294,20 +294,23 @@ public class DeviceIotServiceImpl implements DeviceIotService { .filter(item -> Objects.equals(item.getMac(), device.getMac())) .findFirst().orElse(null); DeviceUtil.setIotInfo(device, iot); + this.updateIot(device); } // 异步发送命令,强制设备上报数据 - scheduledExecutorService.execute(() -> { - for (DeviceVO device : deviceList) { - try { - if (onlineType != null) { - iotService.getOnlineStatus(device, onlineType); + if (onlineType != null) { + scheduledExecutorService.execute(() -> { + for (DeviceVO device : deviceList) { + try { + if (onlineType != null) { + iotService.getOnlineStatus(device, onlineType); + } + } catch (Exception e) { + log.error("强制设备{}上报数据失败", device.getSn(), e); } - } catch (Exception e) { - log.error("强制设备{}上报数据失败", device.getSn(), e); } - } - }); + }); + } } @Override @@ -319,6 +322,10 @@ public class DeviceIotServiceImpl implements DeviceIotService { if (info == null) { info = new DeviceCacheInfo(); } + // 若缓存时间大于设备时间,则不更新 + if (info.getLastTime() != null && device.getLastTime() != null && info.getLastTime().isAfter(device.getLastTime())) { + return 0; + } info.setMac(device.getMac()); if (device.getVoltage() != null) { diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java index a5370b4..fa57460 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java @@ -14,6 +14,7 @@ import com.ruoyi.common.utils.MathUtils; import com.ruoyi.common.utils.map.GpsCoordinateUtils; import com.ruoyi.iot.domain.IotDeviceInfo; import com.ruoyi.iot.domain.IotDeviceSysInfo; +import com.ruoyi.iot.service.impl.DeviceOnlineStatus; import com.ruoyi.iot.util.BatUtil; public class DeviceUtil { @@ -186,4 +187,19 @@ public class DeviceUtil { public static boolean isLowSatelliteSignal(DeviceVO device) { return device != null && device.getSatellites() != null && device.getSatellites() <= 5; } + + /** + * 根据推送设置设备信息 + * + * @param device 设备 + * @param sys sys信息 + * @param at 时间 + * @param setNull 是否设置为空 + */ + public static void setIotSysInfoByReceive(DeviceVO device, IotDeviceSysInfo sys, LocalDateTime at, boolean setNull) { + setIotSysInfo(device, sys, at, setNull); + + device.setOnlineStatus(DeviceOnlineStatus.ONLINE.getStatus()); + device.setLastOnlineTime(at); + } } \ No newline at end of file diff --git a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java index ce7e9dd..8de626d 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java @@ -102,11 +102,7 @@ public class IotReceiveServiceImpl implements IotReceiveService { log.info("收到sys数据:{}", msg.getValue()); IotDeviceSysInfo sys = IotUtil.toSysInfo(msg.getValue()); LocalDateTime at = DateUtils.toLocalDateTime(msg.getAt()); - DeviceUtil.setIotSysInfo(device, sys, at, true); - - // 更新设备信息 - device.setOnlineStatus(DeviceOnlineStatus.ONLINE.getStatus()); - device.setLastOnlineTime(at); + DeviceUtil.setIotSysInfoByReceive(device, sys, at, true); // 更新设备信息 deviceIotService.updateIot(device);