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