Pu Zhibing
2 天以前 8b0cf2731d2b61999fdd1aeee91567dc47d67e14
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -51,6 +51,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 +72,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 +226,9 @@
   private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
   @Resource
   private TOrderAppealService orderAppealService;
   @Autowired
   private RedissonClient redissonClient;
@@ -443,7 +451,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("充电枪正在充电中,启动失败");
      }
@@ -1027,12 +1035,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 +1132,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);
@@ -2278,12 +2286,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){
@@ -2718,12 +2732,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 +2777,7 @@
      }catch (Exception e) {
         e.printStackTrace();
      }finally {
         redisService.deleteObject("endOrder:" + vo.getTransaction_serial_number());
         lock.unlock();
      }
      return R.ok();
   }
@@ -2935,12 +2949,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 +3029,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 +3108,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();
   }
@@ -4279,4 +4293,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();
   }
}