diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java index 0f8e962..ee64f0d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java @@ -60,6 +60,8 @@ public interface IControlService { * @param param * @return */ + HttpResultResponse seizeAuthorityCheck(String sn, DroneAuthorityEnum authority, DronePayloadParam param); + HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param); /** diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java index b0b21a6..cec07ae 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java @@ -221,7 +221,7 @@ public class ControlServiceImpl implements IControlService { @Override - public HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param) { + public HttpResultResponse seizeAuthorityCheck(String sn, DroneAuthorityEnum authority, DronePayloadParam param) { TopicServicesResponse response; switch (authority) { case FLIGHT: @@ -248,6 +248,34 @@ public class ControlServiceImpl implements IControlService { : HttpResultResponse.error(serviceReply.getResult()); } + @Override + public HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param) { + TopicServicesResponse response; + switch (authority) { + case FLIGHT: + if (deviceService.checkAuthorityFlight(sn)) { + return HttpResultResponse.success(); + } + + response = abstractControlService.flightAuthorityGrab(SDKManager.getDeviceSDK(sn)); + break; + case PAYLOAD: + if (checkPayloadAuthority(sn, param.getPayloadIndex())) { + return HttpResultResponse.success(); + } + response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn), + new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex()))); + break; + default: + return HttpResultResponse.error(CloudSDKErrorEnum.INVALID_PARAMETER); + } + + ServicesReplyData serviceReply = response.getData(); + return serviceReply.getResult().isSuccess() ? + HttpResultResponse.success() + : HttpResultResponse.error(serviceReply.getResult()); + } + private Boolean checkPayloadAuthority(String sn, String payloadIndex) { Optional dockOpt = deviceRedisService.getDeviceOnline(sn); if (dockOpt.isEmpty()) { diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java index 15fd4c6..ff2cc0e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java @@ -10,6 +10,7 @@ import org.dromara.common.web.core.BaseController; import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; import org.dromara.sample.manage.service.IDeviceProService; +import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceService; import com.fasterxml.jackson.databind.JsonNode; import lombok.extern.slf4j.Slf4j; @@ -40,7 +41,7 @@ public class DeviceController { @Autowired - private IDeviceProService deviceProService; + private IDeviceRedisService deviceRedisService; /** * 获取一个工作区中所有在线设备的列表。 @@ -130,6 +131,28 @@ public class DeviceController { @PathVariable("workspace_id") String workspaceId, @PathVariable("device_sn") String deviceSn) { device.setDeviceSn(deviceSn); + Optional deviceOnline = deviceRedisService.getDeviceOnline(deviceSn); + if(deviceOnline.isPresent()){ + deviceOnline.get().setNickname(device.getNickname()); + deviceOnline.get().setProId(device.getProId()); + if(deviceOnline.get().getChildren() != null){ + deviceOnline.get().getChildren().setProId(device.getProId()); + deviceOnline.get().getChildren().setNickname(device.getNickname()+"-"+ deviceOnline.get().getChildren().getDeviceName()); + deviceService.updateDevice(deviceOnline.get().getChildren()); + } + deviceRedisService.setDeviceOnline(deviceOnline.get()); + }else { + Optional deviceBySn = deviceService.getDeviceBySn(device.getDeviceSn()); + + Optional deviceByChildSn = deviceService.getDeviceBySn(device.getChildDeviceSn()); + if(deviceByChildSn.isPresent()){ + deviceByChildSn.get().setProId(device.getProId()); + deviceByChildSn.get().setNickname(device.getNickname()+"-"+ deviceBySn.get().getChildren().getDeviceName()); + deviceService.updateDevice(deviceByChildSn.get()); + } + + } + boolean isUpd = deviceService.updateDevice(device); return isUpd ? HttpResultResponse.success() : HttpResultResponse.error(); }