From 0f5fc39356b6bff677984c33c296573bb9c8393e Mon Sep 17 00:00:00 2001
From: zhouhn <zhouhn@xiaopeng.com>
Date: 星期六, 07 三月 2026 20:58:52 +0800
Subject: [PATCH] 引入proto文件,生成与XPU通信的报文对象

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java |  337 +++++++++++++++----------------------------------------
 1 files changed, 92 insertions(+), 245 deletions(-)

diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
index ac51192..a0fec39 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
+++ b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -1,7 +1,6 @@
 package com.xiaopeng.automaticPilot.service;
 
 import cn.hutool.core.lang.Snowflake;
-import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
@@ -12,25 +11,22 @@
 import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
 import com.xiaopeng.api.feignClient.map.XpMapClient;
 import com.xiaopeng.api.feignClient.operation.ReassignOrderClient;
-import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
 import com.xiaopeng.api.feignClient.order.XpOrderClient;
 import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
-import com.xiaopeng.api.model.order.XpCruiseOrder;
 import com.xiaopeng.api.model.order.XpOrder;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
-import com.xiaopeng.api.vo.OrderType;
-import com.xiaopeng.api.vo.SystemEventType;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.GeoPoint;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.ResponseMessage;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.StatusCode;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.RTTask;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.TaskStatus;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.TaskType;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.*;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudPushNavigation.RestoreNavigationData;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.ActionType;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.GeoPoint;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperation;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.PointType;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.ResponseMessage;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.RestoreNavigationData;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.StatusCode;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.Waypoint;
 import com.xiaopeng.api.vo.automaticPilot.proto.up.MessageType;
 import com.xiaopeng.api.vo.automaticPilot.proto.up.MsgContent;
 import com.xiaopeng.api.vo.automaticPilot.proto.up.RTCmdType;
@@ -49,10 +45,8 @@
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.enums.OrderStatusEnum;
 import com.xiaopeng.common.core.enums.PushMessageTypeEnum;
-import com.xiaopeng.common.core.utils.SnowFlake;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.utils.uuid.UUID;
-import com.xiaopeng.common.redis.service.RedisService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -101,12 +95,7 @@
     private UserVehicleClient userVehicleClient;
 
     @Resource
-    private XpCruiseOrderClient xpCruiseOrderClient;
-
-    @Resource
     private Snowflake snowflake;
-    @Autowired
-    private RedisService redisService;
 
 
     /**
@@ -209,17 +198,11 @@
             if(code == com.xiaopeng.api.vo.automaticPilot.proto.up.StatusCode.OK){
                 Object sequence = redisTemplate.opsForValue().get(requestSeq);
                 if(sequence!=null){
-                    JSONObject jsonObject = JSON.parseObject(sequence.toString());
-                    String event = jsonObject.getString("event");
-                    //推送导航的响应消息
-                    if(SystemEventType.PUSH_NAVIGATION.equals(event)){
-                        String orderId = jsonObject.getString("orderId");
-                        String vin = jsonObject.getString("vin");
-                        String orderType = jsonObject.getString("orderType");
+                    String[] split = sequence.toString().split("_");
+                    if(split[0].equals("pushOrder")){
                         PopOrderDto dto = new PopOrderDto();
-                        dto.setOrderId(Long.valueOf(orderId));
-                        dto.setXpVehicleVin(vin);
-                        dto.setOrderType(orderType);
+                        dto.setOrderId(Long.valueOf(split[1]));
+                        dto.setXpVehicleVin(split[2]);
                         xpOrderClient.popOrder(dto);
                     }
                 }
@@ -270,8 +253,7 @@
         //车辆动态信息
         VehicleDynamicStatus dynamicStatus = vehicleStatus.getDynamic_status();
         dynamicStatus.setSpeed(dynamicStatus.getSpeed());
-        vehiclePosition.setCurrentElectricity(dynamicStatus.getBms_soc_disp());
-        vehiclePosition.setMileageRange(dynamicStatus.getDst_bat_disp());
+        vehiclePosition.setCurrentElectricity(dynamicStatus.getBattery_level());
         //订单信息
         OrderStatusInfo runningOrderStatusInfo = systemRuntimeStatus.getRunning_order_status_info();
         Long orderId = null;
@@ -410,10 +392,6 @@
         //开始处理消息对应的业务逻辑
         NavigationDeviationEvent deviationEvent = msgContent.getContent_detail().getObject("deviationEvent", NavigationDeviationEvent.class);
         String requestId = deviationEvent.getRequest_id();
-        //导航id
-        String routeID = "";
-        Long vehicleId = null;
-        String orderType = "";
         //偏航事件类型 1:请求导航,2:取消导航
         if (deviationEvent.getEvent_type().equals(RtEventType.RT_EVENT_TYPE_REQUEST)) {
             NavigationDeviationMessage navigationDeviationMessage = deviationEvent.getNavigation_deviation_message();
@@ -425,31 +403,15 @@
             LonLatDto destination = new LonLatDto();
             LonLatDto origin = new LonLatDto();
             if (orderId.contains("XU")) {
-                orderType = OrderType.CRUISE_ORDER;
                 // todo 下发巡游单的导航数据
-                //先响应消息
-                responseMessage(sequence, "");
-                //构建导航数据给到车端
-                origin.setLongitude(116.40528);
-                origin.setLatitude(39.90498);
+                //巡游单
+                origin.setLongitude(longitude);
+                origin.setLatitude(latitude);
                 destination.setLongitude(116.40528);
                 destination.setLatitude(39.90498);
-
-                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-                dto.setOrderId(Long.parseLong(orderId));
-                dto.setOrigin(origin);
-                dto.setDestination(destination);
-                R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-                if (200 != routeVoR.getCode()) {
-                    throw new RuntimeException("获取订单线路和运费失败");
-                }
-                RouteVo routeVo = routeVoR.getData();
-                routeID = routeVo.getRouteID();
-
-
-//                vehicleId = xpOrder.getVehicleId();
+                //响应消息
+                responseMessage(sequence, "");
             } else {
-                orderType = OrderType.USER_ORDER;
                 //正常单
                 R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.parseLong(orderId));
                 if (200 != xpOrderR.getCode()) {
@@ -466,50 +428,31 @@
                     origin.setLatitude(latitude);
                     destination.setLongitude(xpOrder.getStartLon());
                     destination.setLatitude(xpOrder.getStartLat());
-
-                    OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-                    dto.setOrderId(Long.parseLong(orderId));
-                    dto.setOrigin(origin);
-                    dto.setDestination(destination);
-                    R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-                    if (200 != routeVoR.getCode()) {
-                        throw new RuntimeException("获取订单线路和运费失败");
-                    }
-                    RouteVo routeVo = routeVoR.getData();
-                    routeID = routeVo.getRouteID();
-                    //缓存数据,用于后续推给乘客导航线路
-                    redisService.setCacheObject("ORDER_NAVIGATION_START_DATA:" + xpOrder.getAppUserId(), com.alibaba.fastjson.JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
                 }
                 //驶往下车点的行程
                 if (Arrays.asList(6).contains(xpOrder.getStatus())) {
+                    //查询起点到终点的线路
                     origin.setLongitude(longitude);
                     origin.setLatitude(latitude);
                     destination.setLongitude(xpOrder.getEndLon());
                     destination.setLatitude(xpOrder.getEndLat());
-
-                    OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-                    dto.setOrderId(Long.parseLong(orderId));
-                    dto.setOrigin(origin);
-                    dto.setDestination(destination);
-                    R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-                    if (200 != routeVoR.getCode()) {
-                        throw new RuntimeException("获取订单线路和运费失败");
-                    }
-                    RouteVo routeVo = routeVoR.getData();
-                    routeID = routeVo.getRouteID();
-                    //缓存导航数据,用于后面的逻辑中给乘客端推送导航数据
-                    redisService.setCacheObject("ORDER_NAVIGATION_END_DATA:" + xpOrder.getAppUserId(), com.alibaba.fastjson.JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
                 }
-            }
-
-            if(StringUtils.isNotEmpty(routeID)){
-                XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData();
-                R<String> stringR = xpMapClient.queryRouted(routeID);
+                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+                dto.setOrderId(Long.parseLong(orderId));
+                dto.setOrigin(origin);
+                dto.setDestination(destination);
+                R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
+                if (200 != routeVoR.getCode()) {
+                    throw new RuntimeException("获取订单线路和运费失败");
+                }
+                RouteVo routeVo = routeVoR.getData();
+                R<String> stringR = xpMapClient.queryRouted(routeVo.getRouteID());
                 if (200 != stringR.getCode()) {
                     throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
                 }
+
                 //构建导航下发请求对象
-                cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
+                cloudPushNavigationInfo(requestId, routeVo.getRouteID(), stringR.getData(), orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
             }
         }
     }
@@ -525,53 +468,30 @@
         //订单类型  1:乘客订单,2=巡游订单
         LonLatDto destination = new LonLatDto();
         LonLatDto origin = new LonLatDto();
-        //导航id
-        String routeID = "";
-        Long vehicleId = null;
-        String orderType = "";
         if (orderId.contains("XU")) {
             // todo 下发巡游单的导航数据
-            orderType = OrderType.CRUISE_ORDER;
             //巡游单
             if (orderPhase.equals(OrderPhase.ROUTE_TO_CRUISE)) {
+                origin.setLongitude(116.40528);
+                origin.setLatitude(39.90498);
+                destination.setLongitude(116.40528);
+                destination.setLatitude(39.90498);
+
                 //先响应消息
                 responseMessage(sequence, "");
-                /* 构建导航数据给到车端 */
-                R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId);
-                XpCruiseOrder xpCruiseOrder = cruiseOrder.getData();
-
-                origin.setLongitude(xpCruiseOrder.getStartLon());
-                origin.setLatitude(xpCruiseOrder.getStartLat());
-                destination.setLongitude(xpCruiseOrder.getEndLon());
-                destination.setLatitude(xpCruiseOrder.getEndLat());
-
-                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-                dto.setOrderId(Long.parseLong(orderId));
-                dto.setOrigin(origin);
-                dto.setDestination(destination);
-                R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-                if (200 != routeVoR.getCode()) {
-                    throw new RuntimeException("获取订单线路和运费失败");
-                }
-                RouteVo routeVo = routeVoR.getData();
-                routeID = routeVo.getRouteID();
-
-
-//                vehicleId = xpOrder.getVehicleId();
             }
         } else {
-            orderType = OrderType.USER_ORDER;
             //正常单
             R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.parseLong(orderId));
             if (200 != xpOrderR.getCode()) {
                 throw new RuntimeException("订单不存在");
             }
             XpOrder xpOrder = xpOrderR.getData();
-            XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
-            //先响应消息
-            responseMessage(sequence, xpVehicle.getVehicleVin());
             //驶往上车点的行程
             if (orderPhase.equals(OrderPhase.ROUTE_TO_PICKUP)) {
+                XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
+                //先响应消息
+                responseMessage(sequence, xpVehicle.getVehicleVin());
                 //查询车辆位置
                 VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
                 if (Objects.isNull(vehiclePosition)) {
@@ -582,59 +502,32 @@
                 origin.setLatitude(vehiclePosition.getPoint().getY());
                 destination.setLongitude(xpOrder.getStartLon());
                 destination.setLatitude(xpOrder.getStartLat());
-
-                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-                dto.setOrderId(Long.parseLong(orderId));
-                dto.setOrigin(origin);
-                dto.setDestination(destination);
-                R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-                if (200 != routeVoR.getCode()) {
-                    throw new RuntimeException("获取订单线路和运费失败");
-                }
-                RouteVo routeVo = routeVoR.getData();
-                routeID = routeVo.getRouteID();
-                //缓存数据,用于后续推给乘客导航线路
-                redisService.setCacheObject("ORDER_NAVIGATION_START_DATA:" + xpOrder.getAppUserId(), com.alibaba.fastjson.JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
             }
             //驶往下车点的行程
             if (orderPhase.equals(OrderPhase.ROUTE_TO_DESTINATION)) {
-                //直接取缓存中的导航数据推送给车端和乘客
-                Object cacheObject = redisService.getCacheObject("ORDER_NAVIGATION_DATA:" + xpOrder.getAppUserId());
-                if(null == cacheObject){
-                    //没有缓存数据,重新规划线路
-                    //查询起点到终点的线路
-                    origin.setLongitude(xpOrder.getStartLon());
-                    origin.setLatitude(xpOrder.getStartLat());
-                    destination.setLongitude(xpOrder.getEndLon());
-                    destination.setLatitude(xpOrder.getEndLat());
-                    OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-                    dto.setOrderId(Long.parseLong(orderId));
-                    dto.setOrigin(origin);
-                    dto.setDestination(destination);
-                    R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-                    if (200 != routeVoR.getCode()) {
-                        throw new RuntimeException("获取订单线路和运费失败");
-                    }
-                    RouteVo routeVo = routeVoR.getData();
-                    routeID = routeVo.getRouteID();
-                    //缓存导航数据,用于后面的逻辑中给乘客端推送导航数据
-                    redisService.setCacheObject("ORDER_NAVIGATION_END_DATA:" + xpOrder.getAppUserId(), com.alibaba.fastjson.JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
-                }else{
-                    RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
-                    routeID = routeVo.getRouteID();
-                }
+                //查询起点到终点的线路
+                origin.setLongitude(xpOrder.getStartLon());
+                origin.setLatitude(xpOrder.getStartLat());
+                destination.setLongitude(xpOrder.getEndLon());
+                destination.setLatitude(xpOrder.getEndLat());
             }
-            vehicleId = xpOrder.getVehicleId();
-        }
-
-        if(StringUtils.isNotEmpty(routeID)){
-            XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData();
-            R<String> stringR = xpMapClient.queryRouted(routeID);
+            OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+            dto.setOrderId(Long.parseLong(orderId));
+            dto.setOrigin(origin);
+            dto.setDestination(destination);
+            //TODO 这里的routeID不应该每次都重新生成,应该有一个缓存,调用的接口有做缓存但是没有读取缓存
+            R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
+            if (200 != routeVoR.getCode()) {
+                throw new RuntimeException("获取订单线路和运费失败");
+            }
+            XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
+            RouteVo routeVo = routeVoR.getData();
+            R<String> stringR = xpMapClient.queryRouted(routeVo.getRouteID());
             if (200 != stringR.getCode()) {
                 throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
             }
             //构建导航下发请求对象
-            cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
+            cloudPushNavigationInfo(requestId, routeVo.getRouteID(), stringR.getData(), orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
         }
     }
 
@@ -646,44 +539,44 @@
      */
     public void cloudOrderOperation(Integer orderType, String orderId, String taskId, RouteVo routeVo, String vin) {
         //构建消息体
-        OrderOperation orderOperation = new OrderOperation();
-        orderOperation.setOrder_id(orderId);
-        orderOperation.setTask_id(taskId);
-        orderOperation.setOperation_type(OrderOperationType.CLOUD_UPDATE_WAYPOINTS);
+        OrderOperation.Builder orderOperationBuilder = OrderOperation.newBuilder();
+        orderOperationBuilder.setOrderId(orderId);
+        orderOperationBuilder.setTaskId(taskId);
+        orderOperationBuilder.setOperationType(OrderOperationType.CLOUD_UPDATE_WAYPOINTS);
 
         //构建航点
         List<Waypoint> waypoints = new ArrayList<>();
         List<LonLatDto> polyline = routeVo.getPolyline();
         for (int i = 0; i < polyline.size(); i++) {
             LonLatDto lonLatDto = polyline.get(i);
-            Waypoint waypoint = new Waypoint();
-            waypoint.setWaypoint_id(UUID.randomUUID().toString());
+            Waypoint.Builder waypointBuilder = Waypoint.newBuilder();
+            waypointBuilder.setWaypointId(UUID.randomUUID().toString());
             if (0 == i) {
-                waypoint.setPoint_type(PointType.START_POINT);
+                waypointBuilder.setPointType(PointType.START_POINT);
                 //订单类型不同,点位的动作类型不同
-                waypoint.setAction_type(1 == orderType ? ActionType.PICK_UP : ActionType.ACTION_UNSPECIFIED);
+                waypointBuilder.setActionType(1 == orderType ? ActionType.PICK_UP : ActionType.ACTION_UNSPECIFIED);
             } else if (polyline.size() - 1 == i) {
-                waypoint.setPoint_type(PointType.END_POINT);
-                waypoint.setAction_type(1 == orderType ? ActionType.DROP_OFF : ActionType.ACTION_UNSPECIFIED);
+                waypointBuilder.setPointType(PointType.END_POINT);
+                waypointBuilder.setActionType(1 == orderType ? ActionType.DROP_OFF : ActionType.ACTION_UNSPECIFIED);
             } else {
-                waypoint.setPoint_type(PointType.WAY_POINT);
+                waypointBuilder.setPointType(PointType.WAY_POINT);
                 //订单类型不同,点位的动作类型不同
-                waypoint.setAction_type(ActionType.ACTION_UNSPECIFIED);
+                waypointBuilder.setActionType(ActionType.ACTION_UNSPECIFIED);
             }
             //构建经纬度
-            GeoPoint geoPoint = new GeoPoint();
-            geoPoint.setLongitude(lonLatDto.getLongitude());
-            geoPoint.setLatitude(lonLatDto.getLatitude());
-            waypoint.setPoint(geoPoint);
-            waypoint.setSequence(i + 1);
-            waypoints.add(waypoint);
+            GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder();
+            geoPointBuilder.setLongitude(lonLatDto.getLongitude());
+            geoPointBuilder.setLatitude(lonLatDto.getLatitude());
+            waypointBuilder.setPoint(geoPointBuilder.build());
+            waypointBuilder.setSequence(i + 1);
+            waypoints.add(waypointBuilder.build());
         }
-        orderOperation.setWaypoints(waypoints);
+        orderOperationBuilder.addAllWaypoints(waypoints);
         long sequence = snowflake.nextId();
         // 处理数据
         redisTemplate.opsForValue().set(sequence,"pushOrder_"+orderId+"_"+vin,30, TimeUnit.MINUTES);
         //开发发送请求到XPU
-        xpuUtil.cloudOrderOperation(orderOperation, vin,sequence);
+        xpuUtil.cloudOrderOperation(orderOperationBuilder.build(), vin,sequence);
     }
 
 
@@ -691,11 +584,11 @@
      * 构建响应消息
      */
     public void responseMessage(Long request_seq, String vin) {
-        ResponseMessage responseMessage = new ResponseMessage();
-        responseMessage.setRequest_seq(request_seq);
-        responseMessage.setCode(StatusCode.OK);
-        responseMessage.setTimestamp(System.currentTimeMillis());
-        xpuUtil.responseMessage(responseMessage, vin);
+        ResponseMessage.Builder responseMessageBuilder = ResponseMessage.newBuilder();
+        responseMessageBuilder.setRequestSeq(request_seq);
+        responseMessageBuilder.setCode(StatusCode.OK);
+        responseMessageBuilder.setTimestamp(System.currentTimeMillis());
+        xpuUtil.responseMessage(responseMessageBuilder.build(), vin);
     }
 
 
@@ -799,6 +692,7 @@
         if(orderId.contains("XU")){
             //巡游单
             //响应消息
+            // TODO 1.处理结束当前巡游订单  2.创建新的巡游订单 返航  3.调用xpu车机接口  (判断是返航还是正常  返航需要存储之前的订单id)
             responseMessage(sequence, "");
             //前往目的地
             if(OrderStatusEnum.IN_SERVICE.equals(status)){
@@ -807,48 +701,6 @@
             //到达目的地
             if(OrderStatusEnum.COMPLETED.equals(status)){
 
-                // 返程找到目前的订单 -》之前的订单 查询生成一个   正常巡游 找到下一个点位   若到达最后点位  则反向找点位  每次判断是否收车状态 是则不进行处理了
-                // 找到这个订单
-                R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId);
-                if(cruiseOrder!=null){
-                    XpCruiseOrder xpCruiseOrder = cruiseOrder.getData();
-                    Long vehicleId = xpCruiseOrder.getVehicleId();
-
-                    // 关闭当前巡游单子 已完成
-                    xpCruiseOrderClient.closeCruiseOrder(xpCruiseOrder.getVehicleVin());
-                    R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(vehicleId);
-                    XpVehicle xpVehicle = xpVehicleR.getData();
-                    // 运营中 继续执行
-                    if(xpVehicle.getOperatingStatus()==1 && xpVehicle.getState()==0){
-                        // 创建新的巡游单子  判断是否为返程单子
-                        if(xpCruiseOrder.getOrderType()==2){
-                            R<XpCruiseOrder> lastOrder = xpCruiseOrderClient.getCruiseOrder(xpCruiseOrder.getLastOrderId());
-                            XpCruiseOrder lastXpCruiseOrder = lastOrder.getData();
-
-                            // 修改一下id 加一个一样的巡游单子
-                            lastXpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
-                            lastXpCruiseOrder.setStatus(1);
-                            xpCruiseOrderClient.addCruiseOrder(lastXpCruiseOrder);
-
-
-                            RTTask task = new RTTask();
-                            task.setOrder_id(lastXpCruiseOrder.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);
-                        }else if(xpCruiseOrder.getOrderType()==1){
-                           // 正常巡游 找到下一个点位   若到达最后点位  则反向找点位 TODO v
-
-
-                        }
-
-                    }
-
-                }
             }
         }else{
             //普通单
@@ -887,22 +739,17 @@
      * @param vin                   车辆VIN
      * @param xpuId                 XPU设备id
      */
-    public void cloudPushNavigationInfo(String requestId, String routeId, String routeDataContent, String orderType, String orderId, String vin, String xpuId) {
+    public void cloudPushNavigationInfo(String requestId, String routeId, String routeDataContent, String orderId, String vin, String xpuId) {
         //组装报文,将routeDateContent信息推送到XPU
-        RestoreNavigationData navigationData = new RestoreNavigationData();
-        navigationData.setRoute_id(routeId);
-        navigationData.setRequest_id(requestId);
-        navigationData.setContent(routeDataContent);
-        navigationData.setTimestamp(System.currentTimeMillis());
+        RestoreNavigationData.Builder navigationDataBuilder = RestoreNavigationData.newBuilder();
+        navigationDataBuilder.setRouteId(routeId);
+        navigationDataBuilder.setRequestId(requestId);
+        navigationDataBuilder.setContent(routeDataContent);
+        navigationDataBuilder.setTimestamp(System.currentTimeMillis());
         long sequence = snowflake.nextId();
         // 处理数据
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("event", SystemEventType.PUSH_NAVIGATION);
-        jsonObject.put("orderType", orderType);
-        jsonObject.put("orderId", orderId);
-        jsonObject.put("vin", vin);
-        redisTemplate.opsForValue().set(sequence, jsonObject.toJSONString(),30, TimeUnit.MINUTES);
-        xpuUtil.cloudPushNavigation(navigationData, xpuId, sequence);
+        redisTemplate.opsForValue().set(sequence,"pushOrder_"+orderId+"_"+vin,30, TimeUnit.MINUTES);
+        xpuUtil.cloudPushNavigation(navigationDataBuilder.build(), xpuId, sequence);
     }
 
 }

--
Gitblit v1.7.1