From 822345ccbc0f0268376168d2a11338d955f03942 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 11 一月 2025 18:08:57 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java |   85 +++++++++++++++++++++++-------------------
 1 files changed, 47 insertions(+), 38 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
index 80522d8..4010b15 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -485,19 +485,24 @@
 		//满XX才打折,只有现金才能优惠
 		if((confirmOrderVo.getUseSimultaneously() || (!confirmOrderVo.getUseSimultaneously() && activityAmount.equals(BigDecimal.ZERO)))
 				&& null != orderActivityInfo && confirmOrder.getPaymentType() == 1){
+			BigDecimal zyh = BigDecimal.ZERO;
+			OrderActivityInfo activityInfo1 = null;
 			for (OrderActivityInfo activityInfo : orderActivityInfo) {
 				if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){
-					confirmOrderVo.setActivityName(activityInfo.getActivityName());
 					//优惠后的支付金额
 					BigDecimal multiply = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney);
 					//优惠金额
 					BigDecimal bigDecimal = paymentMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN);
-					paymentMoney = multiply;
-					activityAmount = activityAmount.add(bigDecimal);
-					break;
+					if(bigDecimal.compareTo(zyh) > 0){
+						zyh = bigDecimal;
+						activityInfo1 = activityInfo;
+					}
 				}
 			}
 
+			confirmOrderVo.setActivityName(activityInfo1.getActivityName());
+			paymentMoney = paymentMoney.subtract(zyh);
+			activityAmount = activityAmount.add(zyh);
 		}
 		confirmOrderVo.setDiscountAmount(activityAmount);
 		int earnPoint = goodsList.stream().mapToInt(MyShoppingCartVo::getEarnSpendingPoints).sum();
@@ -761,9 +766,6 @@
 			for (MyShoppingCartVo myShoppingCartVo : goodsList) {
 				orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber());
 			}
-			if(appUser.getLavePoint().intValue() < orderPoint){
-				return R.fail("账户剩余积分不足");
-			}
 		}
 		//现金的支付金额
 		BigDecimal paymentMoney = orderMoney;
@@ -856,17 +858,22 @@
 		OrderActivityInfo orderActivityInfo1 = null;
 		if((1 == status || null == shoppingCartPayment.getUserCouponId()) &&
 				null != orderActivityInfo && shoppingCartPayment.getPaymentType() != 3){
+			//找出最优会的金额
+			BigDecimal zyh = BigDecimal.ZERO;
 			for (OrderActivityInfo activityInfo : orderActivityInfo) {
 				if(activityInfo.getConditionAmount().compareTo(paymentMoney) <= 0){
 					BigDecimal paymentMoney1 = activityInfo.getDiscount().divide(new BigDecimal(10)).multiply(paymentMoney);
 					BigDecimal bigDecimal = paymentMoney.subtract(paymentMoney1).setScale(2, RoundingMode.HALF_EVEN);
-					discount = activityInfo.getDiscount();
-					paymentMoney = paymentMoney1;
-					activityAmount = activityAmount.add(bigDecimal);
-					orderActivityInfo1 = activityInfo;
-					break;
+					if(bigDecimal.compareTo(zyh) > 0){
+						zyh = bigDecimal;
+						orderActivityInfo1 = activityInfo;
+					}
 				}
 			}
+
+			discount = orderActivityInfo1.getDiscount();
+			paymentMoney = paymentMoney.subtract(zyh);
+			activityAmount = activityAmount.add(zyh);
 		}
 
 		//可获得的消费积分
@@ -932,7 +939,7 @@
 		if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){
 			order.setCouponJson(JSON.toJSONString(couponInfoVo));
 		}
-		if(activityAmount.compareTo(BigDecimal.ZERO) > 0){
+		if(null != orderActivityInfo1){
 			order.setActivityJson(JSON.toJSONString(orderActivityInfo1));
 		}
 		if(null != shoppingCartPayment.getUserAddressId()){
@@ -956,7 +963,7 @@
 		if(3 == shoppingCartPayment.getPaymentType()){
 			Integer availablePoint = appUser.getAvailablePoint();
 			if(availablePoint < orderPoint){
-				return R.fail("账户积分不足");
+				return R.fail("账户可用积分不足");
 			}
 		}
 		//判断运费支付是否足够
@@ -1043,27 +1050,28 @@
 			BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount();
 			BigDecimal balance = appUser.getBalance();
 			//红包金额满足支付
-			if(paymentMoney.compareTo(totalRedPacketAmount) <= 0){
-				totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney);
-				balance = balance.subtract(paymentMoney);
+			BigDecimal paymentMoney1 = paymentMoney;
+			if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){
+				totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1);
+				balance = balance.subtract(paymentMoney1);
 				appUser.setTotalRedPacketAmount(totalRedPacketAmount);
 				appUser.setBalance(balance);
-				redPacketAmount = paymentMoney;
+				redPacketAmount = paymentMoney1;
 			}else{
-				paymentMoney = paymentMoney.subtract(totalRedPacketAmount);
+				paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount);
 				redPacketAmount = totalRedPacketAmount;
 				totalRedPacketAmount = BigDecimal.ZERO;
-				if(paymentMoney.compareTo(totalDistributionAmount) <= 0){
-					totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney);
-					balance = balance.subtract(paymentMoney);
+				if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){
+					totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1);
+					balance = balance.subtract(paymentMoney1);
 					appUser.setTotalRedPacketAmount(totalRedPacketAmount);
 					appUser.setTotalDistributionAmount(totalDistributionAmount);
 					appUser.setBalance(balance);
-					distributionAmount = paymentMoney;
+					distributionAmount = paymentMoney1;
 				}else{
-					paymentMoney = paymentMoney.subtract(totalDistributionAmount);
+					paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount);
 					totalDistributionAmount = BigDecimal.ZERO;
-					balance = balance.subtract(paymentMoney);
+					balance = balance.subtract(paymentMoney1);
 					appUser.setTotalRedPacketAmount(totalRedPacketAmount);
 					appUser.setTotalDistributionAmount(totalDistributionAmount);
 					appUser.setBalance(balance);
@@ -1189,27 +1197,28 @@
 					BigDecimal totalRedPacketAmount = appUser.getTotalRedPacketAmount();
 					BigDecimal totalDistributionAmount = appUser.getTotalDistributionAmount();
 					BigDecimal balance = appUser.getBalance();
-					if(expressFee.compareTo(totalRedPacketAmount) <= 0){
-						totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee);
-						balance = balance.subtract(expressFee);
+					BigDecimal expressFee1 = expressFee;
+					if(expressFee1.compareTo(totalRedPacketAmount) <= 0){
+						totalRedPacketAmount = totalRedPacketAmount.subtract(expressFee1);
+						balance = balance.subtract(expressFee1);
 						appUser.setTotalRedPacketAmount(totalRedPacketAmount);
 						appUser.setBalance(balance);
-						redPacketAmount = expressFee;
+						redPacketAmount = expressFee1;
 					}else{
-						expressFee = expressFee.subtract(totalRedPacketAmount);
+						expressFee1 = expressFee1.subtract(totalRedPacketAmount);
 						redPacketAmount = totalRedPacketAmount;
 						totalRedPacketAmount = BigDecimal.ZERO;
-						if(expressFee.compareTo(totalDistributionAmount) <= 0){
-							totalDistributionAmount = totalDistributionAmount.subtract(expressFee);
-							balance = balance.subtract(expressFee);
+						if(expressFee1.compareTo(totalDistributionAmount) <= 0){
+							totalDistributionAmount = totalDistributionAmount.subtract(expressFee1);
+							balance = balance.subtract(expressFee1);
 							appUser.setTotalRedPacketAmount(totalRedPacketAmount);
 							appUser.setTotalDistributionAmount(totalDistributionAmount);
 							appUser.setBalance(balance);
-							distributionAmount = expressFee;
+							distributionAmount = expressFee1;
 						}else{
-							expressFee = expressFee.subtract(totalDistributionAmount);
+							expressFee1 = expressFee1.subtract(totalDistributionAmount);
 							totalDistributionAmount = BigDecimal.ZERO;
-							balance = balance.subtract(expressFee);
+							balance = balance.subtract(expressFee1);
 							appUser.setTotalRedPacketAmount(totalRedPacketAmount);
 							appUser.setTotalDistributionAmount(totalDistributionAmount);
 							appUser.setBalance(balance);
@@ -1223,8 +1232,8 @@
 					balanceChangeRecord.setAppUserId(appUser.getId());
 					balanceChangeRecord.setOrderId(order.getId());
 					balanceChangeRecord.setChangeType(5);
-					balanceChangeRecord.setBeforeAmount(balance.add(paymentMoney));
-					balanceChangeRecord.setChangeAmount(paymentMoney);
+					balanceChangeRecord.setBeforeAmount(balance.add(expressFee));
+					balanceChangeRecord.setChangeAmount(expressFee);
 					balanceChangeRecord.setAfterAmount(balance);
 					balanceChangeRecord.setDelFlag(0);
 					balanceChangeRecord.setCreateTime(LocalDateTime.now());

--
Gitblit v1.7.1