|
|
|
@ -7,6 +7,7 @@ import com.thing.common.core.enumeration.ThingStatus; |
|
|
|
import com.thing.common.core.utils.JacksonUtil; |
|
|
|
import com.thing.common.data.tskv.TsKvDTO; |
|
|
|
import com.thing.common.tskv.service.TsKvService; |
|
|
|
import com.thing.thing.cache.service.ThingCache; |
|
|
|
import com.thing.thing.context.service.ThingManageContextService; |
|
|
|
import com.thing.thing.model.dto.IotThingModelDTO; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
@ -38,6 +39,7 @@ public class ThingStatusTask implements ITask { |
|
|
|
|
|
|
|
private final ThingManageContextService thingManageContextService; |
|
|
|
private final TsKvService tsKvService; |
|
|
|
private final ThingCache cache; |
|
|
|
|
|
|
|
/** |
|
|
|
* 执行定时任务接口 |
|
|
|
@ -58,23 +60,28 @@ public class ThingStatusTask implements ITask { |
|
|
|
//处理 |
|
|
|
List<IotThingModelDTO> statusList = optionalList.get().stream() |
|
|
|
.map(item -> { |
|
|
|
IotThingModelDTO iotThingModelDTO = JacksonUtil.convertValue(item, IotThingModelDTO.class); |
|
|
|
//找到最大时间的属性 |
|
|
|
Optional<TsKvDTO> optionalMax = lastTsKvList.stream() |
|
|
|
.filter(tsKvDTO -> StringUtils.equals(tsKvDTO.getThingCode(),item.get(CacheNameEnum.ModelField.THING_MODEL_CODE.getField()).asText())) |
|
|
|
.max(Comparator.comparing(TsKvDTO::getTs)); |
|
|
|
if(optionalMax.isEmpty()){ |
|
|
|
item.put(CacheNameEnum.ModelField.THING_MODEL_STATUS.getField(),ThingStatus.OFFLINE.getCode()); |
|
|
|
iotThingModelDTO.setStatus(ThingStatus.OFFLINE.getCode()); |
|
|
|
// item.put(CacheNameEnum.ModelField.THING_MODEL_STATUS.getField(),ThingStatus.OFFLINE.getCode()); |
|
|
|
}else{ |
|
|
|
TsKvDTO tsKvDTO = optionalMax.get(); |
|
|
|
//根据当前时间和获取的最新时间 若大于45min 则离线 否则为在线 |
|
|
|
boolean isOffline = System.currentTimeMillis() - tsKvDTO.getTs() > TIME_INTERVAL; |
|
|
|
item.put(CacheNameEnum.ModelField.THING_MODEL_STATUS.getField(),isOffline ? ThingStatus.OFFLINE.getCode() : ThingStatus.ONLINE.getCode()); |
|
|
|
item.put(CacheNameEnum.ModelField.THING_MODEL_STATUS_TS.getField(),new Date(tsKvDTO.getTs()).getTime()); |
|
|
|
iotThingModelDTO.setStatus(isOffline ? ThingStatus.OFFLINE.getCode() : ThingStatus.ONLINE.getCode()); |
|
|
|
iotThingModelDTO.setStatusTs(new Date(tsKvDTO.getTs()).getTime()); |
|
|
|
// item.put(CacheNameEnum.ModelField.THING_MODEL_STATUS.getField(),isOffline ? ThingStatus.OFFLINE.getCode() : ThingStatus.ONLINE.getCode()); |
|
|
|
// item.put(CacheNameEnum.ModelField.THING_MODEL_STATUS_TS.getField(),new Date(tsKvDTO.getTs()).getTime()); |
|
|
|
} |
|
|
|
return JacksonUtil.convertValue(item, IotThingModelDTO.class); |
|
|
|
return iotThingModelDTO; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
//修改状态 |
|
|
|
thingManageContextService.saveModelBatch(statusList); |
|
|
|
cache.clearTopic(CacheNameEnum.THING_MODEL); |
|
|
|
log.info("设备在线离线 statusTask end"); |
|
|
|
} |
|
|
|
|
|
|
|
|