From 7b6e35d1b1eae38af71687a970d1ae5ac342d5dd Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 05 十一月 2024 19:14:35 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 47 ++++++++++++++++++++++++----------------------- 1 files changed, 24 insertions(+), 23 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 961a0a4..4eec6ac 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 @@ -1929,26 +1929,26 @@ } //已充电总度数 - BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN); - BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN); + BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.HALF_EVEN); + BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.HALF_EVEN); BigDecimal serviceCharge = originalServicePrice; BigDecimal vipDiscountAmount = BigDecimal.ZERO; //计算优惠金额 if(null != chargingOrder.getVipDiscount()){ - vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN); - serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN); + vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.HALF_EVEN); + serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.HALF_EVEN); } chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge); - chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(2, RoundingMode.DOWN)); - chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(2, RoundingMode.DOWN)); - chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(2, RoundingMode.DOWN)); - chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(2, RoundingMode.DOWN)); + chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc); + chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge); + chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice); + chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount); chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); - periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc.setScale(2, RoundingMode.DOWN)); - periodServicePrice_total = periodServicePrice_total.add(originalServicePrice.setScale(2, RoundingMode.DOWN)); - total = total.add(electrovalenc.add(originalServicePrice.setScale(2, RoundingMode.DOWN))); + periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); + periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); + total = total.add(electrovalenc.add(originalServicePrice)); } @@ -1959,6 +1959,7 @@ //总金额(充值金额+会员折扣金额) BigDecimal decimal = rechargeAmount.add(vipDiscountAmount); //退款金额(已经计算了折扣优惠部分) + //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额) BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total)); BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue()); @@ -1977,8 +1978,6 @@ //服务费折扣 discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount()))); - periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount()); - TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); BigDecimal maximumDeduction = vip.getMaximumDeduction(); //普通会员有最高优惠限制 @@ -1988,8 +1987,9 @@ } } //会员折扣金额 - discountAmount = discountAmount.setScale(2, RoundingMode.DOWN); + discountAmount = discountAmount.setScale(2, RoundingMode.HALF_EVEN); payAmount = payAmount.subtract(discountAmount); + periodServicePrice_total = periodServicePrice_total.subtract(discountAmount); TChargingOrder order = new TChargingOrder(); order.setId(chargingOrder.getId()); @@ -2001,13 +2001,13 @@ }else{ order.setEndMode(1); } - order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.DOWN)); + order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN)); order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS"))); order.setStatus(5); - order.setOrderAmount(orderAmount.setScale(2, RoundingMode.DOWN)); + order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setVipDiscountAmount(discountAmount); - order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.DOWN)); + order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN)); order.setChargingCapacity(vo.getTotal_electricity()); order.setElectricity(vo.getTotal_electricity()); @@ -2029,7 +2029,6 @@ periodServicePrice_total = BigDecimal.ZERO; }else{ couponDiscount = couponDiscountAmount; - periodServicePrice_total = periodServicePrice_total.subtract(couponDiscountAmount); } appCoupon.setStatus(2); appCouponClient.updateAppCoupon(appCoupon); @@ -2051,7 +2050,6 @@ periodServicePrice_total = BigDecimal.ZERO; }else{ couponDiscount = divide; - periodServicePrice_total = periodServicePrice_total.subtract(divide); } appCoupon.setStatus(2); @@ -2064,13 +2062,16 @@ } } //优惠券优惠金额 - couponDiscount = couponDiscount.setScale(2, RoundingMode.DOWN); + couponDiscount = couponDiscount.setScale(2, RoundingMode.HALF_EVEN); refundAmount = refundAmount.add(couponDiscount); payAmount = payAmount.subtract(couponDiscount); + if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){ + periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount); + } order.setCouponDiscountAmount(couponDiscount); - order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.DOWN)); - order.setPaymentAmount(payAmount.setScale(2, RoundingMode.DOWN)); - order.setRefundAmount(refundAmount.setScale(2, RoundingMode.DOWN)); + order.setServiceCharge(periodServicePrice_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); this.updateById(order); chargingOrder = this.getById(order.getId()); -- Gitblit v1.7.1