From 3c405fc02791950579360078a0facea172c94770 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 27 九月 2024 16:25:15 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   40 ++++++++++++++++++++++++++--------------
 1 files changed, 26 insertions(+), 14 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 7d09d3d..7ac0582 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
@@ -498,7 +498,7 @@
 			paymentOrder.setAmount(addChargingOrder.getPaymentAmount());
 			paymentOrder.setOpenId(appUser.getWxOpenid());
 			paymentOrder.setDescription("充电充值");
-			paymentOrder.setNotifyUrl("/order/t-charging-order/chargingOrderWXCallback");
+			paymentOrder.setNotifyUrl("/payment/wx/pay/notify");
 			Map<String, Object> data = wxPaymentClient.orderPay(paymentOrder).getData();
 			return AjaxResult.success(data);
 		}
@@ -550,7 +550,9 @@
 		//根据当前充值的金额和计费模板算出充电的金额
 		BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
 		BigDecimal rechargeAmount1 = new BigDecimal(rechargeAmount.toString());
-		Long now = System.currentTimeMillis();
+		SimpleDateFormat sdf = new SimpleDateFormat("HHmm");
+		Long now = Long.valueOf(sdf.format(new Date()));
+		Long nowTimeMillis = System.currentTimeMillis();
 		//根据支付金额,获取出使用的计费策略明细
 		//计算电费金额和服务费
 		BigDecimal serviceCharge = BigDecimal.ZERO;
@@ -559,20 +561,27 @@
 		BigDecimal discount = chargingOrder.getVipDiscount();
 		//先根据额定功率计算出每秒充电度数,然后计算出支付金额能充多少度电
 		TChargingGun tChargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
-		BigDecimal s_degrees = tChargingGun.getRatedPower().divide(new BigDecimal(3600));
+		BigDecimal s_degrees = tChargingGun.getRatedPower().divide(new BigDecimal(3600), 6, RoundingMode.HALF_EVEN);
 
 		TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
 		List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
 		for (AccountingStrategyDetailOrder accountingStrategyDetailOrder : list) {
-			AccountingStrategyOrder accountingStrategyOrder = accountingStrategyOrderClient.getAccountingStrategyOrderById(accountingStrategyDetailOrder.getAccountingStrategyOrderId()).getData();
 			Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", ""));
+			Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", ""));
 			String[] split = accountingStrategyDetailOrder.getEndTime().split(":");
-			if(now >= start){
+			if(now >= start && now < end){
 				Calendar calendar = Calendar.getInstance();
 				calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
 				calendar.set(Calendar.MINUTE, Integer.valueOf(split[1]));
 				//到此策略结束的秒数
-				long m = (calendar.getTimeInMillis() - now) / 1000;
+				if(null == nowTimeMillis){
+					String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":");
+					Calendar calendar1 = Calendar.getInstance();
+					calendar1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
+					calendar1.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
+					nowTimeMillis = calendar.getTimeInMillis();
+				}
+				long m = (calendar.getTimeInMillis() - nowTimeMillis) / 1000;
 				//每度电的单价
 				BigDecimal total_unit = accountingStrategyDetailOrder.getElectrovalence().add(accountingStrategyDetailOrder.getServiceCharge());
 				//每秒需要支付的金额
@@ -585,6 +594,7 @@
 					serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(m));
 					discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10))));
 					rechargeAmount1 = rechargeAmount1.subtract(multiply.multiply(new BigDecimal(m)));
+					nowTimeMillis = null;
 				}else{
 					electrovalence = accountingStrategyDetailOrder.getElectrovalence().multiply(s_degrees).multiply(new BigDecimal(times));
 					serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(times));
@@ -649,10 +659,9 @@
 				Integer failure_cause = platformStartChargingReply.getFailure_cause();
 				Integer counter = counter_map.get(code);
 				PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
-				//状态为5的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电
-				//因这里是间隔5秒执行检测,所以累计次数在30次以上
-				if(failure_cause == 5 && (null == counter || counter < 35)){
-					counter++;
+				//5分钟内还未插枪则取消充电,退回金额。
+				if(failure_cause == 5 && (null == counter || counter < 300)){
+					counter = (null == counter ? 0 : counter) + 1;
 					counter_map.put(code, counter);
 					//启动失败
 					preChargeCheck1.setStartupSuccess(3);
@@ -660,9 +669,9 @@
 					redisService.setCacheObject(key, preChargeCheck1);
 					return;
 				}
+				
 				//清除计时器中的无效数据
 				counter_map.remove(code);
-				//开始处理退款
 				TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
 				if(0 == startup_result){
 					//启动失败
@@ -673,6 +682,7 @@
 					order.setStatus(-1);
 					order.setEndMode(0);
 				}else{
+					//启动成功
 					preChargeCheck1.setStartupSuccess(2);
 					order.setStatus(3);
 					order.setStartTime(LocalDateTime.now());
@@ -681,8 +691,10 @@
 				redisService.setCacheObject(key, preChargeCheck1);
 				//提前结束定时任务
 				scheduler.shutdown();
+			}else{
+				log.error("未上传开启充电结果........");
 			}
-		}, 5, 300, TimeUnit.SECONDS);
+		}, 5, 1, TimeUnit.SECONDS);
 		return AjaxResult.success();
 	}
 	
@@ -717,7 +729,7 @@
 				model.setOut_trade_no(chargingOrder.getCode());
 				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
 				model.setReason("充电失败,取消充电订单");
-				model.setNotify_url("/order/t-charging-order/chargingOrderStartupFailureWxRefund");
+				model.setNotify_url("/payment/wx/refund/notify");
 				WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
 				amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue());
 				amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
@@ -1121,7 +1133,7 @@
 				model.setOut_trade_no(chargingOrder.getCode());
 				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
 				model.setReason("充电完成退款");
-				model.setNotify_url("/order/t-charging-order/chargingOrderStartupFailureWxRefund");
+				model.setNotify_url("/payment/wx/refund/notify");
 				WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
 				amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
 				amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());

--
Gitblit v1.7.1