| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.config.GeneralProperties;
- import com.izouma.nineth.domain.Order;
- import com.izouma.nineth.domain.SysConfig;
- import com.izouma.nineth.enums.OrderStatus;
- import com.izouma.nineth.exception.BusinessException;
- import com.izouma.nineth.repo.OrderRepo;
- import com.izouma.nineth.repo.SysConfigRepo;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Service;
- import javax.annotation.PostConstruct;
- import java.time.LocalDateTime;
- import java.util.List;
- @Service
- @ConditionalOnProperty(value = "general.notify-server", havingValue = "true")
- @Slf4j
- @AllArgsConstructor
- public class OrderCancelService {
- private final GeneralProperties generalProperties;
- private final OrderRepo orderRepo;
- private final OrderService orderService;
- private final SysConfigRepo sysConfigRepo;
- private static int orderCancelInterval = 210;
- public static void setOrderCancelInterval(int orderCancelInterval) {
- OrderCancelService.orderCancelInterval = orderCancelInterval;
- }
- @PostConstruct
- public void init() {
- orderCancelInterval = sysConfigRepo.findByName("order_cancel_interval")
- .map(SysConfig::getValue).map(Integer::parseInt).orElse(210);
- }
- @Scheduled(fixedRate = 30000)
- public void batchCancel() {
- List<Order> orders = orderRepo.findByStatusAndCreatedAtBeforeAndDelFalse(OrderStatus.NOT_PAID,
- LocalDateTime.now().minusSeconds(orderCancelInterval));
- orders.parallelStream().forEach(o -> {
- try {
- Order order = orderRepo.findById(o.getId()).orElseThrow(new BusinessException("订单不存在"));
- if (order.getStatus() == OrderStatus.NOT_PAID) {
- orderService.cancel(order);
- }
- } catch (Exception e) {
- log.error("取消订单错误 " + o.getId(), e);
- }
- });
- }
- }
|