puzhibing
2025-01-11 f18a802137a7642473891f6886d44cf0c229efed
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());