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-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |  101 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 78 insertions(+), 23 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 5ccd271..0aa963b 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
@@ -25,6 +25,7 @@
 import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
 import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
 import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
+import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto;
 import com.xiaopeng.api.feignClient.account.UserResourcesClient;
 import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
 import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
@@ -46,8 +47,7 @@
 import com.xiaopeng.api.vo.OrderType;
 import com.xiaopeng.api.vo.account.UserCouponVo;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
-// import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
-import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperationType;
+import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
 import com.xiaopeng.api.vo.operation.RouteVo;
 import com.xiaopeng.api.vo.order.*;
 import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
@@ -95,6 +95,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -152,8 +153,10 @@
     private MongoTemplate mongoTemplate;
     @Autowired
     private HolidayUtil holidayUtil;
-//    @Autowired
-//    private XpPricingUtil xpPricingUtil;
+
+    @Value("${robotaxi.appId:xp_robotaxi_api}")
+    private String appid;
+
 
     @Override
     public OrderStatisticsDTO getOrderStatistics(StatisticsQueryDTO query) {
@@ -571,6 +574,27 @@
      * 取消订单
      */
     private void cancelOrder(XpOrder order) {
+        redisService.removeByPattern(order.getQueueName(),order.getOrderNumber());
+        //判断还原车辆状态
+        if(null == order.getVehicleId()){
+            Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString());
+            if(null != cacheObject1){
+                com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString());
+                String vin = jsonObject.getString("vin");
+                XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
+                if(null != vehicle && 0 != vehicle.getState()){
+                    vehicle.setState(0);
+                    xpVehicleClient.updateVehicleById(vehicle);
+                }
+            }
+        }
+
+        if (order.getStatus() == 1) {
+            order.setStatus(0);
+            order.setAppUserId(null);
+            baseMapper.updateById(order);
+            return;
+        }
         // 1. 更新订单状态为已取消(0)
         lambdaUpdate().set(XpOrder::getStatus, 0)
                 .eq(XpOrder::getId, order.getId()).update();
@@ -585,12 +609,32 @@
         //查询车辆信息
         R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getId());
         if (xpVehicleR.getCode() == HttpStatus.SUCCESS && Objects.nonNull(xpVehicleR.getData())) {
+            XpVehicle xpVehicle = xpVehicleR.getData();
+            // 组装调用车机参数
+            CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo();
+            cancelTaxiPassengerVo.setVin(xpVehicle.getVehicleVin());
+            cancelTaxiPassengerVo.setUid(order.getAppUserId().toString());
+            cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber());
+            // TODO 加配置文件取
+            cancelTaxiPassengerVo.setAppId(appid);
+
+            BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
+            if (baseVehicleUserDto == null) {
+                // TODO 本地无法调通
+//            throw new RuntimeException("取消订单失败");
+            }
+
+            //还原车辆状态
+            if(1 == xpVehicle.getState()){
+                xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0));
+            }
+
             // 下发命令
             if (order.getStatus() > 1) {
                 PushOrderDto pushOrderDto = new PushOrderDto();
                 pushOrderDto.setOrderId(order.getId().toString());
-                pushOrderDto.setVin(xpVehicleR.getData().getVehicleVin());
-                // pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER);
+                pushOrderDto.setVin(xpVehicle.getVehicleVin());
+                pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER);
                 orderMissionClient.cancelOrder(pushOrderDto);
             }
         } else {
@@ -676,7 +720,7 @@
                     PushOrderDto cancelDto = new PushOrderDto();
                     cancelDto.setOrderId(order.getId().toString());
                     cancelDto.setVin(oldVehicle.getVehicleVin());
-                    // cancelDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER);
+                    cancelDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER);
                     orderMissionClient.cancelOrder(cancelDto);
                     log.info("已取消原车辆订单指令,订单ID: {}, VIN: {}", orderId, oldVehicle.getVehicleVin());
 
@@ -686,7 +730,7 @@
                         cancelVo.setVin(oldVehicle.getVehicleVin());
                         cancelVo.setUid(order.getAppUserId().toString());
                         cancelVo.setOrderNo(order.getOrderNumber());
-                        cancelVo.setAppId("");
+                        cancelVo.setAppId(appid);
                         userVehicleClient.cancelTaxiPassenger(cancelVo);
                         log.info("已解绑乘客与原车辆关系,用户ID: {}, VIN: {}", order.getAppUserId(), oldVehicle.getVehicleVin());
                     }
@@ -768,7 +812,7 @@
                 addVo.setVin(newVehicle.getVehicleVin());
                 addVo.setUid(order.getAppUserId().toString());
                 addVo.setOrderNo(order.getOrderNumber());
-                addVo.setAppId(""); // TODO 获取appId
+                addVo.setAppId(appid); // TODO 获取appId
                 userVehicleClient.addTaxiPassenger(addVo);
                 log.info("已绑定乘客与新车辆关系,用户ID: {}, VIN: {}", order.getAppUserId(), newVehicle.getVehicleVin());
             }
@@ -1056,6 +1100,22 @@
         if (order.getStatus() > 5 || order.getStatus() < 1) {
             throw new ServiceException("订单状态错误", I18nKeyConstant.ORDER_STATUS_ERROR);
         }
+
+        redisService.removeByPattern(order.getQueueName(),order.getOrderNumber());
+        //判断还原车辆状态
+        if(null == order.getVehicleId()){
+            Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString());
+            if(null != cacheObject1){
+                com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString());
+                String vin = jsonObject.getString("vin");
+                XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
+                if(null != vehicle && 0 != vehicle.getState()){
+                    vehicle.setState(0);
+                    xpVehicleClient.updateVehicleById(vehicle);
+                }
+            }
+        }
+
         if (order.getStatus() == 1) {
             order.setStatus(0);
             order.setAppUserId(null);
@@ -1081,7 +1141,7 @@
         cancelTaxiPassengerVo.setUid(order.getAppUserId().toString());
         cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber());
         // TODO 加配置文件取
-        cancelTaxiPassengerVo.setAppId("");
+        cancelTaxiPassengerVo.setAppId(appid);
 
         BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
         if (baseVehicleUserDto == null) {
@@ -1096,16 +1156,9 @@
         xpOrderCancel.setCancelSource(1);
         xpOrderCancel.setCancelReason("用户取消订单");
         xpOrderCancelService.save(xpOrderCancel);
-        //判断还原车辆状态
-        Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString());
-        if(null != cacheObject1){
-            com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString());
-            String vin = jsonObject.getString("vin");
-            XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
-            if(null != vehicle && 0 != vehicle.getState()){
-                vehicle.setState(0);
-                xpVehicleClient.updateVehicleById(vehicle);
-            }
+        //还原车辆状态
+        if(1 == xpVehicle.getState()){
+            xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0));
         }
 
         // 设置当天的取消次数缓存
@@ -1140,7 +1193,7 @@
             PushOrderDto pushOrderDto = new PushOrderDto();
             pushOrderDto.setOrderId(order.getId().toString());
             pushOrderDto.setVin(xpVehicle.getVehicleVin());
-            // pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.VEHICLE_CANCEL_ORDER);
+            pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.VEHICLE_CANCEL_ORDER);
             orderMissionClient.cancelOrder(pushOrderDto);
         }
 
@@ -1163,6 +1216,8 @@
         xpOrderCancel.setCancelReason("系统取消订单");
         xpOrderCancel.setCreateTime(LocalDateTime.now());
         xpOrderCancelService.save(xpOrderCancel);
+
+        redisService.removeByPattern(order.getQueueName(),order.getOrderNumber());
 
 
         R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getVehicleId());
@@ -1327,7 +1382,7 @@
             cancelTaxiPassengerVo.setUid(uid);
             cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber());
             // TODO 加配置文件取
-            cancelTaxiPassengerVo.setAppId("");
+            cancelTaxiPassengerVo.setAppId(appid);
             userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
 
             // 修改车辆接单状态
@@ -2234,7 +2289,7 @@
                 this.updateById(order);
                 addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
                 // TODO appid
-                addTaxiPassengerVo.setAppId("");
+                addTaxiPassengerVo.setAppId(appid);
                 userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                 //推送乘客车辆到达预约点的导航数据
                 sendRoute(addTaxiPassengerVo.getUid(), orderId, "ORDER_NAVIGATION_START_DATA", dto.getXpVehicleVin());

--
Gitblit v1.7.1