From 5f4b99714b633c9c838d94ccc240ab23333e3343 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 28 四月 2026 18:55:24 +0800
Subject: [PATCH] 添加计算优惠金额的接口

---
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 0 deletions(-)

diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
index 44e88aa..2df4829 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -19,6 +19,7 @@
 import com.xiaopeng.account.vo.CouponReceiptRecordDto;
 import com.xiaopeng.account.vo.CouponReceiptRecordVo;
 import com.xiaopeng.api.model.operation.XpWhitelist;
+import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
 import com.xiaopeng.api.vo.account.CouponVo;
 import com.xiaopeng.account.vo.UserCouponListVo;
 import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest;
@@ -48,6 +49,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -630,4 +632,62 @@
         }
         return list;
     }
+
+
+    /**
+     * 计算优惠金额
+     * @param vo
+     * @return
+     */
+    @Override
+    public BigDecimal calculateDiscountAmount(CalculateDiscountAmountVo vo) {
+        XpAppUserCoupon userCoupon = this.getById(vo.getUserCouponId());
+        if(null == userCoupon){
+            return BigDecimal.ZERO;
+        }
+        if(1 != userCoupon.getStatus()){
+            return BigDecimal.ZERO;
+        }
+        XpCoupon xpCoupon = xpCouponClient.getCouponById(userCoupon.getCouponId()).getData();
+        if(null == xpCoupon){
+            return BigDecimal.ZERO;
+        }
+        BigDecimal conditionalAmount = xpCoupon.getConditionalAmount();
+        BigDecimal upperLimit = xpCoupon.getUpperLimit();
+        //抵扣券
+        if(1 == xpCoupon.getCouponType() && (null == conditionalAmount || conditionalAmount.compareTo(vo.getOrderMoney()) <= 0)){
+            //没有达到预设条件
+            if(vo.getOrderMoney().compareTo((null == conditionalAmount ? BigDecimal.ZERO : conditionalAmount)) < 0){
+                return BigDecimal.ZERO;
+            }
+            //计算优惠金额
+            BigDecimal multiply = vo.getOrderMoney().multiply(xpCoupon.getAmount().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+            BigDecimal multiply1 = BigDecimal.ZERO;
+            if(null != upperLimit){
+                //计算最高优惠金额
+                multiply1 = vo.getOrderMoney().multiply(upperLimit.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+            }
+            //超出最高优惠金额,按照最高优惠金额进行扣减
+            if(multiply.compareTo(multiply1) > 0){
+                return multiply1;
+            }else{
+                return multiply;
+            }
+        }
+        //抹零券
+        if(3 == xpCoupon.getCouponType() && (null == conditionalAmount || conditionalAmount.compareTo(vo.getOrderMoney()) <= 0)){
+            //没有达到预设条件
+            if(vo.getOrderMoney().compareTo((null == conditionalAmount ? BigDecimal.ZERO : conditionalAmount)) < 0){
+                return BigDecimal.ZERO;
+            }
+            return vo.getOrderMoney().subtract(xpCoupon.getAmount());
+        }
+        //满减券
+        if(2 == xpCoupon.getCouponType() && (null == conditionalAmount || conditionalAmount.compareTo(vo.getOrderMoney()) <= 0)){
+            if(vo.getOrderMoney().compareTo((null == conditionalAmount ? BigDecimal.ZERO : conditionalAmount)) >= 0){
+                return xpCoupon.getAmount();
+            }
+        }
+        return BigDecimal.ZERO;
+    }
 }

--
Gitblit v1.7.1