Browse Source

定时任务缓存没有重置bug修复

2024年8月19日14:08:19
thing_master
lishuai 1 year ago
parent
commit
2be0d87aca
  1. 15
      modules/quartz/src/main/java/com/thing/quartz/timetask/task/ThingStatusTask.java

15
modules/quartz/src/main/java/com/thing/quartz/timetask/task/ThingStatusTask.java

@ -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");
}

Loading…
Cancel
Save