修复续租和逾期处理问题
This commit is contained in:
@ -87,6 +87,7 @@ public interface OrderConvert {
|
|||||||
@Mapping(source = "rentBatteyRuleDTO.categoryName", target = "categoryName"),
|
@Mapping(source = "rentBatteyRuleDTO.categoryName", target = "categoryName"),
|
||||||
@Mapping(source = "rentBatteyRuleDTO.title", target = "rentBatteyTitle"),
|
@Mapping(source = "rentBatteyRuleDTO.title", target = "rentBatteyTitle"),
|
||||||
@Mapping(source = "rentBatteyRuleDTO.durationType", target = "durationType"),
|
@Mapping(source = "rentBatteyRuleDTO.durationType", target = "durationType"),
|
||||||
|
@Mapping(source = "rentBatteyRuleDTO.rentPrice", target = "rentBatteyPrice"),
|
||||||
@Mapping(source = "rentBatteyOrder.vinBatteryNo", target = "batteyNo"),
|
@Mapping(source = "rentBatteyOrder.vinBatteryNo", target = "batteyNo"),
|
||||||
})
|
})
|
||||||
OrderDetailDTO mainOrderToDetailDTO(OrderMainPO orderMainPO, CompanyStoreDTO companyStoreDTO, RentBatteyRuleDTO rentBatteyRuleDTO, CarDTO carDTO, CarModelSimpleDTO carModelSimpleDTO,OrderSubPO rentBatteyOrder);
|
OrderDetailDTO mainOrderToDetailDTO(OrderMainPO orderMainPO, CompanyStoreDTO companyStoreDTO, RentBatteyRuleDTO rentBatteyRuleDTO, CarDTO carDTO, CarModelSimpleDTO carModelSimpleDTO,OrderSubPO rentBatteyOrder);
|
||||||
|
|||||||
@ -119,6 +119,9 @@ public class OrderDetailDTO {
|
|||||||
@ApiModelProperty("电池编码")
|
@ApiModelProperty("电池编码")
|
||||||
private String batteyNo;
|
private String batteyNo;
|
||||||
|
|
||||||
|
@ApiModelProperty("租电租金")
|
||||||
|
private BigDecimal rentBatteyPrice;
|
||||||
|
|
||||||
@ApiModelProperty("计时方式")
|
@ApiModelProperty("计时方式")
|
||||||
private Integer durationType;
|
private Integer durationType;
|
||||||
|
|
||||||
|
|||||||
@ -42,6 +42,12 @@ public interface OrderService {
|
|||||||
*/
|
*/
|
||||||
void cancelOrder(PayOrderReq payOrderReq);
|
void cancelOrder(PayOrderReq payOrderReq);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消订单
|
||||||
|
* @param orderMainPO
|
||||||
|
*/
|
||||||
|
void cancelRerentOrOverDueOrder(OrderMainPO orderMainPO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 逾期处理
|
* 逾期处理
|
||||||
* @param rentCarOrderReq
|
* @param rentCarOrderReq
|
||||||
|
|||||||
@ -100,9 +100,16 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
.notIn(OrderMainPO::getOrderStatus, Arrays.asList(OrderStatusEnum.AUTO_END.getCode(), OrderStatusEnum.MANUAL_END.getCode()))
|
.notIn(OrderMainPO::getOrderStatus, Arrays.asList(OrderStatusEnum.AUTO_END.getCode(), OrderStatusEnum.MANUAL_END.getCode()))
|
||||||
.eq(OrderMainPO::getDelFlag, "0");
|
.eq(OrderMainPO::getDelFlag, "0");
|
||||||
List<OrderMainPO> currentOrderList = orderMainRepo.list(currentOrderWrapper);
|
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("您有未完成的订单,请先完成订单");
|
throw new BizException("您有未完成的订单,请先完成订单");
|
||||||
}
|
}
|
||||||
|
if(waitPayOrder!=null){
|
||||||
|
log.info("存在待支付的订单,取消订单");
|
||||||
|
PayOrderReq payOrderReq = new PayOrderReq();
|
||||||
|
payOrderReq.setOrderNo(waitPayOrder.getOrderNo());
|
||||||
|
cancelOrder(payOrderReq);
|
||||||
|
}
|
||||||
|
|
||||||
//判断是否存有空闲车辆可用
|
//判断是否存有空闲车辆可用
|
||||||
LambdaQueryWrapper<CarPO> carWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<CarPO> carWrapper = new LambdaQueryWrapper<>();
|
||||||
@ -256,16 +263,9 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
throw new BizException("订单不存在");
|
throw new BizException("订单不存在");
|
||||||
}
|
}
|
||||||
if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){
|
if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){
|
||||||
//已经是待支付状态的,直接拉起支付
|
//已经是待支付状态的,先取消,然后再拉起支付
|
||||||
PayOrderReq payOrderReq = new PayOrderReq();
|
cancelRerentOrOverDueOrder(orderMainPO);
|
||||||
payOrderReq.setOrderNo(rentCarOrderReq.getOrderNo());
|
orderMainPO = orderMainRepo.getOne(currentOrderWrapper);
|
||||||
UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payOrder(payOrderReq);
|
|
||||||
|
|
||||||
OrderDTO orderDTO = getOrderInfoByOrderNo(rentCarOrderReq.getOrderNo());
|
|
||||||
RentCarOrderResultDTO rentCarOrderResultDTO = new RentCarOrderResultDTO();
|
|
||||||
rentCarOrderResultDTO.setOrderMainInfo(orderDTO);
|
|
||||||
rentCarOrderResultDTO.setUnifiedPaymentInfo(unifiedPaymentInfoDTO);
|
|
||||||
return rentCarOrderResultDTO;
|
|
||||||
}
|
}
|
||||||
if(!OrderStatusEnum.RENT_ING.getCode().equals(orderMainPO.getOrderStatus()) && !OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){
|
if(!OrderStatusEnum.RENT_ING.getCode().equals(orderMainPO.getOrderStatus()) && !OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){
|
||||||
throw new BizException("订单非租赁或逾期状态,不能续租");
|
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)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
@ -458,16 +505,9 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
throw new BizException("订单不存在");
|
throw new BizException("订单不存在");
|
||||||
}
|
}
|
||||||
if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){
|
if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){
|
||||||
//已经是待支付状态的,直接拉起支付
|
//已经是待支付状态的,先取消,然后再拉起支付
|
||||||
PayOrderReq payOrderReq = new PayOrderReq();
|
cancelRerentOrOverDueOrder(orderMainPO);
|
||||||
payOrderReq.setOrderNo(rentCarOrderReq.getOrderNo());
|
orderMainPO = orderMainRepo.getOne(currentOrderWrapper);
|
||||||
UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payOrder(payOrderReq);
|
|
||||||
|
|
||||||
OrderDTO orderDTO = getOrderInfoByOrderNo(rentCarOrderReq.getOrderNo());
|
|
||||||
RentCarOrderResultDTO rentCarOrderResultDTO = new RentCarOrderResultDTO();
|
|
||||||
rentCarOrderResultDTO.setOrderMainInfo(orderDTO);
|
|
||||||
rentCarOrderResultDTO.setUnifiedPaymentInfo(unifiedPaymentInfoDTO);
|
|
||||||
return rentCarOrderResultDTO;
|
|
||||||
}
|
}
|
||||||
if(!OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){
|
if(!OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){
|
||||||
throw new BizException("订单非逾期状态,不能逾期处理");
|
throw new BizException("订单非逾期状态,不能逾期处理");
|
||||||
|
|||||||
@ -122,8 +122,8 @@ public class NoPayOrderProcessTask {
|
|||||||
if (closePayOrder) {
|
if (closePayOrder) {
|
||||||
|
|
||||||
LambdaUpdateWrapper<OrderSubPO> updateSubWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<OrderSubPO> updateSubWrapper = new LambdaUpdateWrapper<>();
|
||||||
updateSubWrapper.set(OrderSubPO::getDelFlag, "2");
|
updateSubWrapper.set(OrderSubPO::getDelFlag, "2").eq(OrderSubPO::getOrderId, orderMainPO.getOrderId())
|
||||||
updateSubWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId());
|
.eq(OrderSubPO::getPayStatus, PayStatusEnum.USERPAYING.getCode());
|
||||||
orderSubRepo.update(updateSubWrapper);
|
orderSubRepo.update(updateSubWrapper);
|
||||||
|
|
||||||
if (StringUtils.equalsIgnoreCase(orderMainPO.getOrderStatus(), OrderStatusEnum.WAIT_PAY.getCode())) {
|
if (StringUtils.equalsIgnoreCase(orderMainPO.getOrderStatus(), OrderStatusEnum.WAIT_PAY.getCode())) {
|
||||||
|
|||||||
@ -81,7 +81,7 @@ public class OrderOverdueTask {
|
|||||||
.set(OrderMainPO::getOverdueDays, overdueDaysOrHours)
|
.set(OrderMainPO::getOverdueDays, overdueDaysOrHours)
|
||||||
.eq(OrderMainPO::getOrderId, order.getOrderId())
|
.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);
|
boolean updated = orderMainRepo.update(updateWrapper);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user