package model import ( "time" "go.uber.org/zap" "gorm.io/gorm" ) type DocumentError struct { Id int64 `form:"id" json:"id,omitempty" gorm:"primaryKey;autoIncrement;column:id;comment:;"` Message string `form:"message" json:"message,omitempty" gorm:"column:message;type:text;comment:文档转换失败原因;"` CreatedAt *time.Time `form:"created_at" json:"created_at,omitempty" gorm:"column:created_at;type:datetime;comment:创建时间;"` UpdatedAt *time.Time `form:"updated_at" json:"updated_at,omitempty" gorm:"column:updated_at;type:datetime;comment:更新时间;"` } func (DocumentError) TableName() string { return tablePrefix + "document_error" } // SetDocumentConvertError 设置文档转换失败的错误信息 // 如果 err 为 nil,则删除转换失败的记录 // 如果 err 不为 nil,则创建或更新转换失败的记录 func (m *DBModel) SetDocumentConvertError(documentId int64, err error) error { de := &DocumentError{ Id: documentId, } if err == nil { // 如果没有错误,则删除转换失败的记录 err = m.db.Delete(de).Error if err != nil { m.logger.Error("SetConvertError", zap.Error(err)) return err } return nil } de.Message = err.Error() var exist DocumentError if err = m.db.First(&exist, documentId).Error; err != nil { // 如果不存在,则创建 err = m.db.Create(de).Error if err != nil { m.logger.Error("SetConvertError", zap.Error(err)) } return err } // 如果存在,则更新 return m.db.Model(&exist).Updates(de).Error } func (m *DBModel) GetConvertError(documentIds ...int64) (errors map[int64]string) { errors = make(map[int64]string) if len(documentIds) == 0 { return } var des []DocumentError err := m.db.Model(&DocumentError{}).Where("id IN (?)", documentIds).Find(&des).Error if err != nil && err != gorm.ErrRecordNotFound { m.logger.Error("GetConvertError", zap.Error(err)) return } for _, de := range des { errors[de.Id] = de.Message } return }