From faae742fccc00d629ede627819cdc9d8a4ec25d3 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 24 三月 2026 17:01:11 +0800
Subject: [PATCH] 开发测试demo接口
---
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java | 187 ++++++++++++++++++++++++++++++++++++++++------
1 files changed, 162 insertions(+), 25 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 84206e9..82d5333 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
@@ -21,11 +21,13 @@
import com.xiaopeng.api.feignClient.operation.XpCruisePlanClient;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
+import com.xiaopeng.api.feignClient.order.XpTestOrderClient;
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.order.XpTestOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.OrderType;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
@@ -111,6 +113,9 @@
@Resource
private XpTaskClient xpTaskClient;
+
+ @Resource
+ private XpTestOrderClient testOrderClient;
private static final JsonFormat.Printer jsonPrinter = JsonFormat.printer()
.printingEnumsAsInts()
@@ -265,7 +270,13 @@
String vin = jsonObject.getString("vin");
String orderType = jsonObject.getString("orderType");
PopOrderDto dto = new PopOrderDto();
- dto.setOrderId(Long.valueOf(orderId.contains("XU") ? orderId.substring(2) : orderId));
+ if(orderId.contains("XU")){
+ dto.setOrderId(Long.valueOf(orderId.substring(2)));
+ }else if(orderId.contains("TEST")){
+ dto.setOrderId(Long.valueOf(orderId.substring(4)));
+ }else{
+ dto.setOrderId(Long.valueOf(orderId));
+ }
dto.setXpVehicleVin(vin);
dto.setOrderType(orderType);
xpOrderClient.popOrder(dto);
@@ -323,7 +334,9 @@
if (order_id.contains("XU")) {
hasOrder = 1;
orderId = Long.parseLong(order_id.substring(2));
- } else {
+ } else if(order_id.contains("TEST")) {
+ orderId = Long.parseLong(order_id.substring(4));
+ }else{
orderId = Long.parseLong(order_id);
}
}
@@ -355,7 +368,7 @@
mongoTemplate.updateFirst(new Query(Criteria.where("vin").is(vin)), update, VehiclePosition.class);
}
//调用推送服务接口
- if (null != orderId && !order_id.contains("XU")) {
+ if (null != orderId && !order_id.contains("XU") && !order_id.contains("TEST")) {
RtTripInfo rtTripInfo = systemRuntimeStatus.getRtTripInfo();
PushOrderRouteDTO dto = new PushOrderRouteDTO();
dto.setOrderId(orderId);
@@ -448,6 +461,24 @@
}
//添加车辆异常任务和发送消息
xpTaskClient.saveVehicleAccidentError(vehicle.getId());
+
+ // 封装埋点消息实体
+ VehicleEventDTO vehicleEventDTO = new VehicleEventDTO();
+ vehicleEventDTO.setVin(vehicle.getVehicleVin());
+ vehicleEventDTO.setXpuId("");
+ vehicleEventDTO.setOrderId("");
+ vehicleEventDTO.setEventKey("RT_web_vehicle_status_changed");
+ vehicleEventDTO.setEventTime(System.currentTimeMillis());
+ Map<String,Object> attributes = new HashMap<>();
+ attributes.put("vin",vehicle.getVehicleVin());
+ attributes.put("order_id","");
+ attributes.put("timestamp",vehicleEventDTO.getEventTime());
+ attributes.put("main_status","OFFLINE");
+ // TODO 预留位置 目前无状态
+ attributes.put("sub_status","");
+ attributes.put("prev_sub_status","");
+ vehicleEventDTO.setAttributes(attributes);
+ vehicleBuriedPointClient.sendVehicleEvent(vehicleEventDTO);
}
}
@@ -644,7 +675,73 @@
vehicleId = xpCruiseOrder.getVehicleId();
}
- } else {
+ } else if(orderId.contains("TEST")){
+ orderType = OrderType.TEST_ORDER;
+ //正常单
+ R<XpTestOrder> xpOrderR = testOrderClient.queryOrderById(Long.parseLong(orderId.substring(4)));
+ if (200 != xpOrderR.getCode()) {
+ throw new RuntimeException("订单不存在 " + orderId);
+ }
+ XpTestOrder xpOrder = xpOrderR.getData();
+ XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
+ //驶往上车点的行程
+ if (orderPhase.equals(OrderPhase.ROUTE_TO_PICKUP)) {
+ //查询车辆位置
+ VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
+ if (Objects.isNull(vehiclePosition)) {
+ throw new RuntimeException("车辆位置信息不存在");
+ }
+ //查询司机当前位置到起点的线路
+ origin.setLongitude(vehiclePosition.getPoint().getX());
+ 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);
+ 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("TEST_ORDER_NAVIGATION_START_DATA:" + xpOrder.getVehicleId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
+ }
+ //驶往下车点的行程
+ if (orderPhase.equals(OrderPhase.ROUTE_TO_DESTINATION)) {
+ //直接取缓存中的导航数据推送给车端和乘客
+ Object cacheObject = redisService.getCacheObject("TEST_ORDER_NAVIGATION_END_DATA:" + xpOrder.getVehicleId());
+ 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);
+ 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("TEST_ORDER_NAVIGATION_END_DATA:" + xpOrder.getVehicleId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
+ }else{
+ RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+ routeID = routeVo.getRouteID();
+ }
+ }
+ vehicleId = xpOrder.getVehicleId();
+ }else{
orderType = OrderType.USER_ORDER;
//正常单
R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.parseLong(orderId));
@@ -812,8 +909,12 @@
case ORDER_RECEIVED:
//收到订单
if(!orderId.contains("XU")){
- buildPushOrderStatus(orderId, OrderStatusEnum.READY_DEPART, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.READY_DEPART.getCode());
+ if(orderId.contains("TEST")){
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.READY_DEPART.getCode());
+ }else{
+ buildPushOrderStatus(orderId, OrderStatusEnum.READY_DEPART, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.READY_DEPART.getCode());
+ }
}
break;
case ORDER_STARTED:
@@ -823,8 +924,12 @@
case ORDER_EN_ROUTE_TO_PICKUP:
//前往上车点
if(!orderId.contains("XU")){
- buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP.getCode());
+ if(orderId.contains("TEST")){
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.PICK_UP.getCode());
+ }else{
+ buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP.getCode());
+ }
}
break;
case ORDER_ARRIVED_AT_PICKUP:
@@ -834,22 +939,34 @@
case ORDER_WAITING_FOR_PICKUP:
//等待乘客上车
if(!orderId.contains("XU")){
- buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP_GUESTS, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP_GUESTS.getCode());
+ if(orderId.contains("TEST")){
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.PICK_UP_GUESTS.getCode());
+ }else{
+ buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP_GUESTS, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP_GUESTS.getCode());
+ }
}
break;
case ORDER_PASSENGER_ONBOARD:
//乘客已上车
if(!orderId.contains("XU")){
- buildPushOrderStatus(orderId, OrderStatusEnum.PASSENGER_BOARDED, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PASSENGER_BOARDED.getCode());
+ if(orderId.contains("TEST")){
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.PASSENGER_BOARDED.getCode());
+ }else{
+ buildPushOrderStatus(orderId, OrderStatusEnum.PASSENGER_BOARDED, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PASSENGER_BOARDED.getCode());
+ }
}
break;
case ORDER_EN_ROUTE_TO_DESTINATION:
//前往目的地
if(!orderId.contains("XU")){
- buildPushOrderStatus(orderId, OrderStatusEnum.IN_SERVICE, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.IN_SERVICE.getCode());
+ if(orderId.contains("TEST")){
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.IN_SERVICE.getCode());
+ }else{
+ buildPushOrderStatus(orderId, OrderStatusEnum.IN_SERVICE, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.IN_SERVICE.getCode());
+ }
}
break;
case ORDER_ARRIVED_AT_DESTINATION:
@@ -859,8 +976,12 @@
case ORDER_WAITING_FOR_DROPOFF:
//等待乘客下车,开始倒计时发下巡游单
if(!orderId.contains("XU")){
- buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
+ if(orderId.contains("TEST")){
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
+ }else{
+ buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
+ }
}
break;
case ORDER_DROPOFF_COMPLETED:
@@ -878,23 +999,39 @@
case ORDER_CANCELLED:
//已取消
if(!orderId.contains("XU")){
- //判断订单状态,已经取消的不作处理
- Object cacheObject = redisService.getCacheObject("ORDER_STATUS:" + orderId);
- if(null != cacheObject){
- int order_status = Integer.parseInt(cacheObject.toString());
- if(0 == order_status){
- return;
+ if(orderId.contains("TEST")){
+ //判断订单状态,已经取消的不作处理
+ Object cacheObject = redisService.getCacheObject("ORDER_STATUS:" + orderId.substring(4));
+ if(null != cacheObject){
+ int order_status = Integer.parseInt(cacheObject.toString());
+ if(0 == order_status){
+ return;
+ }
}
+ //行程中取消订单,按照行程结束处理
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
+ }else{
+ //判断订单状态,已经取消的不作处理
+ Object cacheObject = redisService.getCacheObject("ORDER_STATUS:" + orderId);
+ if(null != cacheObject){
+ int order_status = Integer.parseInt(cacheObject.toString());
+ if(0 == order_status){
+ return;
+ }
+ }
+ //行程中取消订单,按照行程结束处理
+ buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
+ xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
}
- //行程中取消订单,按照行程结束处理
- buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
- xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
}
break;
case ORDER_ARRIVED_AT_CRUISE_DESTINATION:
//到达巡游终点
if(orderId.contains("XU")){
buildPushOrderStatus(orderId, OrderStatusEnum.COMPLETED, sequence);
+ }else if(orderId.contains("TEST")){
+ //测试巡游单处理逻辑
+ testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.COMPLETED.getCode());
}
break;
case ORDER_PAUSED:
--
Gitblit v1.7.1