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