From dd73bbc7132f7b126b8fc2faabf2827b49622d21 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 23 Oct 2023 09:28:40 +0800
Subject: [PATCH] 获取计划最近一条

---
 src/main/java/com/dji/sample/manage/service/impl/DeviceServiceImpl.java |   67 ++++++++++++++++++++++++++++-----
 1 files changed, 56 insertions(+), 11 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 809fd7f..e332f43 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
@@ -26,6 +26,9 @@
 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;
@@ -97,6 +100,9 @@
 
     @Autowired
     private IDeviceRedisService deviceRedisService;
+
+    @Autowired
+    private IWaylineJobService waylineJobService;
 
     @Autowired
     @Qualifier("gatewayOSDServiceImpl")
@@ -279,10 +285,13 @@
     public List<DeviceDTO> getDevicesByParams(DeviceQueryParam param) {
         return mapper.selectList(
                 new LambdaQueryWrapper<DeviceEntity>()
+                        //设备编码
                         .eq(StringUtils.hasText(param.getDeviceSn()),
                                 DeviceEntity::getDeviceSn, param.getDeviceSn())
+                        //设备类型
                         .eq(param.getDeviceType() != null,
                                 DeviceEntity::getDeviceType, param.getDeviceType())
+                        //负载类型
                         .eq(param.getSubType() != null,
                                 DeviceEntity::getSubType, param.getSubType())
                         .eq(StringUtils.hasText(param.getChildSn()),
@@ -314,6 +323,13 @@
                 .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);
+        });
 
         return devicesList;
     }
@@ -518,9 +534,37 @@
             }
             entity.setId(deviceEntity.getId());
             mapper.updateById(entity);
-            return Optional.of(deviceEntity);
+            fillNullField(entity, deviceEntity);
+            return Optional.of(entity);
         }
         return mapper.insert(entity) > 0 ? Optional.of(entity) : Optional.empty();
+    }
+
+    private void fillNullField(DeviceEntity entity, DeviceEntity oldEntity) {
+        if (Objects.isNull(entity) || Objects.isNull(oldEntity)) {
+            return;
+        }
+        if (Objects.isNull(entity.getWorkspaceId())) {
+            entity.setWorkspaceId(oldEntity.getWorkspaceId());
+        }
+        if (Objects.isNull(entity.getUserId())) {
+            entity.setUserId(oldEntity.getUserId());
+        }
+        if (Objects.isNull(entity.getChildSn())) {
+            entity.setChildSn(oldEntity.getChildSn());
+        }
+        if (Objects.isNull(entity.getBoundStatus())) {
+            entity.setBoundStatus(oldEntity.getBoundStatus());
+        }
+        if (Objects.isNull(entity.getBoundTime())) {
+            entity.setBoundTime(oldEntity.getBoundTime());
+        }
+        if (Objects.isNull(entity.getFirmwareVersion())) {
+            entity.setFirmwareVersion(oldEntity.getFirmwareVersion());
+        }
+        if (Objects.isNull(entity.getDeviceIndex())) {
+            entity.setDeviceIndex(oldEntity.getDeviceIndex());
+        }
     }
 
     /**
@@ -650,7 +694,7 @@
             return;
         }
         if (entity.getFirmwareVersion().equals(firmwareReleaseNoteOpt.get().getProductVersion())) {
-            deviceDTO.setFirmwareStatus(entity.getCompatibleStatus() ?
+            deviceDTO.setFirmwareStatus(Objects.requireNonNullElse(entity.getCompatibleStatus(), true) ?
                     DeviceFirmwareStatusEnum.NOT_UPGRADE.getVal() :
                     DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE.getVal());
             return;
@@ -880,7 +924,7 @@
 
         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();
@@ -891,7 +935,7 @@
         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.
@@ -908,16 +952,17 @@
     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("当前机场状态无法升级");
         }
     }
 
@@ -925,13 +970,13 @@
     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.
@@ -983,7 +1028,7 @@
 
         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());
         }
 
     }
@@ -1166,4 +1211,4 @@
         }
         return deviceBasic.getPayloads();
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3