From 729ae0e19ca7a18a915d531bc017a81be1ae470e Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Sun, 21 Sep 2025 23:59:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=AD=E7=A7=9F=E5=92=8C?= =?UTF-8?q?=E9=80=BE=E6=9C=9F=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sczx/order/convert/OrderConvert.java | 1 + .../com/sczx/order/dto/OrderDetailDTO.java | 3 + .../com/sczx/order/service/OrderService.java | 6 ++ .../order/service/impl/OrderServiceImpl.java | 82 ++++++++++++++----- .../order/task/NoPayOrderProcessTask.java | 4 +- .../com/sczx/order/task/OrderOverdueTask.java | 2 +- 6 files changed, 74 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/sczx/order/convert/OrderConvert.java b/src/main/java/com/sczx/order/convert/OrderConvert.java index 90702f3..d41c54d 100644 --- a/src/main/java/com/sczx/order/convert/OrderConvert.java +++ b/src/main/java/com/sczx/order/convert/OrderConvert.java @@ -87,6 +87,7 @@ public interface OrderConvert { @Mapping(source = "rentBatteyRuleDTO.categoryName", target = "categoryName"), @Mapping(source = "rentBatteyRuleDTO.title", target = "rentBatteyTitle"), @Mapping(source = "rentBatteyRuleDTO.durationType", target = "durationType"), + @Mapping(source = "rentBatteyRuleDTO.rentPrice", target = "rentBatteyPrice"), @Mapping(source = "rentBatteyOrder.vinBatteryNo", target = "batteyNo"), }) OrderDetailDTO mainOrderToDetailDTO(OrderMainPO orderMainPO, CompanyStoreDTO companyStoreDTO, RentBatteyRuleDTO rentBatteyRuleDTO, CarDTO carDTO, CarModelSimpleDTO carModelSimpleDTO,OrderSubPO rentBatteyOrder); diff --git a/src/main/java/com/sczx/order/dto/OrderDetailDTO.java b/src/main/java/com/sczx/order/dto/OrderDetailDTO.java index bcb0030..5bd35ed 100644 --- a/src/main/java/com/sczx/order/dto/OrderDetailDTO.java +++ b/src/main/java/com/sczx/order/dto/OrderDetailDTO.java @@ -119,6 +119,9 @@ public class OrderDetailDTO { @ApiModelProperty("电池编码") private String batteyNo; + @ApiModelProperty("租电租金") + private BigDecimal rentBatteyPrice; + @ApiModelProperty("计时方式") private Integer durationType; diff --git a/src/main/java/com/sczx/order/service/OrderService.java b/src/main/java/com/sczx/order/service/OrderService.java index 232a9ee..54acab0 100644 --- a/src/main/java/com/sczx/order/service/OrderService.java +++ b/src/main/java/com/sczx/order/service/OrderService.java @@ -42,6 +42,12 @@ public interface OrderService { */ void cancelOrder(PayOrderReq payOrderReq); + /** + * 取消订单 + * @param orderMainPO + */ + void cancelRerentOrOverDueOrder(OrderMainPO orderMainPO); + /** * 逾期处理 * @param rentCarOrderReq 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 4e25874..f695809 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java @@ -100,9 +100,16 @@ public class OrderServiceImpl implements OrderService { .notIn(OrderMainPO::getOrderStatus, Arrays.asList(OrderStatusEnum.AUTO_END.getCode(), OrderStatusEnum.MANUAL_END.getCode())) .eq(OrderMainPO::getDelFlag, "0"); List currentOrderList = orderMainRepo.list(currentOrderWrapper); - if(!currentOrderList.isEmpty()){ + OrderMainPO waitPayOrder = currentOrderList.stream().filter(order -> order.getOrderStatus().equals(OrderStatusEnum.WAIT_PAY.getCode())).findFirst().orElse(null); + if(!currentOrderList.isEmpty() && waitPayOrder==null){ throw new BizException("您有未完成的订单,请先完成订单"); } + if(waitPayOrder!=null){ + log.info("存在待支付的订单,取消订单"); + PayOrderReq payOrderReq = new PayOrderReq(); + payOrderReq.setOrderNo(waitPayOrder.getOrderNo()); + cancelOrder(payOrderReq); + } //判断是否存有空闲车辆可用 LambdaQueryWrapper carWrapper = new LambdaQueryWrapper<>(); @@ -256,16 +263,9 @@ public class OrderServiceImpl implements OrderService { throw new BizException("订单不存在"); } if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){ - //已经是待支付状态的,直接拉起支付 - PayOrderReq payOrderReq = new PayOrderReq(); - payOrderReq.setOrderNo(rentCarOrderReq.getOrderNo()); - UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payOrder(payOrderReq); - - OrderDTO orderDTO = getOrderInfoByOrderNo(rentCarOrderReq.getOrderNo()); - RentCarOrderResultDTO rentCarOrderResultDTO = new RentCarOrderResultDTO(); - rentCarOrderResultDTO.setOrderMainInfo(orderDTO); - rentCarOrderResultDTO.setUnifiedPaymentInfo(unifiedPaymentInfoDTO); - return rentCarOrderResultDTO; + //已经是待支付状态的,先取消,然后再拉起支付 + cancelRerentOrOverDueOrder(orderMainPO); + orderMainPO = orderMainRepo.getOne(currentOrderWrapper); } if(!OrderStatusEnum.RENT_ING.getCode().equals(orderMainPO.getOrderStatus()) && !OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){ throw new BizException("订单非租赁或逾期状态,不能续租"); @@ -442,6 +442,53 @@ public class OrderServiceImpl implements OrderService { } } + @Override + public void cancelRerentOrOverDueOrder(OrderMainPO orderMainPO) { + if(Objects.nonNull(orderMainPO)){ + if(!OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ + throw new BizException("订单非续租或逾期待支付状态,不能取消"); + } + LambdaQueryWrapper orderSubQueryWrapper = new LambdaQueryWrapper<>(); + orderSubQueryWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()); + orderSubQueryWrapper.eq(OrderSubPO::getPayStatus, PayStatusEnum.USERPAYING.getCode()); + orderSubQueryWrapper.orderByDesc(OrderSubPO::getCreatedAt).last(" limit 1"); + OrderSubPO orderSubPO = orderSubRepo.getOne(orderSubQueryWrapper); + boolean closePayOrder = false; + + //关闭支付单 + if (StringUtils.equalsIgnoreCase(orderSubPO.getPaymentMethod(), PaymentTypeEnum.WX_PAY.getCode())) { + log.info("开始关闭支付单"); + closePayOrder = payInteg.closeOrder(orderMainPO.getOperatorId(), orderSubPO.getPaymentId()); + } else if (StringUtils.equalsIgnoreCase(orderSubPO.getPaymentMethod(), PaymentTypeEnum.ZFB_PAY.getCode())) { + log.info("开始关闭支付宝支付单"); + AlipayCloseRequest alipayCloseRequest = new AlipayCloseRequest(); + alipayCloseRequest.setCompanyId(orderMainPO.getOperatorId()); + alipayCloseRequest.setOutTradeNo(orderSubPO.getPaymentId()); + closePayOrder = payInteg.alipayCloseOrder(alipayCloseRequest); + } + + if (closePayOrder) { + LambdaUpdateWrapper updateSubWrapper = new LambdaUpdateWrapper<>(); + updateSubWrapper.set(OrderSubPO::getDelFlag, "2").eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()) + .eq(OrderSubPO::getPayStatus, PayStatusEnum.USERPAYING.getCode()); + orderSubRepo.update(updateSubWrapper); + log.info("开始恢复续租订单状态"); + //更新订单状态及信息 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); + if(orderMainPO.getOverdueDays()>0){ + updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_OVERDUE.getCode()); + }else { + updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); + } + updateWrapper.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId()); + orderMainRepo.update(updateWrapper); + } else { + throw new BizException("支付单关闭失败"); + } + } + } + @Transactional(rollbackFor = Exception.class) @Override @@ -458,16 +505,9 @@ public class OrderServiceImpl implements OrderService { throw new BizException("订单不存在"); } if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){ - //已经是待支付状态的,直接拉起支付 - PayOrderReq payOrderReq = new PayOrderReq(); - payOrderReq.setOrderNo(rentCarOrderReq.getOrderNo()); - UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payOrder(payOrderReq); - - OrderDTO orderDTO = getOrderInfoByOrderNo(rentCarOrderReq.getOrderNo()); - RentCarOrderResultDTO rentCarOrderResultDTO = new RentCarOrderResultDTO(); - rentCarOrderResultDTO.setOrderMainInfo(orderDTO); - rentCarOrderResultDTO.setUnifiedPaymentInfo(unifiedPaymentInfoDTO); - return rentCarOrderResultDTO; + //已经是待支付状态的,先取消,然后再拉起支付 + cancelRerentOrOverDueOrder(orderMainPO); + orderMainPO = orderMainRepo.getOne(currentOrderWrapper); } if(!OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){ throw new BizException("订单非逾期状态,不能逾期处理"); diff --git a/src/main/java/com/sczx/order/task/NoPayOrderProcessTask.java b/src/main/java/com/sczx/order/task/NoPayOrderProcessTask.java index f1c1d4e..3a06da2 100644 --- a/src/main/java/com/sczx/order/task/NoPayOrderProcessTask.java +++ b/src/main/java/com/sczx/order/task/NoPayOrderProcessTask.java @@ -122,8 +122,8 @@ public class NoPayOrderProcessTask { if (closePayOrder) { LambdaUpdateWrapper updateSubWrapper = new LambdaUpdateWrapper<>(); - updateSubWrapper.set(OrderSubPO::getDelFlag, "2"); - updateSubWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()); + updateSubWrapper.set(OrderSubPO::getDelFlag, "2").eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()) + .eq(OrderSubPO::getPayStatus, PayStatusEnum.USERPAYING.getCode()); orderSubRepo.update(updateSubWrapper); if (StringUtils.equalsIgnoreCase(orderMainPO.getOrderStatus(), OrderStatusEnum.WAIT_PAY.getCode())) { diff --git a/src/main/java/com/sczx/order/task/OrderOverdueTask.java b/src/main/java/com/sczx/order/task/OrderOverdueTask.java index e40833d..a74bf49 100644 --- a/src/main/java/com/sczx/order/task/OrderOverdueTask.java +++ b/src/main/java/com/sczx/order/task/OrderOverdueTask.java @@ -81,7 +81,7 @@ public class OrderOverdueTask { .set(OrderMainPO::getOverdueDays, overdueDaysOrHours) .eq(OrderMainPO::getOrderId, order.getOrderId()) // 确保状态未被其他节点修改 - .eq(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); + .in(OrderMainPO::getOrderStatus, Arrays.asList(OrderStatusEnum.RENT_ING.getCode(), OrderStatusEnum.RENT_OVERDUE.getCode())); boolean updated = orderMainRepo.update(updateWrapper);