From f443bf994990854466787e2acbc983fb47cea3e4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 16 四月 2026 16:00:50 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 78 ++++++++++++++++++++------------------
1 files changed, 41 insertions(+), 37 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
index 0635290..ec76fa1 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -49,7 +49,9 @@
import javax.annotation.Resource;
import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@@ -107,6 +109,8 @@
// 自定义线程池
private static final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
+
+// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20);
static {
threadPoolTaskExecutor.setCorePoolSize(20);
@@ -1059,16 +1063,8 @@
continue;
}
log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
- PushOrderDto pushOrderDto = new PushOrderDto();
+ PushOrderDto pushOrderDto = buildPushOrderDto(xpOrder);
pushOrderDto.setVin(vehiclePosition.getVin());
- pushOrderDto.setOrderId(xpOrder.getId().toString());
- pushOrderDto.setStartLatitude(xpOrder.getStartLat());
- pushOrderDto.setStartLongitude(xpOrder.getStartLon());
- pushOrderDto.setEndLatitude(xpOrder.getEndLat());
- pushOrderDto.setEndLongitude(xpOrder.getEndLon());
- pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
- pushOrderDto.setOrderType(OrderType.USER_ORDER);
- pushOrderDto.setStage(1);
// 调用推送服务 orderId + carVin
orderMissionClient.pushOrder(pushOrderDto);
log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
@@ -1090,9 +1086,8 @@
if (vehiclePositionVos.getCode() != 200) {
continue;
}
+
LonLatDto lonLatDto = new LonLatDto(Double.parseDouble(split[0]), Double.parseDouble(split[1]));
- RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
- routeAndFareDto.setDestination(lonLatDto);
Optional<XpOrder> lucyOrderOpt = servingVehicles.getData().stream()
//获取位置
@@ -1101,37 +1096,51 @@
.map(xpOrderClient::queryOrderById)
.filter(R::isSuccess)
.map(R::getData)
- .filter(o -> isClose(o, routeAndFareDto))
+ .filter(o -> {
+ RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+ routeAndFareDto.setDestination(lonLatDto);
+ return isClose(o, routeAndFareDto);
+ })
.findAny();
if (lucyOrderOpt.isPresent()) {
XpOrder lucyOder = lucyOrderOpt.get();
+ log.info("有空闲车辆 {} 订单 {}", lucyOder.getOrderNumber(), orderNo);
+ XpVehicle xpVehicle = xpVehicleClient.queryById(lucyOder.getVehicleId()).getData();
+ // 设置路线信息
+ RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+ routeAndFareDto.setDestination(lonLatDto);
routeAndFareDto.setOrigin(new LonLatDto(lucyOder.getEndLon(),lucyOder.getEndLat()));
- routeAndFareDto.setOrigin(lonLatDto);
-
- RouteAndFareDto routeAndFare = null;//TODO 获取导航路线
- if (null == routeAndFare) { //轨迹不在运营区
- continue;
- }
- // 当轨迹是否在运营区内,存储
- xpOrder.setStatus(1);
- xpOrderClient.updateOrder(xpOrder);
- scheduler.scheduleWithFixedDelay(this::pushProgress, 0, 5, TimeUnit.SECONDS);
+ Object cacheObject = redisService.getCacheObject(CacheConstants.navigationEnd(lucyOder.getAppUserId().toString()));
+ RouteVo routeRemain = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+ RouteVo routeToOrigin = xpMapClient.getDistanceAndDuration(routeAndFareDto).getData();
+ routeToOrigin.getPolyline().addAll(0, routeRemain.getPolyline());
+ routeToOrigin.setDuration(routeToOrigin.getDuration() + routeRemain.getDuration());
+ routeToOrigin.setDistance(routeToOrigin.getDistance() + routeRemain.getDistance());
+ PushOrderDto pushOrderDto = buildPushOrderDto(xpOrder);
+ pushOrderDto.setVin(xpVehicle.getVehicleVin());
+ // 订单流转
+ orderMissionClient.pushOrder(pushOrderDto);
+ redisService.setCacheObject(CacheConstants.nextOrder(lucyOder.getId().toString()), xpOrder.getId());
+ redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), routeToOrigin);
+ redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+ log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
}
}
return false;
}
- private void pushProgress() {
- //TODO 调用push message 服务
+ private static PushOrderDto buildPushOrderDto(XpOrder xpOrder) {
PushOrderDto pushOrderDto = new PushOrderDto();
-// pushOrderDto.setVin(lucyOrder.get().getVin());
-// pushOrderDto.setOrderId(xpOrder.getId().toString());
-// pushOrderDto.setStartLatitude(xpOrder.getStartLat());
-// pushOrderDto.setStartLongitude(xpOrder.getStartLon());
-// pushOrderDto.setEndLatitude(xpOrder.getEndLat());
-// pushOrderDto.setEndLongitude(xpOrder.getEndLon());
-// pushOrderDto.setOrderType(OrderType.USER_ORDER);
+ pushOrderDto.setOrderId(xpOrder.getId().toString());
+ pushOrderDto.setStartLatitude(xpOrder.getStartLat());
+ pushOrderDto.setStartLongitude(xpOrder.getStartLon());
+ pushOrderDto.setEndLatitude(xpOrder.getEndLat());
+ pushOrderDto.setEndLongitude(xpOrder.getEndLon());
+ pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
+ pushOrderDto.setOrderType(OrderType.USER_ORDER);
+ pushOrderDto.setStage(1);
+ return pushOrderDto;
}
private boolean isClose(XpOrder xpOrder,RouteAndFareDto routeAndFareDto) {
@@ -1142,11 +1151,6 @@
@Resource
private MongoTemplate mongoTemplate;
- boolean isClose(Long orderId) {
- // yong id 去查目的地坐标,判断是否小于800
- return false;
- }
-
/**
--
Gitblit v1.7.1