From 99eddbebf80c5549a7487caed95b041abdc9bb5f Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 14 七月 2025 14:06:40 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 193 +++++++++++++++++++++++++++++++++-------------- 1 files changed, 134 insertions(+), 59 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 35a250f..5d21287 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 @@ -32,6 +32,7 @@ import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.feignClient.*; import com.ruoyi.integration.api.model.*; +import com.ruoyi.integration.api.vo.ChargingOrderVo; import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; import com.ruoyi.integration.api.vo.StartChargeResult; import com.ruoyi.order.api.dto.SettlementConfirmAdd; @@ -51,6 +52,7 @@ import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.TOrderEvaluateService; import com.ruoyi.order.service.*; +import com.ruoyi.order.util.RedisLock; import com.ruoyi.order.util.mongodb.service.PlatformStartChargingReplyService; import com.ruoyi.order.util.mongodb.service.TransactionRecordService; import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService; @@ -71,10 +73,14 @@ import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; +import org.redisson.Redisson; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -221,6 +227,12 @@ private ITChargingOrderSummaryDataService chargingOrderSummaryDataService; @Resource private TOrderAppealService orderAppealService; + + @Autowired + private RedissonClient redissonClient; + + @Resource + private ChargingMessageClient chargingMessageClient; @@ -443,7 +455,7 @@ //检查当前枪是否是正在使用中 TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId()) - .in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0)); + .in(TChargingOrder::getStatus, Arrays.asList(3)).eq(TChargingOrder::getDelFlag, 0)); if(null != one){ return AjaxResult.error("充电枪正在充电中,启动失败"); } @@ -799,24 +811,30 @@ //清除计时器中的无效数据 counter_map.remove(code); - TChargingOrder order = new TChargingOrder(); - order.setId(id); - order.setAppUserId(chargingOrder.getAppUserId()); if(0 == startup_result){ //启动失败 preChargeCheck1.setStartupSuccess(3); preChargeCheck1.setFailureCause(failure_cause); //启动失败后取消订单,退款操作 refund(code); - order.setStatus(-1); - order.setEndMode(0); + chargingOrder.setStatus(-1); + chargingOrder.setEndMode(0); }else{ //启动成功 preChargeCheck1.setStartupSuccess(2); - order.setStatus(3); - order.setStartTime(LocalDateTime.now()); + chargingOrder.setStatus(3); + chargingOrder.setStartTime(LocalDateTime.now()); } - this.updateById(order); + this.updateById(chargingOrder); + if(chargingOrder.getStatus() == 3){ + //推送监管平台订单状态 + new Thread(()->{ + ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); + BeanUtils.copyProperties(chargingOrder, chargingOrderVo); + chargingMessageClient.pushOrderStatus(chargingOrderVo); + }).start(); + } + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); //推送三方平台订单状态 if(2 == chargingOrder.getOrderSource()){ @@ -920,6 +938,15 @@ } redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); this.updateById(order); + + if(3 == order.getStatus()){ + //推送监管平台订单状态 + new Thread(()->{ + ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); + BeanUtils.copyProperties(order, chargingOrderVo); + chargingMessageClient.pushOrderStatus(chargingOrderVo); + }).start(); + } //推送三方平台启动充电结果 if(2 == order.getOrderSource()){ StartChargeResult result = new StartChargeResult(); @@ -1027,12 +1054,12 @@ } if(3 == rechargePaymentType){ RefundReq dto = new RefundReq(); - dto.setOutTradeNo(chargingOrder.getCode()); + dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber()); dto.setOutRequestNo(chargingOrderRefund.getCode()); dto.setRefundAmount(rechargeAmount.toString()); dto.setRefundReason("充电失败,取消充电订单"); RefundResp resp = h5AliPaymentClient.refund(dto).getData(); - if(null != resp){ + if(null != resp && "10000".equals(resp.getCode())){ chargingOrderRefundService.save(chargingOrderRefund); //回退会员折扣次数 if(chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0){ @@ -1124,12 +1151,12 @@ } if(3 == rechargePaymentType){ RefundReq dto = new RefundReq(); - dto.setOutTradeNo(chargingOrder.getCode()); + dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber()); dto.setOutRequestNo(chargingOrderRefund.getCode()); dto.setRefundAmount(money.toString()); dto.setRefundReason("充电完成退款"); RefundResp resp = h5AliPaymentClient.refund(dto).getData(); - if(null != resp){ + if(null != resp && "10000".equals(resp.getCode())){ chargingOrderRefundService.save(chargingOrderRefund); try { Thread.sleep(1000); @@ -1237,13 +1264,11 @@ if(!order.getAppUserId().equals(userId)){ return AjaxResult.error("权限不足"); } - TChargingOrder chargingOrder = new TChargingOrder(); - chargingOrder.setId(Long.valueOf(id)); - chargingOrder.setAppUserId(order.getAppUserId()); - chargingOrder.setEndTime(LocalDateTime.now()); - chargingOrder.setStatus(4); - chargingOrder.setEndMode(1); - this.updateById(chargingOrder); + order.setEndTime(LocalDateTime.now()); + order.setStatus(4); + order.setEndMode(1); + this.updateById(order); + String code1 = order.getCode(); TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData(); //异步线程处理停机 @@ -1257,6 +1282,12 @@ sendMessageClient.platformStopCharging(platformStopCharging); log.info(code1 + ":-------------------远程停止充电请求-------------------"); log.info(platformStopCharging.toString()); + + //推送监管平台订单状态和订单详情 + ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); + BeanUtils.copyProperties(order, chargingOrderVo); + chargingMessageClient.pushOrderInfo(chargingOrderVo); + chargingMessageClient.pushOrderStatus(chargingOrderVo); }); //推送三方平台 if(2 == order.getOrderSource()){ @@ -2242,7 +2273,7 @@ } chargingOrder.setChargingCapacity(query.getCharging_degree()); chargingOrder.setElectricity(query.getCharging_degree()); - chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc())); + chargingOrder.setTotalElectricity(new BigDecimal(query.getSoc())); this.updateById(chargingOrder); } } @@ -2278,12 +2309,18 @@ */ @Override public R endChargeBillingCharge(TransactionRecordMessageVO vo) { - Boolean hasKey = redisService.hasKey("endOrder:" + vo.getTransaction_serial_number()); - if(hasKey){ + RLock lock = redissonClient.getLock("endOrder:" + vo.getTransaction_serial_number()); + boolean tryLock = false; + try { + tryLock = lock.tryLock(100, TimeUnit.SECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + lock.unlock(); return R.ok(); } - //添加1分钟的缓存 - redisService.setCacheObject("endOrder:" + vo.getTransaction_serial_number(), vo.getTransaction_serial_number(), 1L, TimeUnit.MINUTES); + if(!tryLock){ + return R.ok(); + } try { TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number())); if(null == chargingOrder){ @@ -2304,6 +2341,9 @@ //获取订单的计费策略 List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); + if(accountingStrategyDetailOrderList.isEmpty()){ + return R.fail("计费策略为空,无法计算费用"); + } accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59"); //开始处理计费明细数据和优惠数据 chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); @@ -2718,12 +2758,12 @@ } if(3 == rechargePaymentType){ RefundReq dto = new RefundReq(); - dto.setOutTradeNo(chargingOrder.getCode()); + dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber()); dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); dto.setRefundAmount(refundAmount.toString()); dto.setRefundReason("充电完成退款"); RefundResp resp = h5AliPaymentClient.refund(dto).getData(); - if(null != resp){ + if(null != resp && "10000".equals(resp.getCode())){ chargingOrderRefundService.save(chargingOrderRefund); this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } @@ -2763,7 +2803,7 @@ }catch (Exception e) { e.printStackTrace(); }finally { - redisService.deleteObject("endOrder:" + vo.getTransaction_serial_number()); + lock.unlock(); } return R.ok(); } @@ -2935,12 +2975,12 @@ } if(3 == tChargingOrder.getRechargePaymentType()){ RefundReq dto = new RefundReq(); - dto.setOutTradeNo(tChargingOrder.getCode()); + dto.setOutTradeNo(tChargingOrder.getRechargeSerialNumber()); dto.setOutRequestNo(tChargingOrder.getCode()); dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); dto.setRefundReason("取消订单"); RefundResp resp = h5AliPaymentClient.refund(dto).getData(); - if(null != resp){ + if(null != resp && "10000".equals(resp.getCode())){ chargingOrderRefund.setRefundStatus(2); chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); this.baseMapper.updateById(tChargingOrder); @@ -3015,20 +3055,20 @@ shoppingOrderRefundService.save(chargingOrderRefund); } } - if(3 == tChargingOrder.getPaymentType()){ - RefundReq dto = new RefundReq(); - dto.setOutTradeNo(tChargingOrder.getCode()); - dto.setOutRequestNo(tChargingOrder.getCode()); - dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); - dto.setRefundReason("取消订单"); - RefundResp resp = h5AliPaymentClient.refund(dto).getData(); - if(null != resp){ - tChargingOrder.setRefundStatus(2); - tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); - shoppingOrderService.updateById(tChargingOrder); - shoppingOrderRefundService.save(chargingOrderRefund); - } - } +// if(3 == tChargingOrder.getPaymentType()){ +// RefundReq dto = new RefundReq(); +// dto.setOutTradeNo(tChargingOrder.getCode()); +// dto.setOutRequestNo(tChargingOrder.getCode()); +// dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); +// dto.setRefundReason("取消订单"); +// RefundResp resp = h5AliPaymentClient.refund(dto).getData(); +// if(null != resp){ +// tChargingOrder.setRefundStatus(2); +// tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); +// shoppingOrderService.updateById(tChargingOrder); +// shoppingOrderRefundService.save(chargingOrderRefund); +// } +// } } @@ -3094,20 +3134,20 @@ vipOrderRefundService.save(chargingOrderRefund); } } - if(3 == tChargingOrder.getPaymentType()){ - RefundReq dto = new RefundReq(); - dto.setOutTradeNo(tChargingOrder.getCode()); - dto.setOutRequestNo(tChargingOrder.getCode()); - dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); - dto.setRefundReason("取消订单"); - RefundResp resp = h5AliPaymentClient.refund(dto).getData(); - if(null != resp){ - tChargingOrder.setRefundStatus(2); - tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); - vipOrderService.updateById(tChargingOrder); - vipOrderRefundService.save(chargingOrderRefund); - } - } +// if(3 == tChargingOrder.getPaymentType()){ +// RefundReq dto = new RefundReq(); +// dto.setOutTradeNo(tChargingOrder.getCode()); +// dto.setOutRequestNo(tChargingOrder.getCode()); +// dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); +// dto.setRefundReason("取消订单"); +// RefundResp resp = h5AliPaymentClient.refund(dto).getData(); +// if(null != resp){ +// tChargingOrder.setRefundStatus(2); +// tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); +// vipOrderService.updateById(tChargingOrder); +// vipOrderRefundService.save(chargingOrderRefund); +// } +// } } return R.ok(); } @@ -4117,7 +4157,6 @@ chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); - tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId()); String code1 = order.getCode(); @@ -4133,6 +4172,12 @@ sendMessageClient.platformStopCharging(platformStopCharging); log.info(code1 + ":-------------------远程停止充电请求-------------------"); log.info(platformStopCharging.toString()); + + //推送监管平台订单状态和订单详情 + ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); + BeanUtils.copyProperties(chargingOrder, chargingOrderVo); + chargingMessageClient.pushOrderInfo(chargingOrderVo); + chargingMessageClient.pushOrderStatus(chargingOrderVo); }); return R.ok(); } @@ -4279,4 +4324,34 @@ return this.baseMapper.getSumDegreeBySiteIds(siteIds); } + + + /** + * 获取启动失败且时间超过1小时的订单 + * @return + */ + @Override + public List<TChargingOrder> findFailedStartupOrder() { + return this.baseMapper.findFailedStartupOrder(); + } + + + /** + * 获取停止中的数据 + * @return + */ + @Override + public List<TChargingOrder> findStoppedOrder() { + return this.baseMapper.findStoppedOrder(); + } + + + /** + * 获取充电中的数据 + * @return + */ + @Override + public List<TChargingOrder> findChargingOrder() { + return this.baseMapper.findChargingOrder(); + } } -- Gitblit v1.7.1