// Package services/cron_service.go package services import ( "Quincy_admin/crontask" "Quincy_admin/repositories" "Quincy_admin/schemas" "fmt" "log" ) type CronService struct { cronRepo *repositories.CronRepository cronManager *crontask.CronManager } func NewCronService(cronRepo *repositories.CronRepository, cronManager *crontask.CronManager) *CronService { return &CronService{ cronRepo: cronRepo, cronManager: cronManager, } } // GetCronList 获取定时任务列表 func (s *CronService) GetCronList(req *schemas.CronListRequest) ([]*schemas.CronJob, int64, error) { return s.cronRepo.GetCronList(req) } // AddCron 添加定时任务 func (s *CronService) AddCron(req *schemas.CronJobUpdateRequest) (int64, error) { return s.cronRepo.AddCron(req) } // UpdateCron 修改定时任务 func (s *CronService) UpdateCron(req *schemas.CronJobUpdateRequest) error { // 更新数据库 err := s.cronRepo.UpdateCron(req) if err != nil { return err } // 先移除现有的任务 err = s.cronManager.RemoveJob(int(req.ID)) if err != nil { return err } err = s.cronManager.AddJobByID(int(req.ID)) return nil } // UpdateCronStatus 启用/停用定时任务 func (s *CronService) UpdateCronStatus(id int, enable int) error { // 先更新数据库状态 err := s.cronRepo.UpdateCronStatus(id, enable) if err != nil { return err } // 根据 enabled 状态决定是否移除或添加任务 // 数据库更新成功后再处理任务管理器 var jobErr error if enable == 0 { // 停用:移除任务 jobErr = s.cronManager.RemoveJob(id) } else if enable == 1 { // 启用:添加任务 jobErr = s.cronManager.AddJobByID(id) } // 如果任务管理器操作失败,回滚数据库状态 if jobErr != nil { rollbackEnable := 1 - enable rollbackErr := s.cronRepo.UpdateCronStatus(id, rollbackEnable) if rollbackErr != nil { log.Printf("failed to rollback job status: %v\n", rollbackErr) } return fmt.Errorf("failed to update job status: %v", jobErr) } return nil } // DeleteCron 删除定时任务 func (s *CronService) DeleteCron(id int) error { // 删除数据库记录 err := s.cronRepo.DeleteCron(id) if err != nil { return err } // 触发任务刷新(需传入 CronManager 实例) go func() { err := s.cronManager.RemoveJob(id) if err != nil { } }() return nil } // RestartCron 重启定时任务 func (s *CronService) RestartCron() error { err := s.cronRepo.UpdateAllCronStatus(1) if err != nil { return err } return s.cronManager.Restart() } // StopCron 停止定时任务 func (s *CronService) StopCron() error { err := s.cronRepo.UpdateAllCronStatus(0) if err != nil { return err } return s.cronManager.Stop() } // GetCronLogList 获取定时任务日志列表 func (s *CronService) GetCronLogList(req *schemas.CronJobLogListRequest) ([]*schemas.CronJobLog, int64, error) { return s.cronRepo.GetCronLogList(req) }