From bb07d90407382045a0d4f83b7a83c4228e1591a8 Mon Sep 17 00:00:00 2001 From: linwenxiang <991154416@qq.com> Date: Tue, 15 Sep 2020 13:59:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0service=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/sysjob/sysjob.go | 75 +++++++++++++++++++++++++++++++++ app/admin/router/sysjob.go | 7 +-- app/admin/service/sysjob.go | 70 ++++++++++++++++++++++++++++++ common/apis/api.go | 25 +++++++++++ common/service/service.go | 8 ++++ 5 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 app/admin/service/sysjob.go create mode 100644 common/apis/api.go create mode 100644 common/service/service.go diff --git a/app/admin/apis/sysjob/sysjob.go b/app/admin/apis/sysjob/sysjob.go index d90a9053..5dc0bac0 100644 --- a/app/admin/apis/sysjob/sysjob.go +++ b/app/admin/apis/sysjob/sysjob.go @@ -1,7 +1,10 @@ package sysjob import ( + "go-admin/app/admin/service" + "go-admin/common/apis" "go-admin/common/dto" + "gorm.io/gorm" "time" "github.com/gin-gonic/gin" @@ -13,6 +16,50 @@ import ( "go-admin/tools/app/msg" ) +type SysJob struct { + apis.Api +} + +// RemoveJobForService 调用service实现 +func (e *SysJob) RemoveJobForService(c *gin.Context) { + db, err := e.GetOrm(c) + if err != nil { + app.Error(c, 500, err, "") + } + var v dto.GeneralDelDto + err = c.BindUri(&v) + if err != nil { + app.Error(c, 422, err, "参数验证失败") + } + s := service.SysJob{} + s.Orm = db + err = s.RemoveJob(&v) + if err != nil { + app.Error(c, 500, err, "") + } + app.OK(c, nil, s.Msg) +} + +// StartJobForService 启动job service实现 +func (e *SysJob) StartJobForService(c *gin.Context) { + db, err := e.GetOrm(c) + if err != nil { + app.Error(c, 500, err, "") + } + var v dto.GeneralGetDto + err = c.BindUri(&v) + if err != nil { + app.Error(c, 422, err, "参数验证失败") + } + s := service.SysJob{} + s.Orm = db + err = s.StartJob(&v) + if err != nil { + app.Error(c, 500, err, "") + } + app.OK(c, nil, s.Msg) +} + func RemoveJob(c *gin.Context) { var data models.SysJob var v dto.GeneralDelDto @@ -35,6 +82,34 @@ func RemoveJob(c *gin.Context) { } +// StartJobForService 启动job service实现 +func StartJobForService(c *gin.Context) { + var err error + idb, exist := c.Get("db") + if !exist { + app.Error(c, 500, nil, "db connect not exist") + } + switch idb.(type) { + case *gorm.DB: + //新增操作 + db := idb.(*gorm.DB) + var v dto.GeneralGetDto + err = c.BindUri(&v) + if err != nil { + app.Error(c, 422, err, "参数验证失败") + } + s := service.SysJob{} + s.Orm = db + err = s.StartJob(&v) + if err != nil { + app.Error(c, 500, err, "") + } + app.OK(c, nil, s.Msg) + default: + app.Error(c, 500, nil, "db connect not exist") + } +} + func StartJob(c *gin.Context) { var data models.SysJob var v dto.GeneralGetDto diff --git a/app/admin/router/sysjob.go b/app/admin/router/sysjob.go index 8c026f81..e515e9fb 100644 --- a/app/admin/router/sysjob.go +++ b/app/admin/router/sysjob.go @@ -10,7 +10,7 @@ import ( jwt "go-admin/pkg/jwtauth" ) -func init() { +func init() { routerCheckRole = append(routerCheckRole, registerSysJobRouter) } @@ -29,7 +29,8 @@ func registerSysJobRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlew r.PUT("", actions.PermissionAction(), actions.UpdateAction(new(dto.SysJobControl))) r.DELETE("/:id", actions.PermissionAction(), actions.DeleteAction(new(dto.SysJobById))) } + sysJob := &sysjob.SysJob{} - v1.GET("/job/remove/:id", sysjob.RemoveJob) - v1.GET("/job/start/:id", sysjob.StartJob) + v1.GET("/job/remove/:id", sysJob.RemoveJobForService) + v1.GET("/job/start/:id", sysJob.StartJobForService) } diff --git a/app/admin/service/sysjob.go b/app/admin/service/sysjob.go new file mode 100644 index 00000000..ad8427a0 --- /dev/null +++ b/app/admin/service/sysjob.go @@ -0,0 +1,70 @@ +package service + +import ( + "go-admin/app/admin/models" + "go-admin/app/jobs" + "go-admin/common/dto" + "go-admin/common/service" + "go-admin/tools/app/msg" + "time" +) + +type SysJob struct { + service.Service +} + +// RemoveJob 删除job +func (e *SysJob) RemoveJob(c *dto.GeneralDelDto) error { + var err error + var data models.SysJob + data.JobId = c.Id + err = e.Orm.Table(data.TableName()).First(&data).Error + if err != nil { + 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 + 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 + err = e.Orm.Table(data.TableName()).First(&data, c.Id).Error + if err != nil { + 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) + } 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 { + return err + } + + err = e.Orm.Table(data.TableName()).Where(c.Id).Updates(&data).Error + return err +} diff --git a/common/apis/api.go b/common/apis/api.go new file mode 100644 index 00000000..ed6e104b --- /dev/null +++ b/common/apis/api.go @@ -0,0 +1,25 @@ +package apis + +import ( + "errors" + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +type Api struct { +} + +// GetOrm 获取orm连接 +func (e *Api) GetOrm(c *gin.Context) (*gorm.DB, error) { + idb, exist := c.Get("db") + if !exist { + return nil, errors.New("db connect not exist") + } + switch idb.(type) { + case *gorm.DB: + //新增操作 + return idb.(*gorm.DB), nil + default: + return nil, errors.New("db connect not exist") + } +} diff --git a/common/service/service.go b/common/service/service.go new file mode 100644 index 00000000..036097c7 --- /dev/null +++ b/common/service/service.go @@ -0,0 +1,8 @@ +package service + +import "gorm.io/gorm" + +type Service struct { + Orm *gorm.DB + Msg string +}