From 103726c48a510af9fcdd8d7e88d8c5fd5fef0cc9 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期一, 02 三月 2026 19:09:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 258 ++++++++++++++++++++++++++++++++++-----------------
1 files changed, 172 insertions(+), 86 deletions(-)
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index dcd2236..cf6930e 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -41,10 +41,7 @@
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.XpAppUser;
import com.xiaopeng.api.model.maintenance.XpTaskRule;
-import com.xiaopeng.api.model.operation.XpFeedbackType;
-import com.xiaopeng.api.model.operation.XpGeoQueryEntity;
-import com.xiaopeng.api.model.operation.XpPoint;
-import com.xiaopeng.api.model.operation.XpPricing;
+import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.model.order.*;
import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
@@ -1469,92 +1466,173 @@
// 修改车辆状态
vehicle.setState(0);
- // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
- R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
- XpTaskRule xpTaskRule = xpTaskRuleR.getData();
- // 生成新的巡游单子 回到最新巡游的初始起点位置
- XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
- int temp=0;
- if(xpCruiseOrders==null){
- temp=1;
- //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单
- xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
- }
- XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
- xpCruiseOrder.setVehicleId(vehicle.getId());
- xpCruiseOrder.setFleetId(vehicle.getFleetId());
- xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin());
- xpCruiseOrder.setOrderType(2);
- // 返程起点是当前正常订单的终点
- xpCruiseOrder.setStartPointId(order.getEndPointId());
- xpCruiseOrder.setStartPointName(order.getEndPointName());
- xpCruiseOrder.setStartLon(order.getEndLon());
- xpCruiseOrder.setStartLat(order.getEndLat());
-
- // 完成的直接走终点 终止的走起点
- if(temp==0){
- xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
- xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
- xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
- xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
- }else {
- xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
- xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
- xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon());
- xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat());
- }
-
-
- xpCruiseOrder.setStatus(1);
- xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
- xpCruiseOrder.setCreateTime(LocalDateTime.now());
- xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
-
- // 判断当前时分秒是否大于收车时间
- LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
- if (vehicleCollectionTime.isBefore(LocalTime.now())) {
- vehicle.setOperatingStatus(3);
- //找到车辆的收车点位 更新终点点位
- R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
- xpCruiseOrder = returnCruisePoint.getData();
- }
- xpVehicleClient.updateVehicleById(vehicle);
-
- xpCruiseOrderMapper.insert(xpCruiseOrder);
-
-
- R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId());
- XpPoint data = xpPointR.getData();
- //下发命令
- // 添加自动结束行程定时任务job
- Map<String, ? extends Object> jobMaps =
- new ImmutableMap.Builder<String, String>().
- put("id", xpCruiseOrder.getId())
- .build();
- QuartzManager.addJob(
- AddCruiseMissionJob.class,
- (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(),
- TimeJobType.ADD_CRUISE_MISSION,
- DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())),
- jobMaps
- );
+ addCruiseMission(vehicle,order);
+// // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
+// R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
+// XpTaskRule xpTaskRule = xpTaskRuleR.getData();
+//
+// // 生成新的巡游单子 回到最新巡游的初始起点位置
+// XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+// int temp=0;
+// if(xpCruiseOrders==null){
+// temp=1;
+// //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单
+// xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+// }
+// XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
+// xpCruiseOrder.setVehicleId(vehicle.getId());
+// xpCruiseOrder.setFleetId(vehicle.getFleetId());
+// xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin());
+// xpCruiseOrder.setOrderType(2);
+// // 返程起点是当前正常订单的终点
+// xpCruiseOrder.setStartPointId(order.getEndPointId());
+// xpCruiseOrder.setStartPointName(order.getEndPointName());
+// xpCruiseOrder.setStartLon(order.getEndLon());
+// xpCruiseOrder.setStartLat(order.getEndLat());
+//
+// // 完成的直接走终点 终止的走起点
+// if(temp==0){
+// xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
+// xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
+// xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
+// xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
+// }else {
+// xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
+// xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
+// xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon());
+// xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat());
+// }
+//
+//
+// xpCruiseOrder.setStatus(0);
+// xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
+// xpCruiseOrder.setCreateTime(LocalDateTime.now());
+// xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
+//
+// // 判断当前时分秒是否大于收车时间
+// LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
+// if (vehicleCollectionTime.isBefore(LocalTime.now())) {
+// vehicle.setOperatingStatus(3);
+// //找到车辆的收车点位 更新终点点位
+// R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
+// xpCruiseOrder = returnCruisePoint.getData();
+// }
+// xpVehicleClient.updateVehicleById(vehicle);
+//
+// xpCruiseOrderMapper.insert(xpCruiseOrder);
+//
+//
+// R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId());
+// XpPoint data = xpPointR.getData();
+// //下发命令
+// // 添加自动结束行程定时任务job
+// Map<String, ? extends Object> jobMaps =
+// new ImmutableMap.Builder<String, String>().
+// put("id", xpCruiseOrder.getId())
+// .build();
+// QuartzManager.addJob(
+// AddCruiseMissionJob.class,
+// (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(),
+// TimeJobType.ADD_CRUISE_MISSION,
+// DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())),
+// jobMaps
+// );
}
-
-
-
-
-
-
-
-
-
-
-
}
+
+ /**
+ * 添加巡游任务下发命令
+ * @param vehicle
+ * @param order
+ */
+
+ public void addCruiseMission(XpVehicle vehicle, XpOrder order) {
+
+ if(vehicle.getState()!=0 || vehicle.getOperatingStatus()!=1){
+ return;
+ }
+
+ // 判断是否有计划
+ R<XpCruisePlanVehicle> xpCruisePlanR = xpCruisePlanClient.getCruisePlan(vehicle.getId());
+ if(xpCruisePlanR==null || xpCruisePlanR.getData()==null){
+ return;
+ }
+
+ // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
+ R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
+ XpTaskRule xpTaskRule = xpTaskRuleR.getData();
+
+ // 生成新的巡游单子 回到最新巡游的初始起点位置
+ XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+ int temp=0;
+ if(xpCruiseOrders==null){
+ temp=1;
+ //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单
+ xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+ }
+ XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
+ xpCruiseOrder.setVehicleId(vehicle.getId());
+ xpCruiseOrder.setFleetId(vehicle.getFleetId());
+ xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin());
+ xpCruiseOrder.setOrderType(2);
+ // 返程起点是当前正常订单的终点
+ xpCruiseOrder.setStartPointId(order.getEndPointId());
+ xpCruiseOrder.setStartPointName(order.getEndPointName());
+ xpCruiseOrder.setStartLon(order.getEndLon());
+ xpCruiseOrder.setStartLat(order.getEndLat());
+
+ // 完成的直接走终点 终止的走起点
+ if(temp==0){
+ xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
+ xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
+ xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
+ xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
+ }else {
+ xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
+ xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
+ xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon());
+ xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat());
+ }
+
+
+ xpCruiseOrder.setStatus(0);
+ xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
+ xpCruiseOrder.setCreateTime(LocalDateTime.now());
+ xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
+
+ // 判断当前时分秒是否大于收车时间
+ LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
+ if (vehicleCollectionTime.isBefore(LocalTime.now())) {
+ vehicle.setOperatingStatus(3);
+ //找到车辆的收车点位 更新终点点位
+ R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
+ xpCruiseOrder = returnCruisePoint.getData();
+ }
+ xpVehicleClient.updateVehicleById(vehicle);
+
+ xpCruiseOrderMapper.insert(xpCruiseOrder);
+
+
+ R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId());
+ XpPoint data = xpPointR.getData();
+ //下发命令
+ // 添加自动结束行程定时任务job
+ Map<String, ? extends Object> jobMaps =
+ new ImmutableMap.Builder<String, String>().
+ put("id", xpCruiseOrder.getId())
+ .build();
+ QuartzManager.addJob(
+ AddCruiseMissionJob.class,
+ (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(),
+ TimeJobType.ADD_CRUISE_MISSION,
+ DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())),
+ jobMaps
+ );
+ }
private MileageDto mileageType(MileageDto param, JSONArray startingFareJsonArray, Date mileageDate, LocalDateTime begin, String num14, String num16, String num17, String num21, String num22, String num24, String num25, String num30, String num31) {
// 计算出是在哪个普通时间段内
@@ -1978,8 +2056,11 @@
Long orderId = dto.getOrderId();
//巡游单处理逻辑
if(OrderType.CRUISE_ORDER.equals(orderType)){
- // todo 需要处理巡游的逻辑
-
+ XpCruiseOrder xpCruiseOrder = xpCruiseOrderMapper.selectById(orderId);
+ if(xpCruiseOrder!=null){
+ xpCruiseOrder.setStatus(1);
+ xpCruiseOrderMapper.updateById(xpCruiseOrder);
+ }
}
@@ -2114,6 +2195,11 @@
}
+ if(xpOrder.getVehicleId()!=null){
+ R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
+ xpOrderDetailVO.setPlateNumber(xpVehicleR.getData().getPlateNumber());
+ }
+
return xpOrderDetailVO;
}
}
--
Gitblit v1.7.1