From 2c2392f477eaa64b16e637e442957044757c90eb Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 28 四月 2026 18:57:34 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0
---
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