model

package
v1.23.56 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 15, 2026 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const TableNameCoreTask = "core_task"

Variables

View Source
var (
	// ErrInvalidMode 无效的任务模式
	ErrInvalidMode = errors.New("task: invalid mode")
	// ErrEmptyWorkerID Worker ID 不能为空
	ErrEmptyWorkerID = errors.New("task: worker id cannot be empty in distributed mode")
	// ErrInvalidTimeout 无效的超时时间
	ErrInvalidTimeout = errors.New("task: invalid timeout")
	// ErrInvalidMaxRedo 无效的重试次数
	ErrInvalidMaxRedo = errors.New("task: invalid max redo")
	// ErrInvalidMaxConcurrency 无效的并发数
	ErrInvalidMaxConcurrency = errors.New("task: invalid max concurrency")
	// ErrExecutorNotFound 执行器未找到
	ErrExecutorNotFound = errors.New("task: executor not found")
	// ErrTaskNotFound 任务未找到
	ErrTaskNotFound = errors.New("task: task not found")
	// ErrManagerNotStarted 管理器未启动
	ErrManagerNotStarted = errors.New("task: manager not started")
	// ErrManagerAlreadyStarted 管理器已启动
	ErrManagerAlreadyStarted = errors.New("task: manager already started")
	// ErrFailedToGetLock 获取锁失败
	ErrFailedToGetLock = errors.New("task: failed to get lock")
	// ErrEmptyTaskType 任务类型不能为空
	ErrEmptyTaskType = errors.New("task: task type cannot be empty")
	// ErrEmptyPayload 任务载荷不能为空
	ErrEmptyPayload = errors.New("task: payload cannot be empty")
	// ErrInvalidSubjectID 无效的主体 ID
	ErrInvalidSubjectID = errors.New("task: invalid subject id")
)

Functions

This section is empty.

Types

type OrCondition

type OrCondition struct {
	Conditions []string
	Args       []any
}

type TaskCond

type TaskCond struct {
	CompanyID   uint
	Uin         uint
	ID          uint
	IDs         []uint
	WorkerID    string
	TaskType    string
	TaskStatus  TaskStatus
	OrderBy     []string
	OrCondition OrCondition
	Offset      int
	Limit       int
	IsDelete    bool
}

type TaskDao

type TaskDao struct {
	// contains filtered or unexported fields
}

func NewTaskDao

func NewTaskDao(db *gorm.DB) *TaskDao

func (*TaskDao) AvgCostTimeByCond

func (dao *TaskDao) AvgCostTimeByCond(ctx context.Context, cond *TaskCond) (float64, error)

平均耗时统计(秒)

func (*TaskDao) BatchInsert

func (dao *TaskDao) BatchInsert(ctx context.Context, entityList TaskList) error

func (*TaskDao) BuildCondition

func (dao *TaskDao) BuildCondition(db *gorm.DB, cond *TaskCond)

func (*TaskDao) CountByCond

func (dao *TaskDao) CountByCond(ctx context.Context, cond *TaskCond) (int64, error)

func (*TaskDao) Delete

func (dao *TaskDao) Delete(ctx context.Context, id uint) error

func (*TaskDao) GetByCond

func (dao *TaskDao) GetByCond(ctx context.Context, cond *TaskCond) (*TaskEntity, error)

func (*TaskDao) GetByID

func (dao *TaskDao) GetByID(ctx context.Context, id uint) (*TaskEntity, error)

func (*TaskDao) GetListByCond

func (dao *TaskDao) GetListByCond(ctx context.Context, cond *TaskCond) (TaskList, error)

func (*TaskDao) GetPageListByCond

func (dao *TaskDao) GetPageListByCond(ctx context.Context, cond *TaskCond) (TaskList, int64, error)

func (*TaskDao) Insert

func (dao *TaskDao) Insert(ctx context.Context, entity *TaskEntity) error

func (*TaskDao) TableName

func (dao *TaskDao) TableName() string

func (*TaskDao) UpdateByID

func (dao *TaskDao) UpdateByID(ctx context.Context, id uint, entity *TaskEntity) error

func (*TaskDao) UpdateMap

func (dao *TaskDao) UpdateMap(ctx context.Context, id uint, updateMap map[string]interface{}) error

type TaskEntity

type TaskEntity struct {
	gorm.Model
	// CompanyID 公司 ID,用于多租户隔离
	CompanyID uint `gorm:"type:bigint;not null;index:idx_company_id;default:0" json:"company_id" comment:"公司ID"`
	// Uin 用户 ID,用于标识任务归属用户
	Uin uint `gorm:"type:bigint;not null;index:idx_uin;default:0" json:"uin" comment:"用户ID"`
	// SubjectType 主体类型,标识任务关联的业务对象类型(如:order, document, user 等)
	SubjectType string `gorm:"type:varchar(64);not null;index:idx_subject_type" json:"subject_type" comment:"主体类型"`
	// SubjectID 主体 ID,标识任务关联的业务对象 ID
	SubjectID uint `gorm:"type:bigint;not null;index:idx_subject_id" json:"subject_id" comment:"主体ID"`
	// TaskType 任务类型,用于匹配任务执行器
	TaskType string `gorm:"type:varchar(64);not null;index:idx_task_type" json:"task_type" comment:"任务类型"`
	// TaskStatus 任务状态:pending(待执行)、running(执行中)、success(成功)、failed(失败)、canceled(已取消)、timeout(超时)
	TaskStatus TaskStatus `gorm:"type:varchar(20);not null;index:idx_task_status" json:"task_status" comment:"任务状态"`
	// Priority 任务优先级,数值越大优先级越高
	Priority int `gorm:"type:int;not null;default:0;index:idx_priority" json:"priority" comment:"任务优先级"`
	// Step 任务步骤序号,用于步骤化任务执行,前序步骤未完成时后续步骤不会执行
	Step int `gorm:"type:int;not null;default:0" json:"step" comment:"任务步骤序号"`
	// Redo 当前重试次数,每次重试后加 1
	Redo int `gorm:"type:int;not null;default:0" json:"redo" comment:"当前重试次数"`
	// MaxRedo 最大重试次数,当 Redo >= MaxRedo 时不再重试
	MaxRedo int `gorm:"type:int;not null;default:3" json:"max_redo" comment:"最大重试次数"`
	// Timeout 任务执行超时时间(单位:纳秒),存储为 int64
	Timeout time.Duration `gorm:"type:bigint;not null" json:"timeout" comment:"任务超时时间"`
	// Payload 任务参数,通常为 JSON 格式的业务数据
	Payload string `gorm:"type:longtext" json:"payload" comment:"任务参数"`
	// Result 任务执行结果,通常为 JSON 格式的返回数据
	Result string `gorm:"type:text" json:"result" comment:"任务执行结果"`
	// ErrMsg 错误信息,任务失败、超时、取消时记录原因
	ErrMsg string `gorm:"type:text" json:"err_msg" comment:"错误信息"`
	// WorkerID Worker 标识,分布式模式下标识处理该任务的 Worker
	WorkerID string `gorm:"type:varchar(64)" json:"worker_id" comment:"Worker标识"`
	// StartAt 任务开始执行时间
	StartAt *time.Time `gorm:"type:datetime" json:"start_at" comment:"开始执行时间"`
	// EndAt 任务结束时间(成功、失败、超时、取消)
	EndAt *time.Time `gorm:"type:datetime" json:"end_at" comment:"结束时间"`
	// Cost 任务执行耗时(单位:秒)
	Cost int64 `gorm:"type:bigint;default:0" json:"cost" comment:"任务执行耗时(秒)"`
	// AppGroup 应用分组,用于将同一业务流程的多个步骤任务组织在一起,支持同一 SubjectID 下多个流程并行
	AppGroup string `gorm:"type:varchar(32);index:idx_app_group" json:"app_group" comment:"应用分组"`
}

TaskEntity 任务模型

func (*TaskEntity) CanRetry

func (t *TaskEntity) CanRetry() bool

CanRetry 是否可以重试

func (*TaskEntity) GetAppGroup

func (t *TaskEntity) GetAppGroup() string

GetAppGroup 获取应用分组

func (*TaskEntity) GetID

func (t *TaskEntity) GetID() uint

GetID 获取任务 ID

func (*TaskEntity) GetPayload

func (t *TaskEntity) GetPayload() string

GetPayload 获取任务参数

func (*TaskEntity) GetSubjectID

func (t *TaskEntity) GetSubjectID() uint

GetSubjectID 获取主体 ID

func (*TaskEntity) GetTaskType

func (t *TaskEntity) GetTaskType() string

GetTaskType 获取任务类型

func (*TaskEntity) GetTimeout

func (t *TaskEntity) GetTimeout() time.Duration

GetTimeout 获取任务超时时间

func (*TaskEntity) IsFinished

func (t *TaskEntity) IsFinished() bool

IsFinished 是否已完成(成功、失败、取消、超时)

func (*TaskEntity) IsPending

func (t *TaskEntity) IsPending() bool

IsPending 是否为待处理状态

func (*TaskEntity) IsRunning

func (t *TaskEntity) IsRunning() bool

IsRunning 是否为运行中状态

func (*TaskEntity) IsSuccess

func (t *TaskEntity) IsSuccess() bool

IsSuccess 是否执行成功

func (*TaskEntity) MarkAsCanceled

func (t *TaskEntity) MarkAsCanceled(reason string)

MarkAsCanceled 标记为取消

func (*TaskEntity) MarkAsFailed

func (t *TaskEntity) MarkAsFailed(errMsg string)

MarkAsFailed 标记为失败

func (*TaskEntity) MarkAsRunning

func (t *TaskEntity) MarkAsRunning(workerID string)

MarkAsRunning 标记为运行中

func (*TaskEntity) MarkAsSuccess

func (t *TaskEntity) MarkAsSuccess(result string)

MarkAsSuccess 标记为成功

func (*TaskEntity) MarkAsTimeout

func (t *TaskEntity) MarkAsTimeout()

MarkAsTimeout 标记为超时

func (TaskEntity) TableName

func (TaskEntity) TableName() string

TableName 表名

func (*TaskEntity) Validate

func (t *TaskEntity) Validate() error

Validate 验证任务参数

type TaskList

type TaskList []TaskEntity

type TaskStatus

type TaskStatus string

TaskStatus 任务状态

const (
	// TaskStatusPending 等待执行
	TaskStatusPending TaskStatus = "pending"
	// TaskStatusRunning 执行中
	TaskStatusRunning TaskStatus = "running"
	// TaskStatusSuccess 执行成功
	TaskStatusSuccess TaskStatus = "success"
	// TaskStatusFailed 执行失败
	TaskStatusFailed TaskStatus = "failed"
	// TaskStatusCanceled 已取消
	TaskStatusCanceled TaskStatus = "canceled"
	// TaskStatusTimeout 超时
	TaskStatusTimeout TaskStatus = "timeout"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL