package com.ard.tianyu.model.dto.converter.wayline; import com.ard.common.utils.bean.BeanUtils; import com.ard.tianyu.model.dto.state.PointData; import com.ard.tianyu.model.dto.wayline.PointAction; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import java.util.List; import java.util.stream.Collectors; public class PointDataConverter { public static TelemetryDataPB.PointData convertEntityToProto(PointData pointData) { // 使用构建器来创建 Protobuf 对象 TelemetryDataPB.PointData.Builder builder = TelemetryDataPB.PointData.newBuilder(); // 复制基本属性 builder.setLng(pointData.getLng()); builder.setLat(pointData.getLat()); builder.setHeight(pointData.getHeight()); builder.setSpeed(pointData.getSpeed()); builder.setFlightPathMode(pointData.getFlightPathMode()); builder.setDampingDistance(pointData.getDampingDistance()); builder.setSafeGohomeFlag(pointData.getSafeGohomeFlag()); builder.setHeadingMode(pointData.getHeadingMode()); builder.setHeading(pointData.getHeading()); builder.setInterestIndex(pointData.getInterestIndex()); builder.setGroupIndex(pointData.getGroupIndex()); // 处理动作数组 if (pointData.getActions() != null && !pointData.getActions().isEmpty()) { List actions = pointData.getActions().stream() .map(PointActionConverter::convertEntityToProto) .collect(Collectors.toList()); builder.addAllActions(actions); } // 构建并返回 Protobuf 对象 return builder.build(); } public static PointData convertProtoToEntity(TelemetryDataPB.PointData proto) { PointData pointData = new PointData(); BeanUtils.copyProperties(proto, pointData); // 处理 repeated fields if (proto.getActionsCount() > 0) { List actions = proto.getActionsList().stream() .map(PointActionConverter::convertProtoToEntity) .collect(Collectors.toList()); pointData.setActions(actions); } return pointData; } }