puzhibing
2026-04-02 67473ebd48956fad160368667887f0ef6ddb74f2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2361,24 +2361,22 @@
    *
    * @param vo
    */
    @Transactional
   @Override
    @Transactional
   public R endChargeBillingCharge(TransactionRecordMessageVO vo) {
      RLock lock = redissonClient.getLock("endOrder:" + vo.getTransaction_serial_number());
      try {
            boolean tryLock = lock.tryLock(60, 60, TimeUnit.SECONDS);
            if(tryLock){
                Object cacheObject = redisService.getCacheObject("chargingOrderStatus:" + vo.getTransaction_serial_number());
                if(null != cacheObject && 5 == (int)cacheObject){
                    return R.ok();
                }
                TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
                if (null == chargingOrder) {
                    return R.ok();
                    log.error("订单不存在,订单号:{}", vo.getTransaction_serial_number());
                    return R.fail("订单不存在,订单号:" + vo.getTransaction_serial_number());
                }
                Integer status = chargingOrder.getStatus();
                if (status == 5) {
                    return R.ok();
                    log.info("订单已结算,订单号:{}", vo.getTransaction_serial_number());
                    return R.fail("订单已结算,订单号:" + vo.getTransaction_serial_number());
                }
                //如果使用优惠券需要判断优惠券是否满足使用条件
@@ -2686,7 +2684,6 @@
                    chargingOrder.setEndSoc(new BigDecimal(desc.getSoc()));
                }
                this.updateById(chargingOrder);
                redisService.setCacheObject("chargingOrderStatus:" + vo.getTransaction_serial_number(), 5, 100L, TimeUnit.SECONDS);
                chargingOrder = this.getById(chargingOrder.getId());
                Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
@@ -2809,13 +2806,12 @@
                            model.setAmount(amount);
                            R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
                            if (200 == result.getCode()) {
                                chargingOrderRefundService.save(chargingOrderRefund);
                                //手续费
                                Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
                                Object refund_fee1 = amount1.get("refund_fee");
                                BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
                                chargingOrderRefund.setRefundFee(refund_fee);
                                chargingOrderRefundService.updateById(chargingOrderRefund);
                                chargingOrderRefundService.save(chargingOrderRefund);
                            }
                        }
                        if (2 == rechargePaymentType) {
@@ -2890,7 +2886,7 @@
                }
                TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
                summaryData.setChargingOrderId(chargingOrder.getId());
                summaryData.setChargingCapacity(chargingCapacity);
                summaryData.setChargingCapacity(chargingCapacity.setScale(6, RoundingMode.HALF_EVEN));
                summaryData.setChargingDuration(time);
                summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
                summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
@@ -4395,10 +4391,10 @@
            long between = ChronoUnit.SECONDS.between(startTime, endTime);
            time += between;
         }
         TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
         summaryData.setChargingOrderId(chargingOrderVO.getId());
         summaryData.setChargingCapacity(chargingCapacity);
         summaryData.setChargingCapacity(chargingCapacity.setScale(6, RoundingMode.HALF_EVEN));
         summaryData.setChargingDuration(time);
         summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
         summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));