update cronjob

This commit is contained in:
2022-03-01 17:43:41 +08:00
parent 093e44c642
commit 3ba1cb2565
13 changed files with 186 additions and 115 deletions
+56 -58
View File
@@ -2,14 +2,14 @@ package v1
import (
"cutego/core/api/v1/request"
"cutego/core/api/v1/response"
"cutego/core/entity"
"cutego/core/service"
"cutego/pkg/cache"
"cutego/pkg/page"
"cutego/pkg/common"
"cutego/pkg/cronjob"
"cutego/pkg/resp"
"cutego/pkg/util"
"github.com/gin-gonic/gin"
"strconv"
"strings"
)
type CronJobApi struct {
@@ -24,27 +24,30 @@ func (a CronJobApi) List(c *gin.Context) {
return
}
find, i := a.cronJobService.FindPage(query)
resp.OK(c, page.Page{
List: find,
Total: i,
Size: query.PageSize,
})
var result []interface{}
for _, item := range find {
// 领域对象转换
result = append(result, util.DeepCopy(item, &response.CronJobResponse{}))
}
resp.OK(c, util.NewPage(result, i, query.PageSize))
}
// GetById 根据id获取任务详情
func (a CronJobApi) GetById(c *gin.Context) {
jobId := c.Param("jobId")
info := a.cronJobService.GetInfo(common.StringToInt64(jobId))
resp.OK(c, util.DeepCopy(info, &response.CronJobResponse{}))
}
// Edit 修改定时任务
func (a CronJobApi) Edit(c *gin.Context) {
dictType := entity.SysDictType{}
if c.Bind(&dictType) != nil {
record := entity.SysCronJob{}
if c.Bind(&record) != nil {
resp.ParamError(c)
return
}
//检验定时任务是否存在
if a.dictTypeService.CheckDictTypeUnique(dictType) {
resp.Error(c, "修改字典'"+dictType.DictName+"'失败, 定时任务已存在")
return
}
//修改数据
if a.dictTypeService.Edit(dictType) {
if a.cronJobService.Edit(record) > 0 {
resp.OK(c)
} else {
resp.Error(c)
@@ -53,54 +56,49 @@ func (a CronJobApi) Edit(c *gin.Context) {
// Add 新增定时任务
func (a CronJobApi) Add(c *gin.Context) {
dictType := entity.SysDictType{}
if c.Bind(&dictType) != nil {
dto := entity.SysCronJob{}
if c.Bind(&dto) != nil {
resp.ParamError(c)
return
}
//检验定时任务是否存在
if a.dictTypeService.CheckDictTypeUnique(dictType) {
resp.Error(c, "新增字典'"+dictType.DictName+"'失败, 定时任务已存在")
record := a.cronJobService.GetInfoByAlias(dto.FuncAlias)
if record.JobId > 0 {
resp.Error(c, "任务已存在!")
} else {
a.cronJobService.Save(dto)
cronjob.AppendCronFunc(dto.JobCron, dto.FuncAlias, dto.Status)
resp.OK(c)
}
}
// Remove 删除定时任务
func (a CronJobApi) Remove(c *gin.Context) {
jobId := common.StringToInt64(c.Param("jobId"))
funcAlias := c.Param("funcAlias")
if a.cronJobService.GetInfo(jobId).Status == "1" {
resp.Error(c, "任务运行中, 无法删除!")
return
}
//新增定时任务
if a.dictTypeService.Save(dictType) {
resp.OK(c)
} else {
resp.Error(c)
}
cronjob.RemoveCronFunc(funcAlias)
a.cronJobService.Remove([]int64{jobId})
resp.OK(c)
}
// Remove 批量删除定时任务
func (a CronJobApi) Remove(c *gin.Context) {
param := c.Param("dictId")
split := strings.Split(param, ",")
ids := make([]int64, 0)
types := make([]string, 0)
for _, s := range split {
parseInt, _ := strconv.ParseInt(s, 10, 64)
ids = append(ids, parseInt)
// ChangeStatus 改变任务状态
func (a CronJobApi) ChangeStatus(c *gin.Context) {
record := entity.SysCronJob{}
if c.Bind(&record) != nil {
resp.ParamError(c)
return
}
//校验定时任务是否使用
for _, id := range ids {
dictType := a.dictTypeService.GetById(id)
if len(a.dictDataService.FindByDictType(dictType.DictType)) > 0 {
resp.Error(c, dictType.DictName+"已分配,不能删除")
return
if a.cronJobService.Edit(record) > 0 {
if record.Status == "1" {
cronjob.StartCronFunc(record.FuncAlias)
} else {
cronjob.StopCronFunc(record.FuncAlias)
}
types = append(types, dictType.DictType)
}
//批量删除
if a.dictTypeService.Remove(ids) {
//从缓存中删除数据
cache.RemoveList(types)
resp.OK(c)
} else {
resp.Error(c)
}
}
// 改变任务状态
func (a CronJobApi) ChangeStatus(context *gin.Context) {
resp.OK(c)
}
+1
View File
@@ -5,4 +5,5 @@ import "cutego/pkg/base"
type CronJobQuery struct {
base.GlobalQuery
JobName string `form:"jobName"`
Status string `form:"Status"`
}
+12
View File
@@ -0,0 +1,12 @@
package response
type CronJobResponse struct {
JobId int `json:"jobId"` // 任务主键
JobName string `json:"jobName"` // 任务名称
JobCron string `json:"jobCron"` // cron表达式
FuncAlias string `json:"funcAlias"` // 方法别名(程序内注册的别名)
FuncParam string `json:"funcParam"` // 方法参数
Status string `json:"status"` // 状态(1、Running 0、Stop)
Level int `json:"level"` // 任务级别(0、普通 1、一般 2、重要 3、强保)
Remark string `json:"remark"` // 备注
}
+14 -11
View File
@@ -23,6 +23,9 @@ func (d CronJobDao) SelectPage(query request.CronJobQuery) ([]entity.SysCronJob,
if gotool.StrUtils.HasNotEmpty(query.JobName) {
session.And("job_name like concat('%', ?, '%')", query.JobName)
}
if gotool.StrUtils.HasNotEmpty(query.Status) {
session.And("status = ?", query.Status)
}
total, _ := page.GetTotal(session.Clone())
err := session.Limit(query.PageSize, page.StartSize(query.PageNum, query.PageSize)).Find(&configs)
if err != nil {
@@ -60,23 +63,23 @@ func (d CronJobDao) SelectById(id int64) *entity.SysCronJob {
// Update 修改数据
func (d CronJobDao) Update(config entity.SysCronJob) int64 {
//session := SqlDB.NewSession()
//session.Begin()
//update, err := session.Where("job_id = ?", config.JobId).Update(&config)
//if err != nil {
// common.ErrorLog(err)
// session.Rollback()
// return 0
//}
//session.Commit()
return CustomUpdateById("job_id", config.JobId, config)
session := SqlDB.NewSession()
session.Begin()
update, err := session.Where("job_id = ?", config.JobId).Update(&config)
if err != nil {
common.ErrorLog(err)
session.Rollback()
return 0
}
session.Commit()
return update
}
// Remove 删除数据
func (d CronJobDao) Delete(list []int64) bool {
session := SqlDB.NewSession()
session.Begin()
_, err := session.In("config_id", list).Delete(&entity.SysCronJob{})
_, err := session.In("job_id", list).Delete(&entity.SysCronJob{})
if err != nil {
common.ErrorLog(err)
session.Rollback()
-18
View File
@@ -113,21 +113,3 @@ func initConfig() {
}))
}
}
// 通用: 根据ID更新
// @Param idColumnName 字段名称
// @Param idColumnValue 字段值
// @Param bean 更新的bean内容
// @Return
func CustomUpdateById(idColumnName string, idColumnValue interface{}, bean interface{}) int64 {
session := SqlDB.NewSession()
session.Begin()
update, err := session.Where(idColumnName+" = ?", idColumnValue).Update(&bean)
if err != nil {
common.ErrorLog(err)
session.Rollback()
return 0
}
session.Commit()
return update
}
+6 -7
View File
@@ -5,17 +5,16 @@ import (
)
type SysCronJob struct {
JobId int `xorm:"pk autoincr" json:"jobId"` // 任务主键
JobId int64 `xorm:"pk autoincr" json:"jobId"` // 任务主键
JobName string `xorm:"varchar(100)" json:"jobName"` // 任务名称
JobCron string `xorm:"varchar(255)" json:"job_cron"` // cron表达式
JobCron string `xorm:"varchar(255)" json:"jobCron"` // cron表达式
FuncAlias string `xorm:"varchar(100)" json:"funcAlias"` // 方法别名(程序内注册的别名)
FuncParam string `xorm:"varchar(1)" json:"funcParam"` // 方法参数
Status string `xorm:"char(1)" json:"status"` // 状态(1、Running 0、Stop)
Level int `xorm:"int(1)" json:"level"` // 任务级别(0、普通 1、一般 2、重要 3、强保)
CreateBy string `xorm:"varchar(64)" json:"createBy"` // 创建人
CreateTime time.Time `xorm:"created" json:"createTime"` // 创建时间
UpdateBy string `xorm:"varchar(64)" json:"updateBy"` // 更新人
UpdateTime time.Time `json:"updateTime"` // 更新时间
CreateBy string `xorm:"varchar(64)"` // 创建人
CreateTime time.Time `xorm:"created"` // 创建时间
UpdateBy string `xorm:"varchar(64)"` // 更新人
UpdateTime time.Time `xorm:"datetime"` // 更新时间
Remark string `xorm:"varchar(500)" json:"remark"` // 备注
}
+1 -1
View File
@@ -17,5 +17,5 @@ func RegisterFunc(aliasName string, f func()) {
// 注册方法
func init() {
//RegisterFunc("test1", TestJob)
RegisterFunc("test1", TestJob)
}
+5 -3
View File
@@ -8,17 +8,19 @@ import (
// 初始化定时任务路由
func initCronJobRouter(router *gin.RouterGroup) {
v := new(v1.CronJobApi)
group := router.Group("/cronJob")
group := router.Group("/monitor/cronJob")
{
// 查询定时任务分页数据
group.GET("/list", v.List)
// 查询定时任务分页数据
group.GET("/:jobId", v.GetById)
// 修改定时任务
group.PUT("/modify", v.Edit)
// 新增定时任务
group.POST("/create", v.Add)
// 删除定时任务
group.DELETE("/:jobId", v.Remove)
group.DELETE("/:jobId/:funcAlias", v.Remove)
// 改变定时任务状态
group.DELETE("/changeStatus", v.ChangeStatus)
group.PUT("/changeStatus", v.ChangeStatus)
}
}