OrderCancelService.java 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.config.GeneralProperties;
  3. import com.izouma.nineth.domain.Order;
  4. import com.izouma.nineth.enums.OrderStatus;
  5. import com.izouma.nineth.exception.BusinessException;
  6. import com.izouma.nineth.repo.OrderRepo;
  7. import lombok.AllArgsConstructor;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  10. import org.springframework.scheduling.annotation.Scheduled;
  11. import org.springframework.stereotype.Service;
  12. import java.time.LocalDateTime;
  13. import java.util.List;
  14. @Service
  15. @ConditionalOnProperty(value = "general.notify-server", havingValue = "true")
  16. @Slf4j
  17. @AllArgsConstructor
  18. public class OrderCancelService {
  19. private final GeneralProperties generalProperties;
  20. private final OrderRepo orderRepo;
  21. private final OrderService orderService;
  22. @Scheduled(fixedRate = 30000)
  23. public void batchCancel() {
  24. List<Order> orders = orderRepo.findByStatusAndCreatedAtBeforeAndDelFalse(OrderStatus.NOT_PAID,
  25. LocalDateTime.now().minusSeconds(210));
  26. orders.parallelStream().forEach(o -> {
  27. try {
  28. Order order = orderRepo.findById(o.getId()).orElseThrow(new BusinessException("订单不存在"));
  29. if (order.getStatus() == OrderStatus.NOT_PAID) {
  30. orderService.cancel(order);
  31. }
  32. } catch (Exception e) {
  33. log.error("取消订单错误 " + o.getId(), e);
  34. }
  35. });
  36. }
  37. }