From 67b0c9e1e81f4eef2438e31b4009a4da5d14b66c Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 18 三月 2025 20:37:01 +0800 Subject: [PATCH] 修改报表bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 57 +++++++++++++++++++++++++++++---------------------------- 1 files changed, 29 insertions(+), 28 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index cc5f443..e332428 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -1413,15 +1413,16 @@ for (ChargingOrderVO chargingOrderVO : list1) { List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList()); + BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); if (!chargingOrderVO.getOrderSource().equals(2)) { paymentMoney = paymentMoney.add(chargingOrderVO.getPaymentAmount() != null ? chargingOrderVO.getPaymentAmount() : new BigDecimal("0")); }else{ - paymentMoney = paymentMoney.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN)); + paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN)); } - if (chargingOrderVO.getRechargeAmount()!=null){ - commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN)); - } +// if (chargingOrderVO.getRechargeAmount()!=null){ +// commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN)); +// } if (chargingOrderVO.getChargingCapacity()!=null){ total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0")); } @@ -1435,11 +1436,10 @@ List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId())) .collect(Collectors.toList()); for (TChargingOrderRefund tChargingOrderRefund : list2) { - refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount()); + refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount()); } //充电明细 - BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add); electronicMoney = electronicMoney.add(electronic_reduce); if (!chargingOrderVO.getOrderSource().equals(2)){ serviceMoney = serviceMoney.add(service_reduce); @@ -2129,10 +2129,11 @@ } //如果使用优惠券需要判断优惠券是否满足使用条件 - //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) //退款金额=优惠券金额+剩余充电金额 BigDecimal periodElectricPrice_total = BigDecimal.ZERO; BigDecimal periodServicePrice_total = BigDecimal.ZERO; + BigDecimal vipDiscountAmount_total = BigDecimal.ZERO; + BigDecimal serviceCharge_total = BigDecimal.ZERO; BigDecimal total = BigDecimal.ZERO; //获取订单的计费策略 @@ -2310,26 +2311,25 @@ chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN)); chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); - + //电费 periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); + //服务费(含折扣) + serviceCharge_total = serviceCharge_total.add(serviceCharge); + //服务费(不含折扣) periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); + //会员折扣优惠金额 + vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount); + //原始总金额(不含折扣) total = total.add(electrovalenc.add(originalServicePrice)); } BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); - //折扣金额 - BigDecimal discountAmount = chargingOrder.getVipDiscountAmount(); //原金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); - //总金额(充值金额+会员折扣金额) - BigDecimal decimal = rechargeAmount.add(discountAmount); - //退款金额(已经计算了折扣优惠部分) - //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额) - BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total)); //支付金额 - BigDecimal payAmount = rechargeAmount.subtract(refundAmount); - //实际充值服务费-会员折扣 - periodServicePrice_total = periodServicePrice_total.subtract(discountAmount); + BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total); + //退款金额=充值金额-实际支付金额 + BigDecimal refundAmount = rechargeAmount.subtract(payAmount); TChargingOrder order = new TChargingOrder(); order.setId(chargingOrder.getId()); @@ -2353,7 +2353,8 @@ order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN)); order.setChargingCapacity(vo.getTotal_electricity()); order.setElectricity(vo.getTotal_electricity()); - if(discountAmount.compareTo(BigDecimal.ZERO) == 0){ + order.setVipDiscountAmount(vipDiscountAmount_total); + if(vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0){ order.setVipDiscount(BigDecimal.valueOf(1)); } @@ -2370,9 +2371,9 @@ if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount(); //如果优惠金额大于服务费金额,以服务费作为最大限制 - if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){ - couponDiscount = periodServicePrice_total; - periodServicePrice_total = BigDecimal.ZERO; + if(serviceCharge_total.compareTo(couponDiscountAmount) < 0){ + couponDiscount = serviceCharge_total; + serviceCharge_total = BigDecimal.ZERO; }else{ couponDiscount = couponDiscountAmount; } @@ -2391,9 +2392,9 @@ BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; //如果优惠金额大于服务费金额,以服务费作为最大限制 - if(periodServicePrice_total.compareTo(divide) < 0){ - couponDiscount = periodServicePrice_total; - periodServicePrice_total = BigDecimal.ZERO; + if(serviceCharge_total.compareTo(divide) < 0){ + couponDiscount = serviceCharge_total; + serviceCharge_total = BigDecimal.ZERO; }else{ couponDiscount = divide; } @@ -2413,11 +2414,11 @@ refundAmount = refundAmount.add(couponDiscount); //实际支付金额-优惠券 payAmount = payAmount.subtract(couponDiscount); - if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){ - periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount); + if(serviceCharge_total.compareTo(BigDecimal.ZERO) > 0){ + serviceCharge_total = serviceCharge_total.subtract(couponDiscount); } order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN)); - order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN)); + order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN)); order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setRefundStatus(1); -- Gitblit v1.7.1