/*
 *  Copyright 2019-2020 Zheng Jie
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.youchain.modules.quartz.task;

import com.youchain.businessdata.domain.AgvTask;
import com.youchain.businessdata.repository.AgvTaskRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;


/**
 * 测试用
 * @author Liu Xue
 * @date 2019-01-08
 */
@Slf4j
@Service
public class TestTask {

    @Autowired
    private AgvTaskRepository agvTaskRepository;

    private static final int MAX_TASK_COUNT = 4;
    private static final long TIMEOUT_MS = 600000; // 10分钟，以毫秒为单位
    private long lastTaskTime = System.currentTimeMillis();
    private Set<AgvTask> taskQueue = new HashSet<>();


    public void testTask(){
        //查询待执行的出库AGV任务
        List<AgvTask> agvTasks= agvTaskRepository.queryAgvTaskByWAIT();
        for(AgvTask agvTask:agvTasks) {
            try {
                boolean containsElement = taskQueue.contains(agvTask);
                if (!containsElement) {
                    taskQueue.add(agvTask);
                }
                if (taskQueue.size() >= MAX_TASK_COUNT) {
                    System.out.println("任务已满足，当前任务数：" + taskQueue.size());
                    taskQueue.clear();
                    lastTaskTime = System.currentTimeMillis();
                } else if (System.currentTimeMillis() - lastTaskTime >= TIMEOUT_MS) {
                    System.out.println("超过10分钟未满足4个任务，当前任务数：" + taskQueue.size());
                    taskQueue.clear();
                    lastTaskTime = System.currentTimeMillis();
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }

        }
    }
}
