12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package base
- import (
- "context"
- "encoding/json"
- taskService "eta/eta_mini_ht_api/domian/task"
- "time"
- )
- const (
- FORBIDDEN = "forbidden"
- DEV = "dev"
- TEST = "test"
- PROD = "prod"
- )
- type TaskType string
- type ETATask struct {
- RunMode string
- Name TaskType
- TaskFn Task
- Cron string
- }
- type TaskDetail struct {
- TaskId int
- StartTime string
- EndTime string
- Content string
- }
- type Task interface {
- Execute(taskDetail *TaskDetail) error
- }
- func NewTask(name TaskType, cron string, taskFunc Task, mode string) ETATask {
- return ETATask{
- Name: name,
- TaskFn: taskFunc,
- Cron: cron,
- RunMode: mode,
- }
- }
- var tasks = make(map[TaskType]*ETATask)
- func GetTasks() map[TaskType]*ETATask {
- return tasks
- }
- func RegisterTask(etaTask *ETATask) {
- if etaTask == nil {
- panic("不能注册空任务")
- }
- if _, ok := tasks[etaTask.Name]; ok {
- panic("请勿重复创建任务:" + etaTask.Name)
- }
- tasks[etaTask.Name] = etaTask
- }
- func (eta *ETATask) Run(_ context.Context) (err error) {
- details := TaskDetail{
- StartTime: time.Now().Format(time.DateTime),
- }
- runTask := taskService.TaskDTO{
- TaskType: string(eta.Name),
- }
- //启动任务
- taskId, err := taskService.InitAndStartTask(runTask)
- details.TaskId = taskId
- err = eta.TaskFn.Execute(&details)
- details.EndTime = time.Now().Format(time.DateTime)
- detailStr, err := json.Marshal(details)
- //任务状态
- if err != nil {
- taskService.UpdateAndFailedTask(taskId, string(detailStr))
- return
- }
- taskService.UpdateAndSuccessTask(taskId, string(detailStr))
- return
- }
|