first commit
This commit is contained in:
122
services/cron_service.go
Normal file
122
services/cron_service.go
Normal file
@@ -0,0 +1,122 @@
|
||||
// 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)
|
||||
}
|
||||
Reference in New Issue
Block a user