From eb290fd6e70b6523ea0889936dba4d9f2d5c4b53 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期二, 10 三月 2026 18:58:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 709 ++++++++++++++++++++++++++++++-----------------------------
1 files changed, 361 insertions(+), 348 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 573d269..5000456 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
@@ -253,6 +253,9 @@
return true;
}
XpOrder xpOrder = xpOrderR.getData();
+ if (xpOrder.getStatus() == 0) {
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
// 找出围栏id
Long xpElectronicFenceAreaId = xpOrder.getXpElectronicFenceAreaId();
@@ -262,7 +265,6 @@
for (int i = 0; i < count; i++) {
//等到sleepTime秒钟
Thread.sleep(sleepTime * 1000);
-// log.info("进入找车环节 单号 {} 第{}轮", orderNo, count++);
// 根据距离找车
// 车多则根据配置找具体车数量 根据距离最近
// 更改 暂不限制数量
@@ -272,7 +274,7 @@
if (positionList.isEmpty()) {
continue;
}
- List<String> vinList = positionList.stream().map(VehiclePosition::getVin).collect(Collectors.toList());
+ Set<String> vinList = positionList.stream().map(VehiclePosition::getVin).collect(Collectors.toSet());
// 获取车辆的信息 筛选出可用车辆
R<List<String>> vehiclePositionVos = xpVehicleClient.queryVehiclePositionByVin(new VehiclePositionByVinDto(xpElectronicFence.getId(), vinList, xpTradingStrategy.getSimultaneouslyOrderCount()));
@@ -302,253 +304,77 @@
// 时间价值
Integer tendencyTime = xpTradingStrategy.getTendencyTime();
+ try {
- // 电量价值
- Integer tendencyElectricity = xpTradingStrategy.getTendencyElectricity();
- // 找出最大的值是那个
- Integer max = Math.max(tendencyOrderValue, Math.max(tendencyDistance, Math.max(tendencyTime, tendencyElectricity)));
- if (max.equals(tendencyOrderValue)) {
- // 订单价值
- // 时间差权重
- Integer weightTimeDifference = xpTradingStrategy.getWeightTimeDifference();
- // 距离差权重
- Integer weightDistanceDifference = xpTradingStrategy.getWeightDistanceDifference();
- // 距离权重
- Integer weightDistance = xpTradingStrategy.getWeightDistance();
- // 时间权重
- Integer weightTime = xpTradingStrategy.getWeightTime();
- // 电量权重
- Integer weightElectricity = xpTradingStrategy.getWeightElectricity();
-
+ // 电量价值
+ Integer tendencyElectricity = xpTradingStrategy.getTendencyElectricity();
// 找出最大的值是那个
- Integer max1 = Math.max(weightTimeDifference, Math.max(weightDistanceDifference, Math.max(weightDistance, Math.max(weightTime, weightElectricity))));
+ Integer max = Math.max(tendencyOrderValue, Math.max(tendencyDistance, Math.max(tendencyTime, tendencyElectricity)));
+ if (max.equals(tendencyOrderValue)) {
+ // 订单价值
+ // 时间差权重
+ Integer weightTimeDifference = xpTradingStrategy.getWeightTimeDifference();
+ // 距离差权重
+ Integer weightDistanceDifference = xpTradingStrategy.getWeightDistanceDifference();
+ // 距离权重
+ Integer weightDistance = xpTradingStrategy.getWeightDistance();
+ // 时间权重
+ Integer weightTime = xpTradingStrategy.getWeightTime();
+ // 电量权重
+ Integer weightElectricity = xpTradingStrategy.getWeightElectricity();
- // 时间差
- 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);
- }
- }
- }
+ // 找出最大的值是那个
+ Integer max1 = Math.max(weightTimeDifference, Math.max(weightDistanceDifference, Math.max(weightDistance, Math.max(weightTime, weightElectricity))));
- 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(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);
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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(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(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);
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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(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 size = tendencyElectricity;
- // 做比对的分数
- int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
- for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
- if (temp != vehiclePosition.getCurrentElectricity()) {
- size--;
- }
- }
- }
-
-
- // 算出总分 再来排序计算
- 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 size = tendencyOrderValue;
- // 做比对的分数
- double temp = availableVehiclesNearby.get(0).getOrderValueTotal();
- for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setValueScore(vehiclePosition.getValueScore() + size);
- if (temp != vehiclePosition.getOrderValueTotal()) {
- size--;
- }
- }
-
-
- }
-
- // 距离分数
- if (max.equals(tendencyDistance)) {
- 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);
- }
- }
- availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
- int size = tendencyDistance;
- // 做比对的分数
- double temp = availableVehiclesNearby.get(0).getDistance();
- for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size);
- if (temp != vehiclePosition.getDistance()) {
- size--;
- }
- }
- }
-
-
- // 时间分数
- if (max.equals(tendencyTime)) {
- 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);
- }
- }
- availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
- int size = tendencyTime;
- // 做比对的分数
- double temp = availableVehiclesNearby.get(0).getSecond();
- for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size);
- if (temp != vehiclePosition.getSecond()) {
- size--;
- }
- }
-
- }
-
-
- // 电量分数
- if (max.equals(tendencyElectricity)) {
- // 计算车的分数 分数最大是车的size
- availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
- int size = tendencyElectricity;
- // 做比对的分数
- int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
-
- int maxTemp = 0;
- for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
- if (temp != vehiclePosition.getCurrentElectricity()) {
- size--;
- } else {
- maxTemp++;
- }
- }
-
- if (maxTemp > 1) {
- // 证明有最高相同电量的 找下一个
- // 找出最第二大的值是那个
- // 将四个值放入列表
- List<Integer> values = Arrays.asList(tendencyOrderValue, tendencyDistance, tendencyTime);
- // 降序排序
- values.sort(Collections.reverseOrder());
- // 获取第二大值
- Integer secondMax = values.get(1);
-
- // 判断第二大的是哪个
- if (Objects.equals(secondMax, tendencyDistance)) {
+ if (max1.equals(weightDistance)) {
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
LonLatDto lonLatDto = new LonLatDto();
@@ -558,8 +384,9 @@
LonLatDto lonLatDto1 = new LonLatDto();
lonLatDto1.setLongitude(Double.parseDouble(split[0]));
lonLatDto1.setLatitude(Double.parseDouble(split[1]));
-
- routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ if(planRule!=null&& !"null".equals(planRule)){
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ }
routeAndFareDto.setDestination(lonLatDto1);
// 调用地图 获取时间
R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
@@ -569,20 +396,9 @@
vehiclePosition.setDistance(0.0);
}
}
- availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
- int size1 = tendencyDistance;
- // 做比对的分数
- double temp1 = availableVehiclesNearby.get(0).getDistance();
- for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size1);
- if (temp1 != vehiclePosition.getDistance()) {
- size1--;
- }
- }
}
-
- if (Objects.equals(secondMax, tendencyTime)) {
+ if (max1.equals(weightTime)) {
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
LonLatDto lonLatDto = new LonLatDto();
@@ -592,8 +408,9 @@
LonLatDto lonLatDto1 = new LonLatDto();
lonLatDto1.setLongitude(Double.parseDouble(split[0]));
lonLatDto1.setLatitude(Double.parseDouble(split[1]));
-
- routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ if(planRule!=null&& !"null".equals(planRule)){
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ }
routeAndFareDto.setDestination(lonLatDto1);
// 调用地图 获取时间
R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
@@ -603,81 +420,148 @@
vehiclePosition.setSecond(0);
}
}
- availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
- int size1 = tendencyTime;
+ }
+
+ if (max1.equals(weightElectricity)) {
+ // 计算车的分数 分数最大是车的size
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
+ int size = tendencyElectricity;
// 做比对的分数
- double temp1 = availableVehiclesNearby.get(0).getSecond();
+ int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size1);
- if (temp1 != vehiclePosition.getSecond()) {
- size1--;
+ vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
+ if (temp != vehiclePosition.getCurrentElectricity()) {
+ size--;
}
}
}
- // 订单价值
- 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();
+ // 算出总分 再来排序计算
+ for (VehiclePositionVo vehiclePositionVo : availableVehiclesNearby) {
+ vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference() + vehiclePositionVo.getTimeDifference()+vehiclePositionVo.getSecond()+vehiclePositionVo.getDistance().intValue());
+ }
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList());
- // 找出最大的值是那个
- 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);
- }
- }
+ int size = tendencyOrderValue;
+ // 做比对的分数
+ double temp = availableVehiclesNearby.get(0).getOrderValueTotal();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setValueScore(vehiclePosition.getValueScore() + size);
+ if (temp != vehiclePosition.getOrderValueTotal()) {
+ size--;
}
+ }
- 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 (max.equals(tendencyDistance)) {
+ 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]));
+
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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);
+ }
+ }
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
+ int size = tendencyDistance;
+ // 做比对的分数
+ double temp = availableVehiclesNearby.get(0).getDistance();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size);
+ if (temp != vehiclePosition.getDistance()) {
+ size--;
+ }
+ }
+ }
- if (max1.equals(weightDistance)) {
+
+ // 时间分数
+ if (max.equals(tendencyTime)) {
+ 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]));
+
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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);
+ }
+ }
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
+ int size = tendencyTime;
+ // 做比对的分数
+ double temp = availableVehiclesNearby.get(0).getSecond();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size);
+ if (temp != vehiclePosition.getSecond()) {
+ size--;
+ }
+ }
+
+ }
+
+
+ // 电量分数
+ if (max.equals(tendencyElectricity)) {
+ // 计算车的分数 分数最大是车的size
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
+ int size = tendencyElectricity;
+ // 做比对的分数
+ int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
+
+ int maxTemp = 0;
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
+ if (temp != vehiclePosition.getCurrentElectricity()) {
+ size--;
+ } else {
+ maxTemp++;
+ }
+ }
+
+ if (maxTemp > 1) {
+ // 证明有最高相同电量的 找下一个
+ // 找出最第二大的值是那个
+ // 将四个值放入列表
+ List<Integer> values = Arrays.asList(tendencyOrderValue, tendencyDistance, tendencyTime);
+ // 降序排序
+ values.sort(Collections.reverseOrder());
+ // 获取第二大值
+ Integer secondMax = values.get(1);
+
+ // 判断第二大的是哪个
+ if (Objects.equals(secondMax, tendencyDistance)) {
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
LonLatDto lonLatDto = new LonLatDto();
@@ -687,8 +571,9 @@
LonLatDto lonLatDto1 = new LonLatDto();
lonLatDto1.setLongitude(Double.parseDouble(split[0]));
lonLatDto1.setLatitude(Double.parseDouble(split[1]));
-
- routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ if(planRule!=null&& !"null".equals(planRule)){
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ }
routeAndFareDto.setDestination(lonLatDto1);
// 调用地图 获取时间
R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
@@ -698,9 +583,20 @@
vehiclePosition.setDistance(0.0);
}
}
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
+ int size1 = tendencyDistance;
+ // 做比对的分数
+ double temp1 = availableVehiclesNearby.get(0).getDistance();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size1);
+ if (temp1 != vehiclePosition.getDistance()) {
+ size1--;
+ }
+ }
}
- if (max1.equals(weightTime)) {
+
+ if (Objects.equals(secondMax, tendencyTime)) {
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
LonLatDto lonLatDto = new LonLatDto();
@@ -711,7 +607,9 @@
lonLatDto1.setLongitude(Double.parseDouble(split[0]));
lonLatDto1.setLatitude(Double.parseDouble(split[1]));
- routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ if(planRule!=null&& !"null".equals(planRule)){
+ routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
+ }
routeAndFareDto.setDestination(lonLatDto1);
// 调用地图 获取时间
R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
@@ -721,26 +619,150 @@
vehiclePosition.setSecond(0);
}
}
- }
-
- if (max1.equals(weightElectricity)) {
- // 计算车的分数 分数最大是车的size
- availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
- int size1 = tendencyElectricity;
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
+ int size1 = tendencyTime;
// 做比对的分数
- int temp1 = availableVehiclesNearby.get(0).getCurrentElectricity();
+ double temp1 = availableVehiclesNearby.get(0).getSecond();
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size1);
- if (temp1 != vehiclePosition.getCurrentElectricity()) {
+ vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size1);
+ if (temp1 != vehiclePosition.getSecond()) {
size1--;
}
}
}
+ // 订单价值
+ 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);
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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);
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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]));
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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]));
+ if(planRule!=null&& !"null".equals(planRule)){
+ 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());
+ vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference() + vehiclePositionVo.getTimeDifference()+vehiclePositionVo.getSecond()+vehiclePositionVo.getDistance().intValue());
}
availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList());
@@ -759,6 +781,8 @@
}
+ } catch (Exception e) {
+ log.error("异常", e);
}
// 判断总分来计算
@@ -783,12 +807,12 @@
XpVehicle vehiclePosition = vehiclePositionR.getData();
log.info("符合条件的车辆 {} ,直接推单XPU。单号 {}", vehiclePosition.getPlateNumber(), orderNo);
log.info("当前车辆状态 {} 单号 {}", vehiclePosition.getStatus(), orderNo);
- if (vehiclePosition.getStatus() != 1 || vehiclePosition.getState() != 0 || vehiclePosition.getVehicleType()==1) {
+ if (vehiclePosition.getOperatingStatus() != 1 || vehiclePosition.getState() != 0 || vehiclePosition.getVehicleType() == 1) {
continue;
}
// 关闭巡游单子
R<String> stringR = xpCruiseOrderClient.updateCruiseOrder(vehiclePosition.getVehicleVin());
- if(stringR ==null || stringR.getCode() != 200){
+ if (stringR == null || stringR.getCode() != 200) {
log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber());
continue;
}
@@ -807,7 +831,7 @@
orderMissionClient.pushOrder(pushOrderDto);
log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
- redisService.popFirstElement(quoteName);
+ redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
return true;
} catch (Exception e) {
@@ -818,7 +842,7 @@
} else {
// 直接派单 定义一个锁来锁定车辆
- VehiclePosition vehiclePosition = positionList.get(0);
+ VehiclePositionVo vehiclePosition = availableVehiclesNearby.get(0);
String vehicleVin = vehiclePosition.getVin();
RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePosition.getVin());
@@ -832,12 +856,12 @@
XpVehicle vehicleId1 = vehicleR.getData();
log.info("附近只有一个车辆 {} ,直接推单XPU。单号 {}", vehicleId1.getPlateNumber(), orderNo);
log.info("当前车辆状态 {} 运营状态 {} 单号 {}", vehicleId1.getOperatingStatus(), vehicleId1.getState(), orderNo);
- if (vehicleId1.getOperatingStatus() != 1 || vehicleId1.getState() != 0 || vehicleId1.getVehicleType()==1) {
+ if (vehicleId1.getOperatingStatus() != 1 || vehicleId1.getState() != 0 || vehicleId1.getVehicleType() == 1) {
continue;
}
// 关闭巡游单子
R<String> stringR = xpCruiseOrderClient.updateCruiseOrder(vehicleId1.getVehicleVin());
- if(stringR ==null || stringR.getCode() != 200){
+ if (stringR == null || stringR.getCode() != 200) {
log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber());
continue;
}
@@ -856,17 +880,6 @@
log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
redisService.popFirstElement(quoteName);
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
- //判断还原车辆状态
- Object cacheObject = redisService.getCacheObject("CREATE_ORDER:" + xpOrder.getId().toString());
- if(null != cacheObject){
- JSONObject jsonObject = JSON.parseObject(cacheObject.toString());
- String vin = jsonObject.getString("vin");
- XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
- if(null != vehicle && 0 != vehicle.getState()){
- vehicle.setState(0);
- xpVehicleClient.updateVehicleById(vehicle);
- }
- }
return true;
} catch (Exception e) {
e.printStackTrace();
@@ -932,7 +945,7 @@
}
// 关闭巡游单子
R<String> stringR = xpCruiseOrderClient.updateCruiseOrder(vehicleId1.getVehicleVin());
- if(stringR ==null || stringR.getData()==null){
+ if (stringR == null || stringR.getData() == null) {
log.info("关闭巡游单子失败");
continue;
}
--
Gitblit v1.7.1