package com.pz.system.datastructure;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.concurrent.DelayQueue;

@Component
public class OrderDelayQueue {
    private final DelayQueue<TotalOrderDelayOperator> delayQueue = new DelayQueue<>();

    // 添加订单到延时队列
    public void addOrder(TotalOrderDelayOperator order) {
        delayQueue.put(order);
    }

    // 处理过期订单
    @Scheduled(fixedDelay = 30 * 60 * 1000) // 每30分钟触发一次任务
    public void processExpiredOrders() {
        long currentTime = System.currentTimeMillis();

        while (true) {
            TotalOrderDelayOperator order = delayQueue.peek();
            if (order == null || order.getExpirationTime() > currentTime) {
                break;
            }
            order = delayQueue.poll();
            order.operator();
        }
    }

}