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 cf87ec1..a033cee 100644 --- a/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java +++ b/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java @@ -7,7 +7,6 @@ import com.ruoyi.device.domain.api.*; import com.ruoyi.device.domain.model.*; import com.ruoyi.device.domain.model.thingsboard.AttributeMap; import com.ruoyi.device.domain.model.thingsboard.TelemetryMap; -import com.ruoyi.device.domain.model.thingsboard.TelemetryValue; import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes; import com.ruoyi.device.domain.model.thingsboard.constants.DeviceTelemetry; import com.ruoyi.device.service.api.IBufferDeviceService; @@ -27,7 +26,6 @@ import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** @@ -573,20 +571,16 @@ public class BufferDeviceImpl implements IBufferDeviceService .map(telemetryValue -> telemetryValue.getValue()) .orElse(null); - // 从机场遥测数据中获取 total_flight_time,根据更新时间判断无人机是否开机 - // 如果 total_flight_time 在1分钟以内更新,则认为无人机开机,否则关机 - boolean isPowerOn = false; - Optional> totalFlightTimeOpt = telemetryMap.get(DeviceTelemetry.Total_Flight_Time); - if (totalFlightTimeOpt.isPresent()) { - long updateTimestamp = totalFlightTimeOpt.get().getTimestamp(); - long currentTimestamp = System.currentTimeMillis(); - long timeDiff = currentTimestamp - updateTimestamp; - // 1分钟 = 60000 毫秒 - isPowerOn = timeDiff <= 60000; - } + // 从 telemetryAirportMap 中取 total_flight_time, 如果时间是在一分钟以内更新的,则为开机,否则为关机 + + // 获取无人机是否开机: {"0":"关机","1":"开机"} + Integer deviceOnlineStatus = telemetryMap.get(DeviceTelemetry.Sub_Device_Online_Status) + .map(telemetryValue -> telemetryValue.getValue()) + .orElse(null); // 根据舱内/舱外和开机/关机状态确定无人机状态 boolean isInCabin = droneInDock != null && droneInDock == 1; + boolean isPowerOn = deviceOnlineStatus != null && deviceOnlineStatus == 1; if (isInCabin) { // 舱内