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