parent
83d9974fe8
commit
951ff55d25
|
@ -56,6 +56,21 @@ public interface IDeviceInfoData extends IOwnedData<DeviceInfo, String> {
|
|||
*/
|
||||
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取设备信息
|
||||
*
|
||||
|
|
|
@ -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<String, DevicePropertyCache> properties) {
|
||||
Map<String, DevicePropertyCache> 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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -114,6 +114,16 @@ public class DeviceInfoDataImpl implements IDeviceInfoData, IJPACommData<DeviceI
|
|||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastTime(String deviceId) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLastTime(String deviceId, long lastTime) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceInfo findByDeviceId(String deviceId) {
|
||||
TbDeviceInfo tbDeviceInfo = deviceInfoRepository.findByDeviceId(deviceId);
|
||||
|
|
|
@ -73,9 +73,9 @@ public class DeviceStateCheckTask {
|
|||
continue;
|
||||
}
|
||||
String deviceId = device.getDeviceId();
|
||||
long updateTime = deviceInfoData.getPropertyUpdateTime(deviceId);
|
||||
long lastTime = deviceInfoData.getLastTime(deviceId);
|
||||
//最后更新时间超时保活时长1.1倍认为设备离线了
|
||||
if (System.currentTimeMillis() - updateTime > keepAliveTime * 1000 * 1.1) {
|
||||
if (System.currentTimeMillis() - lastTime > keepAliveTime * 1000 * 1.1) {
|
||||
DeviceInfo realTimeDevice = deviceInfoData.findByDeviceId(deviceId);
|
||||
if (!realTimeDevice.isOnline()) {
|
||||
continue;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue