From 21139cec92c837fe26f22ccd0855120ac866ceea Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 12 二月 2026 14:42:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 405 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 350 insertions(+), 55 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 6d6f575..7053f03 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
@@ -1,32 +1,38 @@
package com.xiaopeng.operation.utils;
import cn.hutool.core.bean.BeanUtil;
+import com.xiaopeng.api.dto.map.RouteAndFareDto;
+import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
+import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
import com.xiaopeng.api.model.operation.XpTradingStrategy;
+import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
+import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.common.core.constant.CacheConstants;
+import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.operation.service.IXpElectronicFenceAreaService;
import com.xiaopeng.operation.service.IXpTradingStrategyService;
import com.xiaopeng.operation.service.XpPointService;
import com.xiaopeng.operation.utils.mango.VehiclePositionService;
import com.xiaopeng.operation.utils.map.FastDistanceCalculator;
+import com.xiaopeng.operation.vo.RouterVo;
import com.xiaopeng.operation.vo.VehiclePositionVo;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -49,7 +55,6 @@
@Autowired
private VehiclePositionService vehiclePositionService;
-
@Autowired
private IXpTradingStrategyService xpTradingStrategyService;
@@ -59,6 +64,8 @@
@Autowired
private RedissonClient redissonClient;
+ @Autowired
+ private XpMapClient xpMapClient;
// 自定义线程池
@@ -108,6 +115,13 @@
String lonLat = firstElement.split("_")[1];
String uid = firstElement.split("_")[3];
String orderNo = firstElement.split("_")[4];
+ // 距离
+ String distance = firstElement.split("_")[5];
+ // 时间
+ String duration = firstElement.split("_")[6];
+ // 后台配置的规则
+ String planRule = firstElement.split("_")[7];
+
// 经纬度
String[] split = lonLat.split(",");
@@ -116,7 +130,7 @@
Integer onePushTime = xpTradingStrategy.getOnePushTime();
int count = onePushTime / 3;
// 第一轮推单
- processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
+ processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
//
// for (int i = 0; i < count; i++) {
@@ -158,24 +172,22 @@
// 第二轮推单
Integer twoPushTime = xpTradingStrategy.getTwoPushTime();
count = twoPushTime / 3;
- processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
-
+ processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
// 第三轮推单
Integer threePushTime = xpTradingStrategy.getThreePushTime();
count = threePushTime / 3;
- processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
+ processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
// 第四轮推单
Integer fourPushTime = xpTradingStrategy.getFourPushTime();
count = fourPushTime / 3;
- processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
-
+ processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
// 第五轮推单
Integer fivePushTime = xpTradingStrategy.getFivePushTime();
count = fivePushTime / 3;
- processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
+ processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
// 最终没找到车
redisService.popFirstElement(quoteName);
@@ -194,13 +206,21 @@
* @param orderNo 订单号
* @param xpTradingStrategy 规则
*/
- private void processOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy) {
+ private void processOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) {
+ // 订单状态
+ R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
+ if (xpOrderR.getCode() != 200) {
+ return;
+ }
+ if (xpOrderR.getData().getStatus() != 1) {
+ return;
+ }
+
for (int i = 0; i < count; i++) {
// 根据距离找车
// 车多则根据配置找具体车数量 根据距离最近
List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(Double.parseDouble(split[0]), Double.parseDouble(split[1]), xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class);
-
if (!availableVehiclesNearby.isEmpty()) {
if (availableVehiclesNearby.size() > 1) {
@@ -216,45 +236,215 @@
Integer tendencyTime = xpTradingStrategy.getTendencyTime();
-
-
// 电量价值
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 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 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) {
- double v = FastDistanceCalculator.distanceFast(Double.parseDouble(split[1]), Double.parseDouble(split[0]), vehiclePosition.getPoint().getY(), vehiclePosition.getPoint().getX());
- vehiclePosition.setDistance(v);
+ 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);
+ }
}
- List<VehiclePositionVo> positionVoList = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
int size = tendencyDistance;
// 做比对的分数
- double temp=positionVoList.get(0).getDistance();
- for (VehiclePositionVo vehiclePosition : positionVoList) {
+ double temp = availableVehiclesNearby.get(0).getDistance();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size);
- if(temp!=vehiclePosition.getDistance()){
+ if (temp != vehiclePosition.getDistance()) {
size--;
}
}
}
+
+ // 时间分数
if (max.equals(tendencyTime)) {
for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
- // TODO 调用地图 获取时间
- vehiclePosition.setSecond(1);
+ 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);
+ }
}
- List<VehiclePositionVo> positionVoList = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
int size = tendencyTime;
// 做比对的分数
- double temp=positionVoList.get(0).getSecond();
- for (VehiclePositionVo vehiclePosition : positionVoList) {
+ double temp = availableVehiclesNearby.get(0).getSecond();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size);
- if(temp!=vehiclePosition.getSecond()){
+ if (temp != vehiclePosition.getSecond()) {
size--;
}
}
@@ -262,18 +452,111 @@
}
+ // 电量分数
if (max.equals(tendencyElectricity)) {
// 计算车的分数 分数最大是车的size
- List<VehiclePositionVo> list = availableVehiclesNearby.stream().peek(e -> e.setCurrentElectricity(0)).sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
+ availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
int size = tendencyElectricity;
// 做比对的分数
- int temp=list.get(0).getCurrentElectricity();
- for (VehiclePositionVo vehiclePosition : list) {
+ int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
+
+ int maxTemp = 0;
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
- if(temp!=vehiclePosition.getCurrentElectricity()){
+ 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();
+ 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 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)){
+ 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 size1 = tendencyTime;
+ // 做比对的分数
+ double temp1 = availableVehiclesNearby.get(0).getSecond();
+ for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
+ vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size1);
+ if (temp1 != vehiclePosition.getSecond()) {
+ size1--;
+ }
+ }
+ }
+
+
+ // 订单价值
+ if(Objects.equals(secondMax, tendencyOrderValue)){
+
+
+ }
+ }
+
+
}
// 判断总分来计算
@@ -282,13 +565,12 @@
}
VehiclePositionVo vehiclePositionVo = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getTotal).reversed()).collect(Collectors.toList()).get(0);
- // TODO 找到这个车锁车
- VehiclePositionVo vehiclePositionVo1 =vehiclePositionVo;
- RLock lock = redissonClient.getLock("FIND_CAR_"+vehiclePositionVo1.getVin());
+ VehiclePositionVo vehiclePositionVo1 = vehiclePositionVo;
+ RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo1.getVin());
lock.lock(10, TimeUnit.SECONDS);
try {
- VehiclePosition vehiclePosition= vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
+ VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
if (vehiclePosition.getStatus() != 1 || vehiclePosition.getState() != 0) {
lock.unlock();
continue;
@@ -304,12 +586,13 @@
addTaxiPassengerVo.setAppId("");
BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
if (baseVehicleUserDto.getCode() == 200) {
+ // 绑定成功 弹出这个队列第一个订单
redisService.popFirstElement(quoteName);
return;
}
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
- }finally {
+ } finally {
lock.unlock();
}
@@ -317,25 +600,37 @@
// 直接派单 定义一个锁来锁定车辆
VehiclePosition vehiclePosition = positionList.get(0);
Long vehicleId = vehiclePosition.getVehicle_id();
- // 查询车辆状态
- VehiclePosition vehicleId1 = vehiclePositionService.findByVehicleId(vehicleId);
- if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) {
- continue;
+
+ RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePosition.getVin());
+ lock.lock(10, TimeUnit.SECONDS);
+ try {
+ // 查询车辆状态
+ VehiclePosition vehicleId1 = vehiclePositionService.findByVehicleId(vehicleId);
+ 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) {
+ redisService.popFirstElement(quoteName);
+ lock.unlock();
+ return;
+ }
+ } catch (Exception e) {
+
+ } finally {
+ lock.unlock();
}
- 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) {
- redisService.popFirstElement(quoteName);
- return;
- }
+
}
}
}
--
Gitblit v1.7.1