Files
2026-10-08 10:43:59 +08:00

99 lines
3.2 KiB
C#

using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Events.SYS.RBAC;
namespace F9WebAiTest.Domain.Entities.SYS.RBAC;
/// <summary>用户:可以拥有多个角色。</summary>
[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;
/// <summary>获取默认密码明文</summary>
public string GetDefaultPasswordText() => "123456";
/// <summary>设置密码(哈希后的密文)</summary>
public void SetPassword(string password) => PasswordHash = password;
/// <summary>更新个人资料(昵称/头像/邮箱/手机号/性别)</summary>
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;
}
/// <summary>登录成功,记录登录时间并发布登录事件</summary>
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));
}