From 951ff55d25ee754536421dc5ee7b8401cc2e3818 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Wed, 29 May 2024 13:59:01 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E8=AE=BE=E5=A4=87=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E9=80=9A=E8=AE=AF=E6=97=B6=E9=97=B4=20fix=20DeviceStateCheckTa?= =?UTF-8?q?sk,=E5=8F=96=E8=AE=BE=E5=A4=87=E6=9C=80=E5=90=8E=E9=80=9A?= =?UTF-8?q?=E8=AE=AF=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iotkit/data/manager/IDeviceInfoData.java | 15 +++++++++++++ .../data/service/DeviceInfoDataCache.java | 22 ++++++++++++++++++- .../service/DeviceInfoPropertyDataCache.java | 10 +++++++++ .../data/service/DeviceInfoDataImpl.java | 10 +++++++++ .../manager/service/DeviceStateCheckTask.java | 4 ++-- .../iotkit/plugin/main/ThingServiceImpl.java | 9 ++++++++ .../handler/DeviceMessageHandler.java | 2 +- 7 files changed, 68 insertions(+), 4 deletions(-) diff --git a/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java b/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java index 88b952e0..d2ea78f1 100644 --- a/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java +++ b/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java @@ -56,6 +56,21 @@ public interface IDeviceInfoData extends IOwnedData { */ long getPropertyUpdateTime(String deviceId); + /** + * 获取设备最新通讯时间 + * + * @param deviceId 设备id + * @return timestamp + */ + long getLastTime(String deviceId); + /** + * 设置设备最新通讯时间 + * + * @param deviceId 设备id + * @return timestamp + */ + void setLastTime(String deviceId, long lastTime); + /** * 根据设备ID取设备信息 * diff --git a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java index 50e5fb78..11dfbd7d 100644 --- a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java +++ b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java @@ -106,12 +106,18 @@ public class DeviceInfoDataCache implements IDeviceInfoData, SmartInitializingSi return String.format(Constants.PROPERTY_CACHE_KEY, deviceId); } + private String getLastTimeCacheKey(String deviceId) { + return String.format(Constants.LAST_TIME_CACHE_KEY, deviceId); + } + + @Override public void saveProperties(String deviceId, Map properties) { Map old = getProperties(deviceId); old.putAll(properties); + long updateTime = System.currentTimeMillis(); redisTemplate.opsForValue().set(getPropertyCacheKey(deviceId), - JsonUtils.toJsonString(new PropertyCacheInfo(System.currentTimeMillis(), old)) + JsonUtils.toJsonString(new PropertyCacheInfo(updateTime, old)) ); } @@ -141,6 +147,20 @@ public class DeviceInfoDataCache implements IDeviceInfoData, SmartInitializingSi return getPropertyCacheInfo(deviceId).getUpdateTime(); } + @Override + public long getLastTime(String deviceId) { + String last = redisTemplate.opsForValue().get( getLastTimeCacheKey(deviceId)); + if(StringUtils.isBlank(last)){ + return 0L; + } + return Long.valueOf(last); + } + + @Override + public void setLastTime(String deviceId, long lastTime) { + redisTemplate.opsForValue().set(getLastTimeCacheKey(deviceId), String.valueOf(lastTime)); + } + @Override @Cacheable(value = Constants.CACHE_DEVICE_INFO, key = "#root.method.name+#deviceId", unless = "#result == null") public DeviceInfo findByDeviceId(String deviceId) { diff --git a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java index 1ea6d380..abf4c12f 100644 --- a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java +++ b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java @@ -118,6 +118,16 @@ public class DeviceInfoPropertyDataCache implements IDeviceInfoData { return deviceInfoData.getPropertyUpdateTime(deviceId); } + @Override + public long getLastTime(String deviceId) { + return deviceInfoData.getLastTime(deviceId); + } + + @Override + public void setLastTime(String deviceId, long lastTime) { + deviceInfoData.setLastTime(deviceId, lastTime); + } + @Override public DeviceInfo findByDeviceId(String deviceId) { DeviceInfo deviceInfo = deviceInfoData.findByDeviceId(deviceId); diff --git a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java index 18fdc6da..4966a822 100644 --- a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java +++ b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java @@ -114,6 +114,16 @@ public class DeviceInfoDataImpl implements IDeviceInfoData, IJPACommData keepAliveTime * 1000 * 1.1) { + if (System.currentTimeMillis() - lastTime > keepAliveTime * 1000 * 1.1) { DeviceInfo realTimeDevice = deviceInfoData.findByDeviceId(deviceId); if (!realTimeDevice.isOnline()) { continue; diff --git a/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/ThingServiceImpl.java b/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/ThingServiceImpl.java index 2f80c399..3482b45e 100644 --- a/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/ThingServiceImpl.java +++ b/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/ThingServiceImpl.java @@ -85,6 +85,8 @@ public class ThingServiceImpl implements IThingService { if (device == null) { log.warn("device:{} is not found.", deviceName); } + long lastTime = System.currentTimeMillis(); + deviceUpdateLastTime(device, lastTime); ActionType type = action.getType(); switch (type) { @@ -92,6 +94,9 @@ public class ThingServiceImpl implements IThingService { //设备注册 registerDevice(device, (DeviceRegister) action, null); break; + case PING: + // 设备心跳 + break; case SUB_REGISTER: //子设备注册 subRegisterDevice(pluginId, device, (SubDeviceRegister) action); @@ -153,6 +158,10 @@ public class ThingServiceImpl implements IThingService { } } + private void deviceUpdateLastTime(DeviceInfo device, long lastTime) { + deviceInfoData.setLastTime(device.getDeviceId(),lastTime); + } + @Override public ThingProduct getProduct(String pk) { try { diff --git a/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/DeviceMessageHandler.java b/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/DeviceMessageHandler.java index 85bf22e1..b87f95f2 100644 --- a/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/DeviceMessageHandler.java +++ b/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/DeviceMessageHandler.java @@ -26,7 +26,7 @@ package cc.iotkit.ruleengine.handler; import cc.iotkit.common.thing.ThingModelMessage; -public interface DeviceMessageHandler { +public interface DeviceMessageHandler { void handle(ThingModelMessage message);