diff --git a/app/system/api/sys_job.go b/app/system/api/sys_job.go index b5fe4c7..dfc5d50 100644 --- a/app/system/api/sys_job.go +++ b/app/system/api/sys_job.go @@ -10,6 +10,7 @@ package api import ( "gfast/app/system/dao" "gfast/app/system/service" + "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" "github.com/gogf/gf/util/gvalid" @@ -105,6 +106,20 @@ func (c *sysJob) Stop(r *ghttp.Request) { c.SusJsonExit(r, "定时任务管理停止成功") } +// Run 执行任务 +func (c *sysJob) Run(r *ghttp.Request) { + id := r.GetInt64("id") + job, err := service.SysJob.GetJobInfoById(id) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + err = service.SysJob.JobRun(job) + if err != nil { + c.FailJsonExit(r, "定时任务管理执行"+err.Error()) + } + c.SusJsonExit(r, "定时任务管理执行成功") +} + // Delete 删除任务 func (c *sysJob) Delete(r *ghttp.Request) { ids := r.GetInts("ids") diff --git a/app/system/router/router.go b/app/system/router/router.go index 375a210..300b2a7 100644 --- a/app/system/router/router.go +++ b/app/system/router/router.go @@ -10,6 +10,7 @@ package router import ( "gfast/app/system/api" "gfast/middleware" + "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" ) @@ -132,6 +133,7 @@ func init() { group.PUT("edit", api.SysJob.Edit) group.PUT("start", api.SysJob.Start) group.PUT("stop", api.SysJob.Stop) + group.PUT("run", api.SysJob.Run) group.DELETE("delete", api.SysJob.Delete) }) //服务监控 diff --git a/app/system/service/sys_job.go b/app/system/service/sys_job.go index f33cb97..ab31ed7 100644 --- a/app/system/service/sys_job.go +++ b/app/system/service/sys_job.go @@ -11,12 +11,13 @@ import ( comModel "gfast/app/common/model" "gfast/app/system/dao" "gfast/app/system/model" + "strings" + "github.com/gogf/gf/container/gset" "github.com/gogf/gf/errors/gerror" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/gcron" "github.com/gogf/gf/util/gconv" - "strings" ) type sysJob struct { @@ -150,10 +151,28 @@ func (s *sysJob) JobStop(job *model.SysJob) error { return err } +//执行任务 +func (s *sysJob) JobRun(job *model.SysJob) error { + //可以task目录下是否绑定对应的方法 + f := TimeTaskList.GetByName(job.InvokeTarget) + if f == nil { + return gerror.New("当前task目录下没有绑定这个方法") + } + //传参 + paramArr := strings.Split(job.JobParams, "|") + TimeTaskList.EditParams(f.FuncName, paramArr) + task, err := gcron.AddOnce("@every 1s", f.Run) + if err != nil || task == nil { + return gerror.New("启动执行失败") + } + return nil +} + // DeleteJobByIds 删除任务 func (s *sysJob) DeleteJobByIds(ids []int) (err error) { if len(ids) == 0 { err = gerror.New("参数错误") + return } gst := gset.NewFrom(ids) var jobs []*model.SysJob