75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package tasksch
|
|
|
|
import (
|
|
"sort"
|
|
"time"
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
)
|
|
|
|
const (
|
|
defLastHours = 24
|
|
maxStoreHours = 48 // 最多存放小时数
|
|
)
|
|
|
|
var (
|
|
defTaskMan TaskMan
|
|
)
|
|
|
|
type TaskMan struct {
|
|
taskMap jxutils.SyncMapWithTimeout
|
|
}
|
|
|
|
func init() {
|
|
}
|
|
|
|
func (m *TaskMan) GetTasks(taskID string, fromStatus, toStatus int, lastHours int, createdBy string) (taskList TaskList) {
|
|
if lastHours == 0 {
|
|
lastHours = defLastHours
|
|
}
|
|
lastTime := time.Now().Add(time.Duration(-lastHours) * time.Hour).Unix()
|
|
m.taskMap.Range(func(key, value interface{}) bool {
|
|
k := key.(string)
|
|
v := value.(ITask)
|
|
status := v.GetStatus()
|
|
if !((createdBy != "" && createdBy != v.GetCreatedBy()) || (taskID != "" && taskID != k) || status < fromStatus || status > toStatus || v.GetCreatedAt().Unix() < lastTime) {
|
|
taskList = append(taskList, v)
|
|
}
|
|
return true
|
|
})
|
|
sort.Sort(TaskList(taskList))
|
|
return taskList
|
|
}
|
|
|
|
func (m *TaskMan) ManageTask(task ITask) ITask {
|
|
m.taskMap.StoreWithTimeout(task.GetID(), task, maxStoreHours*time.Hour)
|
|
return task
|
|
}
|
|
|
|
func GetTasks(taskID string, fromStatus, toStatus int, lastHours int, createdBy string) (taskList TaskList) {
|
|
return defTaskMan.GetTasks(taskID, fromStatus, toStatus, lastHours, createdBy)
|
|
}
|
|
|
|
func ManageTask(task ITask) ITask {
|
|
return defTaskMan.ManageTask(task)
|
|
}
|
|
|
|
func IsTaskRunning(taskID string) bool {
|
|
if taskList := GetTasks(taskID, TaskStatusBegin, TaskStatusWorking, 0, ""); len(taskList) > 0 {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func UnmanageTasks(taskIDs []string) {
|
|
if len(taskIDs) == 0 {
|
|
allTasks := GetTasks("", TaskStatusBegin, TaskStatusEnd, maxStoreHours, "")
|
|
for _, v := range allTasks {
|
|
taskIDs = append(taskIDs, v.GetID())
|
|
}
|
|
}
|
|
for _, v := range taskIDs {
|
|
defTaskMan.taskMap.Delete(v)
|
|
}
|
|
}
|