From 67db945bbfd7ae08335652c30537a68e443deb78 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期日, 15 三月 2026 16:22:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java |   47 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
index baaae75..8b4311a 100644
--- a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
+++ b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -242,6 +242,31 @@
             );
         }
 
+        // 优惠券
+        XpPricingCardVo finalXpPricingCardVo = xpPricingCardVo;
+        R<UserCouponVo> coupon = null;
+        CompletableFuture<R<UserCouponVo>> couponFuture=null;
+        // 判断是否指定优惠券
+        if(routeAndFareDto.getUserCouponId()!=null){
+            coupon = xpAppUserCouponClient.getUserCoupon(new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId(),routeAndFareDto.getUserCouponId()));
+            if(coupon.getCode()==200 && coupon.getData().getStatus()==2){
+                throw new ServiceException("优惠券不满足条件", I18nKeyConstant.COUPON_NOT_SATISFY);
+            }
+        }else {
+
+            couponFuture= CompletableFuture.supplyAsync(
+                    () -> {
+                        // 优惠券
+                        return xpAppUserCouponClient.getUserCoupon(
+                                new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId(),null)
+//                            new GetUserCouponDto(Long.valueOf(userId), 1d, routeAndFareDto.getOpenCityId())
+                        );
+                    },
+                    executorService
+            );
+        }
+
+
 
         // 3. 并行执行远程服务调用 判断是否同一经营区域
         CompletableFuture<R<Boolean>> diagnosisAreaFuture = CompletableFuture.supplyAsync(
@@ -249,23 +274,14 @@
                 executorService
         );
 
-
-        // 优惠券
-        XpPricingCardVo finalXpPricingCardVo = xpPricingCardVo;
-        CompletableFuture<R<UserCouponVo>> couponFuture = CompletableFuture.supplyAsync(
-                () -> {
-                    // 优惠券
-                    return xpAppUserCouponClient.getUserCoupon(
-                            new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId())
-//                            new GetUserCouponDto(Long.valueOf(userId), 1d, routeAndFareDto.getOpenCityId())
-                    );
-                },
-                executorService
-        );
-
         // 4. 等待所有并行任务完成并获取结果
         R<Boolean> diagnosisResult = diagnosisAreaFuture.join();
-        R<UserCouponVo> couponResult = couponFuture.join();
+        R<UserCouponVo> couponResult =null;
+        if(routeAndFareDto.getUserCouponId()!=null){
+            couponResult =coupon;
+        }else {
+            couponResult =couponFuture.join();
+        }
 
         // 5. 处理诊断结果
         if (diagnosisResult.getCode() != R.SUCCESS) {
@@ -557,6 +573,7 @@
         }
         Long orderId = addOrderR.getData();
         xpOrder.setId(orderId);
+        xpOrder.setCouponId(dto.getUserCouponId());
         // 静默处理 不推单
 //        if (isSilent) {
 //            log.info("订单取消次数达到上限,执行静默处理,不推单。");

--
Gitblit v1.7.1