From 0ce1f94a0f262a8831f8eb9fd5cf67422dd1d69b Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 27 九月 2024 12:07:38 +0800
Subject: [PATCH] 合併代碼

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 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 964eaa8..1660c2d 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);
 		}
@@ -511,7 +511,7 @@
 			req.setBody("充电充值");
 			AliPaymentResp data = aliPaymentClient.payment(req).getData();
 			if(null != data){
-				data.setNotifyUrl(data.getNotifyUrl() + "/t-charging-order/chargingOrderALICallback");
+				data.setNotifyUrl(data.getNotifyUrl() + "/order/t-charging-order/chargingOrderALICallback");
 				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,21 +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());
 				//每秒需要支付的金额
@@ -586,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));
@@ -631,6 +640,10 @@
 		//使用订单id作为逻辑卡号
 		platformStartCharging.setCard_number(chargingOrder.getId().toString());
 		platformStartCharging.setAccount_balance(electrovalence);
+
+		System.err.println("-------------------远程调起开始充电请求-------------------");
+		System.err.println(platformStartCharging.toString());
+
 		sendMessageClient.platformStartCharging(platformStartCharging);
 		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
 		String code = chargingOrder.getCode();
@@ -638,6 +651,8 @@
 		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
 		scheduler.scheduleAtFixedRate(()->{
 			List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
+			System.err.println("-------------------开始检查调起充电结果-------------------");
+			System.err.println(data.toString());
 			if(data.size() != 0){
 				PlatformStartChargingReply platformStartChargingReply = data.get(1);
 				Integer startup_result = platformStartChargingReply.getStartup_result();
@@ -712,7 +727,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());
@@ -1116,7 +1131,7 @@
 				model.setOut_trade_no(chargingOrder.getCode());
 				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
 				model.setReason("充电完成退款");
-				model.setNotify_url("http://221.182.45.100:9000/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());
@@ -1901,7 +1916,7 @@
 					model.setOut_refund_no(chargingOrderRefund.getRefundCode());
 					model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
 					model.setReason("取消订单");
-					model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund");
+					model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
 					WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
 					amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
 					amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
@@ -1956,7 +1971,7 @@
 					model.setOut_refund_no(chargingOrderRefund.getRefundCode());
 					model.setTransaction_id(tChargingOrder.getSerialNumber());
 					model.setReason("取消订单");
-					model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund");
+					model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
 					WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
 					amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
 					amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());

--
Gitblit v1.7.1