package com.ard.work.domain.dto.converter.wayline; import com.ard.common.utils.bean.BeanUtils; import com.ard.work.domain.dto.state.PointData; import com.ard.work.domain.dto.wayline.HangarPoint; import com.ard.work.domain.dto.wayline.NormalModel; import com.ard.work.domain.dto.wayline.PlanLineData; import com.ard.work.domain.dto.wayline.SurroundModel; import com.ard.work.component.netty.protobuf.TelemetryDataPB; import java.util.List; import java.util.stream.Collectors; public class PlanLineDataConverter { // 将 Protobuf 对象转换为实体对象 public static PlanLineData convertProtoToEntity(TelemetryDataPB.PlanLineData proto) { PlanLineData planLineData = new PlanLineData(); // 使用 BeanUtils 复制属性 BeanUtils.copyProperties(proto, planLineData); // 处理 repeated fields if (proto.getPointsCount() > 0) { List points = proto.getPointsList().stream() .map(PointDataConverter::convertProtoToEntity) .collect(Collectors.toList()); planLineData.setPoints(points); } if (proto.getInterestsCount() > 0) { List interests = proto.getInterestsList().stream() .map(PointDataConverter::convertProtoToEntity) .collect(Collectors.toList()); planLineData.setInterests(interests); } // 处理 HangarPoint if (proto.hasTakePoint()) { HangarPoint takePoint = HangarPointConverter.convertProtoToEntity(proto.getTakePoint()); planLineData.setTakePoint(takePoint); } if (proto.hasLandPoint()) { HangarPoint landPoint = HangarPointConverter.convertProtoToEntity(proto.getLandPoint()); planLineData.setLandPoint(landPoint); } // 处理 NormalModel 和 SurroundModel if (proto.hasNormalModel()) { NormalModel normalModel = NormalModelConverter.convertProtoToEntity(proto.getNormalModel()); planLineData.setNormalModel(normalModel); } if (proto.hasSurroundModel()) { SurroundModel surroundModel = SurroundModelConverter.convertProtoToEntity(proto.getSurroundModel()); planLineData.setSurroundModel(surroundModel); } // 处理起飞点 if (proto.hasTakeOffPoint()) { PointData takeOffPoint = PointDataConverter.convertProtoToEntity(proto.getTakeOffPoint()); planLineData.setTakeOffPoint(takeOffPoint); } return planLineData; } // 将实体对象转换为 Protobuf 对象 public static TelemetryDataPB.PlanLineData convertEntityToProto(PlanLineData planLineData) { // 创建 Protobuf 的构建器 TelemetryDataPB.PlanLineData.Builder builder = TelemetryDataPB.PlanLineData.newBuilder(); // 复制基本属性 builder.setFinishedAction(planLineData.getFinishedAction()); builder.setMaxSpeed(planLineData.getMaxSpeed()); builder.setAutoSpeed(planLineData.getAutoSpeed()); builder.setLoseAction(planLineData.getLoseAction()); builder.setHomeHeight(planLineData.getHomeHeight()); builder.setIsSaveEnergyMode(planLineData.getIsSaveEnergyMode()); // 处理 repeated fields if (planLineData.getPoints() != null) { List points = planLineData.getPoints().stream() .map(PointDataConverter::convertEntityToProto) .collect(Collectors.toList()); builder.addAllPoints(points); } if (planLineData.getInterests() != null) { List interests = planLineData.getInterests().stream() .map(PointDataConverter::convertEntityToProto) .collect(Collectors.toList()); builder.addAllInterests(interests); } // 处理 HangarPoint if (planLineData.getTakePoint() != null) { TelemetryDataPB.HangarPoint takePoint = HangarPointConverter.convertEntityToProto(planLineData.getTakePoint()); builder.setTakePoint(takePoint); } if (planLineData.getLandPoint() != null) { TelemetryDataPB.HangarPoint landPoint = HangarPointConverter.convertEntityToProto(planLineData.getLandPoint()); builder.setLandPoint(landPoint); } // 处理 NormalModel 和 SurroundModel if (planLineData.getNormalModel() != null) { TelemetryDataPB.NormalModel normalModel = NormalModelConverter.convertEntityToProto(planLineData.getNormalModel()); builder.setNormalModel(normalModel); } if (planLineData.getSurroundModel() != null) { TelemetryDataPB.SurroundModel surroundModel = SurroundModelConverter.convertEntityToProto(planLineData.getSurroundModel()); builder.setSurroundModel(surroundModel); } // 处理起飞点 if (planLineData.getTakeOffPoint() != null) { TelemetryDataPB.PointData takeOffPoint = PointDataConverter.convertEntityToProto(planLineData.getTakeOffPoint()); builder.setTakeOffPoint(takeOffPoint); } // 构建并返回 Protobuf 对象 return builder.build(); } }