package models import ( "time" ) // User 用户模型(多租户共享表,通过tenant_id区分) type User struct { ID uint `gorm:"primaryKey" json:"id"` TenantID uint `gorm:"not null;index" json:"tenant_id"` Username string `gorm:"size:50;not null;index" json:"username"` Email string `gorm:"size:100;not null;uniqueIndex:idx_email_tenant" json:"email"` Password string `gorm:"size:255;not null" json:"-"` Phone string `gorm:"size:20" json:"phone"` // 个人信息 FullName string `gorm:"size:100" json:"full_name"` Avatar string `gorm:"size:255" json:"avatar"` Bio string `gorm:"type:text" json:"bio"` // 角色和权限 Role string `gorm:"size:20;default:'user'" json:"role"` // super_admin, admin, agent, user (legacy) RoleID *uint `json:"role_id,omitempty"` // 关联的角色 ID (新的 RBAC) Roles []Role `gorm:"many2many:user_roles;" json:"roles,omitempty"` // 用户关联的角色(多对多) Status string `gorm:"size:20;default:'active'" json:"status"` // active, inactive, banned IsVerified bool `gorm:"default:false" json:"is_verified"` // 最后活动 LastLoginAt *time.Time `json:"last_login_at"` LastIP string `gorm:"size:45" json:"last_ip"` // 配置 Preferences JSONMap `gorm:"type:jsonb" json:"preferences"` // 时间戳 CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt *time.Time `gorm:"index" json:"deleted_at,omitempty"` // 关联 Tenant Tenant `gorm:"foreignKey:TenantID" json:"tenant,omitempty"` } // Agent 客服坐席模型 type Agent struct { ID uint `gorm:"primaryKey" json:"id"` TenantID uint `gorm:"not null;index" json:"tenant_id"` UserID uint `gorm:"not null;uniqueIndex" json:"user_id"` // 坐席信息 AgentID string `gorm:"size:50;not null;unique" json:"agent_id"` // 坐席工号 Department string `gorm:"size:100" json:"department"` Title string `gorm:"size:100" json:"title"` Skills []string `gorm:"type:jsonb" json:"skills"` // 工作状态 Status string `gorm:"size:20;default:'offline'" json:"status"` // online, offline, busy, away MaxChats int `gorm:"default:5" json:"max_chats"` // 最大同时聊天数 CurrentChats int `gorm:"default:0" json:"current_chats"` // 绩效统计 TotalChats int `gorm:"default:0" json:"total_chats"` AvgRating float64 `gorm:"default:0" json:"avg_rating"` ResponseTimeAvg int `gorm:"default:0" json:"response_time_avg"` // 平均响应时间(秒) // 工作时间 WorkSchedule JSONMap `gorm:"type:jsonb" json:"work_schedule"` // 时间戳 CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` // 关联 User User `gorm:"foreignKey:UserID" json:"user"` Tenant Tenant `gorm:"foreignKey:TenantID" json:"tenant,omitempty"` }