feiyu02
2024-11-08 d2727f231319a48019bc3b87439136ab49b97b9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package cn.flightfeather.supervision.common.executor
 
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() {
        try {
            val res = task()
            if (res) success() else fail()
        } catch (e: Exception) {
            fail()
            taskStatus.extra = e.message
        }
    }
 
    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()
    }
}