From 3cdf10c4a6a246b6c75b51f577e1ea9743cb14bd Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 15 四月 2026 20:07:08 +0800
Subject: [PATCH] 1.行驶中,车辆故障异常处理,添加订单故障状态字段, 并修改 订单支付金额为0 ,将状态修改成9待评价。

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |   58 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 40 insertions(+), 18 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 804c887..2edff13 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
@@ -1633,6 +1633,7 @@
             redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 0, 24L, TimeUnit.HOURS);
             return;
         }
+        /*
         order.setStatus(0);
         order.setAppUserId(null);
         baseMapper.updateById(order);
@@ -1643,7 +1644,7 @@
         xpOrderCancel.setCancelSource(1);
         xpOrderCancel.setCancelReason("用户取消订单");
         xpOrderCancelService.save(xpOrderCancel);
-
+        */
 
         // 移除mongo数据
         xpPricingClient.deleteXpGeoQueryEntity(order.getId().toString());
@@ -1989,6 +1990,15 @@
         this.updateById(xpOrder);
          //结束行程,修改状态和计算费用
         this.endTrip(xpOrder.getId(),appUserId.toString());
+
+        //将支付金额修改成0 并将状态修改成 订单状态9
+        XpOrder xpOrder1 = new XpOrder();
+        xpOrder1.setId(xpOrder.getId());
+        xpOrder1.setPayMoney(BigDecimal.ZERO);
+        xpOrder1.setStatus(OrderStatusEnum.PENDING_PAYMENT.getCode());
+        xpOrder1.setUpdateTime(LocalDateTime.now());
+        baseMapper.updateById(xpOrder1);
+        redisService.setCacheObject("ORDER_STATUS:" + xpOrder.getId(), xpOrder1.getStatus(), 24L, TimeUnit.HOURS);
 
         return R.ok();
     }
@@ -2874,26 +2884,20 @@
         XpOrder order = this.getById(dto.getOrderId());
         order.setStatus(9);
         order.setAppUserId(null);
-
-        if(order.getCarAbnormal()){//是故障单 支付金额未0 @todo yyy 这里应该有问题
-            order.setPayMoney(BigDecimal.ZERO);
-        }else{
-            if(order.getCouponId()!=null){
-                UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
-                useUserCouponDto.setUserCouponId(order.getCouponId());
-                R<BigDecimal> decimalR = xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
-                if(decimalR.getCode()==200){
-                    order.setCouponMoney(decimalR.getData());
-                    if(order.getCouponMoney().compareTo(order.getOrderMoney())>0){
-                        order.setPayMoney(BigDecimal.ZERO);
-                        order.setCouponMoney(order.getOrderMoney());
-                    }else {
-                        order.setPayMoney(order.getOrderMoney().subtract(decimalR.getData()));
-                    }
+        if(order.getCouponId()!=null){
+            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
+            useUserCouponDto.setUserCouponId(order.getCouponId());
+            R<BigDecimal> decimalR = xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
+            if(decimalR.getCode()==200){
+                order.setCouponMoney(decimalR.getData());
+                if(order.getCouponMoney().compareTo(order.getOrderMoney())>0){
+                    order.setPayMoney(BigDecimal.ZERO);
+                    order.setCouponMoney(order.getOrderMoney());
+                }else {
+                    order.setPayMoney(order.getOrderMoney().subtract(decimalR.getData()));
                 }
             }
         }
-
         baseMapper.updateById(order);
         redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 9, 24L, TimeUnit.HOURS);
         return R.ok();
@@ -3458,9 +3462,27 @@
             xpOrder.setAppUserId(null);
             this.updateById(xpOrder);
         }
+        Boolean cancelShow = true; //是否能取消行程
+        xpOrderDetailVO.setCancelShow(cancelShow);
+
+
+
         return xpOrderDetailVO;
     }
 
+    /**
+     * 取消行程:若处于“送驾中”且离目的地小于10分钟路程(后台配置),【取消行程】按钮应置灰;
+     * 修改行程:
+     * 1. 当前剩余里程 < 800米 (后台配置)或 剩余时间 < 5分钟(后台配置)(以先到者为准),禁止修改,按钮置灰。
+     * 2. 单次行程最多允许修改 2次 (后台配置)目的地,防恶意高频调用
+     * @return
+     */
+    private Boolean isCancelShow(){
+
+        return true;
+    }
+
+
     @Override
     public void changeAmount(Long id, BigDecimal amount) {
         if (Objects.isNull(id)) {

--
Gitblit v1.7.1