From e23242d09e31e1c78f7ecdbc2859c9f99a3c4171 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期一, 17 三月 2025 10:00:59 +0800
Subject: [PATCH] 迭代版本:2.28

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java |  118 +++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 78 insertions(+), 40 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 7166cae..ee69283 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
@@ -14,6 +14,7 @@
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.order.event.PayEvent;
 import com.ruoyi.order.mapper.ShoppingCartMapper;
 import com.ruoyi.order.model.Order;
 import com.ruoyi.order.model.OrderBalancePayment;
@@ -31,6 +32,7 @@
 import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds;
 import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
@@ -41,6 +43,9 @@
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.util.*;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -105,12 +110,6 @@
 	private CommissionService commissionService;
 
 	@Resource
-	private VipSettingClient vipSettingClient;
-
-	@Resource
-	private UserChangeLogClient userChangeLogClient;
-
-	@Resource
 	private PointSettingClient pointSettingClient;
 	
 	@Resource
@@ -118,6 +117,9 @@
 	
 	@Resource
 	private RedisTemplate redisTemplate;
+
+	@Resource
+	private ApplicationEventPublisher applicationEventPublisher;
 	
 	
 	
@@ -142,6 +144,9 @@
 			throw new RuntimeException("根据类型(1=服务商品,2=单品商品)获取商品数据失败");
 		}
 		List<Integer> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList());
+		if(goodsIds.isEmpty()){
+			return new ArrayList<>();
+		}
 		//查询符合商品类型的商品数据
 		List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
 				.in(ShoppingCart::getGoodsId, goodsIds).eq(ShoppingCart::getStatus, 1));
@@ -337,7 +342,20 @@
 				.eq(ShoppingCart::getAppUserId, userid));
 		goodsSaleNum += count;
 		Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
-		if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit() && (goodsSaleNum + shoppingCart.getNumber()) > goods.getPurchaseLimit()){
+
+		Integer maxNum = 0;
+		if(shoppingCart.getType() == 2){
+			R<SeckillActivityInfo> r = seckillActivityInfoClient.getSeckillActivityInfoByGoodsId(shoppingCart.getGoodsId());
+			if (R.isError(r)){
+				throw new ServiceException("获取秒杀商品失败!");
+			}
+			SeckillActivityInfo seckillActivityInfo = r.getData();
+			maxNum = seckillActivityInfo.getMaxNum();
+		}else {
+			maxNum = goods.getPurchaseLimit();
+		}
+
+		if(null != goods.getPurchaseLimit() && -1 != maxNum && (goodsSaleNum + shoppingCart.getNumber()) > maxNum){
 			throw new ServiceException("超出购买数量限制");
 		}
 		ShoppingCart one = this.getOne(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
@@ -371,7 +389,9 @@
 		if(null != shoppingCart){
 
 			Goods goods1 = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
-			if(null != goods1.getPurchaseLimit() && -1 != goods1.getPurchaseLimit() && goods1.getPurchaseLimit() < setGoodsNumber.getNumber()){
+			if(null != goods1.getPurchaseLimit() && -1 != goods1.getPurchaseLimit()
+					&& goods1.getPurchaseLimit() < setGoodsNumber.getNumber()
+					&& setGoodsNumber.getNumber() >= shoppingCart.getNumber()){
 				return R.fail("修改数量不能大于限购数量");
 			}
 
@@ -1146,7 +1166,7 @@
 				appUser.setLastShopTime(LocalDateTime.now());
 				appUserClient.editAppUserById(appUser);
 				//变更等级
-				appUserClient.vipUpgrade(appUser.getId());
+				applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));
 				//修改订支付状态
 				order.setPayStatus(2);
 				//自提
@@ -1183,33 +1203,36 @@
 			BigDecimal balance = appUser.getBalance();
 			//红包金额满足支付
 			BigDecimal paymentMoney1 = paymentMoney;
-			if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){
-				totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1);
-				balance = balance.subtract(paymentMoney1);
-				appUser.setTotalRedPacketAmount(totalRedPacketAmount);
-				appUser.setBalance(balance);
-				redPacketAmount = paymentMoney1;
-			}else{
-				paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount);
-				redPacketAmount = totalRedPacketAmount;
-				totalRedPacketAmount = BigDecimal.ZERO;
-				if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){
-					totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1);
-					balance = balance.subtract(paymentMoney1);
-					appUser.setTotalRedPacketAmount(totalRedPacketAmount);
-//					appUser.setTotalDistributionAmount(totalDistributionAmount);
-					appUser.setBalance(balance);
-					distributionAmount = paymentMoney1;
-				}else{
-					paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount);
-					totalDistributionAmount = BigDecimal.ZERO;
-					balance = balance.subtract(paymentMoney1);
-					appUser.setTotalRedPacketAmount(totalRedPacketAmount);
-//					appUser.setTotalDistributionAmount(totalDistributionAmount);
-					appUser.setBalance(balance);
-					distributionAmount = totalDistributionAmount;
-				}
-			}
+			balance = balance.subtract(paymentMoney1);
+			appUser.setBalance(balance);
+
+//			if(paymentMoney1.compareTo(totalRedPacketAmount) <= 0){
+//				totalRedPacketAmount = totalRedPacketAmount.subtract(paymentMoney1);
+//				balance = balance.subtract(paymentMoney1);
+//				appUser.setTotalRedPacketAmount(totalRedPacketAmount);
+//				appUser.setBalance(balance);
+//				redPacketAmount = paymentMoney1;
+//			}else{
+//				paymentMoney1 = paymentMoney1.subtract(totalRedPacketAmount);
+//				redPacketAmount = totalRedPacketAmount;
+//				totalRedPacketAmount = BigDecimal.ZERO;
+//				if(paymentMoney1.compareTo(totalDistributionAmount) <= 0){
+////					totalDistributionAmount = totalDistributionAmount.subtract(paymentMoney1);
+//					balance = balance.subtract(paymentMoney1);
+//					appUser.setTotalRedPacketAmount(totalRedPacketAmount);
+////					appUser.setTotalDistributionAmount(totalDistributionAmount);
+//					appUser.setBalance(balance);
+//					distributionAmount = paymentMoney1;
+//				}else{
+//					paymentMoney1 = paymentMoney1.subtract(totalDistributionAmount);
+//					totalDistributionAmount = BigDecimal.ZERO;
+//					balance = balance.subtract(paymentMoney1);
+//					appUser.setTotalRedPacketAmount(totalRedPacketAmount);
+////					appUser.setTotalDistributionAmount(totalDistributionAmount);
+//					appUser.setBalance(balance);
+//					distributionAmount = totalDistributionAmount;
+//				}
+//			}
 			//构建积分流水记录
 			if(earnPoint > 0){
 				PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
@@ -1248,7 +1271,7 @@
 			appUser.setLastShopTime(LocalDateTime.now());
 			appUserClient.editAppUserById(appUser);
 			//变更等级
-			appUserClient.vipUpgrade(appUser.getId());
+			applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));
 			//构建余额明细变动记录
 			BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
 			balanceChangeRecord.setAppUserId(appUser.getId());
@@ -1331,7 +1354,7 @@
 			appUser.setLastShopTime(LocalDateTime.now());
 			appUserClient.editAppUserById(appUser);
 			//变更等级
-			appUserClient.vipUpgrade(appUser.getId());
+			applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));
 
 			//积分支付不返佣
 
@@ -1413,8 +1436,18 @@
 			orderBalancePayment.setDistributionAmount(distributionAmount);
 			orderBalancePaymentService.save(orderBalancePayment);
 		}
+		
+		commissionService.calculationCommissionUser(order.getId());
 		return R.ok(order.getId().toString());
 	}
+
+
+
+
+
+
+
+
 
 	
 	public String getNumber(Integer size){
@@ -1479,13 +1512,16 @@
 		appUser.setLastShopTime(LocalDateTime.now());
 		appUserClient.editAppUserById(appUser);
 		//变更等级
-		appUserClient.vipUpgrade(appUser.getId());
+		applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));
 		//修改订支付状态
 		order.setPayStatus(2);
 		//自提
 		if(order.getOrderType() == 1 && StringUtils.isEmpty(order.getAddressJson())){
 			order.setOrderStatus(2);
 		}
+
+		String r7TrxNo = uniPayCallbackResult.getR9_BankTrxNo();
+		order.setSerialNumber(r7TrxNo);
 		orderService.updateById(order);
 
 		//处理优惠券
@@ -1508,6 +1544,8 @@
 		for (Integer goodsId : goodsIds) {
 			goodsClient.editGoodsNum(goodsId, 1);
 		}
+		
+		commissionService.calculationCommissionUser(order.getId());
 		return R.ok();
 	}
 	
@@ -1561,7 +1599,7 @@
 		appUser.setLastShopTime(LocalDateTime.now());
 		appUserClient.editAppUserById(appUser);
 		//变更等级
-		appUserClient.vipUpgrade(appUser.getId());
+		applicationEventPublisher.publishEvent(new PayEvent(JSON.toJSONString(appUser)));
 
 		//修改订支付状态
 		order.setPayStatus(2);

--
Gitblit v1.7.1