telco_server/app/jobs/service/sys_job.go

94 lines
2.0 KiB
Go
Raw Normal View History

2025-03-13 07:49:59 +00:00
package service
import (
"errors"
"time"
"github.com/go-admin-team/go-admin-core/sdk/service"
"github.com/robfig/cron/v3"
"go-admin/app/jobs"
"go-admin/app/jobs/models"
"go-admin/common/dto"
)
type SysJob struct {
service.Service
Cron *cron.Cron
}
// RemoveJob 删除job
func (e *SysJob) RemoveJob(c *dto.GeneralDelDto) error {
var err error
var data models.SysJob
err = e.Orm.Table(data.TableName()).First(&data, c.Id).Error
if err != nil {
e.Log.Errorf("db error: %s", err)
return err
}
cn := jobs.Remove(e.Cron, data.EntryId)
select {
case res := <-cn:
if res {
err = e.Orm.Table(data.TableName()).Where("entry_id = ?", data.EntryId).Update("entry_id", 0).Error
if err != nil {
e.Log.Errorf("db error: %s", err)
}
return err
}
case <-time.After(time.Second * 1):
e.Msg = "操作超时!"
return nil
}
return nil
}
// StartJob 启动任务
func (e *SysJob) StartJob(c *dto.GeneralGetDto) error {
var data models.SysJob
var err error
err = e.Orm.Table(data.TableName()).First(&data, c.Id).Error
if err != nil {
e.Log.Errorf("db error: %s", err)
return err
}
if data.Status == 1 {
err = errors.New("当前Job是关闭状态不能被启动请先启用。")
return err
}
if data.JobType == 1 {
var j = &jobs.HttpJob{}
j.InvokeTarget = data.InvokeTarget
j.CronExpression = data.CronExpression
j.JobId = data.JobId
j.Name = data.JobName
data.EntryId, err = jobs.AddJob(e.Cron, j)
if err != nil {
e.Log.Errorf("jobs AddJob[HttpJob] error: %s", err)
}
} else {
var j = &jobs.ExecJob{}
j.InvokeTarget = data.InvokeTarget
j.CronExpression = data.CronExpression
j.JobId = data.JobId
j.Name = data.JobName
j.Args = data.Args
data.EntryId, err = jobs.AddJob(e.Cron, j)
if err != nil {
e.Log.Errorf("jobs AddJob[ExecJob] error: %s", err)
}
}
if err != nil {
return err
}
err = e.Orm.Table(data.TableName()).Where(c.Id).Updates(&data).Error
if err != nil {
e.Log.Errorf("db error: %s", err)
}
return err
}