Commit f43581be by guoxuejian

feat: implement auto-recovery trigger for offline devices in OSD handling

parent 92645f3f
...@@ -151,6 +151,7 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -151,6 +151,7 @@ public class SDKDeviceService extends AbstractDeviceService {
public void osdDock(TopicOsdRequest<OsdDock> request, MessageHeaders headers) { public void osdDock(TopicOsdRequest<OsdDock> request, MessageHeaders headers) {
String from = request.getFrom(); String from = request.getFrom();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from); Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from);
boolean needsRecovery = deviceOpt.isEmpty();
if (deviceOpt.isEmpty() || !StringUtils.hasText(deviceOpt.get().getWorkspaceId())) { if (deviceOpt.isEmpty() || !StringUtils.hasText(deviceOpt.get().getWorkspaceId())) {
deviceOpt = deviceService.getDeviceBySn(from); deviceOpt = deviceService.getDeviceBySn(from);
if (deviceOpt.isEmpty()) { if (deviceOpt.isEmpty()) {
...@@ -168,6 +169,11 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -168,6 +169,11 @@ public class SDKDeviceService extends AbstractDeviceService {
} }
deviceRedisService.setDeviceOnline(device); deviceRedisService.setDeviceOnline(device);
if (needsRecovery && StringUtils.hasText(device.getWorkspaceId())) {
triggerDeviceAutoRecovery(from);
}
fillDockOsd(from, request.getData()); fillDockOsd(from, request.getData());
deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DOCK_OSD, from, request.getData()); deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DOCK_OSD, from, request.getData());
...@@ -177,6 +183,7 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -177,6 +183,7 @@ public class SDKDeviceService extends AbstractDeviceService {
public void osdDockDrone(TopicOsdRequest<OsdDockDrone> request, MessageHeaders headers) { public void osdDockDrone(TopicOsdRequest<OsdDockDrone> request, MessageHeaders headers) {
String from = request.getFrom(); String from = request.getFrom();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from); Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from);
boolean needsRecovery = deviceOpt.isEmpty();
if (deviceOpt.isEmpty()) { if (deviceOpt.isEmpty()) {
deviceOpt = deviceService.getDeviceBySn(from); deviceOpt = deviceService.getDeviceBySn(from);
if (deviceOpt.isEmpty()) { if (deviceOpt.isEmpty()) {
...@@ -191,6 +198,10 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -191,6 +198,10 @@ public class SDKDeviceService extends AbstractDeviceService {
DeviceDTO device = deviceOpt.get(); DeviceDTO device = deviceOpt.get();
deviceRedisService.setDeviceOnline(device); deviceRedisService.setDeviceOnline(device);
if (needsRecovery && StringUtils.hasText(device.getWorkspaceId())) {
triggerDeviceAutoRecovery(from);
}
deviceRedisService.setDeviceOsd(from, request.getData()); deviceRedisService.setDeviceOsd(from, request.getData());
// 存放数据 // 存放数据
deviceDetailService.saveDeviceOsd(from, request.getData()); deviceDetailService.saveDeviceOsd(from, request.getData());
...@@ -234,6 +245,7 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -234,6 +245,7 @@ public class SDKDeviceService extends AbstractDeviceService {
public void osdRemoteControl(TopicOsdRequest<OsdRemoteControl> request, MessageHeaders headers) { public void osdRemoteControl(TopicOsdRequest<OsdRemoteControl> request, MessageHeaders headers) {
String from = request.getFrom(); String from = request.getFrom();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from); Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from);
boolean needsRecovery = deviceOpt.isEmpty();
if (deviceOpt.isEmpty() || !StringUtils.hasText(deviceOpt.get().getWorkspaceId())) { if (deviceOpt.isEmpty() || !StringUtils.hasText(deviceOpt.get().getWorkspaceId())) {
deviceOpt = deviceService.getDeviceBySn(from); deviceOpt = deviceService.getDeviceBySn(from);
if (deviceOpt.isEmpty()) { if (deviceOpt.isEmpty()) {
...@@ -247,6 +259,10 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -247,6 +259,10 @@ public class SDKDeviceService extends AbstractDeviceService {
} }
deviceRedisService.setDeviceOnline(device); deviceRedisService.setDeviceOnline(device);
if (needsRecovery && StringUtils.hasText(device.getWorkspaceId())) {
triggerDeviceAutoRecovery(from);
}
OsdRemoteControl data = request.getData(); OsdRemoteControl data = request.getData();
deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from, deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from,
new DeviceOsdHost() new DeviceOsdHost()
...@@ -261,6 +277,7 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -261,6 +277,7 @@ public class SDKDeviceService extends AbstractDeviceService {
public void osdRcDrone(TopicOsdRequest<OsdRcDrone> request, MessageHeaders headers) { public void osdRcDrone(TopicOsdRequest<OsdRcDrone> request, MessageHeaders headers) {
String from = request.getFrom(); String from = request.getFrom();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from); Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from);
boolean needsRecovery = deviceOpt.isEmpty();
if (deviceOpt.isEmpty()) { if (deviceOpt.isEmpty()) {
deviceOpt = deviceService.getDeviceBySn(from); deviceOpt = deviceService.getDeviceBySn(from);
if (deviceOpt.isEmpty()) { if (deviceOpt.isEmpty()) {
...@@ -275,6 +292,10 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -275,6 +292,10 @@ public class SDKDeviceService extends AbstractDeviceService {
deviceRedisService.setDeviceOnline(device); deviceRedisService.setDeviceOnline(device);
if (needsRecovery && StringUtils.hasText(device.getWorkspaceId())) {
triggerDeviceAutoRecovery(from);
}
OsdRcDrone data = request.getData(); OsdRcDrone data = request.getData();
deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from, deviceService.pushOsdDataToPilot(device.getWorkspaceId(), from,
new DeviceOsdHost() new DeviceOsdHost()
...@@ -425,6 +446,15 @@ public class SDKDeviceService extends AbstractDeviceService { ...@@ -425,6 +446,15 @@ public class SDKDeviceService extends AbstractDeviceService {
} }
private void triggerDeviceAutoRecovery(String deviceSn) {
log.warn("[Auto-Recovery] OSD received from offline device {}, triggering online recovery", deviceSn);
try {
deviceService.recoverDeviceOnline(deviceSn);
} catch (Exception e) {
log.error("[Auto-Recovery] Failed to recover device {}: {}", deviceSn, e.getMessage());
}
}
public void deviceOnlineAgain(String workspaceId, String gatewaySn, String deviceSn) { public void deviceOnlineAgain(String workspaceId, String gatewaySn, String deviceSn) {
DeviceDTO device = DeviceDTO.builder().loginTime(LocalDateTime.now()).deviceSn(deviceSn).build(); DeviceDTO device = DeviceDTO.builder().loginTime(LocalDateTime.now()).deviceSn(deviceSn).build();
DeviceDTO gateway = DeviceDTO.builder() DeviceDTO gateway = DeviceDTO.builder()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment