From 201ad1316d0797395c59fafcb1fdf69dd044001b Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 10 三月 2026 11:20:25 +0800
Subject: [PATCH] 修改bug
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 710 ++++++++++++++++++++++++++++++----------------------------
1 files changed, 366 insertions(+), 344 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 7802084..a5b1616 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
@@ -160,7 +160,7 @@
// 第一轮推单
log.info("开始第一轮推单 {}", orderNo);
Boolean processed = processPushOrder(quoteName, count, sleepTime, uid, split, orderNo, xpTradingStrategy, onePushDistance, distance, duration, planRule);
- if(processed){
+ if (processed) {
log.info("订单推送成功 {}", orderNo);
return;
}
@@ -170,7 +170,7 @@
count = twoPushTime / sleepTime;
log.info("开始第二轮推单 {}", orderNo);
processed = processPushOrder(quoteName, count, sleepTime, uid, split, orderNo, xpTradingStrategy, twoPushDistance, distance, duration, planRule);
- if(processed){
+ if (processed) {
log.info("订单推送成功 {}", orderNo);
return;
}
@@ -181,7 +181,7 @@
count = threePushTime / sleepTime;
log.info("开始第三轮推单 {}", orderNo);
processed = processPushOrder(quoteName, count, sleepTime, uid, split, orderNo, xpTradingStrategy, threePushDistance, distance, duration, planRule);
- if(processed){
+ if (processed) {
log.info("订单推送成功 {}", orderNo);
return;
}
@@ -192,7 +192,7 @@
count = fourPushTime / sleepTime;
log.info("开始第四轮推单 {}", orderNo);
processed = processPushOrder(quoteName, count, sleepTime, uid, split, orderNo, xpTradingStrategy, fourPushDistance, distance, duration, planRule);
- if(processed){
+ if (processed) {
log.info("订单推送成功 {}", orderNo);
return;
}
@@ -203,7 +203,7 @@
count = fivePushTime / sleepTime;
log.info("开始第五轮推单 {}", orderNo);
processed = processPushOrder(quoteName, count, sleepTime, uid, split, orderNo, xpTradingStrategy, fivePushDistance, distance, duration, planRule);
- if(processed){
+ if (processed) {
log.info("订单推送成功 {}", orderNo);
return;
}
@@ -222,7 +222,7 @@
xpPushMessageClient.sendStatus(dto);
//将订单从队列中移除
log.info("五轮推单结束,无车辆接单,执行队列移除订单 {}", orderNo);
- redisService.popFirstElement(quoteName);
+ redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
}
}
@@ -253,8 +253,8 @@
return true;
}
XpOrder xpOrder = xpOrderR.getData();
- if(xpOrder.getStatus()==0){
- redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+ if (xpOrder.getStatus() == 0) {
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
}
// 找出围栏id
@@ -305,253 +305,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();
@@ -561,8 +385,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);
@@ -572,20 +397,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();
@@ -595,8 +409,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);
@@ -606,81 +421,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();
@@ -690,8 +572,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);
@@ -701,9 +584,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();
@@ -714,7 +608,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);
@@ -724,26 +620,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());
@@ -762,6 +782,8 @@
}
+ } catch (Exception e) {
+ log.error("异常", e);
}
// 判断总分来计算
@@ -786,12 +808,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;
}
@@ -810,7 +832,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) {
@@ -835,12 +857,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;
}
@@ -861,11 +883,11 @@
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
//判断还原车辆状态
Object cacheObject = redisService.getCacheObject("CREATE_ORDER:" + xpOrder.getId().toString());
- if(null != cacheObject){
+ 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()){
+ if (null != vehicle && 0 != vehicle.getState()) {
vehicle.setState(0);
xpVehicleClient.updateVehicleById(vehicle);
}
@@ -935,7 +957,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