From 58e039cc6b9cb2067e113c553948ccb88b9c6eba Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 24 十月 2024 14:43:10 +0800
Subject: [PATCH] 合并代码

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   62 ++++++++++++++++++++----------
 1 files changed, 41 insertions(+), 21 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 3e1118a..f07ea73 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
@@ -1663,6 +1663,8 @@
 		
 		//获取订单的计费策略
 		List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
+		
+		//开始处理计费明细数据和优惠数据
 		chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
 		for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
 			Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
@@ -1705,22 +1707,23 @@
 				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 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);
 				}
 				chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
 				chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
 				chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
 				chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
+				chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount);
 				chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
 				chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
 				
-				BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice();
-				BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice();
-				periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice);
-				periodServicePrice_total = periodServicePrice_total.add(periodServicePrice);
-				total = total.add(periodElectricPrice.add(periodServicePrice));
+				periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+				periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+				total = total.add(electrovalenc.add(originalServicePrice));
 			} catch (IllegalAccessException e) {
 				throw new RuntimeException(e);
 			} catch (InvocationTargetException e) {
@@ -1743,21 +1746,19 @@
 		//折扣金额
 		BigDecimal discountAmount = BigDecimal.ZERO;
 		if(null != chargingOrder.getVipDiscount()){
-			//服务费折扣
-			discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
-			periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
-
 			TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
-			if(null != appUser.getVipId()){
-				//判断会员是否还有充电优惠次数
-				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);
-				}
+			//判断会员是否还有充电优惠次数
+			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())));
+				periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount());
 				
 				TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
 				BigDecimal maximumDeduction = vip.getMaximumDeduction();
@@ -1766,8 +1767,8 @@
 					discountAmount = maximumDeduction;
 				}
 			}
-			payAmount = payAmount.subtract(discountAmount);
 		}
+		payAmount = payAmount.subtract(discountAmount);
 		
 		TChargingOrder order = new TChargingOrder();
 		order.setId(chargingOrder.getId());
@@ -1784,7 +1785,6 @@
 		order.setStatus(5);
 		order.setOrderAmount(orderAmount);
 		order.setVipDiscountAmount(discountAmount);
-		order.setServiceCharge(periodServicePrice_total);
 		order.setElectrovalence(periodElectricPrice_total);
 		order.setChargingCapacity(vo.getTotal_electricity());
 		order.setElectricity(vo.getTotal_electricity());
@@ -1805,10 +1805,12 @@
 						refundAmount = refundAmount.add(periodServicePrice_total);
 						order.setCouponDiscountAmount(periodServicePrice_total);
 						payAmount = payAmount.subtract(periodServicePrice_total);
+						periodServicePrice_total = BigDecimal.ZERO;
 					}else{
 						refundAmount = refundAmount.add(couponDiscountAmount);
 						order.setCouponDiscountAmount(couponDiscountAmount);
 						payAmount = payAmount.subtract(couponDiscountAmount);
+						periodServicePrice_total = periodServicePrice_total.subtract(couponDiscountAmount);
 					}
 					
 					appCoupon.setStatus(2);
@@ -1830,10 +1832,12 @@
 						refundAmount = refundAmount.add(periodServicePrice_total);
 						order.setCouponDiscountAmount(periodServicePrice_total);
 						payAmount = payAmount.subtract(periodServicePrice_total);
+						periodServicePrice_total = BigDecimal.ZERO;
 					}else{
 						refundAmount = refundAmount.add(divide);
 						order.setCouponDiscountAmount(divide);
 						payAmount = payAmount.subtract(divide);
+						periodServicePrice_total = periodServicePrice_total.subtract(divide);
 					}
 					
 					appCoupon.setStatus(2);
@@ -1845,12 +1849,28 @@
 				}
 			}
 		}
+		
+		order.setServiceCharge(periodServicePrice_total);
 		order.setPaymentAmount(payAmount);
 		order.setRefundAmount(refundAmount);
 		order.setRefundStatus(1);
 		this.updateById(order);
 		chargingOrder = this.getById(order.getId());
 		
+		//开始将优惠券优惠的金额添加到明细中
+		BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
+		if(couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
+			List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
+			for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
+				BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
+				BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(periodServicePrice_total, new MathContext(4, RoundingMode.HALF_EVEN)));
+				periodServicePrice = periodServicePrice.subtract(multiply);
+				chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice);
+				chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply);
+			}
+			chargingOrderAccountingStrategyService.updateBatchById(list);
+		}
+		
 		// 将枪状态重置为空闲
 		TChargingGun chargingGun = new TChargingGun();
 		chargingGun.setId(chargingOrder.getChargingGunId());

--
Gitblit v1.7.1