|
@@ -1,6 +1,9 @@
|
|
|
package org.jetlinks.community.device.service;
|
|
package org.jetlinks.community.device.service;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import cn.hutool.cron.CronUtil;
|
|
|
|
|
+import com.google.common.collect.Maps;
|
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.hswebframework.ezorm.rdb.mapping.ReactiveUpdate;
|
|
import org.hswebframework.ezorm.rdb.mapping.ReactiveUpdate;
|
|
@@ -70,7 +73,6 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
long now = System.currentTimeMillis();
|
|
long now = System.currentTimeMillis();
|
|
|
DeviceUpgradeHistoryEntity history= new DeviceUpgradeHistoryEntity(firmware.getProductId(),
|
|
DeviceUpgradeHistoryEntity history= new DeviceUpgradeHistoryEntity(firmware.getProductId(),
|
|
|
message.getDeviceId(), instance.getName(), firmware.getId(), "0", task.getId(), task.getName(), task.getTimeoutSeconds(), firmware.getVersion(), firmware.getVersionOrder(), now, FirmwareUpgradeState.waiting);
|
|
message.getDeviceId(), instance.getName(), firmware.getId(), "0", task.getId(), task.getName(), task.getTimeoutSeconds(), firmware.getVersion(), firmware.getVersionOrder(), now, FirmwareUpgradeState.waiting);
|
|
|
-
|
|
|
|
|
UpgradeFirmwareMessage firmwareMessage = new UpgradeFirmwareMessage();
|
|
UpgradeFirmwareMessage firmwareMessage = new UpgradeFirmwareMessage();
|
|
|
firmwareMessage.setDeviceId(message.getDeviceId());
|
|
firmwareMessage.setDeviceId(message.getDeviceId());
|
|
|
firmwareMessage.setUrl(firmware.getUrl());
|
|
firmwareMessage.setUrl(firmware.getUrl());
|
|
@@ -79,8 +81,9 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
firmwareMessage.setSignMethod(firmware.getSignMethod());
|
|
firmwareMessage.setSignMethod(firmware.getSignMethod());
|
|
|
firmwareMessage.setTimestamp(now);
|
|
firmwareMessage.setTimestamp(now);
|
|
|
firmwareMessage.setFirmwareId(firmware.getId());
|
|
firmwareMessage.setFirmwareId(firmware.getId());
|
|
|
|
|
+ firmwareMessage.setParameters(Collections.singletonMap("taskId",task.getId()));
|
|
|
return operator.messageSender().sendAndForget(firmwareMessage)
|
|
return operator.messageSender().sendAndForget(firmwareMessage)
|
|
|
- .zipWith(Mono.defer(()->this.insert(Mono.just(history))));
|
|
|
|
|
|
|
+ .then(Mono.defer(()->this.insert(Mono.just(history))));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return Mono.empty();
|
|
return Mono.empty();
|
|
@@ -104,7 +107,6 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
.where(DeviceUpgradeHistoryEntity::getFirmwareId, firmwareId)
|
|
.where(DeviceUpgradeHistoryEntity::getFirmwareId, firmwareId)
|
|
|
.where(DeviceUpgradeHistoryEntity::getVersion, version)
|
|
.where(DeviceUpgradeHistoryEntity::getVersion, version)
|
|
|
.in(DeviceUpgradeHistoryEntity::getState,FirmwareUpgradeState.processing,FirmwareUpgradeState.waiting)
|
|
.in(DeviceUpgradeHistoryEntity::getState,FirmwareUpgradeState.processing,FirmwareUpgradeState.waiting)
|
|
|
-// .set(DeviceUpgradeHistoryEntity::getProgress, message.getProgress())
|
|
|
|
|
.set(DeviceUpgradeHistoryEntity::getLastUpdateTime,System.currentTimeMillis());
|
|
.set(DeviceUpgradeHistoryEntity::getLastUpdateTime,System.currentTimeMillis());
|
|
|
boolean complete = message.isComplete();
|
|
boolean complete = message.isComplete();
|
|
|
//更新是否结束
|
|
//更新是否结束
|
|
@@ -129,6 +131,7 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
//设备id+固件id+版本号作为key值
|
|
//设备id+固件id+版本号作为key值
|
|
|
String key=message.getDeviceId()+message.getFirmwareId()+message.getVersion();
|
|
String key=message.getDeviceId()+message.getFirmwareId()+message.getVersion();
|
|
|
//开始更新,创建超时任务
|
|
//开始更新,创建超时任务
|
|
|
|
|
+
|
|
|
taskDelayService.putIfAbsent(key, Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(
|
|
taskDelayService.putIfAbsent(key, Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(
|
|
|
() -> {
|
|
() -> {
|
|
|
String firmwareId = message.getFirmwareId();
|
|
String firmwareId = message.getFirmwareId();
|
|
@@ -144,9 +147,11 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
.set(DeviceUpgradeHistoryEntity::getProgress, message.getProgress())
|
|
.set(DeviceUpgradeHistoryEntity::getProgress, message.getProgress())
|
|
|
.set(DeviceUpgradeHistoryEntity::getLastUpdateTime,System.currentTimeMillis()).execute()
|
|
.set(DeviceUpgradeHistoryEntity::getLastUpdateTime,System.currentTimeMillis()).execute()
|
|
|
.subscribe();
|
|
.subscribe();
|
|
|
|
|
+ ScheduledFuture<?> future = taskDelayService.get(key);
|
|
|
taskDelayService.remove(key);
|
|
taskDelayService.remove(key);
|
|
|
|
|
+ future.cancel(true);
|
|
|
},
|
|
},
|
|
|
- System.currentTimeMillis(), 3L, TimeUnit.SECONDS));
|
|
|
|
|
|
|
+ 3L, 3L, TimeUnit.SECONDS));
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
.then();
|
|
.then();
|
|
@@ -194,12 +199,14 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
reply.setDeviceId(messages.getDeviceId());
|
|
reply.setDeviceId(messages.getDeviceId());
|
|
|
reply.setSign(firmware.getSign());
|
|
reply.setSign(firmware.getSign());
|
|
|
reply.setSignMethod(firmware.getSignMethod());
|
|
reply.setSignMethod(firmware.getSignMethod());
|
|
|
|
|
+ reply.setFirmwareId(firmware.getId());
|
|
|
//todo 修改文件大小
|
|
//todo 修改文件大小
|
|
|
reply.setSize(10L);
|
|
reply.setSize(10L);
|
|
|
reply.setUrl(firmware.getUrl());
|
|
reply.setUrl(firmware.getUrl());
|
|
|
reply.setMessageId(messages.getMessageId());
|
|
reply.setMessageId(messages.getMessageId());
|
|
|
|
|
+ reply.setParameters(Collections.singletonMap("taskId",task.getId()));
|
|
|
return sender.sendAndForget(reply)
|
|
return sender.sendAndForget(reply)
|
|
|
- .zipWith(Mono.defer(()->this.insert(Mono.just(history))));
|
|
|
|
|
|
|
+ .then(Mono.defer(()->this.insert(Mono.just(history))));
|
|
|
}
|
|
}
|
|
|
return Mono.empty();
|
|
return Mono.empty();
|
|
|
})
|
|
})
|