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