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