From 63dbede8fd302de185b4ea7e085cbc9fab7419ec Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期一, 13 一月 2025 11:07:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java |  107 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 69 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..0bad0c1 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,26 @@
 		//满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;
+					}
 				}
 			}
 
+			if(null != activityInfo1){
+				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 +768,6 @@
 			for (MyShoppingCartVo myShoppingCartVo : goodsList) {
 				orderPoint += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber());
 			}
-			if(appUser.getLavePoint().intValue() < orderPoint){
-				return R.fail("账户剩余积分不足");
-			}
 		}
 		//现金的支付金额
 		BigDecimal paymentMoney = orderMoney;
@@ -856,17 +860,21 @@
 		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;
+					}
 				}
 			}
+
+			paymentMoney = paymentMoney.subtract(zyh);
+			activityAmount = activityAmount.add(zyh);
 		}
 
 		//可获得的消费积分
@@ -931,8 +939,9 @@
 		}
 		if(3 != shoppingCartPayment.getPaymentType() && (fullReductionAmount.compareTo(BigDecimal.ZERO) > 0 ||moneyAmount.compareTo(BigDecimal.ZERO) > 0 || discountAmount.compareTo(BigDecimal.ZERO) > 0)){
 			order.setCouponJson(JSON.toJSONString(couponInfoVo));
+			order.setUserCouponId(shoppingCartPayment.getUserCouponId());
 		}
-		if(activityAmount.compareTo(BigDecimal.ZERO) > 0){
+		if(null != orderActivityInfo1){
 			order.setActivityJson(JSON.toJSONString(orderActivityInfo1));
 		}
 		if(null != shoppingCartPayment.getUserAddressId()){
@@ -956,7 +965,7 @@
 		if(3 == shoppingCartPayment.getPaymentType()){
 			Integer availablePoint = appUser.getAvailablePoint();
 			if(availablePoint < orderPoint){
-				return R.fail("账户积分不足");
+				return R.fail("账户可用积分不足");
 			}
 		}
 		//判断运费支付是否足够
@@ -1043,27 +1052,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);
@@ -1128,6 +1138,15 @@
 			orderService.updateById(order);
 			//删除购物车数据
 			this.removeBatchByIds(ids);
+			//处理优惠券
+			if(null != order.getUserCouponId()){
+				UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
+				if(null != userCoupon && 1 == userCoupon.getStatus()){
+					userCoupon.setStatus(2);
+					userCoupon.setUseTime(LocalDateTime.now());
+					userCouponClient.editUserCoupon(userCoupon);
+				}
+			}
 		}
 		//积分支付
 		if(3 == shoppingCartPayment.getPaymentType()){
@@ -1189,27 +1208,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 +1243,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());
@@ -1330,6 +1350,17 @@
 			order.setOrderStatus(2);
 		}
 		orderService.updateById(order);
+
+		//处理优惠券
+		if(null != order.getUserCouponId()){
+			UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
+			if(null != userCoupon && 1 == userCoupon.getStatus()){
+				userCoupon.setStatus(2);
+				userCoupon.setUseTime(LocalDateTime.now());
+				userCouponClient.editUserCoupon(userCoupon);
+			}
+		}
+
 		//删除购物车数据
 		Long userid = tokenService.getLoginUserApplet().getUserid();
 		List<OrderGood> list = orderGoodService.list(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, order.getId()));

--
Gitblit v1.7.1