luofl
2025-03-07 faf27967a7f94a4ed03a179ec2670031576f4502
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -41,6 +41,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
@@ -142,6 +145,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 +343,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 +390,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("修改数量不能大于限购数量");
         }
@@ -1183,33 +1204,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();
@@ -1413,8 +1437,18 @@
         orderBalancePayment.setDistributionAmount(distributionAmount);
         orderBalancePaymentService.save(orderBalancePayment);
      }
      commissionService.calculationCommissionUser(order.getId());
      return R.ok(order.getId().toString());
   }
   
   public String getNumber(Integer size){
@@ -1508,6 +1542,8 @@
      for (Integer goodsId : goodsIds) {
         goodsClient.editGoodsNum(goodsId, 1);
      }
      commissionService.calculationCommissionUser(order.getId());
      return R.ok();
   }