package tasksch import ( "sort" "time" "git.rosy.net.cn/jx-callback/business/jxutils" ) var ( defTaskMan TaskMan defLastHours = 24 maxStoreTime = 48 * time.Hour // 最多存两天时间 ) 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, maxStoreTime) 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 }