Compare commits
	
		
			18 Commits
		
	
	
		
			zhangli-te
			...
			6f0bf4d57c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6f0bf4d57c | |||
| 0338f3c675 | |||
| af974e7368 | |||
| a2f8d90eea | |||
| 879678cb56 | |||
| cefafddf5a | |||
| 1814c5c199 | |||
| edd2d6e728 | |||
| c3e64ce40f | |||
| 17dddc27a2 | |||
| 5136b0f940 | |||
| b4a37065c5 | |||
| acf125b02a | |||
| 1d678f2f98 | |||
| 729ae0e19c | |||
| b51e0e1cd9 | |||
| c08f92cf4f | |||
| 2b250068cf | 
| @ -11,6 +11,7 @@ import lombok.Getter; | |||||||
| @AllArgsConstructor | @AllArgsConstructor | ||||||
| @Getter | @Getter | ||||||
| public enum PayStatusEnum { | public enum PayStatusEnum { | ||||||
|  |     INIT("INIT", "初始化"), | ||||||
|     USERPAYING("USERPAYING", "用户支付中"), |     USERPAYING("USERPAYING", "用户支付中"), | ||||||
|     SUCCESS("SUCCESS", "支付成功"), |     SUCCESS("SUCCESS", "支付成功"), | ||||||
|     PAYERROR("PAYERROR", "支付失败"), |     PAYERROR("PAYERROR", "支付失败"), | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ import lombok.Getter; | |||||||
| @AllArgsConstructor | @AllArgsConstructor | ||||||
| @Getter | @Getter | ||||||
| public enum SubOrderTypeEnum { | public enum SubOrderTypeEnum { | ||||||
|  |     NO_DEPOSIT("NO_DEPOSIT", "免押冻结订单"), | ||||||
|     DEPOSIT("DEPOSIT", "押金订单"), |     DEPOSIT("DEPOSIT", "押金订单"), | ||||||
|     RENTCAR("RENTCAR", "租车订单"), |     RENTCAR("RENTCAR", "租车订单"), | ||||||
|     RENTBATTEY("RENTBATTEY", "租电订单"), |     RENTBATTEY("RENTBATTEY", "租电订单"), | ||||||
|  | |||||||
| @ -31,7 +31,6 @@ public interface OrderConvert { | |||||||
|             @Mapping(source = "rentCarOrderReq.carModelId", target = "carModelId"), |             @Mapping(source = "rentCarOrderReq.carModelId", target = "carModelId"), | ||||||
|             @Mapping(source = "rentCarOrderReq.rentCarRuleId", target = "rentCarRuleId"), |             @Mapping(source = "rentCarOrderReq.rentCarRuleId", target = "rentCarRuleId"), | ||||||
|             @Mapping(source = "rentCarOrderReq.rentBatteyRuleId", target = "rentBatteyRuleId"), |             @Mapping(source = "rentCarOrderReq.rentBatteyRuleId", target = "rentBatteyRuleId"), | ||||||
|             @Mapping(source = "rentCarOrderReq.isAutoDeduct", target = "isAutoDeduct"), |  | ||||||
|             @Mapping(source = "rentCarOrderReq.isDepositFree", target = "isDepositFree"), |             @Mapping(source = "rentCarOrderReq.isDepositFree", target = "isDepositFree"), | ||||||
|             @Mapping(source = "rentCarOrderReq.batteryType", target = "batteryType"), |             @Mapping(source = "rentCarOrderReq.batteryType", target = "batteryType"), | ||||||
|             @Mapping(source = "userInfoDTO.userId", target = "customerId"), |             @Mapping(source = "userInfoDTO.userId", target = "customerId"), | ||||||
| @ -87,6 +86,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; | ||||||
|  |  | ||||||
| @ -176,4 +179,7 @@ public class OrderDetailDTO { | |||||||
|  |  | ||||||
|     @ApiModelProperty("支付订单信息") |     @ApiModelProperty("支付订单信息") | ||||||
|     private List<PayOrderDTO> payOrderDTOList; |     private List<PayOrderDTO> payOrderDTOList; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty("待支付金额") | ||||||
|  |     private BigDecimal waitPayAmount; | ||||||
| } | } | ||||||
|  | |||||||
| @ -23,6 +23,4 @@ public class ReRentCarReq { | |||||||
|     @ApiModelProperty(value = "客户id") |     @ApiModelProperty(value = "客户id") | ||||||
|     private Long customerId; |     private Long customerId; | ||||||
|  |  | ||||||
|     @ApiModelProperty("是否开通代扣") |  | ||||||
|     private Boolean isAutoDeduct = false; |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ import io.swagger.annotations.ApiModel; | |||||||
| import io.swagger.annotations.ApiModelProperty; | import io.swagger.annotations.ApiModelProperty; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| import javax.validation.constraints.NotBlank; |  | ||||||
| import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @ -40,17 +39,12 @@ public class RentCarOrderReq { | |||||||
|  |  | ||||||
|  |  | ||||||
|     @ApiModelProperty(value = "租电套餐id") |     @ApiModelProperty(value = "租电套餐id") | ||||||
|     @NotNull(message = "租电套餐id不能为空") |  | ||||||
|     private Long rentBatteyRuleId; |     private Long rentBatteyRuleId; | ||||||
|  |  | ||||||
|     @ApiModelProperty("选择的电池类型") |     @ApiModelProperty("选择的电池类型") | ||||||
|     @NotBlank(message = "租电套餐id不能为空") |  | ||||||
|     private String batteryType; |     private String batteryType; | ||||||
|  |  | ||||||
|  |  | ||||||
|     @ApiModelProperty("是否开通免押") |     @ApiModelProperty("是否开通免押") | ||||||
|     private Boolean isDepositFree = false; |     private Boolean isDepositFree = false; | ||||||
|  |  | ||||||
|     @ApiModelProperty("是否开通代扣") |  | ||||||
|     private Boolean isAutoDeduct = false; |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -22,6 +22,13 @@ public interface OrderService { | |||||||
|      */ |      */ | ||||||
|     RentCarOrderResultDTO submitRentCarOrder(RentCarOrderReq rentCarOrderReq); |     RentCarOrderResultDTO submitRentCarOrder(RentCarOrderReq rentCarOrderReq); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 免押下单 | ||||||
|  |      * @param rentCarOrderReq | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     RentCarOrderResultDTO depositFreeSubmitRentCarOrder(RentCarOrderReq rentCarOrderReq); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 续租车 |      * 续租车 | ||||||
|      * @param rentCarOrderReq |      * @param rentCarOrderReq | ||||||
| @ -42,6 +49,12 @@ public interface OrderService { | |||||||
|      */ |      */ | ||||||
|     void cancelOrder(PayOrderReq payOrderReq); |     void cancelOrder(PayOrderReq payOrderReq); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 取消订单 | ||||||
|  |      * @param orderMainPO | ||||||
|  |      */ | ||||||
|  |     void cancelRerentOrOverDueOrder(OrderMainPO orderMainPO); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 逾期处理 |      * 逾期处理 | ||||||
|      * @param rentCarOrderReq |      * @param rentCarOrderReq | ||||||
|  | |||||||
| @ -103,7 +103,7 @@ public class OrderDistribServiceImpl implements OrderDistribService { | |||||||
|                 addOrderDistribPOList.add(referralDistribPO); |                 addOrderDistribPOList.add(referralDistribPO); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         BigDecimal alreadyShareRate = addOrderDistribPOList.stream().map(OrderDistribPO::getDistribRate).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); |         BigDecimal alreadyShareRate = addOrderDistribPOList.stream().map(OrderDistribPO::getDistribRate).reduce(BigDecimal.ZERO,BigDecimal::add); | ||||||
|         //运营商分润 |         //运营商分润 | ||||||
|         String companyRate = String.valueOf(BigDecimal.ONE.subtract(alreadyShareRate).multiply(BigDecimal.valueOf(100))); |         String companyRate = String.valueOf(BigDecimal.ONE.subtract(alreadyShareRate).multiply(BigDecimal.valueOf(100))); | ||||||
|         OrderDistribPO companyDistribPO = getOrderDistribPO(orderMainPO.getOrderId(),orderMainPO.getOrderNo(),DistribTypeEnum.COMPANY.getCode(),companyRate,orderMainPO.getOrderAmount(),Integer.valueOf(orderMainPO.getOperatorId().toString()),Integer.valueOf(orderMainPO.getStoreId().toString()),null); |         OrderDistribPO companyDistribPO = getOrderDistribPO(orderMainPO.getOrderId(),orderMainPO.getOrderNo(),DistribTypeEnum.COMPANY.getCode(),companyRate,orderMainPO.getOrderAmount(),Integer.valueOf(orderMainPO.getOperatorId().toString()),Integer.valueOf(orderMainPO.getStoreId().toString()),null); | ||||||
|  | |||||||
| @ -18,6 +18,7 @@ import com.sczx.order.service.OrderService; | |||||||
| import com.sczx.order.service.PayService; | import com.sczx.order.service.PayService; | ||||||
| import com.sczx.order.thirdpart.dto.*; | import com.sczx.order.thirdpart.dto.*; | ||||||
| import com.sczx.order.thirdpart.dto.req.AlipayCloseRequest; | import com.sczx.order.thirdpart.dto.req.AlipayCloseRequest; | ||||||
|  | import com.sczx.order.thirdpart.dto.req.AlipayFundFreezeRequest; | ||||||
| import com.sczx.order.thirdpart.dto.req.CarQueryConditionReq; | import com.sczx.order.thirdpart.dto.req.CarQueryConditionReq; | ||||||
| import com.sczx.order.thirdpart.integration.CarInteg; | import com.sczx.order.thirdpart.integration.CarInteg; | ||||||
| import com.sczx.order.thirdpart.integration.PayInteg; | import com.sczx.order.thirdpart.integration.PayInteg; | ||||||
| @ -100,9 +101,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<>(); | ||||||
| @ -136,30 +144,20 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                     OrderMainPO orderMainPO = OrderConvert.INSTANCE.subOrderToPo(rentCarOrderReq, userInfoDTO, rentCarRuleDTO); |                     OrderMainPO orderMainPO = OrderConvert.INSTANCE.subOrderToPo(rentCarOrderReq, userInfoDTO, rentCarRuleDTO); | ||||||
|                     orderMainPO.setOperatorId(Long.valueOf(companyStoreDTO.getOperatingCompanyId())); |                     orderMainPO.setOperatorId(Long.valueOf(companyStoreDTO.getOperatingCompanyId())); | ||||||
|                     orderMainPO.setOrderNo(OrderUtil.generateOrderNo()); |                     orderMainPO.setOrderNo(OrderUtil.generateOrderNo()); | ||||||
|                     //TODO 默认应该是待支付状态,这里先默认支付完成待取车 |  | ||||||
|                     orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode()); |                     orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode()); | ||||||
| //                    orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PICK.getCode()); |  | ||||||
|                     orderMainPO.setFirstOrderTime(LocalDateTime.now()); |                     orderMainPO.setFirstOrderTime(LocalDateTime.now()); | ||||||
|  |  | ||||||
|                     //设置预计还车时间 |                     //设置预计还车时间 | ||||||
|                     LocalDateTime endRentTime = OrderUtil.getEndRentTime(orderMainPO.getFirstOrderTime(),rentCarRuleDTO.getRentalDays(), rentCarRuleDTO.getRentalType()); |                     LocalDateTime endRentTime = OrderUtil.getEndRentTime(orderMainPO.getFirstOrderTime(),1,rentCarRuleDTO.getRentalDays(), rentCarRuleDTO.getRentalType()); | ||||||
|                     orderMainPO.setEndRentTime(endRentTime); |                     orderMainPO.setEndRentTime(endRentTime); | ||||||
|  |  | ||||||
|  |  | ||||||
|                     //生成子表订单 |                     //生成子表订单 | ||||||
|                     String paymentType; |                     String paymentType; | ||||||
|                     if(rentCarOrderReq.getIsAutoDeduct()){ |                     if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ | ||||||
|                         if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ |                         paymentType = PaymentTypeEnum.WX_PAY.getCode(); | ||||||
|                             paymentType = PaymentTypeEnum.WX_DQ.getCode(); |                     }else { | ||||||
|                         }else { |                         paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); | ||||||
|                             paymentType = PaymentTypeEnum.ZFB_DQ.getCode(); |  | ||||||
|                         } |  | ||||||
|                     } else { |  | ||||||
|                         if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ |  | ||||||
|                             paymentType = PaymentTypeEnum.WX_PAY.getCode(); |  | ||||||
|                         }else { |  | ||||||
|                             paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); |  | ||||||
|                         } |  | ||||||
|                     } |                     } | ||||||
|                     List<OrderSubPO> orderSubPOList = new ArrayList<>(); |                     List<OrderSubPO> orderSubPOList = new ArrayList<>(); | ||||||
|  |  | ||||||
| @ -185,13 +183,14 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                         orderSubPOList.add(depositOrder); |                         orderSubPOList.add(depositOrder); | ||||||
|                     } |                     } | ||||||
|                     //生成租车订单 |                     //生成租车订单 | ||||||
|                     BigDecimal rentCarOrderAmount = getRentCarAmount(rentCarRuleDTO.getRentalType(), rentCarRuleDTO.getRentalPrice(), rentCarRuleDTO.getRentalDays()); |                     BigDecimal rentCarOrderAmount = OrderUtil.getRentCarAmount(rentCarRuleDTO.getRentalType(), rentCarRuleDTO.getRentalPrice(), rentCarRuleDTO.getRentalDays()); | ||||||
|                     OrderSubPO rentOrder = new OrderSubPO(); |                     OrderSubPO rentOrder = new OrderSubPO(); | ||||||
|                     rentOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.ZC_PREFIX)); |                     rentOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.ZC_PREFIX)); | ||||||
|                     rentOrder.setSuborderType(SubOrderTypeEnum.RENTCAR.getCode()); |                     rentOrder.setSuborderType(SubOrderTypeEnum.RENTCAR.getCode()); | ||||||
|                     rentOrder.setAmount(rentCarOrderAmount); |                     rentOrder.setAmount(rentCarOrderAmount); | ||||||
|                     rentOrder.setCreatedAt(LocalDateTime.now()); |                     rentOrder.setCreatedAt(LocalDateTime.now()); | ||||||
|                     rentOrder.setPaymentMethod(paymentType); |                     rentOrder.setPaymentMethod(paymentType); | ||||||
|  |                     rentOrder.setReturnTime(endRentTime); | ||||||
|                     orderSubPOList.add(rentOrder); |                     orderSubPOList.add(rentOrder); | ||||||
|  |  | ||||||
|                     BigDecimal orderAmount = orderSubPOList.stream().map(OrderSubPO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |                     BigDecimal orderAmount = orderSubPOList.stream().map(OrderSubPO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); | ||||||
| @ -238,6 +237,11 @@ public class OrderServiceImpl implements OrderService { | |||||||
|             } |             } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public RentCarOrderResultDTO depositFreeSubmitRentCarOrder(RentCarOrderReq rentCarOrderReq) { | ||||||
|  |         //TODO - 免押冻结 | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
| @ -255,26 +259,33 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                 if(orderMainPO == null){ |                 if(orderMainPO == null){ | ||||||
|                     throw new BizException("订单不存在"); |                     throw new BizException("订单不存在"); | ||||||
|                 } |                 } | ||||||
|  |                 if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){ | ||||||
|  |                     //已经是待支付状态的,先取消,然后再拉起支付 | ||||||
|  |                     cancelRerentOrOverDueOrder(orderMainPO); | ||||||
|  |                     orderMainPO = orderMainRepo.getOne(currentOrderWrapper); | ||||||
|  |                 } | ||||||
|                 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("订单非租赁或逾期状态,不能续租"); | ||||||
|                 } |                 } | ||||||
|                 //生成子表订单 |                 //生成子表订单 | ||||||
|                 String paymentType; |                 String paymentType; | ||||||
|                 if(rentCarOrderReq.getIsAutoDeduct()){ |                 if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ | ||||||
|                     if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ |                     paymentType = PaymentTypeEnum.WX_PAY.getCode(); | ||||||
|                         paymentType = PaymentTypeEnum.WX_DQ.getCode(); |                 }else { | ||||||
|                     }else { |                     paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); | ||||||
|                         paymentType = PaymentTypeEnum.ZFB_DQ.getCode(); |                 } | ||||||
|                     } |                 //计算续租周期 | ||||||
|                 } else { |                 int rerentInterval = OrderUtil.calculateRerentRoundsToCoverOverdue(orderMainPO.getOverdueDays(), orderMainPO.getRentalDays()); | ||||||
|                     if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ |                 //获取续租车金额 | ||||||
|                         paymentType = PaymentTypeEnum.WX_PAY.getCode(); |                 BigDecimal rentCarOrderAmount = OrderUtil.getReRentCarAmount(rerentInterval, orderMainPO.getRentalPrice()); | ||||||
|                     }else { | //                获取租电金额 | ||||||
|                         paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); |                 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); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 BigDecimal rentCarOrderAmount = getReRentCarAmount(orderMainPO.getEndRentTime(), orderMainPO.getRentalType(), orderMainPO.getRentalPrice(), orderMainPO.getRentalDays()); |  | ||||||
|                 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()); | ||||||
| @ -284,7 +295,7 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                 LocalDateTime nowTime = LocalDateTime.now(); |                 LocalDateTime nowTime = LocalDateTime.now(); | ||||||
|                 LocalDateTime oldEndRentTime = orderMainPO.getEndRentTime().isAfter(nowTime) ? orderMainPO.getEndRentTime() : nowTime; |                 LocalDateTime oldEndRentTime = orderMainPO.getEndRentTime().isAfter(nowTime) ? orderMainPO.getEndRentTime() : nowTime; | ||||||
|                 //刷新预计还车时间 |                 //刷新预计还车时间 | ||||||
|                 LocalDateTime newEndRentTime = OrderUtil.getEndRentTime(oldEndRentTime, orderMainPO.getRentalDays(), orderMainPO.getRentalType()); |                 LocalDateTime newEndRentTime = OrderUtil.getEndRentTime(oldEndRentTime, rerentInterval,orderMainPO.getRentalDays(), orderMainPO.getRentalType()); | ||||||
|  |  | ||||||
|                 //生成租车子订单 |                 //生成租车子订单 | ||||||
|                 OrderSubPO rentOrder = new OrderSubPO(); |                 OrderSubPO rentOrder = new OrderSubPO(); | ||||||
| @ -297,9 +308,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); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -374,23 +398,37 @@ public class OrderServiceImpl implements OrderService { | |||||||
|  |  | ||||||
|             LambdaQueryWrapper<OrderSubPO> orderSubQueryWrapper = new LambdaQueryWrapper<>(); |             LambdaQueryWrapper<OrderSubPO> orderSubQueryWrapper = new LambdaQueryWrapper<>(); | ||||||
|             orderSubQueryWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()); |             orderSubQueryWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId()); | ||||||
|             orderSubQueryWrapper.eq(OrderSubPO::getPayStatus, PayStatusEnum.USERPAYING.getCode()); |             orderSubQueryWrapper.in(OrderSubPO::getPayStatus, Arrays.asList(PayStatusEnum.USERPAYING.getCode(), PayStatusEnum.INIT.getCode())); | ||||||
|             orderSubQueryWrapper.orderByDesc(OrderSubPO::getCreatedAt).last(" limit 1"); |             orderSubQueryWrapper.orderByDesc(OrderSubPO::getCreatedAt); | ||||||
|             OrderSubPO orderSubPO = orderSubRepo.getOne(orderSubQueryWrapper); |             List<OrderSubPO> orderSubPOList = orderSubRepo.list(orderSubQueryWrapper); | ||||||
|             boolean closePayOrder = false; |             boolean closePayOrder = false; | ||||||
|             //获取门店信息 |             //获取门店信息 | ||||||
|             CompanyStoreDTO companyStoreDTO = storeInteg.getStoreById(Integer.valueOf(orderMainPO.getStoreId().toString())); |             CompanyStoreDTO companyStoreDTO = storeInteg.getStoreById(Integer.valueOf(orderMainPO.getStoreId().toString())); | ||||||
|  |             OrderSubPO rentOrder = orderSubPOList.stream().filter(orderSubPO -> StringUtils.equalsIgnoreCase(orderSubPO.getSuborderType(), SubOrderTypeEnum.RENTCAR.getCode())).findFirst().orElse( new OrderSubPO()); | ||||||
|             //关闭支付单 |             //关闭支付单 | ||||||
|             if(StringUtils.equalsIgnoreCase(orderSubPO.getPaymentMethod(), PaymentTypeEnum.WX_PAY.getCode())){ |             if(StringUtils.equalsIgnoreCase(rentOrder.getPaymentMethod(), PaymentTypeEnum.WX_PAY.getCode())){ | ||||||
|                 log.info("开始关闭支付单"); |                 log.info("开始关闭微信租车支付单"); | ||||||
|                 closePayOrder = payInteg.closeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()), orderSubPO.getPaymentId()); |                 closePayOrder = payInteg.closeOrder(Long.valueOf(companyStoreDTO.getOperatingCompanyId()), rentOrder.getPaymentId()); | ||||||
|             } else if(StringUtils.equalsIgnoreCase(orderSubPO.getPaymentMethod(), PaymentTypeEnum.ZFB_PAY.getCode())){ |             } else if(StringUtils.equalsIgnoreCase(rentOrder.getPaymentMethod(), PaymentTypeEnum.ZFB_PAY.getCode())){ | ||||||
|                 log.info("开始关闭支付宝支付单"); |  | ||||||
|                 AlipayCloseRequest alipayCloseRequest = new AlipayCloseRequest(); |                 if(orderMainPO.getIsDepositFree()){ | ||||||
|                 alipayCloseRequest.setCompanyId(Long.valueOf(companyStoreDTO.getOperatingCompanyId())); |                     OrderSubPO noDepositOrder = orderSubPOList.stream().filter(orderSubPO -> StringUtils.equalsIgnoreCase(orderSubPO.getSuborderType(), SubOrderTypeEnum.NO_DEPOSIT.getCode())).findFirst().orElse(null); | ||||||
|                 alipayCloseRequest.setOutTradeNo(orderSubPO.getPaymentId()); |                     if(Objects.nonNull(noDepositOrder)){ | ||||||
|                 closePayOrder = payInteg.alipayCloseOrder(alipayCloseRequest); |                         log.info("开始取消支付宝押金冻结支付单"); | ||||||
|  |                         AlipayFundFreezeRequest fundFreezeRequest = new AlipayFundFreezeRequest(); | ||||||
|  |                         fundFreezeRequest.setCompanyId(companyStoreDTO.getOperatingCompanyId().toString()); | ||||||
|  |                         fundFreezeRequest.setOutOrderNo(noDepositOrder.getPaymentId()); | ||||||
|  |                         closePayOrder = payInteg.cancelFundFreeze(fundFreezeRequest); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if(StringUtils.equalsIgnoreCase(rentOrder.getPayStatus(), PayStatusEnum.USERPAYING.getCode())){ | ||||||
|  |                     log.info("开始关闭支付宝租车支付单"); | ||||||
|  |                     AlipayCloseRequest alipayCloseRequest = new AlipayCloseRequest(); | ||||||
|  |                     alipayCloseRequest.setCompanyId(Long.valueOf(companyStoreDTO.getOperatingCompanyId())); | ||||||
|  |                     alipayCloseRequest.setOutTradeNo(rentOrder.getPaymentId()); | ||||||
|  |                     closePayOrder = payInteg.alipayCloseOrder(alipayCloseRequest); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if(closePayOrder){ |             if(closePayOrder){ | ||||||
| @ -409,6 +447,51 @@ 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()); | ||||||
|  |                 } | ||||||
|  |                 updateWrapper.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId()); | ||||||
|  |                 orderMainRepo.update(updateWrapper); | ||||||
|  |             } else { | ||||||
|  |                 throw new BizException("支付单关闭失败"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     @Override |     @Override | ||||||
| @ -424,23 +507,20 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                 if(orderMainPO == null){ |                 if(orderMainPO == null){ | ||||||
|                     throw new BizException("订单不存在"); |                     throw new BizException("订单不存在"); | ||||||
|                 } |                 } | ||||||
|  |                 if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equals(orderMainPO.getOrderStatus())){ | ||||||
|  |                     //已经是待支付状态的,先取消,然后再拉起支付 | ||||||
|  |                     cancelRerentOrOverDueOrder(orderMainPO); | ||||||
|  |                     orderMainPO = orderMainRepo.getOne(currentOrderWrapper); | ||||||
|  |                 } | ||||||
|                 if(!OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){ |                 if(!OrderStatusEnum.RENT_OVERDUE.getCode().equals(orderMainPO.getOrderStatus())){ | ||||||
|                     throw new BizException("订单非逾期状态,不能逾期处理"); |                     throw new BizException("订单非逾期状态,不能逾期处理"); | ||||||
|                 } |                 } | ||||||
|                 //生成子表订单 |                 //生成子表订单 | ||||||
|                 String paymentType; |                 String paymentType; | ||||||
|                 if(rentCarOrderReq.getIsAutoDeduct()){ |                 if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ | ||||||
|                     if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ |                     paymentType = PaymentTypeEnum.WX_PAY.getCode(); | ||||||
|                         paymentType = PaymentTypeEnum.WX_DQ.getCode(); |                 }else { | ||||||
|                     }else { |                     paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); | ||||||
|                         paymentType = PaymentTypeEnum.ZFB_DQ.getCode(); |  | ||||||
|                     } |  | ||||||
|                 } else { |  | ||||||
|                     if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){ |  | ||||||
|                         paymentType = PaymentTypeEnum.WX_PAY.getCode(); |  | ||||||
|                     }else { |  | ||||||
|                         paymentType = PaymentTypeEnum.ZFB_PAY.getCode(); |  | ||||||
|                     } |  | ||||||
|                 } |                 } | ||||||
|                 Integer overDueDaysOrHours = OrderUtil.getOrderOverdueDays(orderMainPO.getEndRentTime()); |                 Integer overDueDaysOrHours = OrderUtil.getOrderOverdueDays(orderMainPO.getEndRentTime()); | ||||||
|                 if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.HOUR_RENTAL.getCode(), orderMainPO.getRentalType())){ |                 if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.HOUR_RENTAL.getCode(), orderMainPO.getRentalType())){ | ||||||
| @ -545,6 +625,9 @@ public class OrderServiceImpl implements OrderService { | |||||||
|         LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>(); |         LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>(); | ||||||
|         queryWrapper.eq(OrderMainPO::getOrderNo, orderNo); |         queryWrapper.eq(OrderMainPO::getOrderNo, orderNo); | ||||||
|         OrderMainPO orderMainPO = orderMainRepo.getOne(queryWrapper); |         OrderMainPO orderMainPO = orderMainRepo.getOne(queryWrapper); | ||||||
|  |         if(orderMainPO==null){ | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         //获取租电子订单 |         //获取租电子订单 | ||||||
|         LambdaQueryWrapper<OrderSubPO> querySubWrapper = new LambdaQueryWrapper<>(); |         LambdaQueryWrapper<OrderSubPO> querySubWrapper = new LambdaQueryWrapper<>(); | ||||||
| @ -589,10 +672,9 @@ public class OrderServiceImpl implements OrderService { | |||||||
|         if(!CollectionUtils.isEmpty(orderSubPOList2)){ |         if(!CollectionUtils.isEmpty(orderSubPOList2)){ | ||||||
|             orderDetailDTO.setLastPayOrderNo(orderSubPOList2.get(0).getPaymentId()); |             orderDetailDTO.setLastPayOrderNo(orderSubPOList2.get(0).getPaymentId()); | ||||||
|             orderDetailDTO.setPayOrderDTOList(OrderSubConvert.INSTANCE.posToPayOrderDtos(orderSubPOList2)); |             orderDetailDTO.setPayOrderDTOList(OrderSubConvert.INSTANCE.posToPayOrderDtos(orderSubPOList2)); | ||||||
|  |             orderDetailDTO.setRentBatteyOrderNo(orderSubPOList2.stream().filter(orderSubPO -> StringUtils.equalsIgnoreCase(orderSubPO.getSuborderType(), SubOrderTypeEnum.RENTBATTEY.getCode())).findFirst().map(OrderSubPO::getSuborderNo).orElse( null)); | ||||||
|         } |         } | ||||||
|         //计算续租金额 |  | ||||||
|         BigDecimal reRentCarAmount = getReRentCarAmount(orderMainPO.getEndRentTime(), orderMainPO.getRentalType(), orderMainPO.getRentalPrice(), orderMainPO.getRentalDays()); |  | ||||||
|         orderDetailDTO.setRerentAmount(reRentCarAmount); |  | ||||||
|  |  | ||||||
|         if(OrderStatusEnum.RENT_ING.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ |         if(OrderStatusEnum.RENT_ING.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ | ||||||
|             //如果是租车中,需要判断是否逾期了 |             //如果是租车中,需要判断是否逾期了 | ||||||
| @ -623,13 +705,22 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                         updateWrapper.set(OrderMainPO::getOverdueDays, overdueDays); |                         updateWrapper.set(OrderMainPO::getOverdueDays, overdueDays); | ||||||
|                         updateWrapper.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId()); |                         updateWrapper.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId()); | ||||||
|                         orderMainRepo.update(updateWrapper); |                         orderMainRepo.update(updateWrapper); | ||||||
|  |                         //计算续租周期 | ||||||
|  |                         int rerentInterval = OrderUtil.calculateRerentRoundsToCoverOverdue(overdueDays, orderMainPO.getRentalDays()); | ||||||
|  |                         //获取续租车金额 | ||||||
|  |                         BigDecimal reRentCarAmount = OrderUtil.getReRentCarAmount(rerentInterval, orderMainPO.getRentalPrice()); | ||||||
|  |                         orderDetailDTO.setRerentAmount(reRentCarAmount); | ||||||
|                     }else { |                     }else { | ||||||
|                         //没逾期则计算到期天数 |                         //没逾期则计算到期天数 | ||||||
|                         orderDetailDTO.setExpectedDays(OrderUtil.getOrderExpectedDays(orderMainPO.getEndRentTime())); |                         orderDetailDTO.setExpectedDays(OrderUtil.getOrderExpectedDays(orderMainPO.getEndRentTime())); | ||||||
|  |                         //计算续租金额 | ||||||
|  |                         BigDecimal reRentCarAmount = OrderUtil.getReRentCarAmount(1, orderMainPO.getRentalPrice()); | ||||||
|  |                         orderDetailDTO.setRerentAmount(reRentCarAmount); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |  | ||||||
|         } else if(OrderStatusEnum.RENT_OVERDUE.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ |         } else if(OrderStatusEnum.RENT_OVERDUE.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ | ||||||
|             log.info("订单已逾期的,计算逾期金额"); |             log.info("订单已逾期的,计算逾期金额"); | ||||||
|             if(orderMainPO.getEndRentTime()!=null){ |             if(orderMainPO.getEndRentTime()!=null){ | ||||||
| @ -638,28 +729,37 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                     overdueDaysOrHours = OrderUtil.getOrderOverdueHours(orderMainPO.getEndRentTime()); |                     overdueDaysOrHours = OrderUtil.getOrderOverdueHours(orderMainPO.getEndRentTime()); | ||||||
|                 } |                 } | ||||||
|                 orderDetailDTO.setOverdueAmount(OrderUtil.getOrderOverdueAmount(overdueDaysOrHours, orderMainPO.getOverdueFee())); |                 orderDetailDTO.setOverdueAmount(OrderUtil.getOrderOverdueAmount(overdueDaysOrHours, orderMainPO.getOverdueFee())); | ||||||
|  |                 //计算续租周期 | ||||||
|  |                 int rerentInterval = OrderUtil.calculateRerentRoundsToCoverOverdue(overdueDaysOrHours, orderMainPO.getRentalDays()); | ||||||
|  |                 //获取续租车金额 | ||||||
|  |                 BigDecimal reRentCarAmount = OrderUtil.getReRentCarAmount(rerentInterval, orderMainPO.getRentalPrice()); | ||||||
|  |                 orderDetailDTO.setRerentAmount(reRentCarAmount); | ||||||
|             } |             } | ||||||
|         } else if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus()) |         } else if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus()) | ||||||
|                 ||OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ |                 ||OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ | ||||||
|             //去查看订单是否支付成功 |             //去查看订单是否支付成功 | ||||||
|             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.ZERO,BigDecimal::add)); | ||||||
|  |             } | ||||||
|  |             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); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| @ -685,6 +785,16 @@ public class OrderServiceImpl implements OrderService { | |||||||
|         if(orderMainPO==null){ |         if(orderMainPO==null){ | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|  |         //如果是待支付状态的订单,则取消订单 | ||||||
|  |         if(orderMainPO.getOrderStatus().equals(OrderStatusEnum.WAIT_PAY.getCode())){ | ||||||
|  |             PayOrderReq payOrderReq = new PayOrderReq(); | ||||||
|  |             payOrderReq.setOrderNo(orderMainPO.getOrderNo()); | ||||||
|  |             cancelOrder(payOrderReq); | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |         if(orderMainPO.getOrderStatus().equals(OrderStatusEnum.RERENT_WAIT_PAY.getCode())){ | ||||||
|  |             cancelRerentOrOverDueOrder(orderMainPO); | ||||||
|  |         } | ||||||
|         return getOrderDetailByOrderNo(orderMainPO.getOrderNo()); |         return getOrderDetailByOrderNo(orderMainPO.getOrderNo()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -786,13 +896,13 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                 LocalDateTime currentTime = LocalDateTime.now(); |                 LocalDateTime currentTime = LocalDateTime.now(); | ||||||
|  |  | ||||||
|                 //设置预计还车时间 |                 //设置预计还车时间 | ||||||
|                 LocalDateTime endRentTime = OrderUtil.getEndRentTime(currentTime,orderMainPO.getRentalDays(), orderMainPO.getRentalType()); |                 LocalDateTime endRentTime = OrderUtil.getEndRentTime(currentTime,1,orderMainPO.getRentalDays(), orderMainPO.getRentalType()); | ||||||
|  |  | ||||||
|                 LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>(); |                 LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>(); | ||||||
|                 updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); |                 updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode()); | ||||||
|                 updateWrapper.set(OrderMainPO::getStartRentTime, currentTime); |                 updateWrapper.set(OrderMainPO::getStartRentTime, currentTime); | ||||||
|                 updateWrapper.set(OrderMainPO::getPickCarTime, currentTime); |                 updateWrapper.set(OrderMainPO::getPickCarTime, currentTime); | ||||||
|                 updateWrapper.set(endRentTime!=null ,OrderMainPO::getEndRentTime, endRentTime); |                 updateWrapper.set(OrderMainPO::getEndRentTime, endRentTime); | ||||||
|                 updateWrapper.set(OrderMainPO::getVehicleId, carDTO.getId()); |                 updateWrapper.set(OrderMainPO::getVehicleId, carDTO.getId()); | ||||||
|                 updateWrapper.eq(OrderMainPO::getOrderNo, bindCarToOrderReq.getOrderNo()); |                 updateWrapper.eq(OrderMainPO::getOrderNo, bindCarToOrderReq.getOrderNo()); | ||||||
|                 orderMainRepo.update(updateWrapper); |                 orderMainRepo.update(updateWrapper); | ||||||
| @ -824,9 +934,10 @@ public class OrderServiceImpl implements OrderService { | |||||||
|                         .orderByDesc(OrderSubPO::getCreatedAt) |                         .orderByDesc(OrderSubPO::getCreatedAt) | ||||||
|                         .last(" limit 1"); |                         .last(" limit 1"); | ||||||
|                 OrderSubPO renBatteryOrderSubPO = orderSubRepo.getOne(querySubBatteryWrapper); |                 OrderSubPO renBatteryOrderSubPO = orderSubRepo.getOne(querySubBatteryWrapper); | ||||||
|                 Long batterySubOrderId = renBatteryOrderSubPO.getSuborderId(); |                 if(renBatteryOrderSubPO!=null){ | ||||||
|                 syncInteg.sendSubOrderId(batterySubOrderId); |                     Long batterySubOrderId = renBatteryOrderSubPO.getSuborderId(); | ||||||
|  |                     syncInteg.sendSubOrderId(batterySubOrderId); | ||||||
|  |                 } | ||||||
|                 return getOrderInfoByOrderNo(bindCarToOrderReq.getOrderNo()); |                 return getOrderInfoByOrderNo(bindCarToOrderReq.getOrderNo()); | ||||||
|             } catch (Exception e){ |             } catch (Exception e){ | ||||||
|                 log.warn("绑定车辆失败",e); |                 log.warn("绑定车辆失败",e); | ||||||
| @ -1041,13 +1152,14 @@ public class OrderServiceImpl implements OrderService { | |||||||
|     @Override |     @Override | ||||||
|     public IPage<OrderSimpleDTO> pageCustOrder(Integer pageNo, Integer pageSize, OrderQueryReq orderQueryReq) { |     public IPage<OrderSimpleDTO> pageCustOrder(Integer pageNo, Integer pageSize, OrderQueryReq orderQueryReq) { | ||||||
|         orderQueryReq.setCustomerId(Long.valueOf(jwtUtil.getUserInfoFromToken().getUserId().toString())); |         orderQueryReq.setCustomerId(Long.valueOf(jwtUtil.getUserInfoFromToken().getUserId().toString())); | ||||||
|  |         batchProcessWaitPayOrder(orderQueryReq.getCustomerId(),orderQueryReq.getStoreId()); | ||||||
|         List<String> orderStatusList = orderQueryReq.getOrderStatusList().stream().map(OrderStatusEnum::getCode).collect(Collectors.toList()); |         List<String> orderStatusList = orderQueryReq.getOrderStatusList().stream().map(OrderStatusEnum::getCode).collect(Collectors.toList()); | ||||||
|         return orderMainRepo.pageQueryOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); |         return orderMainRepo.pageQueryOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public IPage<OrderSimpleDTO> pageStoreOrder(Integer pageNo, Integer pageSize, OrderQueryReq orderQueryReq) { |     public IPage<OrderSimpleDTO> pageStoreOrder(Integer pageNo, Integer pageSize, OrderQueryReq orderQueryReq) { | ||||||
|  |         batchProcessWaitPayOrder(orderQueryReq.getCustomerId(),orderQueryReq.getStoreId()); | ||||||
|         List<String> orderStatusList = orderQueryReq.getOrderStatusList().stream().map(OrderStatusEnum::getCode).collect(Collectors.toList()); |         List<String> orderStatusList = orderQueryReq.getOrderStatusList().stream().map(OrderStatusEnum::getCode).collect(Collectors.toList()); | ||||||
|         return orderMainRepo.pageQueryOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); |         return orderMainRepo.pageQueryOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); | ||||||
|     } |     } | ||||||
| @ -1065,28 +1177,61 @@ public class OrderServiceImpl implements OrderService { | |||||||
|         return orderMainRepo.pageQueryRentBatteyOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); |         return orderMainRepo.pageQueryRentBatteyOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 批量处理待支付订单 | ||||||
|  |      * @param customerId | ||||||
|  |      */ | ||||||
|  |     private void batchProcessWaitPayOrder(Long customerId,Long storeId){ | ||||||
|  |         log.info("开始批量处理待支付订单"); | ||||||
|  |         LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>(); | ||||||
|  |         queryWrapper.eq(customerId!=null,OrderMainPO::getCustomerId, customerId) | ||||||
|  |                 .eq(storeId!=null,OrderMainPO::getStoreId, storeId) | ||||||
|  |                 .eq(OrderMainPO::getDelFlag, "0") | ||||||
|  |                 .in(OrderMainPO::getOrderStatus, Arrays.asList(OrderStatusEnum.WAIT_PAY.getCode(), OrderStatusEnum.RERENT_WAIT_PAY.getCode())) | ||||||
|  |                 .orderByDesc(OrderMainPO::getOrderId); | ||||||
|  |         List<OrderMainPO> waitPayOrderList = orderMainRepo.list(queryWrapper); | ||||||
|  |         if (!CollectionUtils.isEmpty(waitPayOrderList)){ | ||||||
|  |             waitPayOrderList.forEach(orderMainPO -> { | ||||||
|  |                 if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ | ||||||
|  |                     PayOrderReq payOrderReq = new PayOrderReq(); | ||||||
|  |                     payOrderReq.setOrderNo(orderMainPO.getOrderNo()); | ||||||
|  |                     cancelOrder(payOrderReq); | ||||||
|  |                 }else if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){ | ||||||
|  |                     //处理续租待支付订单 | ||||||
|  |                     cancelRerentOrOverDueOrder(orderMainPO); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 支付成功更新订单状态 |      * 支付成功更新订单状态 | ||||||
|      * @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.ZERO,BigDecimal::add); | ||||||
|             updateWrapper2.set(OrderMainPO::getEndRentTime, orderSubPO.getReturnTime()); |             updateWrapper2.set(OrderMainPO::getOrderAmount, orderMainPO.getOrderAmount().add(rentCarOrderAmount)); | ||||||
|  |             if(rentSubPO!=null){ | ||||||
|  |                 updateWrapper2.set(rentSubPO.getReturnTime()!=null,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); | ||||||
| @ -1094,7 +1239,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); | ||||||
| @ -1102,50 +1247,5 @@ public class OrderServiceImpl implements OrderService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获取租车订单金额 |  | ||||||
|      * @param rentalType |  | ||||||
|      * @param rentalPrice |  | ||||||
|      * @param rentalDays |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     private static BigDecimal getRentCarAmount(String rentalType, BigDecimal rentalPrice, Integer rentalDays) { |  | ||||||
|         BigDecimal rentCarOrderAmount = new BigDecimal(0); |  | ||||||
|         if(RentCarTypeEnum.HOUR_RENTAL.getCode().equalsIgnoreCase(rentalType)||RentCarTypeEnum.DAILY_RENTAL.getCode().equalsIgnoreCase(rentalType)){ |  | ||||||
|             rentCarOrderAmount = rentCarOrderAmount.add(rentalPrice); |  | ||||||
|         }  else if(RentCarTypeEnum.DAYS_RENTAL.getCode().equalsIgnoreCase(rentalType)){ |  | ||||||
|             rentCarOrderAmount = rentalPrice.multiply(new BigDecimal(rentalDays)); |  | ||||||
|         } else { |  | ||||||
|             rentCarOrderAmount = rentalPrice.multiply(new BigDecimal(30)); |  | ||||||
|         } |  | ||||||
|         return rentCarOrderAmount; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获取续租订单金额 |  | ||||||
|      * @param endRentTime |  | ||||||
|      * @param rentalType |  | ||||||
|      * @param rentalPrice |  | ||||||
|      * @param ruleRentalDays |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     private static BigDecimal getReRentCarAmount(LocalDateTime endRentTime,String rentalType, BigDecimal rentalPrice, Integer ruleRentalDays) { |  | ||||||
|         //计算续租金额 |  | ||||||
|         BigDecimal rentCarOrderAmount = new BigDecimal(0); |  | ||||||
|         if(RentCarTypeEnum.HOUR_RENTAL.getCode().equalsIgnoreCase(rentalType)){ |  | ||||||
|             Integer overdueHours = OrderUtil.getOrderOverdueHours(endRentTime); |  | ||||||
|             rentCarOrderAmount = rentCarOrderAmount.add(rentalPrice.multiply(new BigDecimal(overdueHours+1))); |  | ||||||
|         } else if(RentCarTypeEnum.DAILY_RENTAL.getCode().equalsIgnoreCase(rentalType)){ |  | ||||||
|             Integer rentalDays = OrderUtil.getOrderOverdueDays(endRentTime); |  | ||||||
|             rentCarOrderAmount = rentCarOrderAmount.add(rentalPrice.multiply(new BigDecimal(rentalDays+1))); |  | ||||||
|         } else if(RentCarTypeEnum.DAYS_RENTAL.getCode().equalsIgnoreCase(rentalType)){ |  | ||||||
|             Integer rentalDays = OrderUtil.getOrderOverdueDays(endRentTime); |  | ||||||
|             rentCarOrderAmount = rentCarOrderAmount.add(rentalPrice.multiply(new BigDecimal(rentalDays+ruleRentalDays))); |  | ||||||
|         } else { |  | ||||||
|             Integer rentalDays = OrderUtil.getOrderOverdueDays(endRentTime); |  | ||||||
|             rentCarOrderAmount = rentCarOrderAmount.add(rentalPrice.multiply(new BigDecimal(rentalDays+30))); |  | ||||||
|         } |  | ||||||
|         return rentCarOrderAmount; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -36,7 +36,7 @@ public class NoPayOrderProcessTask { | |||||||
|     private PayInteg payInteg; |     private PayInteg payInteg; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 每30分钟检查一次逾期订单 |      * 每6分钟检查一次逾期订单 | ||||||
|      * 使用ShedLock确保在分布式环境下只有一个实例执行 |      * 使用ShedLock确保在分布式环境下只有一个实例执行 | ||||||
|      * 分布式锁机制:ShedLock使用Redis作为锁存储,确保同一时间只有一个服务实例执行定时任务 |      * 分布式锁机制:ShedLock使用Redis作为锁存储,确保同一时间只有一个服务实例执行定时任务 | ||||||
|      * 任务名称:@SchedulerLock 注解中的 name 属性标识任务名称,相同名称的任务在分布式环境下互斥执行 |      * 任务名称:@SchedulerLock 注解中的 name 属性标识任务名称,相同名称的任务在分布式环境下互斥执行 | ||||||
| @ -45,7 +45,7 @@ public class NoPayOrderProcessTask { | |||||||
|      * lockAtLeastFor:锁最少持有时间,防止任务执行过快导致频繁执行 |      * lockAtLeastFor:锁最少持有时间,防止任务执行过快导致频繁执行 | ||||||
|      */ |      */ | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     @Scheduled(cron = "0 */15 * * * ?") |     @Scheduled(cron = "0 */6 * * * ?") | ||||||
|     @SchedulerLock(name = "checkNoPayOrders", lockAtMostFor = "9m", lockAtLeastFor = "1m") |     @SchedulerLock(name = "checkNoPayOrders", lockAtMostFor = "9m", lockAtLeastFor = "1m") | ||||||
|     public void checkNoPayOrders() { |     public void checkNoPayOrders() { | ||||||
|         log.info("开始执行未支付订单检查任务"); |         log.info("开始执行未支付订单检查任务"); | ||||||
| @ -66,7 +66,7 @@ public class NoPayOrderProcessTask { | |||||||
|             LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>(); |             LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>(); | ||||||
|             queryWrapper.eq(OrderMainPO::getDelFlag, "0").in(OrderMainPO::getOrderStatus, |             queryWrapper.eq(OrderMainPO::getDelFlag, "0").in(OrderMainPO::getOrderStatus, | ||||||
|                             Arrays.asList(OrderStatusEnum.WAIT_PAY.getCode(), OrderStatusEnum.RERENT_WAIT_PAY.getCode())) |                             Arrays.asList(OrderStatusEnum.WAIT_PAY.getCode(), OrderStatusEnum.RERENT_WAIT_PAY.getCode())) | ||||||
|                     .lt(OrderMainPO::getUpdateTime, LocalDateTime.now().minusHours(1)); |                     .lt(OrderMainPO::getUpdateTime, LocalDateTime.now().minusMinutes(5)); | ||||||
|  |  | ||||||
|             List<OrderMainPO> orders = orderMainRepo.list(queryWrapper); |             List<OrderMainPO> orders = orderMainRepo.list(queryWrapper); | ||||||
|  |  | ||||||
| @ -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); | ||||||
|  |  | ||||||
|  | |||||||
| @ -0,0 +1,14 @@ | |||||||
|  | package com.sczx.order.thirdpart.dto; | ||||||
|  |  | ||||||
|  | import io.swagger.annotations.ApiModel; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @ApiModel("支付宝资金冻结响应参数") | ||||||
|  | @Data | ||||||
|  | public class AlipayFundFreezeResponse { | ||||||
|  |     private boolean success; | ||||||
|  |     private String message; | ||||||
|  |     private String outTradeNo;      // 商户订单号 | ||||||
|  |     private String orderStr;        // 支付串(用于前端调起支付) | ||||||
|  |     private String code;            // 状态码 | ||||||
|  | } | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | package com.sczx.order.thirdpart.dto; | ||||||
|  |  | ||||||
|  | import io.swagger.annotations.ApiModel; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @ApiModel("支付宝资金冻结响应参数") | ||||||
|  | @Data | ||||||
|  | public class AlipayQueryFreezeResponse { | ||||||
|  |     private boolean success; | ||||||
|  |     private String message; | ||||||
|  |     private String outTradeNo;      // 商户订单号 | ||||||
|  |     private String authNo;        // 支付串(用于前端调起支付) | ||||||
|  |     private String code;            // 状态码 | ||||||
|  | } | ||||||
| @ -62,4 +62,7 @@ public class UnifiedPaymentInfoDTO { | |||||||
|  |  | ||||||
|     @ApiModelProperty(value = "支付宝交易号") |     @ApiModelProperty(value = "支付宝交易号") | ||||||
|     private String tradeNo;         // 支付宝交易号 |     private String tradeNo;         // 支付宝交易号 | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "支付宝芝麻信用免押支付串(用于前端调起支付)") | ||||||
|  |     private String orderStr; | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,19 @@ | |||||||
|  | package com.sczx.order.thirdpart.dto.req; | ||||||
|  |  | ||||||
|  | import io.swagger.annotations.ApiModel; | ||||||
|  | import io.swagger.annotations.ApiModelProperty; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @ApiModel("支付宝资金冻结请求参数") | ||||||
|  | @Data | ||||||
|  | public class AlipayFinishFreezeRequest { | ||||||
|  |     private String companyId; | ||||||
|  |     @ApiModelProperty(value = "支付宝资金授权订单号") | ||||||
|  |     private String authNo; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "解冻请求流水号") | ||||||
|  |     private String outRequestNo; | ||||||
|  |  | ||||||
|  |     @ApiModelProperty(value = "解冻金额") | ||||||
|  |     private String amount; | ||||||
|  | } | ||||||
| @ -0,0 +1,13 @@ | |||||||
|  | package com.sczx.order.thirdpart.dto.req; | ||||||
|  |  | ||||||
|  | import io.swagger.annotations.ApiModel; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @ApiModel("支付宝资金冻结请求参数") | ||||||
|  | @Data | ||||||
|  | public class AlipayFundFreezeRequest { | ||||||
|  |     private String companyId; | ||||||
|  |     private String outOrderNo; | ||||||
|  |     private String title; | ||||||
|  |     private String amount; | ||||||
|  | } | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | package com.sczx.order.thirdpart.dto.req; | ||||||
|  |  | ||||||
|  | import io.swagger.annotations.ApiModel; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @ApiModel("支付宝资金冻结请求参数") | ||||||
|  | @Data | ||||||
|  | public class AlipayQueryFreezeRequest { | ||||||
|  |     private String companyId; | ||||||
|  |     private String outOrderNo; | ||||||
|  |     private String operationType; | ||||||
|  | } | ||||||
| @ -1,9 +1,6 @@ | |||||||
| package com.sczx.order.thirdpart.facade; | package com.sczx.order.thirdpart.facade; | ||||||
|  |  | ||||||
| import com.sczx.order.thirdpart.dto.AlipayCreateResponse; | import com.sczx.order.thirdpart.dto.*; | ||||||
| import com.sczx.order.thirdpart.dto.AlipayQueryResponse; |  | ||||||
| import com.sczx.order.thirdpart.dto.AlipayResponse; |  | ||||||
| import com.sczx.order.thirdpart.dto.PaymentResponse; |  | ||||||
| import com.sczx.order.thirdpart.dto.req.*; | import com.sczx.order.thirdpart.dto.req.*; | ||||||
| import org.springframework.cloud.openfeign.FeignClient; | import org.springframework.cloud.openfeign.FeignClient; | ||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
| @ -86,4 +83,32 @@ public interface PayFacade { | |||||||
|      */ |      */ | ||||||
|     @PostMapping("/api/alipay/refundQuery") |     @PostMapping("/api/alipay/refundQuery") | ||||||
|     AlipayResponse alipayRefundQuery(@RequestBody AlipayRefundRequest request); |     AlipayResponse alipayRefundQuery(@RequestBody AlipayRefundRequest request); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 冻结接口 | ||||||
|  |      */ | ||||||
|  |     @PostMapping("/api/authAlipay/fundFreeze") | ||||||
|  |     AlipayFundFreezeResponse fundFreeze(@RequestBody AlipayFundFreezeRequest request); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 取消冻结 | ||||||
|  |      */ | ||||||
|  |     @PostMapping("/api/authAlipay/cancelFundFreeze") | ||||||
|  |     AlipayFundFreezeResponse cancelFundFreeze(@RequestBody AlipayFundFreezeRequest request); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询冻结 | ||||||
|  |      * @param alipayQueryFreezeRequest | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     @PostMapping("/api/authAlipay/queryFundFreeze") | ||||||
|  |     AlipayQueryFreezeResponse queryFundFreeze(@RequestBody AlipayQueryFreezeRequest alipayQueryFreezeRequest); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完结冻结 | ||||||
|  |      * @param alipayFinishFreezeRequest | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     @PostMapping("/api/authAlipay/finishFreeze") | ||||||
|  |     AlipayResponse finishFreeze(@RequestBody AlipayFinishFreezeRequest alipayFinishFreezeRequest); | ||||||
| } | } | ||||||
|  | |||||||
| @ -220,4 +220,69 @@ public class PayInteg { | |||||||
|             throw new InnerException("支付宝查询退款失败"); |             throw new InnerException("支付宝查询退款失败"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 免押冻结 | ||||||
|  |      */ | ||||||
|  |     public AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest request) { | ||||||
|  |         try { | ||||||
|  |             AlipayFundFreezeResponse result = payFacade.fundFreeze( request); | ||||||
|  |             if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){ | ||||||
|  |                 return result; | ||||||
|  |             } else { | ||||||
|  |                 throw new InnerException("免押冻结失败"); | ||||||
|  |             } | ||||||
|  |         } catch (Exception e){ | ||||||
|  |             log.error("免押冻结失败",e); | ||||||
|  |             throw new InnerException("免押冻结失败"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 取消冻结 | ||||||
|  |      */ | ||||||
|  |  | ||||||
|  |     public boolean cancelFundFreeze(AlipayFundFreezeRequest request) { | ||||||
|  |         try { | ||||||
|  |             AlipayFundFreezeResponse result = payFacade.cancelFundFreeze( request); | ||||||
|  |             if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){ | ||||||
|  |                 return true; | ||||||
|  |             } else { | ||||||
|  |                 throw new InnerException("取消免押冻结失败"); | ||||||
|  |             } | ||||||
|  |         } catch (Exception e){ | ||||||
|  |             log.error("取消免押冻结失败",e); | ||||||
|  |             throw new InnerException("取消免押冻结失败"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest) { | ||||||
|  |         try { | ||||||
|  |             AlipayQueryFreezeResponse result = payFacade.queryFundFreeze( alipayQueryFreezeRequest); | ||||||
|  |             if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){ | ||||||
|  |                 return result; | ||||||
|  |             } else { | ||||||
|  |                 throw new InnerException("查询免押冻结失败"); | ||||||
|  |             } | ||||||
|  |         } catch (Exception e){ | ||||||
|  |             log.error("查询免押押冻结失败",e); | ||||||
|  |             throw new InnerException("查询免押冻结失败"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public AlipayResponse finishFreeze(AlipayFinishFreezeRequest alipayFinishFreezeRequest) { | ||||||
|  |         try { | ||||||
|  |             AlipayResponse result = payFacade.finishFreeze(alipayFinishFreezeRequest); | ||||||
|  |             if(StringUtils.isNotBlank(result.getCode()) && "SUCCESS".equals(result.getCode())){ | ||||||
|  |                 return result; | ||||||
|  |             } else { | ||||||
|  |                 throw new InnerException("完成免押冻结失败"); | ||||||
|  |             } | ||||||
|  |         } catch (Exception e){ | ||||||
|  |             log.error("完成免押押冻结失败",e); | ||||||
|  |             throw new InnerException("完成免押冻结失败"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package com.sczx.order.utils; | package com.sczx.order.utils; | ||||||
|  |  | ||||||
| import com.sczx.order.common.enums.RentCarTypeEnum; | import com.sczx.order.common.enums.RentCarTypeEnum; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
| import org.apache.commons.lang.StringUtils; | import org.apache.commons.lang.StringUtils; | ||||||
|  |  | ||||||
| import java.math.BigDecimal; | import java.math.BigDecimal; | ||||||
| @ -9,6 +10,7 @@ import java.time.format.DateTimeFormatter; | |||||||
| import java.time.temporal.ChronoUnit; | import java.time.temporal.ChronoUnit; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
|  |  | ||||||
|  | @Slf4j | ||||||
| public class OrderUtil { | public class OrderUtil { | ||||||
|  |  | ||||||
|     public static final String ORDER_PREFIX = "OC"; |     public static final String ORDER_PREFIX = "OC"; | ||||||
| @ -114,19 +116,64 @@ public class OrderUtil { | |||||||
|      * @param rentalType 租期类型 |      * @param rentalType 租期类型 | ||||||
|      * @return 预计还车时间 |      * @return 预计还车时间 | ||||||
|      */ |      */ | ||||||
|     public static LocalDateTime getEndRentTime(LocalDateTime origTime,Integer rentalDays, String rentalType) { |     public static LocalDateTime getEndRentTime(LocalDateTime origTime,Integer rerentInterval,Integer rentalDays, String rentalType) { | ||||||
|         LocalDateTime endRentTime = null; |         LocalDateTime endRentTime = null; | ||||||
|         //设置预计还车时间 |         //设置预计还车时间 | ||||||
|         if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.HOUR_RENTAL.getCode(), rentalType)){ |         if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.HOUR_RENTAL.getCode(), rentalType)){ | ||||||
|             endRentTime = origTime.plusHours(1); |             endRentTime = origTime.plusHours(rerentInterval); | ||||||
|         }else if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.DAILY_RENTAL.getCode(), rentalType)){ |         }else if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.DAILY_RENTAL.getCode(), rentalType)){ | ||||||
|             endRentTime = origTime.plusDays(1); |             endRentTime = origTime.plusDays(rerentInterval); | ||||||
|         } else if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.DAYS_RENTAL.getCode(), rentalType)){ |         } else if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.DAYS_RENTAL.getCode(), rentalType)){ | ||||||
|             endRentTime = origTime.plusDays(rentalDays); |             endRentTime = origTime.plusDays((long) rerentInterval * rentalDays); | ||||||
|         } else if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.RENT_INSTEAD_SELL.getCode(), rentalType)){ |         } else if(StringUtils.equalsIgnoreCase(RentCarTypeEnum.RENT_INSTEAD_SELL.getCode(), rentalType)){ | ||||||
|             //以租代售默认期限为30天 |             //以租代售默认期限为30天 | ||||||
|             endRentTime = origTime.plusDays(30); |             endRentTime = origTime.plusDays(rerentInterval*30); | ||||||
|         } |         } | ||||||
|  |         log.info("query endRentTime : {}", endRentTime); | ||||||
|         return endRentTime; |         return endRentTime; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取租车订单金额 | ||||||
|  |      * @param rentalType | ||||||
|  |      * @param rentalPrice | ||||||
|  |      * @param rentalDays | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     public static BigDecimal getRentCarAmount(String rentalType, BigDecimal rentalPrice, Integer rentalDays) { | ||||||
|  | //        BigDecimal rentCarOrderAmount = new BigDecimal(0); | ||||||
|  | //        if(RentCarTypeEnum.HOUR_RENTAL.getCode().equalsIgnoreCase(rentalType)||RentCarTypeEnum.DAILY_RENTAL.getCode().equalsIgnoreCase(rentalType)){ | ||||||
|  | //            rentCarOrderAmount = rentCarOrderAmount.add(rentalPrice); | ||||||
|  | //        }  else if(RentCarTypeEnum.DAYS_RENTAL.getCode().equalsIgnoreCase(rentalType)){ | ||||||
|  | //            rentCarOrderAmount = rentalPrice.multiply(new BigDecimal(rentalDays)); | ||||||
|  | //        } else { | ||||||
|  | //            rentCarOrderAmount = rentalPrice.multiply(new BigDecimal(30)); | ||||||
|  | //        } | ||||||
|  |         return rentalPrice; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取续租订单金额 | ||||||
|  |      * @param rerentInterval 续租周期 | ||||||
|  |      * @param rentalPrice | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     public static BigDecimal getReRentCarAmount(int rerentInterval,BigDecimal rentalPrice) { | ||||||
|  |         //计算续租金额 | ||||||
|  |         return rentalPrice.multiply(new BigDecimal(rerentInterval)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计算续租轮数以覆盖逾期天数 | ||||||
|  |      * @param overdueDays 逾期天数 | ||||||
|  |      * @param rentalDays 每轮续租天数 | ||||||
|  |      * @return 需要的续租轮数 | ||||||
|  |      */ | ||||||
|  |     public static int calculateRerentRoundsToCoverOverdue(Integer overdueDays, Integer rentalDays) { | ||||||
|  |         overdueDays = overdueDays == null|| overdueDays == 0 ? 1 : overdueDays; | ||||||
|  |         rentalDays = rentalDays == null|| rentalDays == 0 ? 1 : overdueDays; | ||||||
|  |         // 使用向上取整计算需要的续租轮数 | ||||||
|  |         return (int) Math.ceil((double) overdueDays / rentalDays); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -22,16 +22,16 @@ | |||||||
|                 <pattern>${PATTERN}</pattern> |                 <pattern>${PATTERN}</pattern> | ||||||
|             </layout> |             </layout> | ||||||
|         </encoder> |         </encoder> | ||||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | <!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">--> | ||||||
|             <level>WARN</level> | <!--            <level>WARN</level>--> | ||||||
|             <onMatch>DENY</onMatch> | <!--            <onMatch>DENY</onMatch>--> | ||||||
|             <onMismatch>NEUTRAL</onMismatch> | <!--            <onMismatch>NEUTRAL</onMismatch>--> | ||||||
|         </filter> | <!--        </filter>--> | ||||||
|         <filter class="ch.qos.logback.classic.filter.LevelFilter"> | <!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">--> | ||||||
|             <level>ERROR</level> | <!--            <level>ERROR</level>--> | ||||||
|             <onMatch>DENY</onMatch> | <!--            <onMatch>DENY</onMatch>--> | ||||||
|             <onMismatch>NEUTRAL</onMismatch> | <!--            <onMismatch>NEUTRAL</onMismatch>--> | ||||||
|         </filter> | <!--        </filter>--> | ||||||
|     </appender> |     </appender> | ||||||
|  |  | ||||||
|     <appender name="WARN_FILE_APPENDER" class="ch.qos.logback.core.FileAppender"> |     <appender name="WARN_FILE_APPENDER" class="ch.qos.logback.core.FileAppender"> | ||||||
| @ -45,6 +45,18 @@ | |||||||
|         </encoder> |         </encoder> | ||||||
|     </appender> |     </appender> | ||||||
|  |  | ||||||
|  |     <!-- 针对 MyBatis SQL 日志 --> | ||||||
|  |     <logger name="org.apache.ibatis" level="DEBUG" additivity="false"> | ||||||
|  |         <appender-ref ref="INFO_FILE_APPENDER"/> | ||||||
|  |         <appender-ref ref="STDOUT"/> | ||||||
|  |     </logger> | ||||||
|  |  | ||||||
|  |     <!-- 针对 JDBC SQL 日志 --> | ||||||
|  |     <logger name="java.sql" level="DEBUG" additivity="false"> | ||||||
|  |         <appender-ref ref="INFO_FILE_APPENDER"/> | ||||||
|  |         <appender-ref ref="STDOUT"/> | ||||||
|  |     </logger> | ||||||
|  |  | ||||||
|     <root level="info"> |     <root level="info"> | ||||||
|         <appender-ref ref="INFO_FILE_APPENDER"/> |         <appender-ref ref="INFO_FILE_APPENDER"/> | ||||||
|         <appender-ref ref="WARN_FILE_APPENDER"/> |         <appender-ref ref="WARN_FILE_APPENDER"/> | ||||||
|  | |||||||
| @ -82,6 +82,7 @@ | |||||||
|  |  | ||||||
|         <where> |         <where> | ||||||
|             zos.del_flag = '0' |             zos.del_flag = '0' | ||||||
|  |             and zos.suborder_type = 'RENTBATTEY' | ||||||
|             and zom.del_flag = '0' |             and zom.del_flag = '0' | ||||||
|             <if test="customerId != null"> |             <if test="customerId != null"> | ||||||
|                 and zom.customer_id = #{customerId} |                 and zom.customer_id = #{customerId} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user