From c615b9c504d6bf6f51a600d9e8c056b0321240fb Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 28 二月 2025 12:01:03 +0800
Subject: [PATCH] 修改会员折扣退款bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   43 ++++++++++++-------------------------------
 1 files changed, 12 insertions(+), 31 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 6a24a15..fc64e04 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
@@ -2212,42 +2212,19 @@
 			total = total.add(electrovalenc.add(originalServicePrice));
 		}
 		
+		BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
+		//折扣金额
+		BigDecimal discountAmount = chargingOrder.getVipDiscountAmount();
 		//原金额
 		BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
-		BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount();
 		//总金额(充值金额+会员折扣金额)
-		BigDecimal decimal = rechargeAmount.add(vipDiscountAmount);
+		BigDecimal decimal = rechargeAmount.add(discountAmount);
 		//退款金额(已经计算了折扣优惠部分)
 		//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
 		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());
-		//折扣金额
-		BigDecimal discountAmount = BigDecimal.ZERO;
-		if(null != chargingOrder.getVipDiscount()){
-			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
-			//判断会员是否还有充电优惠次数
-			GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
-			getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
-			getAppUserVipDetail.setVipId(appUser.getVipId());
-			TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
-			if(null != data && data.getChargeNum() > 0){
-				data.setChargeNum(data.getChargeNum() - 1);
-				appUserVipDetailClient.updateAppUserVipDetail(data);
-				
-				//服务费折扣
-				discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
-				TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
-				BigDecimal maximumDeduction = vip.getMaximumDeduction();
-				//普通会员有最高优惠限制
-				if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
-					discountAmount = maximumDeduction;
-				}
-			}
-		}
-		//会员折扣金额
-		discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
-		payAmount = payAmount.subtract(discountAmount);
+		//支付金额
+		BigDecimal payAmount = rechargeAmount.subtract(refundAmount);
+		//实际充值服务费-会员折扣
 		periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
 
 		TChargingOrder order = new TChargingOrder();
@@ -2269,10 +2246,12 @@
 		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.HALF_EVEN));
-		order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
 		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.setVipDiscount(BigDecimal.valueOf(1));
+		}
 		
 		//计算优惠券
 		BigDecimal couponDiscount = BigDecimal.ZERO;
@@ -2326,7 +2305,9 @@
 		}
 		//优惠券优惠金额
 		couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+		//退款金额+优惠券
 		refundAmount = refundAmount.add(couponDiscount);
+		//实际支付金额-优惠券
 		payAmount = payAmount.subtract(couponDiscount);
 		if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
 			periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);

--
Gitblit v1.7.1