| | |
| | | import com.dji.sample.manage.model.param.DeviceQueryParam; |
| | | import com.dji.sample.manage.model.receiver.*; |
| | | import com.dji.sample.manage.service.*; |
| | | import com.dji.sample.wayline.model.entity.WaylineJobEntity; |
| | | import com.dji.sample.wayline.model.param.WaylineJobQueryParam; |
| | | import com.dji.sample.wayline.service.IWaylineJobService; |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | |
| | | |
| | | @Autowired |
| | | private IDeviceRedisService deviceRedisService; |
| | | |
| | | @Autowired |
| | | private IWaylineJobService waylineJobService; |
| | | |
| | | @Autowired |
| | | @Qualifier("gatewayOSDServiceImpl") |
| | |
| | | .eq(StringUtils.hasText(param.getWorkspaceId()), |
| | | DeviceEntity::getWorkspaceId, param.getWorkspaceId()) |
| | | .eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus()) |
| | | .eq(param.getReserveId() != null, DeviceEntity::getReserveId, param.getReserveId()) |
| | | .orderBy(param.isOrderBy(), |
| | | param.isAsc(), DeviceEntity::getId)) |
| | | .stream() |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId) { |
| | | public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId, String reserveId) { |
| | | List<DeviceDTO> devicesList = this.getDevicesByParams( |
| | | DeviceQueryParam.builder() |
| | | .workspaceId(workspaceId) |
| | | .reserveId(reserveId) |
| | | .domains(List.of(DeviceDomainEnum.GATEWAY.getVal(), DeviceDomainEnum.DOCK.getVal())) |
| | | .build()); |
| | | |
| | |
| | | .filter(gateway -> DeviceDomainEnum.DOCK.getVal() == gateway.getDomain() || |
| | | deviceRedisService.checkDeviceOnline(gateway.getDeviceSn())) |
| | | .forEach(this::spliceDeviceTopo); |
| | | |
| | | devicesList.forEach(deviceDTO -> { |
| | | WaylineJobQueryParam waylineJobQueryParam = new WaylineJobQueryParam(); |
| | | waylineJobQueryParam.setDockSn(deviceDTO.getDeviceSn()); |
| | | WaylineJobEntity latestJob = waylineJobService.getLatestJob(workspaceId, waylineJobQueryParam); |
| | | deviceDTO.setLatestWaylineJob(latestJob); |
| | | deviceDTO.setOnlineStatus(true); |
| | | OsdDockReceiver osdDockReceiver = (OsdDockReceiver) RedisOpsUtils.get("osd:" + deviceDTO.getDeviceSn()); |
| | | deviceDTO.setLatitude(osdDockReceiver!=null? osdDockReceiver.getLatitude():null); |
| | | deviceDTO.setLongitude(osdDockReceiver!=null? osdDockReceiver.getLongitude():null); |
| | | }); |
| | | |
| | | return devicesList; |
| | | } |
| | |
| | | if (deviceOpt.isEmpty()) { |
| | | deviceOpt = this.getDeviceBySn(from); |
| | | if (deviceOpt.isEmpty()) { |
| | | log.error("Please restart the drone."); |
| | | log.error("请重新启动无人机."); |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(deviceOtaFirmwares.get(0).getSn()); |
| | | if (deviceOpt.isEmpty()) { |
| | | throw new RuntimeException("Device is offline."); |
| | | throw new RuntimeException("设备离线"); |
| | | } |
| | | DeviceDTO device = deviceOpt.get(); |
| | | String gatewaySn = DeviceDomainEnum.DOCK.getVal() == device.getDomain() ? device.getDeviceSn() : device.getParentSn(); |
| | |
| | | ServiceReply serviceReply = messageSender.publishServicesTopic( |
| | | gatewaySn, FirmwareMethodEnum.OTA_CREATE.getMethod(), Map.of(MapKeyConst.DEVICES, deviceOtaFirmwares), bid); |
| | | if (serviceReply.getResult() != ResponseResult.CODE_SUCCESS) { |
| | | return ResponseResult.error(serviceReply.getResult(), "Firmware Error Code: " + serviceReply.getResult()); |
| | | return ResponseResult.error(serviceReply.getResult(), "硬件错误码 " + serviceReply.getResult()); |
| | | } |
| | | |
| | | // Record the device state that needs to be updated. |
| | |
| | | private void checkOtaConditions(String dockSn) { |
| | | Optional<OsdDockReceiver> deviceOpt = deviceRedisService.getDeviceOsd(dockSn, OsdDockReceiver.class); |
| | | if (deviceOpt.isEmpty()) { |
| | | throw new RuntimeException("Dock is offline."); |
| | | throw new RuntimeException("机场离线"); |
| | | } |
| | | boolean emergencyStopState = deviceOpt.get().getEmergencyStopState(); |
| | | if (emergencyStopState) { |
| | | throw new RuntimeException("The emergency stop button of the dock is pressed and can't be upgraded."); |
| | | // throw new RuntimeException("The emergency stop button of the dock is pressed and can't be upgraded."); |
| | | throw new RuntimeException("机场急停按钮被按下,无法升级"); |
| | | } |
| | | |
| | | DockModeCodeEnum dockMode = this.getDockMode(dockSn); |
| | | if (DockModeCodeEnum.IDLE != dockMode) { |
| | | throw new RuntimeException("The current status of the dock can't be upgraded."); |
| | | throw new RuntimeException("当前机场状态无法升级"); |
| | | } |
| | | } |
| | | |
| | |
| | | public void devicePropertySet(String workspaceId, String dockSn, DeviceSetPropertyEnum propertyEnum, JsonNode param) { |
| | | Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(dockSn); |
| | | if (dockOpt.isEmpty()) { |
| | | throw new RuntimeException("Dock is offline."); |
| | | throw new RuntimeException("机场离线"); |
| | | } |
| | | String childSn = dockOpt.get().getChildDeviceSn(); |
| | | boolean deviceOnline = deviceRedisService.checkDeviceOnline(childSn); |
| | | Optional<OsdSubDeviceReceiver> osdOpt = deviceRedisService.getDeviceOsd(childSn, OsdSubDeviceReceiver.class); |
| | | if (!deviceOnline || osdOpt.isEmpty()) { |
| | | throw new RuntimeException("Device is offline."); |
| | | throw new RuntimeException("设备离线"); |
| | | } |
| | | |
| | | // Make sure the data is valid. |
| | |
| | | |
| | | SetReply setReply = objectMapper.convertValue(reply, SetReply.class); |
| | | if (SetReplyStatusResultEnum.SUCCESS.getVal() != setReply.getResult()) { |
| | | throw new RuntimeException("Failed to set " + value.getKey() + "; Error Code: " + setReply.getResult()); |
| | | throw new RuntimeException("设置失败" + value.getKey() + "; 错误码: " + setReply.getResult()); |
| | | } |
| | | |
| | | } |