From 6f253a20c520e274105532f95b9fc03669f53f96 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 13 二月 2026 21:13:20 +0800
Subject: [PATCH] feat(task-order): 优化任务订单处理逻辑并添加权重策略
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 227 +++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 174 insertions(+), 53 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 3f72eeb..b27f350 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
@@ -75,7 +75,7 @@
@Autowired
private XpMapClient xpMapClient;
-//
+ //
@Autowired
private OrderMissionClient orderMissionClient;
@@ -108,7 +108,7 @@
String[] split = firstElement.toString().split("_");
// 如果未处理 创建新任务
if (split[2].equals("0")) {
- String value = split[0] + "_" + split[1] + "_1" + "_"+split[3] + "_"+ split[4] + "_"+ split[5] + "_"+ split[6] + "_"+ split[7];
+ String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7];
// 状态改为处理中
redisService.updateFirst(name, value);
threadPoolTaskExecutor.submit(() -> {
@@ -226,8 +226,8 @@
@SneakyThrows
private void processPushOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) {
System.out.println("进入推单环环节");
- if(count==0){
- count=1;
+ if (count == 0) {
+ count = 1;
}
// 订单状态
R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
@@ -602,7 +602,142 @@
// 订单价值
if (Objects.equals(secondMax, tendencyOrderValue)) {
+ // 订单价值
+ // 时间差权重
+ Integer weightTimeDifference = xpTradingStrategy.getWeightTimeDifference();
+ // 距离差权重
+ Integer weightDistanceDifference = xpTradingStrategy.getWeightDistanceDifference();
+ // 距离权重
+ Integer weightDistance = xpTradingStrategy.getWeightDistance();
+ // 时间权重
+ Integer weightTime = xpTradingStrategy.getWeightTime();
+ // 电量权重
+ Integer weightElectricity = xpTradingStrategy.getWeightElectricity();
+ // 找出最大的值是那个
+ Integer max1 = Math.max(weightTimeDifference, Math.max(weightDistanceDifference, Math.max(weightDistance, Math.max(weightTime, weightElectricity))));
+
+ // 时间差
+ if (max1.equals(weightTimeDifference)) {
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+ LonLatDto lonLatDto = new LonLatDto();
+ lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
+ lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
+ routeAndFareDto.setOrigin(lonLatDto);
+ LonLatDto lonLatDto1 = new LonLatDto();
+ lonLatDto1.setLongitude(Double.valueOf(split[0]));
+ lonLatDto1.setLatitude(Double.valueOf(split[1]));
+ routeAndFareDto.setDestination(lonLatDto1);
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
+ if (distanceAndDuration.getCode() == 200) {
+ // 送驾- 接驾
+ Integer durationDifference = Integer.parseInt(duration) - distanceAndDuration.getData().getDuration();
+ vehiclePosition.setTimeDifference(durationDifference);
+ }
+ }
+ }
+
+ if (max1.equals(weightDistanceDifference)) {
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+ LonLatDto lonLatDto = new LonLatDto();
+ lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
+ lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
+ routeAndFareDto.setOrigin(lonLatDto);
+ LonLatDto lonLatDto1 = new LonLatDto();
+ lonLatDto1.setLongitude(Double.valueOf(split[0]));
+ lonLatDto1.setLatitude(Double.valueOf(split[1]));
+ routeAndFareDto.setDestination(lonLatDto1);
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
+ if (distanceAndDuration.getCode() == 200) {
+ // 送驾- 接驾
+ Integer distanceDifference = Integer.parseInt(distance) - distanceAndDuration.getData().getDistance();
+ vehiclePosition.setDistanceDifference(distanceDifference);
+ }
+ }
+
+ }
+
+ if (max1.equals(weightDistance)) {
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+ LonLatDto lonLatDto = new LonLatDto();
+ lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
+ lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
+ routeAndFareDto.setOrigin(lonLatDto);
+ LonLatDto lonLatDto1 = new LonLatDto();
+ lonLatDto1.setLongitude(Double.parseDouble(split[0]));
+ lonLatDto1.setLatitude(Double.parseDouble(split[1]));
+
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ routeAndFareDto.setDestination(lonLatDto1);
+ // 调用地图 获取时间
+ R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
+ if (r.getCode() == 200) {
+ vehiclePosition.setDistance(Double.valueOf(r.getData().getDistance()));
+ } else {
+ vehiclePosition.setDistance(0.0);
+ }
+ }
+ }
+
+ if (max1.equals(weightTime)) {
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+ LonLatDto lonLatDto = new LonLatDto();
+ lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
+ lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
+ routeAndFareDto.setOrigin(lonLatDto);
+ LonLatDto lonLatDto1 = new LonLatDto();
+ lonLatDto1.setLongitude(Double.parseDouble(split[0]));
+ lonLatDto1.setLatitude(Double.parseDouble(split[1]));
+
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ routeAndFareDto.setDestination(lonLatDto1);
+ // 调用地图 获取时间
+ R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
+ if (r.getCode() == 200) {
+ vehiclePosition.setSecond(r.getData().getDuration());
+ } else {
+ vehiclePosition.setSecond(0);
+ }
+ }
+ }
+
+ if (max1.equals(weightElectricity)) {
+ // 计算车的分数 分数最大是车的size
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
+ int size1 = tendencyElectricity;
+ // 做比对的分数
+ int temp1 = availableVehiclesNearby.get(0).getCurrentElectricity();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size1);
+ if (temp1 != vehiclePosition.getCurrentElectricity()) {
+ size1--;
+ }
+ }
+ }
+
+
+ // 算出总分 再来排序计算
+ for (VehiclePositionVo vehiclePositionVo : availableVehiclesNearby) {
+ vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference() + vehiclePositionVo.getTimeDifference());
+ }
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList());
+
+
+ int size2 = tendencyOrderValue;
+ // 做比对的分数
+ double temp2 = availableVehiclesNearby.get(0).getOrderValueTotal();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setValueScore(vehiclePosition.getValueScore() + size2);
+ if (temp2 != vehiclePosition.getOrderValueTotal()) {
+ size2--;
+ }
+ }
}
}
@@ -622,7 +757,7 @@
RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo.getVin());
lock.lock(10, TimeUnit.SECONDS);
- System.err.println("队列:"+quoteName+" 车辆:"+vehiclePositionVo.getVin()+"订单"+orderNo);
+ System.err.println("队列:" + quoteName + " 车辆:" + vehiclePositionVo.getVin() + "订单" + orderNo);
try {
// VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
R<XpVehicle> vehiclePositionR = xpVehicleClient.findByVehicleVin(vehiclePositionVo.getVin());
@@ -636,25 +771,15 @@
}
// 关闭巡游单子 TODO
- AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
- addTaxiPassengerVo.setVin(vehiclePosition.getVehicleVin());
- addTaxiPassengerVo.setUid(uid);
- addTaxiPassengerVo.setOrderNo(orderNo);
- // TODO appid
- addTaxiPassengerVo.setAppId("");
+
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setOrderId(xpOrder.getId());
+ pushOrderDto.setVin(vehiclePosition.getVehicleVin());
- BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
- if (baseVehicleUserDto!=null && baseVehicleUserDto.getCode() == 200) {
- PushOrderDto pushOrderDto = new PushOrderDto();
- pushOrderDto.setOrderId(xpOrder.getId());
- pushOrderDto.setVin(vehiclePosition.getVehicleVin());
- // 调用推送服务 orderId + carVin
- orderMissionClient.pushOrder(pushOrderDto);
+ // 调用推送服务 orderId + carVin
+ orderMissionClient.pushOrder(pushOrderDto);
-
- return;
- }
} catch (Exception e) {
e.printStackTrace();
} finally {
@@ -670,11 +795,11 @@
lock.lock(10, TimeUnit.SECONDS);
try {
// 查询车辆状态
- R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin);
- if(vehicleR.getCode()!=200){
- continue;
- }
- XpVehicle vehicleId1 = vehicleR.getData();
+ R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin);
+ if (vehicleR.getCode() != 200) {
+ continue;
+ }
+ XpVehicle vehicleId1 = vehicleR.getData();
if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) {
lock.unlock();
continue;
@@ -688,13 +813,15 @@
addTaxiPassengerVo.setOrderNo(orderNo);
// TODO appid
addTaxiPassengerVo.setAppId("");
- BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
- if (baseVehicleUserDto.getCode() == 200) {
- redisService.popFirstElement(quoteName);
- lock.unlock();
- return;
- }
+
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setOrderId(xpOrder.getId());
+ pushOrderDto.setVin(vehiclePosition.getVin());
+
+ // 调用推送服务 orderId + carVin
+ orderMissionClient.pushOrder(pushOrderDto);
+
} catch (Exception e) {
} finally {
@@ -717,8 +844,8 @@
@SneakyThrows
public void reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) {
System.out.println("进入推单环环节");
- if(count==0){
- count=1;
+ if (count == 0) {
+ count = 1;
}
// 订单状态
R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
@@ -728,6 +855,7 @@
if (xpOrderR.getData().getStatus() != 1) {
return;
}
+ XpOrder data = xpOrderR.getData();
XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null);
for (int i = 0; i < count; i++) {
log.info("进入找车环节");
@@ -746,29 +874,22 @@
lock.lock(10, TimeUnit.SECONDS);
try {
// 查询车辆状态
- R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin);
- if(vehicleR.getCode()!=200){
- continue;
- }
- XpVehicle vehicleId1 = vehicleR.getData();
+ R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin);
+ if (vehicleR.getCode() != 200) {
+ continue;
+ }
+ XpVehicle vehicleId1 = vehicleR.getData();
if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) {
lock.unlock();
continue;
}
- if (vehiclePosition.getHasOrder() == 1) {
- // 关闭巡游单子 TODO
- }
- AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
- addTaxiPassengerVo.setVin(vehiclePosition.getVin());
- addTaxiPassengerVo.setUid(uid);
- addTaxiPassengerVo.setOrderNo(orderNo);
- // TODO appid
- addTaxiPassengerVo.setAppId("");
- BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
- if (baseVehicleUserDto.getCode() == 200) {
- lock.unlock();
- return;
- }
+ // 关闭巡游单子 TODO
+
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setOrderId(data.getId());
+ pushOrderDto.setVin(vehiclePosition.getVin());
+ // 调用推送服务 orderId + carVin
+ orderMissionClient.pushOrder(pushOrderDto);
} catch (Exception e) {
} finally {
--
Gitblit v1.7.1