package cn.superdesk.uniorder.common.queue.block;

import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.RandomUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * @Description: 使用方法
 * <p>
 * new LogTask("DEFAULT")
 * .setDuration(5000) //设置了时间,代表这个任务时间是确定的,如果不确定,则不用设置
 * .setPriority(TaskPriority.DEFAULT) //设置优先级,默认是DEFAULT
 * .enqueue(); //入队
 * @Author: linjinyu
 * @CreateDate: 2021/9/9 下午4:18
 * @UpdateUser: linjinyu
 * @UpdateDate: 2021/9/9 下午4:18
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Slf4j
public class _TestTask extends BaseTask {

	private String taskName;

	public _TestTask(String taskName) {
		this.taskName = taskName;
	}

	// 执行任务方法,在这里实现你的任务具体内容
	@Override
	public void doTask() {
		log.info("LogTask-{}-doTask start", taskName);
		super.doTask();

		// 如果这个Task的执行时间是不确定的,成功后需要手动调用
		// unLockBlock方法解除阻塞,例如:
//		doWhat(new CallBackInterface {
//			void onSuccess () {
//				unLockBlock();
//			}
//		});

		/****************************************** 模拟任务执行耗时 start ******************************************/
		long c = RandomUtil.randomLong(1000L, 9999L);
		log.info("LogTask-{}-doTask 耗时 {}ms", taskName, c);
		ThreadUtil.sleep(c);
		/****************************************** 模拟任务执行耗时 start ******************************************/

		unLockBlock();

		log.info("LogTask-{}-doTask   end", taskName);
	}

	// 任务执行完的回调,在这里你可以做些释放资源或者埋点之类的操作
	@Override
	public void finishTask() {
		super.finishTask();
		log.info("LogTask-{}-finishTask", taskName);
	}
}
