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