OrderCancelService.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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.domain.SysConfig;
  5. import com.izouma.nineth.enums.OrderStatus;
  6. import com.izouma.nineth.exception.BusinessException;
  7. import com.izouma.nineth.repo.OrderRepo;
  8. import com.izouma.nineth.repo.SysConfigRepo;
  9. import lombok.AllArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.PostConstruct;
  15. import java.time.LocalDateTime;
  16. import java.util.List;
  17. @Service
  18. @ConditionalOnProperty(value = "general.notify-server", havingValue = "true")
  19. @Slf4j
  20. @AllArgsConstructor
  21. public class OrderCancelService {
  22. private final GeneralProperties generalProperties;
  23. private final OrderRepo orderRepo;
  24. private final OrderService orderService;
  25. private final SysConfigRepo sysConfigRepo;
  26. private static int orderCancelInterval = 210;
  27. public static void setOrderCancelInterval(int orderCancelInterval) {
  28. OrderCancelService.orderCancelInterval = orderCancelInterval;
  29. }
  30. @PostConstruct
  31. public void init() {
  32. orderCancelInterval = sysConfigRepo.findByName("order_cancel_interval")
  33. .map(SysConfig::getValue).map(Integer::parseInt).orElse(210);
  34. }
  35. @Scheduled(fixedRate = 30000)
  36. public void batchCancel() {
  37. List<Order> orders = orderRepo.findByStatusAndCreatedAtBeforeAndDelFalse(OrderStatus.NOT_PAID,
  38. LocalDateTime.now().minusSeconds(orderCancelInterval));
  39. orders.parallelStream().forEach(o -> {
  40. try {
  41. Order order = orderRepo.findById(o.getId()).orElseThrow(new BusinessException("订单不存在"));
  42. if (order.getStatus() == OrderStatus.NOT_PAID) {
  43. orderService.cancel(order);
  44. }
  45. } catch (Exception e) {
  46. log.error("取消订单错误 " + o.getId(), e);
  47. }
  48. });
  49. }
  50. }