liusuyi
2025-09-27 3b28c7f5059534130ebe7020c90f6f5a80c8f752
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.ard.work.domain.dto.converter.realdata;
 
import com.alibaba.fastjson2.JSON;
import com.ard.work.domain.dto.state.*;
import com.ard.work.component.netty.protobuf.TelemetryDataPB;
import com.google.protobuf.util.JsonFormat;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;
 
public class UavStateConverter {
 
 
    /**
     * 将 Protobuf 格式的无人机状态转换为 Java 实体类
     *
     * @param protobufUavState Protobuf 格式的无人机状态
     * @return 转换后的 Java 实体类对象
     * @throws RuntimeException 如果转换过程中发生错误,抛出运行时异常
     */
    public static UavState convertProtoToEntity(TelemetryDataPB.UavState protobufUavState) {
        try {
            // 将 Protobuf 对象转换为 JSON 字符串
            String json = JsonFormat.printer().includingDefaultValueFields().print(protobufUavState);
 
            // 使用 fastjson2 将 JSON 转换为 Java 实体类
            return JSON.parseObject(json, UavState.class);
        } catch (Exception e) {
            // 如果转换过程中发生异常,抛出运行时异常
            throw new RuntimeException("Protobuf 转换为实体类失败", e);
        }
    }
 
    // 将 Protobuf UavState 转换为 Java 实体类 UavState
    public static UavState convertProtoToEntity1(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<HmsAlarmData>
        List<HmsAlarmData> 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;
    }
}