This commit is contained in:
2025-07-07 20:11:59 +08:00
parent ab0fdbc447
commit 06e3aa2eb3
2009 changed files with 193082 additions and 0 deletions

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