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