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 |   80 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 72 insertions(+), 8 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 016a888..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
@@ -21,6 +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.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;
@@ -47,6 +51,7 @@
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -91,6 +96,15 @@
 	
 	@Resource
 	private RedisService redisService;
+	
+	@Resource
+	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+	
+	@Resource
+	private ChargingHandshakeClient chargingHandshakeClient;
+	
+	
+	
 
 	/**
 	 * 获取小程序充电记录列表数据
@@ -164,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;
 	}
@@ -391,7 +433,6 @@
 		if(null == one){
 			return null;
 		}
-		// todo 需要完善充电实时数据
 		ChargingDetails chargingDetails = new ChargingDetails();
 		chargingDetails.setId(one.getId().toString());
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData();
@@ -400,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;
 	}
 	
@@ -445,14 +507,16 @@
 			endTime1 = split[0];
 			endTime2 = split[1];
 		}
+		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+
 		if (StringUtils.hasLength(dto.getPhone())){
 			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
 			if (data.isEmpty()){
-				data.add(0L);
+				tCharingOrderVO.setList(pageInfo);
+				return tCharingOrderVO;
 			}
 			dto.setUserIds(data);
 		}
-		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
 		List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
 		 BigDecimal total = new BigDecimal("0");
 		 long time = 0L;

--
Gitblit v1.7.1