namespace Admin.NET.Core.Service; /// /// 系统用户服务 /// [ApiDescriptionSettings(Order = 199)] public class SysUserService : IDynamicApiController, ITransient { private readonly UserManager _userManager; private readonly SqlSugarRepository _sysUserRep; private readonly SysOrgService _sysOrgService; private readonly SysUserExtOrgService _sysUserExtOrgService; private readonly SysUserRoleService _sysUserRoleService; private readonly SysConfigService _sysConfigService; public SysUserService(UserManager userManager, SqlSugarRepository sysUserRep, SysOrgService sysOrgService, SysUserExtOrgService sysUserExtOrgService, SysUserRoleService sysUserRoleService, SysConfigService sysConfigService) { _userManager = userManager; _sysUserRep = sysUserRep; _sysOrgService = sysOrgService; _sysUserExtOrgService = sysUserExtOrgService; _sysUserRoleService = sysUserRoleService; _sysConfigService = sysConfigService; } /// /// 获取用户分页列表 /// /// /// 是否查询附加组织机构 /// [HttpGet("/sysUser/page")] public async Task> GetUserPage([FromQuery] PageUserInput input, bool extorg = false) { var orgList = input.OrgId > 0 ? await _sysOrgService.GetChildIdListWithSelfById(input.OrgId) : _userManager.SuperAdmin ? null : await _sysOrgService.GetUserOrgIdList(); // 各管理员只能看到自己机构下的用户列表 if (extorg) return await _sysUserRep.AsQueryable() .LeftJoin((o, org) => o.Id == org.UserId) .WhereIF(!_userManager.SuperAdmin, o => o.AccountType != AccountTypeEnum.SuperAdmin) .WhereIF(orgList != null, (o, org) => orgList.Contains(o.OrgId) || orgList.Contains(org.OrgId)) // 查询附加组织机构 .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account.Contains(input.Account)) .WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName)) .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone)) .OrderBy(u => u.OrderNo) .ToPagedListAsync(input.Page, input.PageSize); else return await _sysUserRep.AsQueryable() .WhereIF(!_userManager.SuperAdmin, u => u.AccountType != AccountTypeEnum.SuperAdmin) .WhereIF(orgList != null, u => orgList.Contains(u.OrgId)) .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account.Contains(input.Account)) .WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName)) .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone)) .OrderBy(u => u.OrderNo) .ToPagedListAsync(input.Page, input.PageSize); } /// /// 增加用户 /// /// /// [HttpPost("/sysUser/add")] [UnitOfWork] public async Task AddUser(AddUserInput input) { var isExist = await _sysUserRep.AsQueryable().Filter(null, true).AnyAsync(u => u.Account == input.Account); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1003); var password = await _sysConfigService.GetConfigValue(CommonConst.SysPassword); var user = input.Adapt(); user.Password = MD5Encryption.Encrypt(password); var newUser = await _sysUserRep.AsInsertable(user).ExecuteReturnEntityAsync(); input.Id = newUser.Id; await UpdateRoleAndExtOrg(input); } /// /// 更新角色和扩展机构 /// /// /// private async Task UpdateRoleAndExtOrg(AddUserInput input) { await GrantUserRole(new UserRoleInput { UserId = input.Id, RoleIdList = input.RoleIdList }); await _sysUserExtOrgService.UpdateUserExtOrg(input.Id, input.ExtOrgIdList); } /// /// 更新用户 /// /// /// [HttpPost("/sysUser/update")] [UnitOfWork] public async Task UpdateUser(UpdateUserInput input) { var isExist = await _sysUserRep.AsQueryable().Filter(null, true).AnyAsync(u => u.Account == input.Account && u.Id != input.Id); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1003); await _sysUserRep.AsUpdateable(input.Adapt()).IgnoreColumns(true) .IgnoreColumns(u => new { u.AccountType, u.Password, u.Status }).ExecuteCommandAsync(); await UpdateRoleAndExtOrg(input); } /// /// 删除用户 /// /// /// [HttpPost("/sysUser/delete")] [UnitOfWork] public async Task DeleteUser(DeleteUserInput input) { var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id); if (user == null) throw Oops.Oh(ErrorCodeEnum.D1002); if (user.AccountType == AccountTypeEnum.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D1014); if (user.Id == _userManager.UserId) throw Oops.Oh(ErrorCodeEnum.D1001); await _sysUserRep.DeleteAsync(user); // 删除用户角色 await _sysUserRoleService.DeleteUserRoleByUserId(input.Id); // 删除用户扩展机构 await _sysUserExtOrgService.DeleteUserExtOrgByUserId(input.Id); } /// /// 查看用户基本信息 /// /// [HttpGet("/sysUser/base")] public async Task GetUserBase() { return await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId); } /// /// 设置用户基本信息 /// /// [HttpPost("/sysUser/base")] public async Task UpdateUserBase(SysUser user) { return await _sysUserRep.AsUpdateable(user) .IgnoreColumns(u => new { u.CreateTime, u.Account, u.Password, u.AccountType, u.OrgId, u.PosId }).ExecuteCommandAsync(); } /// /// 设置用户状态 /// /// /// [HttpPost("/sysUser/setStatus")] public async Task SetUserStatus(UserInput input) { var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id); if (user.AccountType == AccountTypeEnum.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D1015); if (!Enum.IsDefined(typeof(StatusEnum), input.Status)) throw Oops.Oh(ErrorCodeEnum.D3005); user.Status = input.Status; return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new { u.Status }).ExecuteCommandAsync(); } /// /// 授权用户角色 /// /// /// [HttpPost("/sysUser/grantRole")] public async Task GrantUserRole(UserRoleInput input) { var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.UserId); if (user.AccountType == AccountTypeEnum.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D1022); await _sysUserRoleService.GrantUserRole(input); } /// /// 修改用户密码 /// /// /// [HttpPost("/sysUser/changePwd")] public async Task ChangeUserPwd(ChangePwdInput input) { var user = await _sysUserRep.GetFirstAsync(u => u.Id == _userManager.UserId); if (MD5Encryption.Encrypt(input.PasswordOld) != user.Password) throw Oops.Oh(ErrorCodeEnum.D1004); user.Password = MD5Encryption.Encrypt(input.PasswordNew); return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync(); } /// /// 重置用户密码 /// /// /// [HttpPost("/sysUser/resetPwd")] public async Task ResetUserPwd(ResetPwdUserInput input) { var password = await _sysConfigService.GetConfigValue(CommonConst.SysPassword); var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id); user.Password = MD5Encryption.Encrypt(password); return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync(); } /// /// 获取用户拥有角色 /// /// /// [HttpGet("/sysUser/ownRole/{userId}")] public async Task> GetUserOwnRole(long userId) { return await _sysUserRoleService.GetUserRoleIdList(userId); } /// /// 获取用户扩展机构 /// /// /// [HttpGet("/sysUser/ownOrg/{userId}")] public async Task> GetUserOrgList(long userId) { return await _sysUserExtOrgService.GetUserExtOrgList(userId); } }