From a636c9a858b696b3cdb5ce2fad638c0630dae149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Wed, 28 Jan 2026 15:52:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=85=E6=94=BE=E7=94=B5?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/DeviceTelemetry.java | 17 ++++++++- .../device/service/dto/DockDetailDTO.java | 5 +++ .../device/service/impl/BufferDeviceImpl.java | 37 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java index 274d4f7..42c7e3d 100644 --- a/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java +++ b/src/main/java/com/ruoyi/device/domain/model/thingsboard/constants/DeviceTelemetry.java @@ -240,6 +240,20 @@ public class DeviceTelemetry { } ); + /** + * 电量百分比 + */ + public static final TelemetryKey Drone_Charge_State_Capacity_Percent = TelemetryKey.of( + "drone_charge_state.capacity_percent", + Integer.class, + value -> { + if (value == null) return null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.parseInt(value.toString()); + } + ); /** * @@ -499,7 +513,8 @@ public class DeviceTelemetry { Alternate_land_point_Longitude, Environment_Temperature, Network_State_Rate, - Cover_State + Cover_State, + Drone_Charge_State_Capacity_Percent ); } diff --git a/src/main/java/com/ruoyi/device/service/dto/DockDetailDTO.java b/src/main/java/com/ruoyi/device/service/dto/DockDetailDTO.java index a4e127d..e36a7fd 100644 --- a/src/main/java/com/ruoyi/device/service/dto/DockDetailDTO.java +++ b/src/main/java/com/ruoyi/device/service/dto/DockDetailDTO.java @@ -125,6 +125,11 @@ public class DockDetailDTO implements Serializable /** 充放电状态 */ private String chargingStatus; + /** + * 电量百分比 + */ + private Integer capacity_percent; + /** 舱内温度 */ private Double cabinTemperature; diff --git a/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java b/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java index 555914f..7799275 100644 --- a/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java @@ -340,6 +340,23 @@ public class BufferDeviceImpl implements IBufferDeviceService () -> log.warn("未获取到经度数据,dockerDeviceIotId: {}", dockerDeviceIotId) ); + // 无人机充电状态(枚举值:0-空闲,1-充电中) + telemetryMap.get(DeviceTelemetry.Drone_Charge_State_State) + .ifPresent(telemetryValue -> { + Integer chargeState = telemetryValue.getValue(); + if (chargeState != null) { + String chargingStatus = mapChargeStateToStatus(chargeState); + dto.setChargingStatus(chargingStatus); + } + }); + + // 电量百分比 + telemetryMap.get(DeviceTelemetry.Drone_Charge_State_Capacity_Percent) + .ifPresent(telemetryValue -> { + Integer capacityPercent = telemetryValue.getValue(); + dto.setCapacity_percent(capacityPercent); + }); + return dto; } @@ -385,6 +402,26 @@ public class BufferDeviceImpl implements IBufferDeviceService } } + /** + * 将充电状态代码映射到充电状态字符串 + * @param chargeState 充电状态代码(0-空闲,1-充电中) + * @return 充电状态字符串 + */ + private String mapChargeStateToStatus(Integer chargeState) { + if (chargeState == null) { + return "未知"; + } + + switch (chargeState) { + case 0: + return "FREE"; + case 1: + return "CHARGING"; + default: + return "UNKNOWN"; + } + } + /** * 将空调状态代码映射到 AirConditionerStatusEnum * @param stateCode 空调状态代码