From eb7dee0f8a19f540bc9369fc0c72ea72887ec98a Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 15 十月 2024 09:42:12 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   59 ++++++++++++++++++++++++++++++-----------------------------
 1 files changed, 30 insertions(+), 29 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 be2102b..780c63f 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
@@ -1028,12 +1028,11 @@
 					} catch (InterruptedException e) {
 						throw new RuntimeException(e);
 					}
-					continue;
 				}else{
 					log.error(code1 + ":-------------------远程停止充电请求成功-------------------");
 					stop_status = true;
+					break;
 				}
-				break;
 			}
 			if(stop_status){
 				chargingOrder.setStatus(5);
@@ -1211,17 +1210,8 @@
 			}
 			log.error(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause);
 		}else{
-			order.setEndTime(LocalDateTime.now());
-			order.setStatus(5);
 			order.setEndMode(1);
 			this.updateById(order);
-			//计算用户标签
-			editUserTag(order);
-			//用户推荐奖励
-			referralReward(order);
-			// 将枪状态重置为空闲
-			chargingGun.setStatus(2);
-			chargingGunClient.updateChargingGunById(chargingGun);
 		}
 	}
 	
@@ -1744,13 +1734,21 @@
 				if(chargingOrderAccountingStrategy.getAccountingStrategyDetailId().equals(strategyDetail.getId())){
 					//已充电总度数
 					BigDecimal charging_degree = query.getCharging_degree();
-					BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
-					BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
+					BigDecimal chargingCapacity = chargingOrderAccountingStrategy.getChargingCapacity();
+					//计算本阶段充电度数
+					BigDecimal subtract = charging_degree.subtract(chargingCapacity);
+					//计算本阶段费用
+					BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(subtract);
+					BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(subtract);
 					BigDecimal serviceCharge = originalServicePrice;
 					//计算优惠金额
 					if(null != chargingOrder.getVipDiscount()){
 						serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
 					}
+					//将本阶段的费用增加到总费用中
+					electrovalenc = electrovalenc.add(chargingOrderAccountingStrategy.getPeriodElectricPrice());
+					originalServicePrice = originalServicePrice.add(chargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
+					serviceCharge = serviceCharge.add(chargingOrderAccountingStrategy.getPeriodServicePrice());
 					chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
 					chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
 					chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
@@ -1809,23 +1807,8 @@
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void endCharge(String orderCode, Integer endMode) {
 		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, orderCode));
-		Integer status = chargingOrder.getStatus();
-		if(status == 4 || status == 5){
-			return;
-		}
-		chargingOrder.setStatus(5);
 		chargingOrder.setEndMode(endMode);
-		chargingOrder.setEndTime(LocalDateTime.now());
 		this.updateById(chargingOrder);
-		// 将枪状态重置为空闲
-		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
-		chargingGun.setStatus(2);
-		chargingGunClient.updateChargingGunById(chargingGun);
-		
-		//计算用户标签
-		editUserTag(chargingOrder);
-		//用户推荐奖励
-		referralReward(chargingOrder);
 	}
 
 	/**
@@ -1845,10 +1828,20 @@
 	@Override
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void endChargeBillingCharge(TransactionRecordMessageVO vo) {
+		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
+		Integer status = chargingOrder.getStatus();
+		if(status == 4 || status == 5){
+			return;
+		}
+		
+		//计算用户标签
+		editUserTag(chargingOrder);
+		//用户推荐奖励
+		referralReward(chargingOrder);
+		
 		//如果使用优惠券需要判断优惠券是否满足使用条件
 		//根据实际的充电金额计算退款金额   退回费用=(原金额/总金额)*(总金额-实际充电金额)
 		//退款金额=优惠券金额+剩余充电金额
-		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
 		List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
 		BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
 		BigDecimal periodServicePrice_total = BigDecimal.ZERO;
@@ -1900,9 +1893,12 @@
 		if(chargingOrder.getEndMode() == 2){
 			chargingOrder.setEndMode(refundAmount.compareTo(BigDecimal.ZERO) > 0 ? 2 : 3);
 		}
+		chargingOrder.setEndTime(LocalDateTime.now());
 		chargingOrder.setStatus(5);
 		chargingOrder.setOrderAmount(orderAmount);
 		chargingOrder.setVipDiscountAmount(discountAmount);
+		chargingOrder.setServiceCharge(periodServicePrice_total);
+		chargingOrder.setElectrovalence(periodElectricPrice_total);
 		
 		//计算优惠券
 		if(null != chargingOrder.getAppCouponId()){
@@ -1942,6 +1938,11 @@
 		chargingOrder.setPaymentAmount(payAmount);
 		this.updateById(chargingOrder);
 		
+		// 将枪状态重置为空闲
+		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		chargingGun.setStatus(2);
+		chargingGunClient.updateChargingGunById(chargingGun);
+		
 		//添加积分
 		TIntegralRule integralRule = integralRuleClient.getSet().getData();
 		if(null != integralRule){

--
Gitblit v1.7.1