36 lines
675 B
Go
36 lines
675 B
Go
package cron
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"mini-chat/internal/repository/mysql/model"
|
|
|
|
"github.com/jakecoffman/cron"
|
|
)
|
|
|
|
func (s *server) AddJob(task *model.PatientMedicineTask, execUser string) cron.FuncJob {
|
|
_, cancel := context.WithCancel(context.Background())
|
|
|
|
s.mu.Lock()
|
|
s.taskContext[task.Code] = cancel
|
|
s.mu.Unlock()
|
|
|
|
return func() {
|
|
s.taskCount.Add()
|
|
defer func() {
|
|
s.taskCount.Done()
|
|
|
|
s.mu.Lock()
|
|
delete(s.taskContext, task.Code) // 清理任务上下文
|
|
s.mu.Unlock()
|
|
|
|
if err := recover(); err != nil {
|
|
s.logger.Error(fmt.Sprintf("[定时任务] 任务编码:%s, 执行异常: %+v", task.Code, err))
|
|
}
|
|
}()
|
|
|
|
// 执行任务
|
|
}
|
|
}
|