diff --git a/internal/task/task.go b/internal/task/task.go new file mode 100644 index 0000000..321b2a6 --- /dev/null +++ b/internal/task/task.go @@ -0,0 +1,53 @@ +package task + +import ( + "log" + + "github.com/robfig/cron/v3" +) + +// Scheduler 定时任务调度器 +type Scheduler struct { + cron *cron.Cron +} + +// New 创建定时任务调度器 +func New() *Scheduler { + return &Scheduler{cron: cron.New(cron.WithSeconds())} +} + +// Start 启动定时任务调度器 +func (s *Scheduler) Start() { + s.cron.Start() + log.Println("定时任务调度器已启动") +} + +// Stop 停止定时任务调度器 +func (s *Scheduler) Stop() { + s.cron.Stop() + log.Println("定时任务调度器已停止") +} + +// AddFunc 添加定时任务 +// spec 为 6 字段 cron 表达式(秒 分 时 日 月 周),cmd 为执行函数 +func (s *Scheduler) AddFunc(name, spec string, cmd func()) error { + _, err := s.cron.AddFunc(spec, func() { + log.Printf("定时任务 [%s] 开始执行", name) + cmd() + log.Printf("定时任务 [%s] 执行完成", name) + }) + if err != nil { + return err + } + log.Printf("已注册定时任务 [%s]: %s", name, spec) + return nil +} + +// RegisterDefaults 注册默认的示例定时任务(扩展位) +// 实际项目中在此添加:订单自动完成、超时退款、优惠券过期、内容审核、账号过期检查等 +func (s *Scheduler) RegisterDefaults() { + // 示例:每天凌晨 1 点执行数据清理 + _ = s.AddFunc("数据清理示例", "0 0 1 * * *", func() { + log.Println("执行数据清理(示例任务,请按需替换为实际业务)") + }) +}