修复续租和逾期处理问题

This commit is contained in:
2025-09-21 23:59:55 +08:00
parent b51e0e1cd9
commit 729ae0e19c
6 changed files with 74 additions and 24 deletions

View File

@ -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);

View File

@ -119,6 +119,9 @@ public class OrderDetailDTO {
@ApiModelProperty("电池编码")
private String batteyNo;
@ApiModelProperty("租电租金")
private BigDecimal rentBatteyPrice;
@ApiModelProperty("计时方式")
private Integer durationType;

View File

@ -42,6 +42,12 @@ public interface OrderService {
*/
void cancelOrder(PayOrderReq payOrderReq);
/**
* 取消订单
* @param orderMainPO
*/
void cancelRerentOrOverDueOrder(OrderMainPO orderMainPO);
/**
* 逾期处理
* @param rentCarOrderReq

View File

@ -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<OrderMainPO> 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<CarPO> 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<OrderSubPO> 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<OrderSubPO> 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<OrderMainPO> 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("订单非逾期状态,不能逾期处理");

View File

@ -122,8 +122,8 @@ public class NoPayOrderProcessTask {
if (closePayOrder) {
LambdaUpdateWrapper<OrderSubPO> 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())) {

View File

@ -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);