| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | private ITChargingOrderSummaryDataService chargingOrderSummaryDataService; |
| | | @Resource |
| | | private TOrderAppealService orderAppealService; |
| | | |
| | | @Autowired |
| | | private RedissonClient redissonClient; |
| | | |
| | | |
| | | |
| | |
| | | |
| | | //检查当前枪是否是正在使用中 |
| | | 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("充电枪正在充电中,启动失败"); |
| | | } |
| | |
| | | } |
| | | 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){ |
| | |
| | | } |
| | | 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); |
| | |
| | | */ |
| | | @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){ |
| | |
| | | } |
| | | 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); |
| | | } |
| | |
| | | }catch (Exception e) { |
| | | e.printStackTrace(); |
| | | }finally { |
| | | redisService.deleteObject("endOrder:" + vo.getTransaction_serial_number()); |
| | | lock.unlock(); |
| | | } |
| | | return R.ok(); |
| | | } |
| | |
| | | } |
| | | 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); |
| | |
| | | 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); |
| | | // } |
| | | // } |
| | | |
| | | } |
| | | |
| | |
| | | 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(); |
| | | } |
| | |
| | | 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(); |
| | | } |
| | | } |