namespace Admin.NET.Core.Service; /// /// 租户管理服务 /// [ApiDescriptionSettings(Name = "租户管理", Order = 140)] public class SysTenantService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _tenantRep; private readonly SqlSugarRepository _orgRep; private readonly SqlSugarRepository _roleRep; private readonly SqlSugarRepository _posRep; private readonly SqlSugarRepository _userRep; private readonly SqlSugarRepository _sysUserExtOrgPosRep; private readonly SqlSugarRepository _sysRoleMenuRep; private readonly SqlSugarRepository _userRoleRep; private readonly SysUserRoleService _sysUserRoleService; private readonly SysRoleMenuService _sysRoleMenuService; public SysTenantService(SqlSugarRepository tenantRep, SqlSugarRepository orgRep, SqlSugarRepository roleRep, SqlSugarRepository posRep, SqlSugarRepository userRep, SqlSugarRepository sysUserExtOrgPosRep, SqlSugarRepository sysRoleMenuRep, SqlSugarRepository userRoleRep, SysUserRoleService sysUserRoleService, SysRoleMenuService sysRoleMenuService) { _tenantRep = tenantRep; _orgRep = orgRep; _roleRep = roleRep; _posRep = posRep; _userRep = userRep; _sysUserExtOrgPosRep = sysUserExtOrgPosRep; _sysRoleMenuRep = sysRoleMenuRep; _userRoleRep = userRoleRep; _sysUserRoleService = sysUserRoleService; _sysRoleMenuService = sysRoleMenuService; } /// /// 获取租户分页列表 /// /// /// [HttpGet("/sysTenant/page")] public async Task GetTenantPage([FromQuery] TenantInput input) { return await _tenantRep.Context.Queryable() .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone.Trim())) .ToPagedListAsync(input.Page, input.PageSize); } /// /// 增加租户 /// /// /// [HttpPost("/sysTenant/add")] public async Task AddTenant(AddTenantInput input) { var isExist = await _tenantRep.IsAnyAsync(u => u.Name == input.Name || u.AdminName == input.AdminName); if (isExist) throw Oops.Oh(ErrorCodeEnum.D1300); var entity = input.Adapt(); await _tenantRep.InsertAsync(entity); await InitNewTenant(entity); } /// /// 初始化新增租户数据 /// /// private async Task InitNewTenant(SysTenant newTenant) { long tenantId = newTenant.Id; string admin = newTenant.AdminName; string companyName = newTenant.Name; // 初始化公司(组织结构) var newOrg = new SysOrg { TenantId = tenantId, Pid = 0, Name = companyName, Code = companyName }; await _orgRep.InsertAsync(newOrg); // 初始化角色 var newRole = new SysRole { TenantId = tenantId, Code = CommonConst.SysAdminRoleCode, Name = "系统管理员", DataScope = DataScopeEnum.All }; await _roleRep.InsertAsync(newRole); var newPos = new SysPos { Name = "总经理", Code = "zjl", TenantId = tenantId }; await _posRep.InsertAsync(newPos); // 初始化租户管理员 var newUser = new SysUser { TenantId = tenantId, UserName = admin, Password = MD5Encryption.Encrypt(CommonConst.SysPassword), NickName = newTenant.AdminName, Email = newTenant.Email, Phone = newTenant.Phone, UserType = UserTypeEnum.Admin, OrgId = newOrg.Id, PosId = newPos.Id, Birthday = System.DateTime.Parse("1988-02-03"), RealName = "管理员", Remark = "管理员" }; await _userRep.InsertAsync(newUser); var newUserRole = new SysUserRole { RoleId = newRole.Id, UserId = newUser.Id }; await _userRoleRep.InsertAsync(newUserRole); var newUserExtOrgPos = new SysUserExtOrgPos { OrgId = newOrg.Id, PosId = newPos.Id, UserId = newUser.Id }; await _sysUserExtOrgPosRep.InsertAsync(newUserExtOrgPos); } /// /// 删除租户 /// /// /// [HttpPost("/sysTenant/delete")] public async Task DeleteTenant(DeleteTenantInput input) { var users = await _userRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == input.Id).ToListAsync(); // 超级管理员所在租户为默认租户 if (users.Any(u => u.UserType == UserTypeEnum.SuperAdmin)) throw Oops.Oh(ErrorCodeEnum.D1023); var entity = await _tenantRep.GetFirstAsync(u => u.Id == input.Id); await _tenantRep.DeleteAsync(entity); // 删除与租户相关的表数据 var userIds = users.Select(u => u.Id).ToList(); await _userRep.AsDeleteable().Where(u => userIds.Contains(u.Id)).ExecuteCommandAsync(); await _userRoleRep.AsDeleteable().Where(u => userIds.Contains(u.UserId)).ExecuteCommandAsync(); await _roleRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync(); await _sysUserExtOrgPosRep.AsDeleteable().Where(u => userIds.Contains(u.UserId)).ExecuteCommandAsync(); var roles = await _roleRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == input.Id).ToListAsync(); await _roleRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync(); var roleIds = roles.Select(u => u.Id).ToList(); await _sysRoleMenuRep.AsDeleteable().Where(u => roleIds.Contains(u.RoleId)).ExecuteCommandAsync(); await _orgRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync(); await _posRep.AsDeleteable().Where(u => u.TenantId == input.Id).ExecuteCommandAsync(); } /// /// 更新租户 /// /// /// [HttpPost("/sysTenant/edit")] public async Task UpdateTenant(UpdateTenantInput input) { var entity = input.Adapt(); await _tenantRep.Context.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync(); var tenantAdminUser = await GetTenantAdminUser(input.Id); if (tenantAdminUser == null) return; tenantAdminUser.UserName = entity.AdminName; await _userRep.Context.Updateable(tenantAdminUser).UpdateColumns(u => new { u.UserName }).ExecuteCommandAsync(); } /// /// 获取租户详情 /// /// /// [HttpGet("/sysTenant/detail")] public async Task GetTenant([FromQuery] QueryeTenantInput input) { return await _tenantRep.GetFirstAsync(u => u.Id == input.Id); } /// /// 获取租户列表 /// /// [HttpGet("/sysTenant/list")] public async Task GetTenantList() { return await _tenantRep.AsQueryable().ToListAsync(); } /// /// 授权租户管理员角色菜单 /// /// /// [HttpPost("/sysTenant/grantMenu")] public async Task GrantMenu(RoleMenuInput input) { var tenantAdminUser = await GetTenantAdminUser(input.Id); if (tenantAdminUser == null) return; var roleIds = await _sysUserRoleService.GetUserRoleIdList(tenantAdminUser.Id); input.Id = roleIds[0]; // 重置租户管理员角色Id await _sysRoleMenuService.GrantRoleMenu(input); } /// /// 获取租户管理员角色拥有菜单Id集合 /// /// /// [HttpGet("/sysTenant/ownMenu")] public async Task> OwnMenu([FromQuery] QueryeTenantInput input) { var tenantAdminUser = await GetTenantAdminUser(input.Id); if (tenantAdminUser == null) return new List(); var roleIds = await _sysUserRoleService.GetUserRoleIdList(tenantAdminUser.Id); var tenantAdminRoleId = roleIds[0]; // 租户管理员角色Id return await _sysRoleMenuService.GetRoleMenu(new List { tenantAdminRoleId }); } /// /// 重置租户管理员密码 /// /// /// [HttpPost("/sysTenant/resetPwd")] public async Task ResetTenantPwd(QueryeTenantInput input) { var tenantAdminUser = await GetTenantAdminUser(input.Id); tenantAdminUser.Password = MD5Encryption.Encrypt(CommonConst.SysPassword); await _userRep.UpdateAsync(tenantAdminUser); } /// /// 获取租户管理员用户 /// /// /// private async Task GetTenantAdminUser(long tenantId) { return await _userRep.AsQueryable().Filter(null, true).Where(u => u.TenantId == tenantId && u.UserType == UserTypeEnum.Admin).FirstAsync(); } }