修复续租和逾期处理问题
This commit is contained in:
@ -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);
|
||||
|
||||
@ -119,6 +119,9 @@ public class OrderDetailDTO {
|
||||
@ApiModelProperty("电池编码")
|
||||
private String batteyNo;
|
||||
|
||||
@ApiModelProperty("租电租金")
|
||||
private BigDecimal rentBatteyPrice;
|
||||
|
||||
@ApiModelProperty("计时方式")
|
||||
private Integer durationType;
|
||||
|
||||
|
||||
@ -42,6 +42,12 @@ public interface OrderService {
|
||||
*/
|
||||
void cancelOrder(PayOrderReq payOrderReq);
|
||||
|
||||
/**
|
||||
* 取消订单
|
||||
* @param orderMainPO
|
||||
*/
|
||||
void cancelRerentOrOverDueOrder(OrderMainPO orderMainPO);
|
||||
|
||||
/**
|
||||
* 逾期处理
|
||||
* @param rentCarOrderReq
|
||||
|
||||
@ -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("订单非逾期状态,不能逾期处理");
|
||||
|
||||
@ -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())) {
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user