package com.ard.tianyu.model.dto.converter; import com.ard.tianyu.model.dto.state.*; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import org.springframework.beans.BeanUtils; import java.util.List; import java.util.stream.Collectors; public class UavStateConverter { // 将 Protobuf UavState 转换为 Java 实体类 UavState public static UavState convertProtoToEntity(TelemetryDataPB.UavState protobufUavState) { UavState uavState = new UavState(); // 复制简单字段 uavState.setBoxSn(protobufUavState.getBoxSn()); // 处理嵌套的 FlightControllerState if (protobufUavState.hasFlightControllerState()) { uavState.setFlightControllerState(convertFlightControllerState(protobufUavState.getFlightControllerState())); } // 处理嵌套的 BatteryState if (protobufUavState.hasBatteryState()) { uavState.setBatteryState(convertBatteryState(protobufUavState.getBatteryState())); } // 处理嵌套的 PtzState if (protobufUavState.hasPtzState()) { uavState.setPtzState(convertPtzState(protobufUavState.getPtzState())); } // 处理嵌套的 CameraState if (protobufUavState.hasCameraState()) { uavState.setCameraState(convertCameraState(protobufUavState.getCameraState())); } // 处理嵌套的 MissionState if (protobufUavState.hasMissionState()) { uavState.setMissionState(convertMissionState(protobufUavState.getMissionState())); } // 处理 AvoidanceData if (protobufUavState.hasAvoidanceData()) { uavState.setAvoidanceData(convertAvoidanceData(protobufUavState.getAvoidanceData())); } // 处理 List List hmsAlarmDataList = protobufUavState.getHmsAlarmDataList().stream() .map(UavStateConverter::convertHmsAlarmData) .collect(Collectors.toList()); uavState.setHmsAlarmData(hmsAlarmDataList); return uavState; } // 其他转换方法如下: // 处理 BatteryState 逻辑 public static BatteryState convertBatteryState(TelemetryDataPB.BatteryState protobufBatteryState) { BatteryState batteryState = new BatteryState(); // 复制简单字段 batteryState.setBatteryNum(protobufBatteryState.getBatteryNum()); batteryState.setBatteryPower(protobufBatteryState.getBatteryPower()); batteryState.setBatteryVoltage(protobufBatteryState.getBatteryVoltage()); // 处理嵌套的 BatteryStateInfo if (protobufBatteryState.hasFirstBatteryInfo()) { batteryState.setFirstBatteryInfo(convertBatteryStateInfo(protobufBatteryState.getFirstBatteryInfo())); } if (protobufBatteryState.hasSecondBatteryInfo()) { batteryState.setSecondBatteryInfo(convertBatteryStateInfo(protobufBatteryState.getSecondBatteryInfo())); } return batteryState; } // 处理 BatteryStateInfo 逻辑 public static BatteryStateInfo convertBatteryStateInfo(TelemetryDataPB.BatteryStateInfo protobufBatteryStateInfo) { BatteryStateInfo batteryStateInfo = new BatteryStateInfo(); BeanUtils.copyProperties(protobufBatteryStateInfo, batteryStateInfo); return batteryStateInfo; } // 处理 FlightControllerState 逻辑 public static FlightControllerState convertFlightControllerState(TelemetryDataPB.FlightControllerState proto) { FlightControllerState flightControllerState = new FlightControllerState(); // 处理 PointData(起飞点和返航点) if (proto.hasStartPoint()) { flightControllerState.setStartPoint(convertPointData(proto.getStartPoint())); } if (proto.hasHomePoint()) { flightControllerState.setHomePoint(convertPointData(proto.getHomePoint())); } BeanUtils.copyProperties(proto, flightControllerState); return flightControllerState; } // 处理 PointData 逻辑 public static PointData convertPointData(TelemetryDataPB.PointData protoPoint) { PointData pointData = new PointData(); pointData.setLat(protoPoint.getLat()); pointData.setLng(protoPoint.getLng()); return pointData; } public static PtzState convertPtzState(TelemetryDataPB.PtzState proto) { PtzState ptzState = new PtzState(); BeanUtils.copyProperties(proto, ptzState); return ptzState; } public static CameraState convertCameraState(TelemetryDataPB.CameraState proto) { CameraState cameraState = new CameraState(); BeanUtils.copyProperties(proto, cameraState); return cameraState; } public static MissionState convertMissionState(TelemetryDataPB.MissionState proto) { MissionState missionState = new MissionState(); BeanUtils.copyProperties(proto, missionState); return missionState; } public static AvoidanceData convertAvoidanceData(TelemetryDataPB.AvoidanceData proto) { AvoidanceData avoidanceData = new AvoidanceData(); BeanUtils.copyProperties(proto, avoidanceData); return avoidanceData; } public static HmsAlarmData convertHmsAlarmData(TelemetryDataPB.HmsAlarmData proto) { HmsAlarmData hmsAlarmData = new HmsAlarmData(); BeanUtils.copyProperties(proto, hmsAlarmData); return hmsAlarmData; } }