From 340be7dbd2c93b67d8133170deb73aecfdd3f88d Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 15 四月 2026 17:50:15 +0800
Subject: [PATCH] 1.车辆接驾中异常处理,改派重新优化 并记录改派数据 2.行驶中,车辆故障异常处理,添加订单故障状态字段, 并将支付方法的里判断 故障单 支付金额=0

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java |   56 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 31 insertions(+), 25 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 0cf6e26..68b9462 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
@@ -2,7 +2,6 @@
 
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson2.JSON;
-import com.xiaopeng.api.dto.account.UseUserCouponDto;
 import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
 import com.xiaopeng.api.dto.map.RouteAndFareDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
@@ -18,6 +17,7 @@
 import com.xiaopeng.api.model.operation.XpElectronicFence;
 import com.xiaopeng.api.model.operation.XpTradingStrategy;
 import com.xiaopeng.api.model.order.XpOrder;
+import com.xiaopeng.api.model.order.XpOrderReassign;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.vo.OrderType;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
@@ -28,13 +28,13 @@
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.enums.OrderStatusEnum;
 import com.xiaopeng.common.redis.service.RedisService;
+import com.xiaopeng.operation.config.UidVinBindingConfig;
+import com.xiaopeng.operation.dto.PriorityMatchResult;
 import com.xiaopeng.operation.mapper.XpElectronicFenceMapper;
 import com.xiaopeng.operation.service.IXpElectronicFenceAreaService;
 import com.xiaopeng.operation.service.IXpTradingStrategyService;
-import com.xiaopeng.operation.service.XpPointService;
-import com.xiaopeng.operation.config.UidVinBindingConfig;
-import com.xiaopeng.operation.dto.PriorityMatchResult;
 import com.xiaopeng.operation.service.UidVinPriorityMatcher;
+import com.xiaopeng.operation.service.XpPointService;
 import com.xiaopeng.operation.utils.mango.VehiclePositionService;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -1086,31 +1086,43 @@
         return false;
     }
 
+
+
     /**
-     * 订单处理
+     * 重新改派
+     * 1.优化好点 做个倒计时的异步改派多次
      * @param count 轮数
-     * @param uid
+     * @param uid 用户id
      * @param longitude  经度
      * @param latitude  纬度
      * @param orderNo 订单号
      */
     @SneakyThrows
-    public void reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) {
-        System.out.println("进入推单环环节");
+    public XpOrderReassign reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) {
+        log.info("进入推单环环节");
         if (count == 0) {
             count = 1;
         }
         // 订单状态
         R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
         if (xpOrderR.getCode() != 200) {
-            return;
+            return null;
         }
+//        List<Integer> notDrive = new ArrayList<Integer>(){{ //未行驶的情况下订单故障状态点 status=2、3、4、5
+//            add(OrderStatusEnum.READY_DEPART.getCode());add(OrderStatusEnum.PICK_UP.getCode());
+//            add(OrderStatusEnum.PICK_UP_GUESTS.getCode());add(OrderStatusEnum.PASSENGER_BOARDED.getCode());
+//        }};
+
         if (xpOrderR.getData().getStatus() != 1) {
-            return;
+            return null;
         }
+
         XpOrder data = xpOrderR.getData();
         XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null);
-        boolean orderCarStatus = false;//未派到车 默认
+
+        XpOrderReassign entity = new XpOrderReassign(data.getId(),data.getVehicleId(),data.getFleetId(),longitude,latitude,"接驾故障");
+        entity.setIsComplete(false);
+        entity.setAppUserId(Long.valueOf(uid));
         //循环找车
         for (int i = 0; i < count; i++) {
             log.info("进入找车环节");
@@ -1158,29 +1170,23 @@
                 // 调用推送服务  orderId + carVin
                 orderMissionClient.pushOrder(pushOrderDto);
 
-                //接单成功 将 修改 订单的状态=1 ( 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成)
-                orderCarStatus = true;
+                entity.setNewVehicleId(vehicleId1.getId());
+                entity.setNewFleetId(vehicleId1.getFleetId());
+                entity.setIsComplete(true);
+//                //接单成功 将 修改 订单的状态=1 ( 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成)
+//                orderCarStatus = true;
                 xpOrderClient.updateOrderStatus(data.getId(), OrderStatusEnum.PENDING_ORDER.getCode());
                 redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.PENDING_ORDER.getCode(), 24L, TimeUnit.HOURS);
 
+                break;
             } catch (Exception e) {
                 throw new RuntimeException(e);
             } finally {
                 lock.unlock();
             }
         }
-        //未找到车 系统强制取消订单,状态流转至“系统自动取消”。 自动退回优惠卷
-        if(!orderCarStatus){
-            xpOrderClient.updateOrderStatus(data.getId(),OrderStatusEnum.CANCELED.getCode());
-            redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.CANCELED.getCode(), 24L, TimeUnit.HOURS);
-            //有优惠卷 自动退回优惠卷
-            if(data.getCouponId() != null ){
-                UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
-                useUserCouponDto.setUserCouponId(data.getCouponId() );
-                xpAppUserCouponClient.backUserCoupon(useUserCouponDto);
-            }
-        }
-
+        //保存改派记录
+        return entity;
     }
 
 

--
Gitblit v1.7.1