From 798f68aa2b89c43e73dcf7fa84288d53bd09de98 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Sun, 14 Sep 2025 11:39:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AA=E6=8F=90=E8=BD=A6=E5=92=8C=E6=9C=AA?= =?UTF-8?q?=E8=BF=98=E8=BD=A6=E6=B2=A1=E5=A4=84=E7=90=86=E7=9A=84=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/service/impl/OrderServiceImpl.java | 73 +++++++++++-------- .../sczx/order/task/NoPickCarProcessTask.java | 26 +++---- 2 files changed, 54 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java index aab859c..55c3bd0 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java @@ -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 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 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 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 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) diff --git a/src/main/java/com/sczx/order/task/NoPickCarProcessTask.java b/src/main/java/com/sczx/order/task/NoPickCarProcessTask.java index 58cf540..dd16bb6 100644 --- a/src/main/java/com/sczx/order/task/NoPickCarProcessTask.java +++ b/src/main/java/com/sczx/order/task/NoPickCarProcessTask.java @@ -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 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 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); } } -- 2.49.0