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                                 |   28 ++++++++
 ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java                                 |   24 +++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/ChargingHandshakeController.java                     |   35 +++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java                   |    2 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingHandshakeClient.java                    |   26 ++++++++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingHandshake.java                                |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetails.java                                                    |    6 +-
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/ChargingHandshakeFallbackFactory.java               |   37 ++++++++++++
 9 files changed, 156 insertions(+), 8 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/ChargingHandshakeFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/ChargingHandshakeFallbackFactory.java
new file mode 100644
index 0000000..a1b0f16
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/ChargingHandshakeFallbackFactory.java
@@ -0,0 +1,37 @@
+package com.ruoyi.integration.api.factory;
+
+import com.ruoyi.common.core.domain.R;
+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 org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 充电桩服务降级处理
+ * 
+ * @author ruoyi
+ */
+@Component
+public class ChargingHandshakeFallbackFactory implements FallbackFactory<ChargingHandshakeClient>
+{
+    private static final Logger log = LoggerFactory.getLogger(ChargingHandshakeFallbackFactory.class);
+
+    @Override
+    public ChargingHandshakeClient create(Throwable throwable) {
+        log.error("调用充电握手数据失败:{}", throwable.getMessage());
+        return new ChargingHandshakeClient() {
+    
+    
+            @Override
+            public R<ChargingHandshake> getDataByOrderCode(String code) {
+                return R.fail("根据订单号查询充电握手数据失败:" + throwable.getMessage());
+            }
+        };
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingHandshakeClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingHandshakeClient.java
new file mode 100644
index 0000000..b81372d
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/ChargingHandshakeClient.java
@@ -0,0 +1,26 @@
+package com.ruoyi.integration.api.feignClient;
+
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.factory.ChargingHandshakeFallbackFactory;
+import com.ruoyi.integration.api.model.ChargingHandshake;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/28 10:46
+ */
+@FeignClient(contextId = "ChargingHandshakeClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = ChargingHandshakeFallbackFactory.class)
+public interface ChargingHandshakeClient {
+	
+	
+	/**
+	 * 根据订单号查询充电握手数据
+	 * @param code
+	 * @return
+	 */
+	@PostMapping("/chargingHandshake/getDataByOrderCode")
+	R<ChargingHandshake> getDataByOrderCode(@RequestParam("code") String code);
+}
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingHandshake.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingHandshake.java
index 872cc2e..98158a9 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingHandshake.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingHandshake.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 import lombok.experimental.Accessors;
+import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.math.BigDecimal;
@@ -14,7 +15,7 @@
 @Document(collection = "charging_handshake") //指定要对应的文档名(表名)
 @Accessors(chain = true)
 public class ChargingHandshake extends BaseModel {
-
+    @Id
     private String transaction_serial_number;// 交易流水号
     private String charging_pile_code;// 桩编码
     private String charging_gun_code;// 抢号
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 1dff966..b5188a9 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,2 +1,3 @@
 com.ruoyi.integration.api.factory.IntegrationFallbackFactory
-com.ruoyi.integration.api.factory.UploadRealTimeMonitoringDataFallbackFactory
\ No newline at end of file
+com.ruoyi.integration.api.factory.UploadRealTimeMonitoringDataFallbackFactory
+com.ruoyi.integration.api.factory.ChargingHandshakeFallbackFactory
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/ChargingHandshakeController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/ChargingHandshakeController.java
new file mode 100644
index 0000000..844d62e
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/ChargingHandshakeController.java
@@ -0,0 +1,35 @@
+package com.ruoyi.integration.controller;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.model.ChargingHandshake;
+import com.ruoyi.integration.mongodb.service.ChargingHandshakeService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/28 9:50
+ */
+@RestController
+@RequestMapping("/chargingHandshake")
+public class ChargingHandshakeController {
+	
+	@Resource
+	private ChargingHandshakeService chargingHandshakeService;
+	
+	
+	/**
+	 * 根据订单编号获取充电握手数据
+	 * @param code
+	 * @return
+	 */
+	@PostMapping("/getDataByOrderCode")
+	public R<ChargingHandshake> getDataByOrderCode(@RequestParam("code") String code){
+		ChargingHandshake chargingHandshake = chargingHandshakeService.findById(code);
+		return R.ok(chargingHandshake);
+	}
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java
index aa79902..11c7824 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java
@@ -4,4 +4,6 @@
 import com.ruoyi.integration.mongodb.base.BaseService;
 
 public interface ChargingHandshakeService extends BaseService<ChargingHandshake> {
+
+
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetails.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetails.java
index 6dd6614..18e2fbe 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetails.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetails.java
@@ -26,7 +26,7 @@
 	@ApiModelProperty("续航")
 	private BigDecimal endurance;
 	@ApiModelProperty("剩余充电时间")
-	private Long remainingChargeTime;
+	private Integer remainingChargeTime;
 	@ApiModelProperty("充电枪名")
 	private String name;
 	@ApiModelProperty("订单编号")
@@ -34,9 +34,9 @@
 	@ApiModelProperty("已充电度数")
 	private BigDecimal chargedDegrees;
 	@ApiModelProperty("已充电时间")
-	private Long chargedTime;
+	private Integer chargedTime;
 	@ApiModelProperty("充电费用")
-	private BigDecimal ChargingCost;
+	private BigDecimal chargingCost;
 	@ApiModelProperty("充电状态(0=未知,1=等待中,2=启动中,3=充电中,4=停止中,5=已结束)")
 	private Integer status;
 }
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 94f73de..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,7 +21,9 @@
 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;
@@ -98,6 +100,8 @@
 	@Resource
 	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
 	
+	@Resource
+	private ChargingHandshakeClient chargingHandshakeClient;
 	
 	
 	
@@ -201,7 +205,7 @@
 				map.put("time", time.get(i));
 				//soc
 				map.put("soc", soc.get(i));
-				//电压
+				//功率
 				map.put("power", po.get(i));
 				power.add(map);
 			}
@@ -429,7 +433,6 @@
 		if(null == one){
 			return null;
 		}
-		// todo 需要完善充电实时数据
 		ChargingDetails chargingDetails = new ChargingDetails();
 		chargingDetails.setId(one.getId().toString());
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData();
@@ -438,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;
 	}
 	
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
index e894029..af1d4e3 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -24,6 +24,9 @@
 import com.ruoyi.other.api.domain.TGoods;
 import com.ruoyi.other.api.feignClient.CouponClient;
 import com.ruoyi.other.api.feignClient.GoodsClient;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -59,6 +62,12 @@
     private AppUserAddressClient appUserAddressClient;
     @Resource
     private AppCouponClient appCouponClient;
+    
+    @Resource
+    private WxPaymentClient wxPaymentClient;
+    
+    @Resource
+    private AliPaymentClient aliPaymentClient;
     
     
     
@@ -270,7 +279,20 @@
         //支付方式(1=微信,2=支付宝) todo 待完善
         Integer paymentType = shoppingOrder.getPaymentType();
         if(1 == paymentType){
-        
+            NotifyV3PayDecodeRespBody data = wxPaymentClient.queryOrderInfo(shoppingOrder.getCode()).getData();
+            String trade_state = data.getTrade_state();
+            if("NOTPAY".equals(trade_state) || "REVOKED".equals(trade_state) || "PAYERROR".equals(trade_state)){
+                return AjaxResult.error("订单还未支付,不能操作退款");
+            }
+            if("CLOSED".equals(trade_state)){
+                return AjaxResult.error("订单支付已关闭,不能操作退款");
+            }
+            if("USERPAYING".equals(trade_state)){
+                return AjaxResult.error("订单正在支付中,不能操作退款");
+            }
+            if("REFUND".equals(trade_state)){
+                return AjaxResult.error("订单已退款,不能操作退款");
+            }
         }
         if(2 == paymentType){
         

--
Gitblit v1.7.1