parent
83d9974fe8
commit
951ff55d25
|
@ -56,6 +56,21 @@ public interface IDeviceInfoData extends IOwnedData<DeviceInfo, String> {
|
||||||
*/
|
*/
|
||||||
long getPropertyUpdateTime(String deviceId);
|
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取设备信息
|
* 根据设备ID取设备信息
|
||||||
*
|
*
|
||||||
|
|
|
@ -106,12 +106,18 @@ public class DeviceInfoDataCache implements IDeviceInfoData, SmartInitializingSi
|
||||||
return String.format(Constants.PROPERTY_CACHE_KEY, deviceId);
|
return String.format(Constants.PROPERTY_CACHE_KEY, deviceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getLastTimeCacheKey(String deviceId) {
|
||||||
|
return String.format(Constants.LAST_TIME_CACHE_KEY, deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveProperties(String deviceId, Map<String, DevicePropertyCache> properties) {
|
public void saveProperties(String deviceId, Map<String, DevicePropertyCache> properties) {
|
||||||
Map<String, DevicePropertyCache> old = getProperties(deviceId);
|
Map<String, DevicePropertyCache> old = getProperties(deviceId);
|
||||||
old.putAll(properties);
|
old.putAll(properties);
|
||||||
|
long updateTime = System.currentTimeMillis();
|
||||||
redisTemplate.opsForValue().set(getPropertyCacheKey(deviceId),
|
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();
|
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
|
@Override
|
||||||
@Cacheable(value = Constants.CACHE_DEVICE_INFO, key = "#root.method.name+#deviceId", unless = "#result == null")
|
@Cacheable(value = Constants.CACHE_DEVICE_INFO, key = "#root.method.name+#deviceId", unless = "#result == null")
|
||||||
public DeviceInfo findByDeviceId(String deviceId) {
|
public DeviceInfo findByDeviceId(String deviceId) {
|
||||||
|
|
|
@ -118,6 +118,16 @@ public class DeviceInfoPropertyDataCache implements IDeviceInfoData {
|
||||||
return deviceInfoData.getPropertyUpdateTime(deviceId);
|
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
|
@Override
|
||||||
public DeviceInfo findByDeviceId(String deviceId) {
|
public DeviceInfo findByDeviceId(String deviceId) {
|
||||||
DeviceInfo deviceInfo = deviceInfoData.findByDeviceId(deviceId);
|
DeviceInfo deviceInfo = deviceInfoData.findByDeviceId(deviceId);
|
||||||
|
|
|
@ -114,6 +114,16 @@ public class DeviceInfoDataImpl implements IDeviceInfoData, IJPACommData<DeviceI
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getLastTime(String deviceId) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLastTime(String deviceId, long lastTime) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceInfo findByDeviceId(String deviceId) {
|
public DeviceInfo findByDeviceId(String deviceId) {
|
||||||
TbDeviceInfo tbDeviceInfo = deviceInfoRepository.findByDeviceId(deviceId);
|
TbDeviceInfo tbDeviceInfo = deviceInfoRepository.findByDeviceId(deviceId);
|
||||||
|
|
|
@ -73,9 +73,9 @@ public class DeviceStateCheckTask {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String deviceId = device.getDeviceId();
|
String deviceId = device.getDeviceId();
|
||||||
long updateTime = deviceInfoData.getPropertyUpdateTime(deviceId);
|
long lastTime = deviceInfoData.getLastTime(deviceId);
|
||||||
//最后更新时间超时保活时长1.1倍认为设备离线了
|
//最后更新时间超时保活时长1.1倍认为设备离线了
|
||||||
if (System.currentTimeMillis() - updateTime > keepAliveTime * 1000 * 1.1) {
|
if (System.currentTimeMillis() - lastTime > keepAliveTime * 1000 * 1.1) {
|
||||||
DeviceInfo realTimeDevice = deviceInfoData.findByDeviceId(deviceId);
|
DeviceInfo realTimeDevice = deviceInfoData.findByDeviceId(deviceId);
|
||||||
if (!realTimeDevice.isOnline()) {
|
if (!realTimeDevice.isOnline()) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -85,6 +85,8 @@ public class ThingServiceImpl implements IThingService {
|
||||||
if (device == null) {
|
if (device == null) {
|
||||||
log.warn("device:{} is not found.", deviceName);
|
log.warn("device:{} is not found.", deviceName);
|
||||||
}
|
}
|
||||||
|
long lastTime = System.currentTimeMillis();
|
||||||
|
deviceUpdateLastTime(device, lastTime);
|
||||||
|
|
||||||
ActionType type = action.getType();
|
ActionType type = action.getType();
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -92,6 +94,9 @@ public class ThingServiceImpl implements IThingService {
|
||||||
//设备注册
|
//设备注册
|
||||||
registerDevice(device, (DeviceRegister) action, null);
|
registerDevice(device, (DeviceRegister) action, null);
|
||||||
break;
|
break;
|
||||||
|
case PING:
|
||||||
|
// 设备心跳
|
||||||
|
break;
|
||||||
case SUB_REGISTER:
|
case SUB_REGISTER:
|
||||||
//子设备注册
|
//子设备注册
|
||||||
subRegisterDevice(pluginId, device, (SubDeviceRegister) action);
|
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
|
@Override
|
||||||
public ThingProduct getProduct(String pk) {
|
public ThingProduct getProduct(String pk) {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue