Compare commits
	
		
			2 Commits
		
	
	
		
			6ce070ffc7
			...
			859fcdc118
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 859fcdc118 | |||
| 798f68aa2b | 
| @ -688,47 +688,56 @@ public class OrderServiceImpl implements OrderService { | ||||
|         return getOrderDetailByOrderNo(orderMainPO.getOrderNo()); | ||||
|     } | ||||
|  | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     @Override | ||||
|     public void rejectRentOrder(RejectOrderReq rejectOrderReq) { | ||||
|         OrderMainPO orderMainPO = queryOrderMainPoByOrderNo(rejectOrderReq.getOrderNo(), "0"); | ||||
|         if(!orderMainPO.getOrderStatus().equals(OrderStatusEnum.WAIT_PICK.getCode())){ | ||||
|             throw new BizException("订单状态异常,非待取车状态,无法驳回"); | ||||
|         if(!orderMainPO.getOrderStatus().equals(OrderStatusEnum.WAIT_PICK.getCode())||!orderMainPO.getOrderStatus().equals(OrderStatusEnum.WAIT_RETURN.getCode())){ | ||||
|             throw new BizException("订单状态异常,非待取车或待还车状态,无法驳回"); | ||||
|         } | ||||
|         SimpleUserInfoDTO userInfoDTO = jwtUtil.getUserInfoFromToken(); | ||||
|         //获取租车子订单 | ||||
|         LambdaQueryWrapper<OrderSubPO> orderSubWrapper = new LambdaQueryWrapper<>(); | ||||
|         orderSubWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()) | ||||
|                 .eq(OrderSubPO::getDelFlag, "0") | ||||
|                 .eq(OrderSubPO::getSuborderType, SubOrderTypeEnum.RENTCAR.getCode()) | ||||
|                 .eq(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).last(" limit 1"); | ||||
|         OrderSubPO orderSubPO = orderSubRepo.getOne(orderSubWrapper); | ||||
|         //异步退款订单 | ||||
|         ThreadPoolUtils.getThreadPool().execute(() -> { | ||||
|             //变更订单状态,记录结束订单时间,记录订单备注 | ||||
|  | ||||
|         if(orderMainPO.getOrderStatus().equals(OrderStatusEnum.WAIT_PICK.getCode())){ | ||||
|             //获取租车子订单 | ||||
|             LambdaQueryWrapper<OrderSubPO> orderSubWrapper = new LambdaQueryWrapper<>(); | ||||
|             orderSubWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()) | ||||
|                     .eq(OrderSubPO::getDelFlag, "0") | ||||
|                     .eq(OrderSubPO::getSuborderType, SubOrderTypeEnum.RENTCAR.getCode()) | ||||
|                     .eq(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).last(" limit 1"); | ||||
|             OrderSubPO orderSubPO = orderSubRepo.getOne(orderSubWrapper); | ||||
|             //异步退款订单 | ||||
|             ThreadPoolUtils.getThreadPool().execute(() -> { | ||||
|                 //变更订单状态,记录结束订单时间,记录订单备注 | ||||
|                 LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>(); | ||||
|                 updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.MANUAL_END.getCode()); | ||||
|                 updateWrapper.set(OrderMainPO::getActEndRentTime, LocalDateTime.now()); | ||||
|                 updateWrapper.eq(OrderMainPO::getOrderNo, rejectOrderReq.getOrderNo()); | ||||
|                 orderMainRepo.update(updateWrapper); | ||||
|                 if (Objects.nonNull(orderSubPO)) { | ||||
|                     //退款调用成功则添加退款子订单 | ||||
|                     String outRefundNo = payService.refundOrder(orderSubPO.getPaymentMethod(), orderMainPO.getOperatorId(), orderSubPO.getPaymentId(), orderMainPO.getOrderAmount(), orderMainPO.getOrderAmount()); | ||||
|                     if (StringUtils.isNotBlank(outRefundNo)) { | ||||
|                         OrderSubPO fdSubOrder = new OrderSubPO(); | ||||
|                         fdSubOrder.setOrderId(orderMainPO.getOrderId()); | ||||
|                         fdSubOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.FD_PREFIX)); | ||||
|                         fdSubOrder.setSuborderType(SubOrderTypeEnum.FD_REJECT.getCode()); | ||||
|                         fdSubOrder.setAmount(orderMainPO.getOrderAmount()); | ||||
|                         fdSubOrder.setPaymentMethod(orderSubPO.getPaymentMethod()); | ||||
|                         fdSubOrder.setPayStatus(PayStatusEnum.REFUNDING.getCode()); | ||||
|                         fdSubOrder.setPaymentId(orderSubPO.getPaymentId()); | ||||
|                         fdSubOrder.setRefundId(outRefundNo); | ||||
|                         fdSubOrder.setRemark(rejectOrderReq.getRejectReason()); | ||||
|                         orderSubRepo.save(fdSubOrder); | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|         } else if(orderMainPO.getOrderStatus().equals(OrderStatusEnum.WAIT_RETURN.getCode())){ | ||||
|             LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>(); | ||||
|             updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.MANUAL_END.getCode()); | ||||
|             updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); | ||||
|             updateWrapper.set(OrderMainPO::getActEndRentTime, LocalDateTime.now()); | ||||
|             updateWrapper.eq(OrderMainPO::getOrderNo, rejectOrderReq.getOrderNo()); | ||||
|             orderMainRepo.update(updateWrapper); | ||||
|             if (Objects.nonNull(orderSubPO)) { | ||||
|                 //退款调用成功则添加退款子订单 | ||||
|                 String outRefundNo = payService.refundOrder(orderSubPO.getPaymentMethod(), orderMainPO.getOperatorId(), orderSubPO.getPaymentId(), orderMainPO.getOrderAmount(), orderMainPO.getOrderAmount()); | ||||
|                 if (StringUtils.isNotBlank(outRefundNo)) { | ||||
|                     OrderSubPO fdSubOrder = new OrderSubPO(); | ||||
|                     fdSubOrder.setOrderId(orderMainPO.getOrderId()); | ||||
|                     fdSubOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.FD_PREFIX)); | ||||
|                     fdSubOrder.setSuborderType(SubOrderTypeEnum.FD_REJECT.getCode()); | ||||
|                     fdSubOrder.setAmount(orderMainPO.getOrderAmount()); | ||||
|                     fdSubOrder.setPaymentMethod(orderSubPO.getPaymentMethod()); | ||||
|                     fdSubOrder.setPayStatus(PayStatusEnum.REFUNDING.getCode()); | ||||
|                     fdSubOrder.setPaymentId(orderSubPO.getPaymentId()); | ||||
|                     fdSubOrder.setRefundId(outRefundNo); | ||||
|                     fdSubOrder.setRemark(rejectOrderReq.getRejectReason()); | ||||
|                     orderSubRepo.save(fdSubOrder); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|  | ||||
| @ -14,11 +14,11 @@ import org.springframework.stereotype.Component; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.Collections; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 当前未提车订单处理任务 | ||||
|  * 当前未提车或未还车订单处理任务 | ||||
|  */ | ||||
| @Slf4j | ||||
| @Component | ||||
| @ -41,34 +41,34 @@ public class NoPickCarProcessTask { | ||||
|     @Scheduled(cron = "0 5 0 * * ?")//0点过5分执行 | ||||
|     @SchedulerLock(name = "checkNoPickCarOrders", lockAtMostFor = "9m", lockAtLeastFor = "1m") | ||||
|     public void checkNoPickCarOrders() { | ||||
|         log.info("开始执行当天未提车订单检查任务"); | ||||
|         log.info("开始执行当天未提车或未还车订单检查任务"); | ||||
|         try { | ||||
|             processNoPickCarOrders(); | ||||
|             log.info("当天未提车订单检查任务执行完成"); | ||||
|             log.info("当天未提车或未还车订单检查任务执行完成"); | ||||
|         } catch (Exception e) { | ||||
|             log.error("当天未提车订单检查任务失败", e); | ||||
|             log.error("当天未提车或未还车订单检查任务失败", e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 处理当天未提车订单 | ||||
|      * 处理当天未提车或未还车订单 | ||||
|      */ | ||||
|     private void processNoPickCarOrders() { | ||||
|         try { | ||||
|             // 查询所有进行中的订单且当前时间已超过预计还车时间 | ||||
|             LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>(); | ||||
|             queryWrapper.eq(OrderMainPO::getDelFlag, "0").in(OrderMainPO::getOrderStatus, | ||||
|                             Collections.singletonList(OrderStatusEnum.WAIT_PICK.getCode())) | ||||
|                             Arrays.asList(OrderStatusEnum.WAIT_PICK.getCode(), OrderStatusEnum.WAIT_RETURN.getCode())) | ||||
|                     .lt(OrderMainPO::getUpdateTime, LocalDateTime.now()); | ||||
|  | ||||
|             List<OrderMainPO> orders = orderMainRepo.list(queryWrapper); | ||||
|  | ||||
|             if (orders.isEmpty()) { | ||||
|                 log.info("无当天未提车订单"); | ||||
|                 log.info("无当天未提车或未还车订单"); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             log.info("发现{}个当天未提车订单,开始处理", orders.size()); | ||||
|             log.info("发现{}个当天未提车或未还车订单,开始处理", orders.size()); | ||||
|  | ||||
|             int successCount = 0; | ||||
|             for (OrderMainPO order : orders) { | ||||
| @ -79,20 +79,20 @@ public class NoPickCarProcessTask { | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             log.info("当天未提车订单处理完成,成功处理{}个订单", successCount); | ||||
|             log.info("当天未提车或未还车订单处理完成,成功处理{}个订单", successCount); | ||||
|         } catch (Exception e) { | ||||
|             log.error("处理当天未提车订单失败", e); | ||||
|             log.error("处理当天未提车或未还车订单失败", e); | ||||
|             throw e; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 处理当天未提车订单 | ||||
|      * 处理当天未提车或未还车订单 | ||||
|      * | ||||
|      * @param orderMainPO | ||||
|      */ | ||||
|     private void processWayPay(OrderMainPO orderMainPO) { | ||||
|         RejectOrderReq rejectOrderReq = new RejectOrderReq(orderMainPO.getOrderNo(), "当天未提车取消"); | ||||
|         RejectOrderReq rejectOrderReq = new RejectOrderReq(orderMainPO.getOrderNo(), "当天未提车或未还车取消"); | ||||
|         orderService.rejectRentOrder(rejectOrderReq); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user