Files
Quincy_admin/services/cron_service.go
2026-03-26 22:13:03 +08:00

123 lines
2.9 KiB
Go

// 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)
}