using FreeSql.DataAnnotations; using F9WebAiTest.Domain.Events.SYS.RBAC; namespace F9WebAiTest.Domain.Entities.SYS.RBAC; /// 用户:可以拥有多个角色。 [Table(Name = "sys_rbac_users")] public class User : AggregateRoot { [Column(Name = "department_id")] public long DepartmentId { get; private set; } [Column(Name = "user_name")] public string UserName { get; private set; } [Column(Name = "phone_number")] public string PhoneNumber { get; private set; } [Column(Name = "login_name")] public string LoginName { get; private set; } [Column(Name = "password_hash")] public string PasswordHash { get; private set; } [Column(Name = "is_active")] public bool IsActive { get; private set; } [Column(Name = "sort_order")] public int SortOrder { get; private set; } [Column(Name = "lastlogin_at")] public DateTime? LastLoginAt { get; private set; } [Column(Name = "nickname")] public string Nickname { get; private set; } = ""; [Column(Name = "avatar")] public string Avatar { get; private set; } = ""; [Column(Name = "email")] public string Email { get; private set; } = ""; [Column(Name = "gender")] public string Gender { get; private set; } = "男"; public User() { } public User(long id, string userName, string phoneNumber, string loginName, long departmentId, int sortOrder) { Id = id; UserName = userName; PhoneNumber = phoneNumber; LoginName = loginName; DepartmentId = departmentId; IsActive = true; SortOrder = sortOrder; } public void Update(string userName, string phoneNumber, string loginName, long departmentId, int sortOrder) { UserName = userName; PhoneNumber = phoneNumber; LoginName = loginName; DepartmentId = departmentId; IsActive = true; SortOrder = sortOrder; } public void Activate() => IsActive = true; public void Deactivate() => IsActive = false; /// 获取默认密码明文 public string GetDefaultPasswordText() => "123456"; /// 设置密码(哈希后的密文) public void SetPassword(string password) => PasswordHash = password; /// 更新个人资料(昵称/头像/邮箱/手机号/性别) public void UpdateProfile(string nickname, string avatar, string email, string phoneNumber, string gender) { Nickname = nickname ?? Nickname; Avatar = avatar ?? Avatar; Email = email ?? Email; PhoneNumber = phoneNumber ?? PhoneNumber; Gender = gender ?? Gender; } /// 登录成功,记录登录时间并发布登录事件 public void LoginSuccess(string deviceId, string account, bool success, long userId, string userName) { LastLoginAt = DateTime.Now; AddDomainEvent(new UserLoginDomainEvent(deviceId, account, success, userId, userName)); } public void AddRole(long roleId) => AddDomainEvent(new UserRole_ChangedDomainEvent(Id)); public void RemoveRole(long roleId) => AddDomainEvent(new UserRole_ChangedDomainEvent(Id)); }