From f08a70b0a1e2cd49075c5d5d3f63d07d0b56cef9 Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期三, 28 八月 2024 12:05:00 +0800
Subject: [PATCH] 完善硬件相关功能

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 104 insertions(+), 16 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 c853def..090c134 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
@@ -1,7 +1,5 @@
 package com.ruoyi.order.service.impl;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,7 +21,10 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
+import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
+import com.ruoyi.integration.api.model.ChargingHandshake;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
@@ -33,11 +34,9 @@
 import com.ruoyi.order.mapper.TChargingOrderMapper;
 import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
 import com.ruoyi.order.service.TChargingOrderService;
-import com.ruoyi.other.api.domain.TCoupon;
-import com.ruoyi.other.api.domain.TVip;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
-import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody;
-import com.ruoyi.payment.api.vo.PaymentOrder;
+import com.ruoyi.payment.api.vo.*;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -86,6 +85,9 @@
 	private WxPaymentClient wxPaymentClient;
 	
 	@Resource
+	private AliPaymentClient aliPaymentClient;
+	
+	@Resource
 	private ChargingPileClient chargingPileClient;
 	
 
@@ -94,6 +96,15 @@
 	
 	@Resource
 	private RedisService redisService;
+	
+	@Resource
+	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+	
+	@Resource
+	private ChargingHandshakeClient chargingHandshakeClient;
+	
+	
+	
 
 	/**
 	 * 获取小程序充电记录列表数据
@@ -167,11 +178,39 @@
 						.orderByAsc(TChargingOrderAccountingStrategy::getStartTime)
 		);
 		myChargingOrderInfo.setStageCost(stageCost);
-		// todo 待完善
-		//再MongoDB中获取数据
-		myChargingOrderInfo.setCurrentAndVoltage(null);
-		//再MongoDB中获取数据
-		myChargingOrderInfo.setPower(null);
+		List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
+		if(null != dataList){
+			//在MongoDB中获取数据
+			SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+			List<String> time = dataList.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList());
+			List<BigDecimal> outputVoltage = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList());
+			List<BigDecimal> outputCurrent = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList());
+			List<Map<String, Object>> currentAndVoltage = new ArrayList<>();
+			for (int i = 0; i < time.size(); i++) {
+				Map<String, Object> map = new HashMap<>();
+				map.put("time", time.get(i));
+				//电流
+				map.put("electricity", outputCurrent.get(i));
+				//电压
+				map.put("voltage", outputVoltage.get(i));
+				currentAndVoltage.add(map);
+			}
+			myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
+			//在MongoDB中获取数据
+			List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
+			List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000))).collect(Collectors.toList());
+			List<Map<String, Object>> power = new ArrayList<>();
+			for (int i = 0; i < time.size(); i++) {
+				Map<String, Object> map = new HashMap<>();
+				map.put("time", time.get(i));
+				//soc
+				map.put("soc", soc.get(i));
+				//功率
+				map.put("power", po.get(i));
+				power.add(map);
+			}
+			myChargingOrderInfo.setPower(power);
+		}
 		myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L > System.currentTimeMillis() ? 0 : 1);
 		return myChargingOrderInfo;
 	}
@@ -232,7 +271,14 @@
 				}
 			}
 			if(2 == rechargePaymentType){
-			
+				AliQueryOrder data = aliPaymentClient.query(tChargingOrder.getCode()).getData();
+				if(null != data){
+					//支付失败,删除无效的订单
+					String tradeStatus = data.getTradeStatus();
+					if(tradeStatus.equals("TRADE_CLOSED")){
+						this.removeById(tChargingOrder.getId());
+					}
+				}
 			}
 		}
 		
@@ -262,7 +308,19 @@
 				}
 			}
 			if(2 == one.getRechargePaymentType()){
-			
+				AliQueryOrder data = aliPaymentClient.query(one.getCode()).getData();
+				if(null != data){
+					String trade_state = data.getTradeStatus();
+					//支付失败,删除无效的订单
+					if(trade_state.equals("TRADE_CLOSED")){
+						this.removeById(one.getId());
+					}
+					if(trade_state.equals("WAIT_BUYER_PAY")){
+						//结束第三方支付,删除订单
+						aliPaymentClient.close(one.getCode());
+						this.removeById(one.getId());
+					}
+				}
 			}
 		}
 		
@@ -314,7 +372,17 @@
 			return AjaxResult.success(data);
 		}
 		if(2 == addChargingOrder.getPaymentType()){
-		
+			AliPaymentReq req = new AliPaymentReq();
+			req.setOutTradeNo(chargingOrder.getCode());
+			req.setTotalAmount(chargingOrder.getPaymentAmount().toString());
+			req.setSubject("充电充值");
+			req.setBuyerOpenId(appUser.getAliOpenid());
+			req.setBody("充电充值");
+			AliPaymentResp data = aliPaymentClient.payment(req).getData();
+			if(null != data){
+				data.setNotifyUrl(data.getNotifyUrl() + "/t-charging-order/chargingOrderALICallback");
+				return AjaxResult.success(data);
+			}
 		}
 		throw new RuntimeException("无效的支付方式");
 	}
@@ -365,7 +433,6 @@
 		if(null == one){
 			return null;
 		}
-		// todo 需要完善充电实时数据
 		ChargingDetails chargingDetails = new ChargingDetails();
 		chargingDetails.setId(one.getId().toString());
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData();
@@ -374,6 +441,27 @@
 		chargingDetails.setName(site.getName() + "-" + chargingPile.getName());
 		chargingDetails.setCode(one.getCode());
 		chargingDetails.setStatus(one.getStatus());
+		UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
+		if(null != data){
+			chargingDetails.setChargeCurrent(data.getOutput_current());
+			chargingDetails.setChargeVoltage(data.getOutput_voltage());
+			BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000));
+			chargingDetails.setChargePower(power);
+			chargingDetails.setCompletionRatio(data.getSoc());
+			chargingDetails.setRemainingChargeTime(data.getTime_remaining());
+			chargingDetails.setChargedDegrees(data.getCharging_degree());
+			chargingDetails.setChargedTime(data.getCumulative_charging_time());
+			chargingDetails.setChargingCost(data.getPaid_amount());
+		}
+		ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
+		if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
+			BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity();
+			TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
+			//   续航 = 电池容量 / 续航里程 * soc
+			BigDecimal divide = bms_battery_capacity.divide(new BigDecimal(appUserCar.getEndurance()));
+			BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(divide);
+			chargingDetails.setEndurance(multiply);
+		}
 		return chargingDetails;
 	}
 	

--
Gitblit v1.7.1