//package com.github.microservice.core.components.queue.service;
//
//import com.github.microservice.core.components.queue.config.ExecQueueConfig;
//import com.github.microservice.core.components.queue.event.ExecQueueEvent;
//import lombok.SneakyThrows;
//import org.apache.commons.lang3.SerializationUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.util.Assert;
//
//import java.util.Date;
//import java.util.Map;
//import java.util.Optional;
//
//@Component
//public class ExecQueueService {
//
//
//
//    @Autowired
//    private ExecQueueConfig execQueueConfig;
//
//
//    public String add(Map<String, Object> data, int maxTryCount, ExecQueueEvent execQueueEvent) {
//        return this.add(data, maxTryCount, execQueueEvent, null);
//    }
//
//
//    public String add(Map<String, Object> data, int maxTryCount, ExecQueueEvent execQueueEvent, Long ttlTime) {
//        Assert.state(maxTryCount > 0, "最大尝试次数必须大于0");
//        Assert.notNull(execQueueEvent, "事件不能为空");
//
//        final ExecQueue execQueue = new ExecQueue();
//        execQueue.setData(data);
//
//        // 事件
//        execQueue.setExecQueueEvent(SerializationUtils.serialize(execQueueEvent));
//
//        // 初始化参数
//        execQueue.setCurrentTryCount(0);
//        execQueue.setMaxTryCount(maxTryCount);
//        execQueue.setStatus(ExecQueue.ExecQueueStatus.Wait);
//
//        // 设置过期时间
//        Optional.ofNullable(ttlTime).ifPresent(it -> execQueue.setTTL(new Date(System.currentTimeMillis() + it)));
//
//
//        this.execQueueDao.save(execQueue);
//        return execQueue.getId();
//    }
//
//
//
//
//    /**
//     * 更新下次执行时间
//     */
////    public boolean updateNextExecTime(ExecQueue execQueue) {
////        if (execQueue.getCurrentTryCount() >= execQueue.getMaxTryCount()) {
////            return false;
////        }
////        execQueue.setCurrentTryCount(execQueue.getCurrentTryCount() + 1);
////        final long sleepTime = execQueueConfig.sleepTime(execQueue.getCurrentTryCount());
////        execQueue.setNextTime(this.dbHelper.getTime() + sleepTime);
////        execQueue.setStatus(ExecQueue.ExecQueueStatus.Wait);
////        this.dbHelper.updateTime(execQueue);
////        return true;
////    }
//
//
//
//
//}
