68 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package entities | |||
|  | 
 | |||
|  | import ( | |||
|  | 	"time" | |||
|  | 
 | |||
|  | 	"github.com/google/uuid" | |||
|  | 	"gorm.io/gorm" | |||
|  | ) | |||
|  | 
 | |||
|  | // TaskStatus 任务状态 | |||
|  | type TaskStatus string | |||
|  | 
 | |||
|  | const ( | |||
|  | 	TaskStatusPending   TaskStatus = "pending" | |||
|  | 	TaskStatusRunning   TaskStatus = "running" | |||
|  | 	TaskStatusCompleted TaskStatus = "completed" | |||
|  | 	TaskStatusFailed    TaskStatus = "failed" | |||
|  | 	TaskStatusCancelled TaskStatus = "cancelled" | |||
|  | ) | |||
|  | 
 | |||
|  | // AsyncTask 异步任务实体 | |||
|  | type AsyncTask struct { | |||
|  | 	ID          string     `gorm:"type:char(36);primaryKey"` | |||
|  | 	Type        string     `gorm:"not null;index"` | |||
|  | 	Payload     string     `gorm:"type:text"` | |||
|  | 	Status      TaskStatus `gorm:"not null;index"` | |||
|  | 	ScheduledAt *time.Time `gorm:"index"` | |||
|  | 	StartedAt   *time.Time | |||
|  | 	CompletedAt *time.Time | |||
|  | 	ErrorMsg    string | |||
|  | 	RetryCount  int `gorm:"default:0"` | |||
|  | 	MaxRetries  int `gorm:"default:5"` | |||
|  | 	CreatedAt   time.Time | |||
|  | 	UpdatedAt   time.Time | |||
|  | } | |||
|  | 
 | |||
|  | // TableName 指定表名 | |||
|  | func (AsyncTask) TableName() string { | |||
|  | 	return "async_tasks" | |||
|  | } | |||
|  | 
 | |||
|  | // BeforeCreate GORM钩子,在创建前生成UUID | |||
|  | func (t *AsyncTask) BeforeCreate(tx *gorm.DB) error { | |||
|  | 	if t.ID == "" { | |||
|  | 		t.ID = uuid.New().String() | |||
|  | 	} | |||
|  | 	return nil | |||
|  | } | |||
|  | 
 | |||
|  | // IsCompleted 检查任务是否已完成 | |||
|  | func (t *AsyncTask) IsCompleted() bool { | |||
|  | 	return t.Status == TaskStatusCompleted | |||
|  | } | |||
|  | 
 | |||
|  | // IsFailed 检查任务是否失败 | |||
|  | func (t *AsyncTask) IsFailed() bool { | |||
|  | 	return t.Status == TaskStatusFailed | |||
|  | } | |||
|  | 
 | |||
|  | // IsCancelled 检查任务是否已取消 | |||
|  | func (t *AsyncTask) IsCancelled() bool { | |||
|  | 	return t.Status == TaskStatusCancelled | |||
|  | } | |||
|  | 
 | |||
|  | // CanRetry 检查任务是否可以重试 | |||
|  | func (t *AsyncTask) CanRetry() bool { | |||
|  | 	return t.Status == TaskStatusFailed && t.RetryCount < t.MaxRetries | |||
|  | } |