puzhibing
2026-02-27 158629a04db419a109b53eb480c50a250fb650c2
修改车机交互报文实现方式和相关业务逻辑
4个文件已修改
75 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/proto/rt_common.proto 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/proto/rt_common.proto
@@ -82,7 +82,7 @@
  ORDER_TYPE_UNSPECIFIED = 0;             // 未指定
  ORDER_TYPE_ROBOTAXI = 1;                // Robotaxi订单
  ORDER_TYPE_REMOTE_DRIVING = 2;          // 云代驾订单
  c = 3;                   // 巡游任务
  ORDER_TYPE_CRUISE = 3;                   // 巡游任务
}
////////////////////////////////////////////////////////////////////////////////////////////////
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -43,7 +43,7 @@
        taskBuilder.setTaskId("MISSION_"+ IdUtil.fastUUID());
        if(dto.getOrderId().contains("XU")){
            taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI);
            taskBuilder.setTaskType(OrderType.ORDER_TYPE_CRUISE);
        }else {
            taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI);
        }
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -96,7 +96,7 @@
    @Resource
    private RedisService redisService;
    @Autowired
    @Resource
    private XpCruisePlanClient xpCruisePlanClient;
@@ -256,8 +256,8 @@
        //获取实时位置
        RealtimePose pose = systemRuntimeStatus.getPose();
        Wgs naviPose = pose.getNaviPose();
        Double latitude = naviPose.getLatitude();
        Double longitude = naviPose.getLongitude();
        double latitude = naviPose.getLatitude();
        double longitude = naviPose.getLongitude();
        Double course = naviPose.getCourse();
        Float alt = naviPose.getAlt();
        //获取车辆静态信息
@@ -414,7 +414,9 @@
        long sequence = msgContent.getHeader().getSequence();
        //开始处理消息对应的业务逻辑
        NavigationDeviationEvent deviationEvent = msgContent.getNaviDeviationEvent();
        // todo 请求id确认是否有这个参数
//        String requestId = deviationEvent.getRequestId();
        String requestId = "";
        //导航id
        String routeID = "";
        Long vehicleId = null;
@@ -520,7 +522,7 @@
                }
                //TODO 这里的逻辑不太对,收到导航偏航事件之后
                //构建导航下发请求对象
//                cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
                cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
            }
//        }
    }
@@ -885,25 +887,21 @@
                            R<XpCruiseOrder> cruisePoint = xpCruisePlanClient.getCruisePoint(cruisePointDto);
                            if(cruisePoint!=null){
                                xpCruiseOrderClient.addCruiseOrder(cruisePoint.getData());
                                RtTask.Builder taskBuilder = RtTask.newBuilder();
                                //TODO 设置目标地点信息
                                taskBuilder.setOrderId(newXpCruiseOrder.getId());
                                taskBuilder.setTaskId("MISSION_"+ IdUtil.fastUUID());
                                taskBuilder.setTaskType(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderType.ORDER_TYPE_CRUISE);
                                RtTaskList.Builder taskListBuilder = RtTaskList.newBuilder();
                                taskListBuilder.addTasks(taskBuilder.build());
                                // 下发任务
                                RTTask task = new RTTask();
                                task.setOrder_id(newXpCruiseOrder.getId());
                                task.setTask_id("MISSION_"+ IdUtil.fastUUID());
                                task.setTask_type(TaskType.CRUISE);
                                task.setStatus(TaskStatus.PENDING);
                                SnowFlake snowFlake = new SnowFlake(0, 0);
                                snowFlake.withStartTimestamp(1420041600000L);
                                long sequence1 = snowFlake.nextId();
                                xpuUtil.cloudCreateOrder(task, xpVehicle.getVehicleVin(),sequence1);
                                xpuUtil.cloudCreateOrder(taskListBuilder.build(), xpVehicle.getVehicleVin(),sequence1);
                            }
                        }
                    }
                }
            }
        }else{
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
@@ -7,8 +7,7 @@
import com.xiaopeng.api.feignClient.automaticPilot.VmpOpenServiceClient;
import com.xiaopeng.api.feignClient.automaticPilot.XPUClient;
import com.xiaopeng.api.vo.automaticPilot.MqttPublishVo;
import com.xiaopeng.api.vo.automaticPilot.protobuf.RTCmdType;
import com.xiaopeng.api.vo.automaticPilot.protobuf.RtTaskList;
import com.xiaopeng.api.vo.automaticPilot.protobuf.*;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.utils.uuid.UUID;
import lombok.extern.slf4j.Slf4j;
@@ -51,14 +50,14 @@
     */
    //TODO 处理feign调用的异常
    public MqttPublishDto cloudCreateOrder(RtTaskList taskList, String vin, Long sequence) {
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
        MsgContent.Builder msgContentBuilder = MsgContent.newBuilder();
        MsgHeader.Builder headerBuilder = MsgHeader.newBuilder();
        headerBuilder.setMsgId(UUID.randomUUID().toString());
        headerBuilder.setTimestamp(System.currentTimeMillis());
        headerBuilder.setCmd(RTCmdType.CLOUD_CREATE_ORDER.getValue());
        headerBuilder.setSequence(sequence);
        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_REQUEST);
        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
        headerBuilder.setType(MessageType.MESSAGE_TYPE_REQUEST);
        headerBuilder.setSource(SourceType.CLOUD);
        msgContentBuilder.setHeader(headerBuilder.build());
        msgContentBuilder.setRtTaskList(taskList);
@@ -82,15 +81,15 @@
     * @return
     */
    //TODO 处理feign调用的异常
    public MqttPublishDto cloudOrderOperation(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperation operation, String vin, Long sequence) {
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
    public MqttPublishDto cloudOrderOperation(OrderOperation operation, String vin, Long sequence) {
        MsgContent.Builder msgContentBuilder = MsgContent.newBuilder();
        MsgHeader.Builder headerBuilder = MsgHeader.newBuilder();
        headerBuilder.setMsgId(UUID.randomUUID().toString());
        headerBuilder.setTimestamp(System.currentTimeMillis());
        headerBuilder.setCmd(RTCmdType.CLOUD_ORDER_OPERATION.getValue());
        headerBuilder.setSequence(sequence);
        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_REQUEST);
        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
        headerBuilder.setType(MessageType.MESSAGE_TYPE_REQUEST);
        headerBuilder.setSource(SourceType.CLOUD);
        msgContentBuilder.setHeader(headerBuilder.build());
        msgContentBuilder.setOrderOperation(operation);
@@ -116,16 +115,16 @@
     * @param responseMessage
     * @return
     */
    public MqttPublishDto responseMessage(com.xiaopeng.api.vo.automaticPilot.protobuf.ResponseMessage responseMessage, String vin) {
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
    public MqttPublishDto responseMessage(ResponseMessage responseMessage, String vin) {
        MsgContent.Builder msgContentBuilder = MsgContent.newBuilder();
        MsgHeader.Builder headerBuilder = MsgHeader.newBuilder();
        headerBuilder.setMsgId(UUID.randomUUID().toString());
        headerBuilder.setTimestamp(System.currentTimeMillis());
        headerBuilder.setCmd(RTCmdType.CLOUD_TASK_CONTROL.getValue());
        Snowflake snowflake = IdUtil.getSnowflake(0, 0);
        headerBuilder.setSequence(snowflake.nextId());
        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_RESPONSE);
        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
        headerBuilder.setType(MessageType.MESSAGE_TYPE_RESPONSE);
        headerBuilder.setSource(SourceType.CLOUD);
        msgContentBuilder.setHeader(headerBuilder.build());
        msgContentBuilder.setResponse(responseMessage);
        MqttPublishVo vo = new MqttPublishVo();
@@ -147,15 +146,15 @@
     * @return
     */
    //TODO 处理feign调用的异常
    public MqttPublishDto cloudPushNavigation(com.xiaopeng.api.vo.automaticPilot.protobuf.RestoreNavigationData navigationData, String xpuId, Long sequence) {
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
    public MqttPublishDto cloudPushNavigation(RestoreNavigationData navigationData, String xpuId, Long sequence) {
        MsgContent.Builder msgContentBuilder = MsgContent.newBuilder();
        MsgHeader.Builder headerBuilder = MsgHeader.newBuilder();
        headerBuilder.setMsgId(UUID.randomUUID().toString());
        headerBuilder.setTimestamp(System.currentTimeMillis());
        headerBuilder.setCmd(RTCmdType.CLOUD_NAVIGATION_RESPONSE.getValue());
        headerBuilder.setSequence(sequence);
        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_RESPONSE);
        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
        headerBuilder.setType(MessageType.MESSAGE_TYPE_RESPONSE);
        headerBuilder.setSource(SourceType.CLOUD);
        msgContentBuilder.setHeader(headerBuilder.build());
        msgContentBuilder.setRestoreNavigationData(navigationData);