From 76b7cd5eb091844e7e798dd8b497bcc48673d40f Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 11 三月 2026 16:45:55 +0800
Subject: [PATCH] 修改导航偏离报文后的导航下发逻辑
---
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java | 180 ++++++++++++++++++++++++++++--------------------------------
1 files changed, 84 insertions(+), 96 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 1267084..425ae18 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
@@ -478,126 +478,114 @@
* @param msgContent
*/
public void navigationDeviationEvent(MsgContent msgContent) {
- //先响应消息
- long sequence = msgContent.getHeader().getSequence();
//开始处理消息对应的业务逻辑
NavigationDeviationEvent deviationEvent = msgContent.getNaviDeviationEvent();
- // todo 请求id确认是否有这个参数
-// String requestId = deviationEvent.getRequestId();
- String requestId = "";
+ String requestId = deviationEvent.getNavigationDeviationMessage().getNaviRecalcRequestSeq() + "";
//导航id
String routeID = "";
Long vehicleId = null;
String orderType = "";
//偏航事件类型 1:请求导航,2:取消导航
-// if (deviationEvent.getEvent_type().equals(RtEventType.RT_EVENT_TYPE_REQUEST)) {
- NavigationDeviationMessage navigationDeviationMessage = deviationEvent.getNavigationDeviationMessage();
- String orderId = navigationDeviationMessage.getOrderId();
- String taskId = navigationDeviationMessage.getTaskId();
- Wgs wgs = navigationDeviationMessage.getPoint();
- Double longitude = wgs.getLongitude();
- Double latitude = wgs.getLatitude();
- //订单类型 1:乘客订单,2=巡游订单
- LonLatDto destination = new LonLatDto();
- LonLatDto origin = new LonLatDto();
+ NavigationDeviationMessage navigationDeviationMessage = deviationEvent.getNavigationDeviationMessage();
+ String orderId = navigationDeviationMessage.getOrderId();
+ String taskId = navigationDeviationMessage.getTaskId();
+ Wgs wgs = navigationDeviationMessage.getPoint();
+ Double longitude = wgs.getLongitude();
+ Double latitude = wgs.getLatitude();
+ //订单类型 1:乘客订单,2=巡游订单
+ LonLatDto destination = new LonLatDto();
+ LonLatDto origin = new LonLatDto();
- if (orderId.contains("XU")) {
-// orderType = OrderType.CRUISE_ORDER;
+ if (orderId.contains("XU")) {
+ orderType = OrderType.CRUISE_ORDER;
- R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(orderId.substring(2)));
- XpCruiseOrder xpCruiseOrder = cruiseOrder.getData();
+ R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(orderId.substring(2)));
+ XpCruiseOrder xpCruiseOrder = cruiseOrder.getData();
- //先响应消息
- responseMessage(sequence, "");
- //构建导航数据给到车端
+ //构建导航数据给到车端
+ origin.setLongitude(longitude);
+ origin.setLatitude(latitude);
+ destination.setLongitude(xpCruiseOrder.getEndLon());
+ destination.setLatitude(xpCruiseOrder.getEndLat());
+
+ OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+ dto.setOrderId(Long.parseLong(orderId));
+ dto.setOrigin(origin);
+ dto.setDestination(destination);
+ dto.setRouteType(3);
+ R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
+ if (200 != routeVoR.getCode()) {
+ throw new RuntimeException("获取订单线路和运费失败");
+ }
+ RouteVo routeVo = routeVoR.getData();
+ routeID = routeVo.getRouteID();
+
+
+ vehicleId = xpCruiseOrder.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();
+ //驶往上车点的行程
+ if (3 == xpOrder.getStatus()) {
+ //查询司机当前位置到起点的线路
origin.setLongitude(longitude);
origin.setLatitude(latitude);
- destination.setLongitude(xpCruiseOrder.getEndLon());
- destination.setLatitude(xpCruiseOrder.getEndLat());
+ destination.setLongitude(xpOrder.getStartLon());
+ destination.setLatitude(xpOrder.getStartLat());
OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
dto.setOrderId(Long.parseLong(orderId));
dto.setOrigin(origin);
dto.setDestination(destination);
- dto.setRouteType(3);
+ dto.setRouteType(1);
R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
if (200 != routeVoR.getCode()) {
throw new RuntimeException("获取订单线路和运费失败");
}
RouteVo routeVo = routeVoR.getData();
-// routeID = routeVo.getRouteID();
-
-
-// vehicleId = xpCruiseOrder.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 (Arrays.asList(3).contains(xpOrder.getStatus())) {
- //查询司机当前位置到起点的线路
- origin.setLongitude(longitude);
- 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);
- dto.setRouteType(1);
- 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(), 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);
- dto.setRouteType(2);
- 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);
- }
-// vehicleId = xpOrder.getVehicleId();
+ routeID = routeVo.getRouteID();
+ //缓存数据,用于后续推给乘客导航线路
+ redisService.setCacheObject("ORDER_NAVIGATION_START_DATA:" + xpOrder.getAppUserId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
}
+ //驶往下车点的行程
+ if (6 == xpOrder.getStatus()) {
+ origin.setLongitude(longitude);
+ origin.setLatitude(latitude);
+ destination.setLongitude(xpOrder.getEndLon());
+ destination.setLatitude(xpOrder.getEndLat());
- // TODO 在请求导航哪里返回导航数据
-// if(StringUtils.isNotEmpty(routeID)){
-// XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData();
-// R<String> stringR = xpMapClient.queryRouted(routeID);
-// if (200 != stringR.getCode()) {
-// throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
-// }
-// //TODO 这里的逻辑不太对,收到导航偏航事件之后
-// //构建响应导航数据给车端
-// cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
-// }
-// }
+ OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+ dto.setOrderId(Long.parseLong(orderId));
+ dto.setOrigin(origin);
+ dto.setDestination(destination);
+ dto.setRouteType(2);
+ 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);
+ }
+ vehicleId = xpOrder.getVehicleId();
+ }
+ //直接响应回最新导航数据
+ if(StringUtils.isNotEmpty(routeID)){
+ XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData();
+ R<String> stringR = xpMapClient.queryRouted(routeID);
+ if (200 != stringR.getCode()) {
+ throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
+ }
+ //构建响应导航数据给车端
+ cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
+ }
}
--
Gitblit v1.7.1