diff --git a/src/main/java/com/sczx/order/dto/OrderDetailDTO.java b/src/main/java/com/sczx/order/dto/OrderDetailDTO.java index 25d63d5..bcb0030 100644 --- a/src/main/java/com/sczx/order/dto/OrderDetailDTO.java +++ b/src/main/java/com/sczx/order/dto/OrderDetailDTO.java @@ -176,4 +176,7 @@ public class OrderDetailDTO { @ApiModelProperty("支付订单信息") private List payOrderDTOList; + + @ApiModelProperty("待支付金额") + private BigDecimal waitPayAmount; } 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 cc9abec..55ac555 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java @@ -273,8 +273,16 @@ public class OrderServiceImpl implements OrderService { paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); } } - + //获取续租车金额 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); // 起支付返回预支付信息 RentCarRuleDTO rentCarRuleDTO = carInteg.getRentCarRuleByCarRuleId(orderMainPO.getRentCarRuleId()); @@ -297,9 +305,22 @@ public class OrderServiceImpl implements OrderService { rentOrder.setPaymentMethod(paymentType); rentOrder.setPayStatus(PayStatusEnum.USERPAYING.getCode()); rentOrder.setReturnTime(newEndRentTime); - 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 querySubOrderWrapper = new LambdaQueryWrapper<>(); 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"); - OrderSubPO orderSubPO = orderSubRepo.getOne(querySubOrderWrapper); - if(orderSubPO!=null){ + List orderSubList = orderSubRepo.list(querySubOrderWrapper); + 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())){ - Map result = payInteg.orderQuery((long)companyStoreDTO.getOperatingCompanyId(), orderSubPO.getPaymentId()); + if(PaymentTypeEnum.WX_PAY.getCode().equals(orderSubList.get(0).getPaymentMethod())){ + Map result = payInteg.orderQuery((long)companyStoreDTO.getOperatingCompanyId(), orderSubList.get(0).getPaymentId()); if(StringUtils.equalsIgnoreCase(result.get("trade_state"), "SUCCESS")){ - String orderState = paySuccessOrder(orderMainPO, orderSubPO); + String orderState = paySuccessOrder(orderMainPO, orderSubList); orderDetailDTO.setOrderStatus(orderState); } - }else if(PaymentTypeEnum.ZFB_PAY.getCode().equals(orderSubPO.getPaymentMethod())){ - AlipayQueryResponse alipayQueryResponse = payInteg.alipayOrderQuery(orderSubPO.getPaymentId()); + }else if(PaymentTypeEnum.ZFB_PAY.getCode().equals(orderSubList.get(0).getPaymentMethod())){ + AlipayQueryResponse alipayQueryResponse = payInteg.alipayOrderQuery(orderSubList.get(0).getPaymentId()); 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); } } @@ -1070,24 +1096,30 @@ public class OrderServiceImpl implements OrderService { /** * 支付成功更新订单状态 * @param orderMainPO - * @param orderSubPO + * @param orderSubList * @return */ - private String paySuccessOrder(OrderMainPO orderMainPO, OrderSubPO orderSubPO){ + private String paySuccessOrder(OrderMainPO orderMainPO, List orderSubList){ String orderStatus = null; LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS.getCode()); - updateWrapper.eq(OrderSubPO::getPaymentId, orderSubPO.getPaymentId()); + updateWrapper.eq(OrderSubPO::getPaymentId, orderSubList.get(0).getPaymentId()); orderSubRepo.update(updateWrapper); + //租车订单 + OrderSubPO rentSubPO = orderSubList.stream().filter(orderSubPO -> SubOrderTypeEnum.RENTCAR.getCode().equalsIgnoreCase(orderSubPO.getSuborderType())).findFirst().orElse( null); + LambdaUpdateWrapper updateWrapper2 = new LambdaUpdateWrapper<>(); updateWrapper2.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId()); if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.WAIT_PICK.getCode()); orderStatus = OrderStatusEnum.WAIT_PICK.getCode(); } else if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ - updateWrapper2.set(OrderMainPO::getOrderAmount, orderMainPO.getOrderAmount().add(orderSubPO.getAmount())); - updateWrapper2.set(OrderMainPO::getEndRentTime, orderSubPO.getReturnTime()); + BigDecimal rentCarOrderAmount = orderSubList.stream().map(OrderSubPO::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + 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()); if(orderMainPO.getOverdueDays()>0){ updateWrapper2.set(OrderMainPO::getOverdueDays, 0); @@ -1095,7 +1127,7 @@ public class OrderServiceImpl implements OrderService { orderStatus = OrderStatusEnum.RENT_ING.getCode(); } //如果是续租订单,增加续租次数 - if(SubOrderTypeEnum.RENTCAR.getCode().equalsIgnoreCase(orderSubPO.getSuborderType())){ + if(rentSubPO!=null){ updateWrapper2.set(OrderMainPO::getRenewalTimes, orderMainPO.getRenewalTimes()+1); } orderMainRepo.update(updateWrapper2);