//----------SysRole开始---------- using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Admin.Core.IRepository; using Admin.Core.Model; using Admin.Core.Common; using AutoMapper; using System.Linq.Expressions; using Admin.Core.IRepository.ISys; using Admin.Core.IService.ISys; using Admin.Core.Model.Sys; namespace Admin.Core.Service.Sys { /// /// 角色信息表Service /// public partial class SysRoleService : BaseServices, ISysRoleService { IBaseRepository dal; private readonly ISysRoleRepository _sysRoleRepository; private readonly ISysUserRoleRepository _sysUserRoleRepository; private readonly ISysMenuRepository _sysMenuRepository; private readonly ISysRoleMenuRepository _sysRoleMenuRepository; private readonly ISysRoleDeptRepository _sysRoleDeptRepository; private readonly IMapper _mapper; public SysRoleService(IBaseRepository dal, ISysRoleRepository sysRoleRepository, ISysUserRoleRepository sysUserRoleRepository, ISysMenuRepository sysMenuRepository, ISysRoleMenuRepository sysRoleMenuRepository, ISysRoleDeptRepository sysRoleDeptRepository, IMapper mapper) { this.dal = dal; BaseDal = dal; _sysRoleRepository = sysRoleRepository; _sysUserRoleRepository = sysUserRoleRepository; _sysMenuRepository = sysMenuRepository; _sysRoleMenuRepository = sysRoleMenuRepository; _sysRoleDeptRepository = sysRoleDeptRepository; _mapper = mapper; } /// /// 获取权限Perms /// /// /// public async Task> GetUserPermsStr(List roleIDs) { var menus = await _sysRoleMenuRepository.QueryAsync(a => roleIDs.Contains((int)a.RoleID)); var perms = await _sysMenuRepository.QueryAsync(a => menus.Select(x => x.MenuID).Contains(a.MenuID)); return perms.Select(x => x.Perms).ToList(); } /// /// 获取所有角色信息 /// /// /// public async Task> GetUserRolesByUserId(int userId) { return await _sysRoleRepository.GetUserRolesByUserId(userId); } /// /// 根据条件分页查询角色数据 /// /// 角色信息 /// 角色数据集合信息 public async Task> SelectRoleList(PageQuery pageQuery) { Expression> whereExpression = x => (bool)x.DelFlag == false; if (pageQuery.Query.RoleName.IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.RoleName.Contains(pageQuery.Query.RoleName)); } if (pageQuery.Query.RoleKey.IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.RoleKey.Contains(pageQuery.Query.RoleKey)); } if (pageQuery.Query.Status.IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.Status == pageQuery.Query.Status); } if (pageQuery.Query.DateRange.IsNotEmptyOrNull() && pageQuery.Query.DateRange.Count > 0) { if (pageQuery.Query.DateRange[0].IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.CreateTime >= pageQuery.Query.DateRange[0]); } if (pageQuery.Query.DateRange.Count > 1 && pageQuery.Query.DateRange[1].IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.CreateTime <= pageQuery.Query.DateRange[1]); } } var data = await dal.QueryPageAsync(whereExpression, pageQuery.Page, pageQuery.PageSize, "RoleSort asc"); return data; } /// /// 根据编号获取详细信息 /// /// /// public async Task GetInfo(int roleId) { var role = await dal.QueryByIdAsync(roleId); var roleMenus = await _sysRoleMenuRepository.QueryAsync(x => x.RoleID == roleId); var userRoles = await _sysRoleDeptRepository.QueryAsync(x => x.RoleID == roleId); RoleView roleView = new RoleView { SysRole = role, MenuIds = roleMenus.Select(x => x.MenuID).ToArray(), DeptIds = userRoles.Select(x => x.DeptID).ToArray() }; return roleView; } /// /// 查询所有角色 /// /// 角色列表 public async Task> SelectRoleAll() { return await dal.QueryAsync(); } /// /// 根据用户ID获取角色选择框列表 /// /// 用户ID /// 选中角色ID列表 public async Task> SelectRoleListByUserId(int userId) { var roles = await _sysUserRoleRepository.QueryAsync(x => x.UserID == userId); return roles.Select(x => (int)x.RoleID).ToList(); } /// /// 通过角色ID查询角色 /// /// 角色ID /// 角色对象信息 public async Task SelectRoleById(int roleId) { return await dal.QueryByIdAsync(roleId); } /// /// 校验角色名称是否存在 /// /// 角色名称 /// 结果 public async Task CheckRoleNameUnique(string roleName) { var data = await dal.QueryAsync(x => x.RoleName == roleName); return data.Count > 0; } /// /// 校验角色key是否存在 /// /// 角色Key /// 结果 public async Task CheckRoleKeyUnique(string roleKey) { var data = await dal.QueryAsync(x => x.RoleKey == roleKey); return data.Count > 0; } /// /// 通过角色ID查询角色使用数量 /// /// 角色ID /// 结果 public async Task CountUserRoleByRoleId(int roleId) { var roles = await _sysUserRoleRepository.QueryAsync(x => x.RoleID == roleId); return roles.Count; } /// /// 新增保存角色信息 /// /// 角色信息 /// 操作人 /// 结果 public async Task InsertRole(RoleView role) { // 新增角色信息 role.SysRole.CreateTime = DateTime.Now; role.SysRole.UpdateTime = DateTime.Now; role.SysRole.DelFlag = false; var addId = await dal.AddAsync(role.SysRole); if (addId > 0) { await InsertRoleMenu(addId, role.MenuIds); } return addId; } /// /// 修改保存角色信息 /// /// 角色信息 /// 修改者 /// 结果 public async Task UpdateRole(RoleView role, string updateBy = "") { var Del = true; var Add = true; // 修改角色信息 var update = await UpdateRoleBase(role.SysRole, updateBy); if (update) { // 删除角色与菜单关联 var roleMenu = await _sysRoleMenuRepository.QueryAsync(x => x.RoleID == role.SysRole.RoleID); if (roleMenu.Count > 0) { Del = await _sysRoleMenuRepository.DeletesAsync(roleMenu); } } if (Del) { // 新增角色和部门信息(数据权限) Add = await InsertRoleMenu(role.SysRole.RoleID, role.MenuIds); } return Add; } /// /// 修改角色状态 /// /// 角色信息 /// 修改者 /// 结果 public async Task UpdateRoleStatus(SysRole role, string updateBy = "") { var data = await SelectRoleById(role.RoleID); data.UpdateBy = updateBy; data.UpdateTime = DateTime.Now; data.Status = role.Status; return await dal.UpdateAsync(data); } /// /// 修改角色基础信息 /// /// 角色信息 /// 修改者 /// 结果 public async Task UpdateRoleBase(SysRole role, string updateBy = "") { role.UpdateBy = updateBy; role.UpdateTime = DateTime.Now; return await dal.UpdateAsync(role); } /// /// 修改数据权限信息 /// /// 角色信息 /// 修改者 /// 结果 public async Task AuthDataScope(RoleView role, string updateBy = "") { var Del = true; var Add = true; // 修改角色信息 var update = await UpdateRoleBase(role.SysRole, updateBy); if (update) { // 删除角色与部门表 var roleDept = await _sysRoleDeptRepository.QueryAsync(x => x.RoleID == role.SysRole.RoleID); if (roleDept.Count > 0) { Del = await _sysRoleDeptRepository.DeletesAsync(roleDept); } } if (Del) { // 新增角色和部门信息(数据权限) Add = await InsertRoleDept(role.SysRole.RoleID, role.DeptIds); } return Add; } /// /// 新增角色菜单信息 /// /// /// /// public async Task InsertRoleMenu(int roleId, int?[] menuIds) { if (menuIds.IsNotEmptyOrNull() && menuIds.Length > 0) { // 新增用户与角色管理 List list = new List(); foreach (var item in menuIds) { SysRoleMenu rm = new SysRoleMenu() { RoleID = roleId, MenuID = item }; list.Add(rm); } var R = await _sysRoleMenuRepository.AddAsync(list); return R > 0; } return true; } /// /// 新增角色部门信息(数据权限) /// /// /// /// 角色对象 public async Task InsertRoleDept(int roleId, int?[] deptIds) { if (deptIds.IsNotEmptyOrNull() && deptIds.Length > 0) { // 新增用户与角色管理 List list = new List(); foreach (var item in deptIds) { SysRoleDept rm = new SysRoleDept() { RoleID = roleId, DeptID = item }; list.Add(rm); } var R = await _sysRoleDeptRepository.AddAsync(list); return R > 0; } return true; } /// /// 通过角色ID删除角色 /// /// 角色ID /// 修改者 /// 结果 public async Task DeleteRoleById(int roleId, string updateBy = "") { var DRoleMenus = true; var DRoleDepts = true; var DRole = true; // 删除角色与菜单关联 var RRoleMenus = await _sysRoleMenuRepository.QueryAsync(x => x.RoleID == roleId); if (RRoleMenus.Count > 0) { DRoleMenus = await _sysRoleMenuRepository.DeletesAsync(RRoleMenus); } // 删除角色与部门表 var RRoleDepts = await _sysRoleDeptRepository.QueryAsync(x => x.RoleID == roleId); if (RRoleDepts.Count > 0) { DRoleDepts = await _sysRoleDeptRepository.DeletesAsync(RRoleDepts); } //删除角色:逻辑删除 var sysRole = await dal.QueryByIdAsync(roleId); sysRole.DelFlag = true; sysRole.UpdateBy = updateBy; sysRole.UpdateTime = DateTime.Now; if (DRoleMenus && DRoleDepts) { DRole = await dal.UpdateAsync(sysRole); } return DRole; } /// /// 批量删除角色信息 /// /// 需要删除的角色ID /// 修改者 /// 结果 public async Task DeleteRoleByIds(int[] roleIds, string updateBy = "") { var DRoleMenus = true; var DRoleDepts = true; var DUserRole = true; var DRole = true; foreach (var roleId in roleIds) { if (RoleView.IsAdmin(roleId)) { return false; } } // 删除角色与菜单关联 var RRoleMenus = await _sysRoleMenuRepository.QueryAsync(x => roleIds.ToList().Contains((int)x.RoleID)); if (RRoleMenus.Count > 0) { DRoleMenus = await _sysRoleMenuRepository.DeletesAsync(RRoleMenus); } // 删除角色与部门表 var RRoleDepts = await _sysRoleDeptRepository.QueryAsync(x => roleIds.ToList().Contains((int)x.RoleID)); if (RRoleDepts.Count > 0) { DRoleDepts = await _sysRoleDeptRepository.DeletesAsync(RRoleDepts); } // 删除角色与部门表 var RUserRoles = await _sysUserRoleRepository.QueryAsync(x => roleIds.ToList().Contains((int)x.RoleID)); if (RUserRoles.Count > 0) { DUserRole = await _sysUserRoleRepository.DeletesAsync(RUserRoles); } //删除角色:逻辑删除 var sysRoles = await dal.QueryAsync(x => roleIds.ToList().Contains(x.RoleID)); sysRoles.ForEach(x => { x.DelFlag = true; x.UpdateBy = updateBy; x.UpdateTime = DateTime.Now; }); if (DRoleMenus && DRoleDepts && DUserRole) { DRole = await dal.UpdateAsync(sysRoles); } return DRole; } /// /// 取消授权用户角色 /// /// 用户和角色关联信息 /// 结果 public async Task DeleteAuthUser(SysUserRole userRole) { if (!userRole.IsNotEmptyOrNull()) { return true; } var data = await _sysUserRoleRepository.QueryAsync(x => x.UserID == userRole.UserID && x.RoleID == userRole.RoleID); return await _sysUserRoleRepository.DeletesAsync(data); } /// /// 批量取消授权用户角色 /// /// 角色ID /// 需要取消授权的用户数据ID /// 结果 public async Task DeleteAuthUsers(int roleId, int[] userIds) { if (userIds.IsNotEmptyOrNull() && userIds.Length > 0) { var data = await _sysUserRoleRepository.QueryAsync(x => x.RoleID == roleId && userIds.ToList().Contains((int)x.UserID)); return await _sysUserRoleRepository.DeletesAsync(data); } return true; } /// /// 批量选择授权用户角色 /// /// 角色ID /// 需要新增的用户数据ID /// 结果 public async Task InsertAuthUsers(int roleId, int[] userIds) { if (userIds.IsNotEmptyOrNull() && userIds.Length > 0) { List list = new List(); foreach (var item in userIds) { SysUserRole ur = new SysUserRole() { UserID = item, RoleID = roleId }; list.Add(ur); } var R = await _sysUserRoleRepository.AddAsync(list); return R > 0; } return true; } } } //----------SysRole结束----------