初始
This commit is contained in:
164
internal/app/system/logic/manageTaskCron/manage_task_cron.go
Normal file
164
internal/app/system/logic/manageTaskCron/manage_task_cron.go
Normal file
@ -0,0 +1,164 @@
|
||||
// ==========================================================================
|
||||
// GFast自动生成logic操作代码。
|
||||
// 生成日期:2024-06-04 14:33:05
|
||||
// 生成路径: internal/app/system/logic/manage_task_cron.go
|
||||
// 生成人:gfast
|
||||
// desc:航线任务定时飞行
|
||||
// company:云南奇讯科技有限公司
|
||||
// ==========================================================================
|
||||
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/tiger1103/gfast/v3/api/v1/system"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/consts"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/dao"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/model"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/model/do"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
||||
"github.com/tiger1103/gfast/v3/library/liberr"
|
||||
"github.com/tiger1103/gfast/v3/task"
|
||||
)
|
||||
|
||||
func init() {
|
||||
service.RegisterManageTaskCron(New())
|
||||
}
|
||||
|
||||
func New() *sManageTaskCron {
|
||||
return &sManageTaskCron{}
|
||||
}
|
||||
|
||||
type sManageTaskCron struct{}
|
||||
|
||||
func (s *sManageTaskCron) List(ctx context.Context, req *system.ManageTaskCronSearchReq) (listRes *system.ManageTaskCronSearchRes, err error) {
|
||||
listRes = new(system.ManageTaskCronSearchRes)
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
m := dao.ManageTaskCron.Ctx(ctx).WithAll()
|
||||
if req.Id != "" {
|
||||
m = m.Where(dao.ManageTaskCron.Columns().Id+" = ?", req.Id)
|
||||
}
|
||||
if req.MqClientId != "" {
|
||||
m = m.Where(dao.ManageTaskCron.Columns().MqClientId+" = ?", req.MqClientId)
|
||||
}
|
||||
if req.TaskId != "" {
|
||||
m = m.Where(dao.ManageTaskCron.Columns().TaskId+" = ?", gconv.Int64(req.TaskId))
|
||||
}
|
||||
if req.Cron != "" {
|
||||
m = m.Where(dao.ManageTaskCron.Columns().Cron+" = ?", req.Cron)
|
||||
}
|
||||
if req.CronId != "" {
|
||||
m = m.Where(dao.ManageTaskCron.Columns().CronId+" = ?", gconv.Int(req.CronId))
|
||||
}
|
||||
listRes.Total, err = m.Count()
|
||||
liberr.ErrIsNil(ctx, err, "获取总行数失败")
|
||||
if req.PageNum == 0 {
|
||||
req.PageNum = 1
|
||||
}
|
||||
listRes.CurrentPage = req.PageNum
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = consts.PageSize
|
||||
}
|
||||
order := "id desc"
|
||||
if req.OrderBy != "" {
|
||||
order = req.OrderBy
|
||||
}
|
||||
var res []*model.ManageTaskCronInfoRes
|
||||
err = m.Fields(system.ManageTaskCronSearchRes{}).Page(req.PageNum, req.PageSize).Order(order).Scan(&res)
|
||||
liberr.ErrIsNil(ctx, err, "获取数据失败")
|
||||
listRes.List = make([]*model.ManageTaskCronListRes, len(res))
|
||||
for k, v := range res {
|
||||
listRes.List[k] = &model.ManageTaskCronListRes{
|
||||
Id: v.Id,
|
||||
MqClientId: v.MqClientId,
|
||||
TaskId: v.TaskId,
|
||||
Cron: v.Cron,
|
||||
CronId: v.CronId,
|
||||
}
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sManageTaskCron) GetById(ctx context.Context, sn string) (res *model.ManageTaskCronInfoRes, err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
err = dao.ManageTaskCron.Ctx(ctx).WithAll().Where(dao.ManageTaskCron.Columns().MqClientId, sn).Scan(&res)
|
||||
liberr.ErrIsNil(ctx, err, "获取信息失败")
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sManageTaskCron) Add(ctx context.Context, req *system.ManageTaskCronAddReq) (err error) {
|
||||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
err = task.ValidateCronExprWithSeconds(req.Cron)
|
||||
if err != nil {
|
||||
liberr.ErrIsNil(ctx, err, "表达式出错!请联系管理员给您正确的表达式")
|
||||
}
|
||||
//1、停掉cron,并删除上一个sn数据
|
||||
var entity *model.ManageTaskCronInfoRes
|
||||
err = dao.ManageTaskCron.Ctx(ctx).Where("mq_client_id", req.MqClientId).Scan(&entity)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
if entity != nil {
|
||||
task.OffTimerFunc(entity.CronId)
|
||||
}
|
||||
_, err = dao.ManageTaskCron.Ctx(ctx).Where("mq_client_id", req.MqClientId).Delete()
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
//2、然后新增一个,并重新调度
|
||||
_, err = dao.ManageTaskCron.Ctx(ctx).Insert(do.ManageTaskCron{
|
||||
MqClientId: req.MqClientId,
|
||||
TaskId: req.TaskId,
|
||||
Cron: req.Cron,
|
||||
})
|
||||
liberr.ErrIsNil(ctx, err, "添加失败")
|
||||
})
|
||||
return err
|
||||
})
|
||||
task.MidMissionFunc()
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sManageTaskCron) Edit(ctx context.Context, req *system.ManageTaskCronEditReq) (err error) {
|
||||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
err = task.ValidateCronExprWithSeconds(req.Cron)
|
||||
if err != nil {
|
||||
liberr.ErrIsNil(ctx, err, "表达式出错!请联系管理员给您正确的表达式")
|
||||
}
|
||||
//改变表达式
|
||||
_, err = dao.ManageTaskCron.Ctx(ctx).Where(dao.ManageTaskCron.Columns().MqClientId, req.MqClientId).Update(do.ManageTaskCron{
|
||||
Cron: req.Cron,
|
||||
})
|
||||
liberr.ErrIsNil(ctx, err, "修改失败")
|
||||
})
|
||||
return err
|
||||
})
|
||||
//重新调度cron
|
||||
task.MidMissionFunc()
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sManageTaskCron) Delete(ctx context.Context, sns []string) (err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
//关闭指定数据的cron
|
||||
for i := range sns {
|
||||
value, err := dao.ManageTaskCron.Ctx(ctx).
|
||||
Where(dao.ManageTaskCron.Columns().MqClientId, sns[i]).
|
||||
Fields(dao.ManageTaskCron.Columns().CronId).Value()
|
||||
if err != nil {
|
||||
liberr.ErrIsNil(ctx, err, "删除失败")
|
||||
return
|
||||
} else {
|
||||
//删除定时任务
|
||||
task.OffTimerFunc(value.Int())
|
||||
}
|
||||
}
|
||||
//删除数据
|
||||
_, err = dao.ManageTaskCron.Ctx(ctx).Delete(dao.ManageTaskCron.Columns().MqClientId+" in (?)", sns)
|
||||
liberr.ErrIsNil(ctx, err, "删除失败")
|
||||
})
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user