From 66e7a83f20944f1285bd869110e123564c7f9867 Mon Sep 17 00:00:00 2001
From: yyy <1083599556@qq.com>
Date: 星期三, 29 四月 2026 14:12:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/1.0' into 1.0

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |   31 ++++++++++++++++++++++++++-----
 1 files changed, 26 insertions(+), 5 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 caeb89a..53023d0 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
@@ -46,6 +46,7 @@
 import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.vo.OrderType;
+import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
 import com.xiaopeng.api.vo.account.UserCouponVo;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
@@ -266,8 +267,8 @@
         }
 
         List<XpOrder> list = this.list(wrapper);
-        BigDecimal orderMoney = list.stream().map(XpOrder::getOrderMoney).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-        BigDecimal couponMoney = list.stream().map(XpOrder::getCouponMoney).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+        BigDecimal orderMoney = list.stream().filter(order -> Objects.nonNull(order.getOrderMoney())).map(XpOrder::getOrderMoney).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+        BigDecimal couponMoney = list.stream().filter(order -> Objects.nonNull(order.getCouponMoney())).map(XpOrder::getCouponMoney).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
 
         // 2. 分页查询
         Page<XpOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
@@ -1013,6 +1014,16 @@
 
         if (Objects.isNull(newVehicle.getState()) || newVehicle.getState() != 0) {
             throw new ServiceException("新车辆已接单,请重新选择", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_NOT_FREE);
+        }
+        if (newVehicle.getOperatingStatus() != 1){
+            throw new ServiceException("新车辆状态为非运营状态,请重新选择", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_NOT_OPERATIONAL);
+        }
+        VehiclePosition vehiclePosition = mongoTemplate.findOne(Query.query(Criteria.where("vin").is(newVehicle.getVehicleVin())), VehiclePosition.class);
+        if(null == vehiclePosition){
+            throw new ServiceException("未能获取到新车的定位数据,请重新选择", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_NOT_POSITION);
+        }
+        if(vehiclePosition.getCurrentElectricity() < 20){
+            throw new ServiceException("新车电量不足,请重新选择", I18nKeyConstant.ORDER_REASSIGN_NEW_VEHICLE_BATTERY_LOW);
         }
 
         // 6. 保存原车辆和车队信息
@@ -3096,8 +3107,15 @@
     }
 
     @Override
-    public R<FareBreakdownVo> fareBreakdown(Long orderId, String uid) {
-        XpOrder order = this.getById(orderId);
+    public R<FareBreakdownVo> fareBreakdown(com.xiaopeng.order.vo.FareBreakdownVo vo, String uid) {
+        XpOrder order = this.getById(vo.getOrderId());
+        //根据新的优惠券计算优惠金额
+        if(null != order.getCouponId()){
+            CalculateDiscountAmountVo discountAmountVo = new CalculateDiscountAmountVo();
+            BigDecimal data = xpAppUserCouponClient.calculateDiscountAmount(discountAmountVo).getData();
+            order.setCouponId(vo.getUserCouponId());
+            order.setCouponMoney(data);
+        }
         order.setAppUserId(null);
         FareBreakdownVo res = new FareBreakdownVo();
         res.setChangeMoneyFlag(order.getChangeMoneyFlag());
@@ -3107,7 +3125,7 @@
         List<FareBreakdownDetailVo> duration = new ArrayList<>();
         List<FareBreakdownDetailVo> longDistance = new ArrayList<>();
 
-        List<XpOrderDetail> xpOrderDetails = xpOrderDetailMapper.selectList(new LambdaQueryWrapper<XpOrderDetail>().eq(XpOrderDetail::getOrderId, orderId));
+        List<XpOrderDetail> xpOrderDetails = xpOrderDetailMapper.selectList(new LambdaQueryWrapper<XpOrderDetail>().eq(XpOrderDetail::getOrderId, vo.getOrderId()));
         for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
             FareBreakdownDetailVo detail = new FareBreakdownDetailVo();
             detail.setType(xpOrderDetail.getType());
@@ -3131,6 +3149,7 @@
         res.setDuration(duration);
         res.setLongDistance(longDistance);
         res.setRedPacketMoney(order.getRedPacketMoney());
+        res.setUserCouponId(order.getCouponId());
         res.setCouponMoney(order.getCouponMoney());
         res.setOrderMoney(order.getOrderMoney());
         res.setKilometer(order.getMileageKilometers() == null ? BigDecimal.ZERO : BigDecimal.valueOf(order.getMileageKilometers()).multiply(BigDecimal.valueOf(1000)));
@@ -3149,6 +3168,8 @@
         return R.ok(res);
     }
 
+
+
     @Override
     public R payment(XpOrderPayDto dto, String uid) {
         // mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可

--
Gitblit v1.7.1