|
|
@@ -7,6 +7,7 @@ import org.hswebframework.ezorm.rdb.mapping.ReactiveUpdate;
|
|
|
import org.hswebframework.web.crud.service.GenericReactiveCrudService;
|
|
|
import org.jetlinks.community.device.entity.DeviceFirmwareEntity;
|
|
|
import org.jetlinks.community.device.entity.DeviceFirmwareTaskEntity;
|
|
|
+import org.jetlinks.community.device.entity.DeviceInstanceEntity;
|
|
|
import org.jetlinks.community.device.entity.DeviceUpgradeHistoryEntity;
|
|
|
import org.jetlinks.community.device.enums.FirmwareUpgradeState;
|
|
|
import org.jetlinks.community.device.enums.TaskMode;
|
|
|
@@ -55,22 +56,31 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
//平台推送
|
|
|
firmwareTaskService.createQuery()
|
|
|
.where(DeviceFirmwareTaskEntity::getMode,TaskMode.push)
|
|
|
- .where(DeviceFirmwareTaskEntity::getProductId, message.getHeader("productId").get()).fetchOne())
|
|
|
- .flatMap(tp3 -> {
|
|
|
- DeviceOperator operator = tp3.getT1();
|
|
|
- DeviceFirmwareEntity firmware = tp3.getT2();
|
|
|
- if (firmwareTaskService.canUpgrade(tp3.getT3(),operator.getDeviceId())) {
|
|
|
+ .where(DeviceFirmwareTaskEntity::getProductId, message.getHeader("productId").get()).fetchOne(),
|
|
|
+ deviceService.findById(message.getDeviceId()))
|
|
|
+ .flatMap(tp4 -> {
|
|
|
+ DeviceOperator operator = tp4.getT1();
|
|
|
+ DeviceFirmwareEntity firmware = tp4.getT2();
|
|
|
+ DeviceFirmwareTaskEntity task = tp4.getT3();
|
|
|
+ DeviceInstanceEntity instance = tp4.getT4();
|
|
|
+ if (firmwareTaskService.canUpgrade(tp4.getT3(),operator.getDeviceId())) {
|
|
|
//该设备可以升级
|
|
|
if (!firmware.getVersion().equals(message.getVersion())) {
|
|
|
- //如果存在平台推送且版本不一致,则推送升级固件消息,等待升级
|
|
|
+ //如果存在平台推送且版本不一致,则推送升级固件消息,todo 并创建等待升级任务
|
|
|
+ long now = System.currentTimeMillis();
|
|
|
+ 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);
|
|
|
+
|
|
|
UpgradeFirmwareMessage firmwareMessage = new UpgradeFirmwareMessage();
|
|
|
firmwareMessage.setDeviceId(message.getDeviceId());
|
|
|
firmwareMessage.setUrl(firmware.getUrl());
|
|
|
firmwareMessage.setVersion(firmware.getVersion());
|
|
|
firmwareMessage.setSign(firmware.getSign());
|
|
|
firmwareMessage.setSignMethod(firmware.getSignMethod());
|
|
|
- firmwareMessage.setTimestamp(System.currentTimeMillis());
|
|
|
- return operator.messageSender().sendAndForget(firmwareMessage);
|
|
|
+ firmwareMessage.setTimestamp(now);
|
|
|
+ firmwareMessage.setFirmwareId(firmware.getId());
|
|
|
+ return operator.messageSender().sendAndForget(firmwareMessage)
|
|
|
+ .zipWith(Mono.defer(()->this.insert(Mono.just(history))));
|
|
|
}
|
|
|
}
|
|
|
return Mono.empty();
|
|
|
@@ -171,18 +181,27 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
|
|
|
DeviceFirmwareEntity firmware = tp5.getT3();
|
|
|
DeviceMessageSender sender = tp5.getT2();
|
|
|
DeviceFirmwareTaskEntity task = tp5.getT5();
|
|
|
+ DeviceInstanceEntity instance = tp5.getT4();
|
|
|
if(firmwareTaskService.canUpgrade(task,messages.getDeviceId())){
|
|
|
+ //创建升级任务
|
|
|
+ long now = System.currentTimeMillis();
|
|
|
+ DeviceUpgradeHistoryEntity history= new DeviceUpgradeHistoryEntity(firmware.getProductId(),
|
|
|
+ messages.getDeviceId(), instance.getName(), firmware.getId(), "0", task.getId(), task.getName(), task.getTimeoutSeconds(), firmware.getVersion(), firmware.getVersionOrder(), now, FirmwareUpgradeState.waiting);
|
|
|
+
|
|
|
RequestFirmwareMessageReply reply = new RequestFirmwareMessageReply();
|
|
|
- reply.setTimestamp(System.currentTimeMillis());
|
|
|
+ reply.setTimestamp(now);
|
|
|
reply.setDeviceId(messages.getDeviceId());
|
|
|
reply.setSign(firmware.getSign());
|
|
|
reply.setSignMethod(firmware.getSignMethod());
|
|
|
+ //todo 修改文件大小
|
|
|
reply.setSize(10L);
|
|
|
reply.setUrl(firmware.getUrl());
|
|
|
reply.setMessageId(messages.getMessageId());
|
|
|
- return sender.sendAndForget(reply);
|
|
|
+ return sender.sendAndForget(reply)
|
|
|
+ .zipWith(Mono.defer(()->this.insert(Mono.just(history))));
|
|
|
}
|
|
|
return Mono.empty();
|
|
|
- }).then();
|
|
|
+ })
|
|
|
+ .then();
|
|
|
}
|
|
|
}
|