diff --git a/src/main/java/com/ruoyi/device/domain/impl/tuohengmqtt/model/RealTimeBasicData.java b/src/main/java/com/ruoyi/device/domain/impl/tuohengmqtt/model/RealTimeBasicData.java index 86e3d64..dd3a25f 100644 --- a/src/main/java/com/ruoyi/device/domain/impl/tuohengmqtt/model/RealTimeBasicData.java +++ b/src/main/java/com/ruoyi/device/domain/impl/tuohengmqtt/model/RealTimeBasicData.java @@ -37,6 +37,9 @@ public class RealTimeBasicData { @JsonProperty("status") private String status; + + @JsonProperty("nestDoor") + private NestDoorInfo nestDoor; } @Data @@ -47,4 +50,28 @@ public class RealTimeBasicData { @JsonProperty("hardware") private String hardware; } + + @Data + public static class NestDoorInfo { + @JsonProperty("msg") + private String msg; + + @JsonProperty("code") + private Integer code; + + @JsonProperty("data") + private NestDoorData data; + + @JsonProperty("sender") + private String sender; + + @JsonProperty("fun") + private String fun; + } + + @Data + public static class NestDoorData { + @JsonProperty("status") + private Integer status; // 1=开仓, 2=关仓 + } } diff --git a/src/main/java/com/ruoyi/device/service/impl/TuohengService.java b/src/main/java/com/ruoyi/device/service/impl/TuohengService.java index 6fb8876..7342229 100644 --- a/src/main/java/com/ruoyi/device/service/impl/TuohengService.java +++ b/src/main/java/com/ruoyi/device/service/impl/TuohengService.java @@ -6,10 +6,12 @@ import com.ruoyi.device.domain.api.IDockDomain; import com.ruoyi.device.domain.api.IAircraftDomain; import com.ruoyi.device.domain.api.IDeviceDomain; import com.ruoyi.device.domain.impl.machine.mqtt.MqttCallbackRegistry; +import com.ruoyi.device.domain.impl.machine.state.CoverState; import com.ruoyi.device.domain.impl.machine.state.DroneState; import com.ruoyi.device.domain.impl.machine.state.AirportState; import com.ruoyi.device.domain.impl.machine.state.MachineStates; import com.ruoyi.device.domain.impl.machine.statemachine.MachineStateManager; +import com.ruoyi.device.domain.impl.tuohengmqtt.callback.IRealTimeBasicCallback; import com.ruoyi.device.domain.impl.tuohengmqtt.callback.ITuohengEventsCallback; import com.ruoyi.device.domain.impl.tuohengmqtt.callback.ITuohengOsdCallback; import com.ruoyi.device.domain.impl.tuohengmqtt.callback.ITuohengRealTimeDataCallback; @@ -18,6 +20,7 @@ import com.ruoyi.device.domain.impl.tuohengmqtt.handler.TuohengMqttMessageHandle import com.ruoyi.device.domain.impl.tuohengmqtt.manager.TuohengMqttClientManager; import com.ruoyi.device.domain.impl.tuohengmqtt.model.AirportOsdData; import com.ruoyi.device.domain.impl.tuohengmqtt.model.EventsData; +import com.ruoyi.device.domain.impl.tuohengmqtt.model.RealTimeBasicData; import com.ruoyi.device.domain.impl.tuohengmqtt.model.TuohengRealTimeData; import com.ruoyi.device.domain.model.Aircraft; import com.ruoyi.device.domain.model.Device; @@ -153,6 +156,18 @@ public class TuohengService { } }); + handler.registerRealTimeBasicCallback(new IRealTimeBasicCallback() { + @Override + public void onRealTimeBasicData(String deviceSn, RealTimeBasicData data) { + try { + // 同步舱门状态到 MachineStateManager + syncCoverState(deviceSn, data); + } catch (Exception e) { + log.error("处理实时基础数据失败", e); + } + } + }); + log.info("TuohengService 初始化完成,已注册所有回调"); } @@ -318,6 +333,48 @@ public class TuohengService { } } + /** + * 同步舱门状态 + */ + private void syncCoverState(String deviceSn, com.ruoyi.device.domain.impl.tuohengmqtt.model.RealTimeBasicData data) { + try { + if (data == null || data.getData() == null || data.getData().getNestDoor() == null) { + return; + } + + RealTimeBasicData.NestDoorInfo nestDoor = data.getData().getNestDoor(); + if (nestDoor.getData() == null) { + return; + } + + Integer status = nestDoor.getData().getStatus(); + if (status == null) { + return; + } + + log.info("【状态同步】收到舱门状态: sn={}, status={}", deviceSn, status); + + // 根据 status 值更新舱门状态 + // 1 = 开仓, 2 = 关仓 + CoverState coverState; + if (status == 1) { + coverState = CoverState.OPENED; + log.info("【状态同步】同步舱门开启状态: sn={}, status={}", deviceSn, status); + } else if (status == 2) { + coverState = CoverState.CLOSED; + log.info("【状态同步】同步舱门关闭状态: sn={}, status={}", deviceSn, status); + } else { + log.warn("未知的舱门状态值: sn={}, status={}", deviceSn, status); + return; + } + + stateManager.setCoverState(deviceSn, coverState); + + } catch (Exception e) { + log.error("同步舱门状态失败: sn={}", deviceSn, e); + } + } + /** * 定时检查机场心跳超时 * 每分钟执行一次