package model import ( "time" "gorm.io/gorm" ) // DeviceImportTask 设备导入任务模型 // 记录设备批量导入的任务状态和处理结果 // 通过异步任务处理 CSV 文件导入设备并绑定卡 type DeviceImportTask struct { gorm.Model BaseModel `gorm:"embedded"` TaskNo string `gorm:"column:task_no;type:varchar(50);uniqueIndex:idx_device_import_task_no,where:deleted_at IS NULL;not null;comment:任务编号(唯一)" json:"task_no"` BatchNo string `gorm:"column:batch_no;type:varchar(100);comment:批次号" json:"batch_no"` StorageKey string `gorm:"column:storage_key;type:varchar(500);comment:对象存储文件路径" json:"storage_key"` FileName string `gorm:"column:file_name;type:varchar(255);comment:原始文件名" json:"file_name"` Status int `gorm:"column:status;type:int;default:1;not null;comment:任务状态 1-待处理 2-处理中 3-已完成 4-失败" json:"status"` TotalCount int `gorm:"column:total_count;type:int;default:0;comment:总记录数" json:"total_count"` SuccessCount int `gorm:"column:success_count;type:int;default:0;comment:成功数" json:"success_count"` SkipCount int `gorm:"column:skip_count;type:int;default:0;comment:跳过数" json:"skip_count"` FailCount int `gorm:"column:fail_count;type:int;default:0;comment:失败数" json:"fail_count"` SkippedItems ImportResultItems `gorm:"column:skipped_items;type:jsonb;comment:跳过记录详情" json:"skipped_items"` FailedItems ImportResultItems `gorm:"column:failed_items;type:jsonb;comment:失败记录详情" json:"failed_items"` WarningCount int `gorm:"column:warning_count;default:0;comment:警告数量(部分成功的设备)" json:"warning_count"` WarningItems ImportResultItems `gorm:"column:warning_items;type:jsonb;comment:警告记录详情" json:"warning_items"` ErrorMessage string `gorm:"column:error_message;type:text;comment:错误信息" json:"error_message"` StartedAt *time.Time `gorm:"column:started_at;comment:开始处理时间" json:"started_at"` CompletedAt *time.Time `gorm:"column:completed_at;comment:完成时间" json:"completed_at"` } // TableName 指定表名 func (DeviceImportTask) TableName() string { return "tb_device_import_task" } // DeviceImportResultItem 设备导入结果项 type DeviceImportResultItem struct { Line int `json:"line"` VirtualNo string `json:"virtual_no"` Reason string `json:"reason"` }