diff --git a/src/main/java/com/ruoyi/device/domain/model/thingsboard/tuoheng/constants/TuohengDeviceAttributes.java b/src/main/java/com/ruoyi/device/domain/model/thingsboard/tuoheng/constants/TuohengDeviceAttributes.java index f130dc7..c9c2d03 100644 --- a/src/main/java/com/ruoyi/device/domain/model/thingsboard/tuoheng/constants/TuohengDeviceAttributes.java +++ b/src/main/java/com/ruoyi/device/domain/model/thingsboard/tuoheng/constants/TuohengDeviceAttributes.java @@ -165,6 +165,36 @@ public class TuohengDeviceAttributes { } ); + /** + * 备降点位置属性(手动维护) + */ + + // 备降点经度 - Double + public static final AttributeKey BACKUP_LONGITUDE = AttributeKey.of( + "backup.longitude", + Double.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + return Double.parseDouble(value.toString()); + } + ); + + // 备降点纬度 - Double + public static final AttributeKey BACKUP_LATITUDE = AttributeKey.of( + "backup.latitude", + Double.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + return Double.parseDouble(value.toString()); + } + ); + private TuohengDeviceAttributes() { // 工具类,禁止实例化 } @@ -189,7 +219,9 @@ public class TuohengDeviceAttributes { SENDER, DEVICE_ID, HOME_LONGITUDE, - HOME_LATITUDE + HOME_LATITUDE, + BACKUP_LONGITUDE, + BACKUP_LATITUDE ); } diff --git a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java index 0da9d08..8794c79 100644 --- a/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/TuohengBufferDeviceImpl.java @@ -30,6 +30,12 @@ import java.util.Map; @Slf4j public class TuohengBufferDeviceImpl implements IBufferDeviceService { + /** + * 默认经纬度 - 南京市 + */ + private static final Double DEFAULT_LONGITUDE = 118.796877; + private static final Double DEFAULT_LATITUDE = 32.060255; + @Autowired private IDockDomain dockDomain; @@ -216,18 +222,49 @@ public class TuohengBufferDeviceImpl implements IBufferDeviceService { dto.setFirmwareVersion(value); }); - // 设置机场位置(从属性中获取 home.longitude 和 home.latitude) + // 设置机场位置(从属性中获取 home.longitude 和 home.latitude,取不到则使用南京市默认值) log.info("---------- 解析机场位置数据 ----------"); - attributes.get(TuohengDeviceAttributes.HOME_LONGITUDE) - .ifPresent(value -> { - log.info("HOME_LONGITUDE 机场经度: {}", value); - dto.setLongitude(value); - }); - attributes.get(TuohengDeviceAttributes.HOME_LATITUDE) - .ifPresent(value -> { - log.info("HOME_LATITUDE 机场纬度: {}", value); - dto.setLatitude(value); - }); + Double homeLongitude = attributes.get(TuohengDeviceAttributes.HOME_LONGITUDE) + .orElse(null); + if (homeLongitude != null) { + log.info("HOME_LONGITUDE 机场经度: {}", homeLongitude); + dto.setLongitude(homeLongitude); + } else { + log.info("HOME_LONGITUDE 未设置,使用默认值(南京市): {}", DEFAULT_LONGITUDE); + dto.setLongitude(DEFAULT_LONGITUDE); + } + + Double homeLatitude = attributes.get(TuohengDeviceAttributes.HOME_LATITUDE) + .orElse(null); + if (homeLatitude != null) { + log.info("HOME_LATITUDE 机场纬度: {}", homeLatitude); + dto.setLatitude(homeLatitude); + } else { + log.info("HOME_LATITUDE 未设置,使用默认值(南京市): {}", DEFAULT_LATITUDE); + dto.setLatitude(DEFAULT_LATITUDE); + } + + // 设置备降点位置(从属性中获取 backup.longitude 和 backup.latitude,取不到则使用南京市默认值) + log.info("---------- 解析备降点位置数据 ----------"); + Double backupLongitude = attributes.get(TuohengDeviceAttributes.BACKUP_LONGITUDE) + .orElse(null); + if (backupLongitude != null) { + log.info("BACKUP_LONGITUDE 备降点经度: {}", backupLongitude); + dto.setBackupLongitude(backupLongitude); + } else { + log.info("BACKUP_LONGITUDE 未设置,使用默认值(南京市): {}", DEFAULT_LONGITUDE); + dto.setBackupLongitude(DEFAULT_LONGITUDE); + } + + Double backupLatitude = attributes.get(TuohengDeviceAttributes.BACKUP_LATITUDE) + .orElse(null); + if (backupLatitude != null) { + log.info("BACKUP_LATITUDE 备降点纬度: {}", backupLatitude); + dto.setBackupLatitude(backupLatitude); + } else { + log.info("BACKUP_LATITUDE 未设置,使用默认值(南京市): {}", DEFAULT_LATITUDE); + dto.setBackupLatitude(DEFAULT_LATITUDE); + } // 设置在线状态 - 基于心跳时间戳判断离线,基于无人机mode判断工作状态 telemetry.get(TuohengDeviceTelemetry.STATUS).ifPresentOrElse(statusValue -> {