续租增加租电订单金额

This commit is contained in:
2025-09-21 00:34:09 +08:00
parent 2b250068cf
commit c08f92cf4f
2 changed files with 52 additions and 17 deletions

View File

@ -176,4 +176,7 @@ public class OrderDetailDTO {
@ApiModelProperty("支付订单信息") @ApiModelProperty("支付订单信息")
private List<PayOrderDTO> payOrderDTOList; private List<PayOrderDTO> payOrderDTOList;
@ApiModelProperty("待支付金额")
private BigDecimal waitPayAmount;
} }

View File

@ -273,8 +273,16 @@ public class OrderServiceImpl implements OrderService {
paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); paymentType = PaymentTypeEnum.ZFB_PAY.getCode();
} }
} }
//获取续租车金额
BigDecimal rentCarOrderAmount = getReRentCarAmount(orderMainPO.getEndRentTime(), orderMainPO.getRentalType(), orderMainPO.getRentalPrice(), orderMainPO.getRentalDays()); BigDecimal rentCarOrderAmount = getReRentCarAmount(orderMainPO.getEndRentTime(), orderMainPO.getRentalType(), orderMainPO.getRentalPrice(), orderMainPO.getRentalDays());
//获取租电金额
BigDecimal rentBatteyOrderAmount = BigDecimal.ZERO ;
RentBatteyRuleDTO rentBatteyRuleDTO = null;
if(orderMainPO.getRentBatteyRuleId()!=null) {
rentBatteyRuleDTO = carInteg.getRentBatteyRuleByBatteyRuleId(orderMainPO.getRentBatteyRuleId());
rentBatteyOrderAmount = Optional.ofNullable(rentBatteyRuleDTO).map(RentBatteyRuleDTO::getRentPrice).orElse(BigDecimal.ZERO);
rentCarOrderAmount = rentCarOrderAmount.add(rentBatteyOrderAmount);
}
String paymentId = OrderUtil.generateSubOrderNo(OrderUtil.ZF_PREFIX); String paymentId = OrderUtil.generateSubOrderNo(OrderUtil.ZF_PREFIX);
// 起支付返回预支付信息 // 起支付返回预支付信息
RentCarRuleDTO rentCarRuleDTO = carInteg.getRentCarRuleByCarRuleId(orderMainPO.getRentCarRuleId()); RentCarRuleDTO rentCarRuleDTO = carInteg.getRentCarRuleByCarRuleId(orderMainPO.getRentCarRuleId());
@ -297,9 +305,22 @@ public class OrderServiceImpl implements OrderService {
rentOrder.setPaymentMethod(paymentType); rentOrder.setPaymentMethod(paymentType);
rentOrder.setPayStatus(PayStatusEnum.USERPAYING.getCode()); rentOrder.setPayStatus(PayStatusEnum.USERPAYING.getCode());
rentOrder.setReturnTime(newEndRentTime); rentOrder.setReturnTime(newEndRentTime);
orderSubRepo.save(rentOrder); orderSubRepo.save(rentOrder);
//生成租电子订单
if(rentBatteyOrderAmount.compareTo(BigDecimal.ZERO)>0){
//生成租电子订单
OrderSubPO rentBatraayOrder = new OrderSubPO();
rentBatraayOrder.setOrderId(orderMainPO.getOrderId());
rentBatraayOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.ZC_PREFIX));
rentBatraayOrder.setPaymentId(paymentId);
rentBatraayOrder.setSuborderType(SubOrderTypeEnum.RENTBATTEY.getCode());
rentBatraayOrder.setAmount(rentBatteyOrderAmount);
rentBatraayOrder.setCreatedAt(LocalDateTime.now());
rentBatraayOrder.setPaymentMethod(paymentType);
rentBatraayOrder.setPayStatus(PayStatusEnum.USERPAYING.getCode());
orderSubRepo.save(rentBatraayOrder);
}
@ -646,21 +667,26 @@ public class OrderServiceImpl implements OrderService {
//去查看订单是否支付成功 //去查看订单是否支付成功
LambdaQueryWrapper<OrderSubPO> querySubOrderWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrderSubPO> querySubOrderWrapper = new LambdaQueryWrapper<>();
querySubOrderWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()) querySubOrderWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId())
.in(OrderSubPO::getSuborderType, Arrays.asList(SubOrderTypeEnum.OVERDUE.getCode(), SubOrderTypeEnum.RENTCAR.getCode())) .in(OrderSubPO::getSuborderType, Arrays.asList(SubOrderTypeEnum.OVERDUE.getCode(), SubOrderTypeEnum.RENTCAR.getCode(), SubOrderTypeEnum.RENTBATTEY.getCode()))
.ne(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).orderByDesc(OrderSubPO::getCreatedAt).last(" limit 1"); .ne(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).orderByDesc(OrderSubPO::getCreatedAt).last(" limit 1");
OrderSubPO orderSubPO = orderSubRepo.getOne(querySubOrderWrapper); List<OrderSubPO> orderSubList = orderSubRepo.list(querySubOrderWrapper);
if(orderSubPO!=null){ if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){
orderDetailDTO.setWaitPayAmount(orderMainPO.getOrderAmount());
}else {
orderDetailDTO.setWaitPayAmount(orderSubList.stream().map(OrderSubPO::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO));
}
if(!CollectionUtils.isEmpty(orderSubList)){
//如果是微信支付,则去微信查询支付状态,如果支付成功,则修改订单状态为支付成功 //如果是微信支付,则去微信查询支付状态,如果支付成功,则修改订单状态为支付成功
if(PaymentTypeEnum.WX_PAY.getCode().equals(orderSubPO.getPaymentMethod())){ if(PaymentTypeEnum.WX_PAY.getCode().equals(orderSubList.get(0).getPaymentMethod())){
Map<String, String> result = payInteg.orderQuery((long)companyStoreDTO.getOperatingCompanyId(), orderSubPO.getPaymentId()); Map<String, String> result = payInteg.orderQuery((long)companyStoreDTO.getOperatingCompanyId(), orderSubList.get(0).getPaymentId());
if(StringUtils.equalsIgnoreCase(result.get("trade_state"), "SUCCESS")){ if(StringUtils.equalsIgnoreCase(result.get("trade_state"), "SUCCESS")){
String orderState = paySuccessOrder(orderMainPO, orderSubPO); String orderState = paySuccessOrder(orderMainPO, orderSubList);
orderDetailDTO.setOrderStatus(orderState); orderDetailDTO.setOrderStatus(orderState);
} }
}else if(PaymentTypeEnum.ZFB_PAY.getCode().equals(orderSubPO.getPaymentMethod())){ }else if(PaymentTypeEnum.ZFB_PAY.getCode().equals(orderSubList.get(0).getPaymentMethod())){
AlipayQueryResponse alipayQueryResponse = payInteg.alipayOrderQuery(orderSubPO.getPaymentId()); AlipayQueryResponse alipayQueryResponse = payInteg.alipayOrderQuery(orderSubList.get(0).getPaymentId());
if(StringUtils.equalsIgnoreCase(alipayQueryResponse.getCode(), "SUCCESS") && StringUtils.equalsIgnoreCase(alipayQueryResponse.getTradeStatus(), "TRADE_SUCCESS")){ if(StringUtils.equalsIgnoreCase(alipayQueryResponse.getCode(), "SUCCESS") && StringUtils.equalsIgnoreCase(alipayQueryResponse.getTradeStatus(), "TRADE_SUCCESS")){
String orderState = paySuccessOrder(orderMainPO, orderSubPO); String orderState = paySuccessOrder(orderMainPO, orderSubList);
orderDetailDTO.setOrderStatus(orderState); orderDetailDTO.setOrderStatus(orderState);
} }
} }
@ -1070,24 +1096,30 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 支付成功更新订单状态 * 支付成功更新订单状态
* @param orderMainPO * @param orderMainPO
* @param orderSubPO * @param orderSubList
* @return * @return
*/ */
private String paySuccessOrder(OrderMainPO orderMainPO, OrderSubPO orderSubPO){ private String paySuccessOrder(OrderMainPO orderMainPO, List<OrderSubPO> orderSubList){
String orderStatus = null; String orderStatus = null;
LambdaUpdateWrapper<OrderSubPO> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<OrderSubPO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS.getCode()); updateWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS.getCode());
updateWrapper.eq(OrderSubPO::getPaymentId, orderSubPO.getPaymentId()); updateWrapper.eq(OrderSubPO::getPaymentId, orderSubList.get(0).getPaymentId());
orderSubRepo.update(updateWrapper); orderSubRepo.update(updateWrapper);
//租车订单
OrderSubPO rentSubPO = orderSubList.stream().filter(orderSubPO -> SubOrderTypeEnum.RENTCAR.getCode().equalsIgnoreCase(orderSubPO.getSuborderType())).findFirst().orElse( null);
LambdaUpdateWrapper<OrderMainPO> updateWrapper2 = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<OrderMainPO> updateWrapper2 = new LambdaUpdateWrapper<>();
updateWrapper2.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId()); updateWrapper2.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId());
if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){
updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.WAIT_PICK.getCode()); updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.WAIT_PICK.getCode());
orderStatus = OrderStatusEnum.WAIT_PICK.getCode(); orderStatus = OrderStatusEnum.WAIT_PICK.getCode();
} else if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ } else if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){
updateWrapper2.set(OrderMainPO::getOrderAmount, orderMainPO.getOrderAmount().add(orderSubPO.getAmount())); BigDecimal rentCarOrderAmount = orderSubList.stream().map(OrderSubPO::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
updateWrapper2.set(OrderMainPO::getEndRentTime, orderSubPO.getReturnTime()); updateWrapper2.set(OrderMainPO::getOrderAmount, orderMainPO.getOrderAmount().add(rentCarOrderAmount));
if(rentSubPO!=null){
updateWrapper2.set(OrderMainPO::getEndRentTime, rentSubPO.getReturnTime());
}
updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode());
if(orderMainPO.getOverdueDays()>0){ if(orderMainPO.getOverdueDays()>0){
updateWrapper2.set(OrderMainPO::getOverdueDays, 0); updateWrapper2.set(OrderMainPO::getOverdueDays, 0);
@ -1095,7 +1127,7 @@ public class OrderServiceImpl implements OrderService {
orderStatus = OrderStatusEnum.RENT_ING.getCode(); orderStatus = OrderStatusEnum.RENT_ING.getCode();
} }
//如果是续租订单,增加续租次数 //如果是续租订单,增加续租次数
if(SubOrderTypeEnum.RENTCAR.getCode().equalsIgnoreCase(orderSubPO.getSuborderType())){ if(rentSubPO!=null){
updateWrapper2.set(OrderMainPO::getRenewalTimes, orderMainPO.getRenewalTimes()+1); updateWrapper2.set(OrderMainPO::getRenewalTimes, orderMainPO.getRenewalTimes()+1);
} }
orderMainRepo.update(updateWrapper2); orderMainRepo.update(updateWrapper2);