erp_server/app/admin/service/sysjob.go
2023-09-16 11:11:36 +08:00

89 lines
1.9 KiB
Go

package service
import (
"time"
"go-admin/app/admin/models"
"go-admin/app/jobs"
"go-admin/common/dto"
"go-admin/common/log"
"go-admin/common/service"
"go-admin/tools/app/msg"
)
type SysJob struct {
service.Service
}
// RemoveJob 删除job
func (e *SysJob) RemoveJob(c *dto.GeneralDelDto) error {
var err error
var data models.SysJob
msgID := e.MsgID
data.JobId = c.Id
err = e.Orm.Table(data.TableName()).First(&data).Error
if err != nil {
log.Errorf("msgID[%s] db error:%s", msgID, err)
return err
}
cn := jobs.Remove(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 {
log.Errorf("msgID[%s] db error:%s", msgID, err)
}
return err
}
case <-time.After(time.Second * 1):
e.Msg = msg.TimeOut
return nil
}
return nil
}
// StartJob 启动任务
func (e *SysJob) StartJob(c *dto.GeneralGetDto) error {
var data models.SysJob
var err error
msgID := e.MsgID
err = e.Orm.Table(data.TableName()).First(&data, c.Id).Error
if err != nil {
log.Errorf("msgID[%s] db error:%s", msgID, err)
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(j)
if err != nil {
log.Errorf("msgID[%s] jobs AddJob[HttpJob] error:%s", msgID, 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(j)
if err != nil {
log.Errorf("msgID[%s] jobs AddJob[ExecJob] error:%s", msgID, err)
}
}
if err != nil {
return err
}
err = e.Orm.Table(data.TableName()).Where(c.Id).Updates(&data).Error
if err != nil {
log.Errorf("msgID[%s] db error:%s", msgID, err)
}
return err
}