package cn.flightfeather.supervision.common.executor
|
|
import org.springframework.scheduling.annotation.Async
|
import java.time.LocalDateTime
|
import java.util.concurrent.Future
|
|
/**
|
* 后台任务
|
*/
|
class BgTask(
|
val type: BgTaskType,
|
val id: String,
|
val name: String,
|
private val task: () -> Boolean,
|
) {
|
var taskStatus = BgTaskStatus(type, id, name)
|
var future: Future<*>? = null
|
|
fun ready() {
|
taskStatus.status = TaskStatus.RUNNING
|
taskStatus.startTime = LocalDateTime.now()
|
}
|
|
fun execute() {
|
val res = task()
|
if (res) success() else fail()
|
}
|
|
fun success() {
|
taskStatus.status = TaskStatus.SUCCESS
|
complete()
|
}
|
|
fun fail() {
|
taskStatus.status = TaskStatus.FAIL
|
complete()
|
}
|
|
fun shutdown() {
|
if (future?.isCancelled == false && !future!!.isDone) {
|
future!!.cancel(true)
|
taskStatus.status = TaskStatus.SHUTDOWN
|
complete()
|
}
|
}
|
|
fun complete() {
|
taskStatus.endTime = LocalDateTime.now()
|
}
|
}
|