94 lines
2.0 KiB
Go
94 lines
2.0 KiB
Go
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
|
||
}
|