舱内状态同步

This commit is contained in:
孙小云 2026-02-11 13:22:47 +08:00
parent 5aeff3d815
commit 7530b9b119
2 changed files with 84 additions and 0 deletions

View File

@ -37,6 +37,9 @@ public class RealTimeBasicData {
@JsonProperty("status") @JsonProperty("status")
private String status; private String status;
@JsonProperty("nestDoor")
private NestDoorInfo nestDoor;
} }
@Data @Data
@ -47,4 +50,28 @@ public class RealTimeBasicData {
@JsonProperty("hardware") @JsonProperty("hardware")
private String 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=关仓
}
} }

View File

@ -6,10 +6,12 @@ import com.ruoyi.device.domain.api.IDockDomain;
import com.ruoyi.device.domain.api.IAircraftDomain; import com.ruoyi.device.domain.api.IAircraftDomain;
import com.ruoyi.device.domain.api.IDeviceDomain; import com.ruoyi.device.domain.api.IDeviceDomain;
import com.ruoyi.device.domain.impl.machine.mqtt.MqttCallbackRegistry; 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.DroneState;
import com.ruoyi.device.domain.impl.machine.state.AirportState; 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.state.MachineStates;
import com.ruoyi.device.domain.impl.machine.statemachine.MachineStateManager; 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.ITuohengEventsCallback;
import com.ruoyi.device.domain.impl.tuohengmqtt.callback.ITuohengOsdCallback; import com.ruoyi.device.domain.impl.tuohengmqtt.callback.ITuohengOsdCallback;
import com.ruoyi.device.domain.impl.tuohengmqtt.callback.ITuohengRealTimeDataCallback; 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.manager.TuohengMqttClientManager;
import com.ruoyi.device.domain.impl.tuohengmqtt.model.AirportOsdData; 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.EventsData;
import com.ruoyi.device.domain.impl.tuohengmqtt.model.RealTimeBasicData;
import com.ruoyi.device.domain.impl.tuohengmqtt.model.TuohengRealTimeData; import com.ruoyi.device.domain.impl.tuohengmqtt.model.TuohengRealTimeData;
import com.ruoyi.device.domain.model.Aircraft; import com.ruoyi.device.domain.model.Aircraft;
import com.ruoyi.device.domain.model.Device; 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 初始化完成,已注册所有回调"); 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);
}
}
/** /**
* 定时检查机场心跳超时 * 定时检查机场心跳超时
* 每分钟执行一次 * 每分钟执行一次