From b0dd7ca693fcd13e539316cfc8c63150182a0315 Mon Sep 17 00:00:00 2001
From: aix <vip_xiaobin810@163.com>
Date: Tue, 20 Aug 2024 15:18:12 +0800
Subject: [PATCH] 红外设置

---
 src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java |   56 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java b/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java
index e332f43..5c35d52 100644
--- a/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java
@@ -304,6 +304,7 @@
                         .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()
@@ -312,10 +313,11 @@
     }
 
     @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());
 
@@ -329,6 +331,10 @@
             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;
@@ -451,7 +457,7 @@
             if (deviceOpt.isEmpty()) {
                 deviceOpt = this.getDeviceBySn(from);
                 if (deviceOpt.isEmpty()) {
-                    log.error("Please restart the drone.");
+                    log.error("请重新启动无人机.");
                     return;
                 }
 
@@ -1004,6 +1010,41 @@
     }
 
     @Override
+    public int devicePropertySet(String workspaceId, String dockSn, JsonNode value) {
+
+        Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(dockSn);
+        if (dockOpt.isEmpty()) {
+            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("设备离线");
+        }
+
+
+        String topic = THING_MODEL_PRE + PRODUCT + dockSn + PROPERTY_SUF + SET_SUF;
+
+        Map reply = messageSender.publishWithReply(
+                Map.class, topic,
+                CommonTopicResponse.builder()
+                        .bid(UUID.randomUUID().toString())
+                        .tid(UUID.randomUUID().toString())
+                        .timestamp(System.currentTimeMillis())
+                        .data(value)
+                        .build());
+
+
+        SetReply setReply = objectMapper.convertValue(reply, SetReply.class);
+        if (SetReplyStatusResultEnum.SUCCESS.getVal() != setReply.getResult()) {
+            throw new RuntimeException("设置失败" + reply + "; 错误码: " + setReply.getResult());
+        }
+
+        return ResponseResult.success().getCode();
+    }
+
+    @Override
     public void deviceOnePropertySet(String topic, DeviceSetPropertyEnum propertyEnum, Map.Entry<String, Object> value) {
         if (Objects.isNull(value) || Objects.isNull(value.getValue())) {
             throw new IllegalArgumentException(CommonErrorEnum.ILLEGAL_ARGUMENT.getErrorMsg());
@@ -1179,14 +1220,14 @@
     }
 
     /**
-     * Handles messages in the state topic about basic drone data.
-     *
-     * Note: Only the data of the drone payload is handled here. You can handle other data from the drone
-     * according to your business needs.
-     * @param deviceBasic   basic drone data
+     * 处理关于基本无人机数据的状态主题的消息。
+     * 注:这里只处理无人机有效载荷的数据。你可以处理无人机的其他数据
+     * *根据您的业务需要。
+     * @param deviceBasic   无人机基本数据
      */
     @ServiceActivator(inputChannel = ChannelName.INBOUND_STATE_BASIC, outputChannel = ChannelName.INBOUND_STATE_PAYLOAD)
     public List<DevicePayloadReceiver> stateBasic(DeviceBasicReceiver deviceBasic) {
+        log.info("无人机数据的状态主题的消息--DeviceBasicReceiver:{}",deviceBasic);
         Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(deviceBasic.getDeviceSn());
         if (deviceOpt.isEmpty()) {
             return deviceBasic.getPayloads();
@@ -1196,6 +1237,7 @@
             return deviceBasic.getPayloads();
         }
         DeviceDTO dock = dockOpt.get();
+        log.info("redis dockOpt:{}",dockOpt);
         if (!deviceBasic.getControlSource().equals(dock.getControlSource())) {
             dock.setControlSource(deviceBasic.getControlSource());
             deviceRedisService.setDeviceOnline(dock);

--
Gitblit v1.9.3