using GxPress.Repository.Interface.SystemRoleMenus; using GxPress.Service.Interface.Role; using GxPress.Repository.Interface.SystemRole; using GxPress.Repository.Interface.Menus; using System.Threading.Tasks; using GxPress.Request.Role; using System.Collections.Generic; using System.Linq; using System.Transactions; using AutoMapper; using GxPress.Request.Menu; using GxPress.Result.SystemRole; namespace GxPress.Service.Implement.Role { public class RoleService : IRoleService { private readonly ISystemRoleMenusRepository systemRoleMenusRepository; private readonly IMenusRepository menusRepository; private readonly ISystemRoleRepository systemRoleRepository; private readonly IMapper _mapper; public RoleService(ISystemRoleMenusRepository systemRoleMenusRepository, IMenusRepository menusRepository, ISystemRoleRepository systemRoleRepository, IMapper _mapper) { this.systemRoleRepository = systemRoleRepository; this.systemRoleMenusRepository = systemRoleMenusRepository; this.menusRepository = menusRepository; this._mapper = _mapper; } /// /// 添加权限菜单关联 /// /// /// public async Task InsertSystemRoleMenusAsync(SystemRoleMenusInRequest models) { return await systemRoleMenusRepository.InsertAsync(models); } /// /// 添加权限 /// /// /// public async Task InsertSystemRoleAsync(RoleInRequest request) { try { using (var transactionScope = new TransactionScope()) { var role = new Entity.SystemRole.SystemRole(); role.Name = request.Name; var roleId = await systemRoleRepository.InsertAsync(role); var models = new SystemRoleMenusInRequest(); models.RoleId = roleId; models.SystemRoleMenuInRequest = request.SystemRoleMenuInRequest; await systemRoleMenusRepository.InsertAsync(models); transactionScope.Complete(); } } catch (System.Exception ex) { throw new Common.Exceptions.BusinessException(ex.Message); } return true; } public async Task> GetSystemRoleAllAsync() { var result = new List(); var systemRoles = await systemRoleRepository.GetSystemRolesAllAsync(); foreach (var systemRole in systemRoles) { var models = await systemRoleMenusRepository.GetAllAsync(systemRole.Id); var item = await menusRepository.GetAllMenusAsync(models.Select(n => n.MenuId).ToList()); var systemRoleResult = new SystemRoleResult(); systemRoleResult.SystemRole = systemRole; var model = item.Where(n => n.ParentId == 0).Select(n => _mapper.Map(n)).ToList(); foreach (var request in model) { request.Children = item.Where(n => n.ParentId == request.Id).Select(n => _mapper.Map(n)).ToList(); } systemRoleResult.MenuInResult = model; result.Add(systemRoleResult); } return result; } /// /// 修改权限 /// /// /// public async Task UpdateSystemRoleAsync(RoleInRequest request) { try { using (var transactionScope = new TransactionScope()) { var role = await systemRoleRepository.GetRoleAsync(request.Id); role.Name = request.Name; await systemRoleRepository.UpdateAsync(role); var models = new SystemRoleMenusInRequest(); models.RoleId = request.Id; models.SystemRoleMenuInRequest = request.SystemRoleMenuInRequest; await systemRoleMenusRepository.InsertAsync(models); transactionScope.Complete(); } } catch (System.Exception ex) { throw new Common.Exceptions.BusinessException(ex.Message); } return true; } /// /// 删除权限 /// /// /// public async Task DeleteSystemRoleAsync(int id) { await systemRoleMenusRepository.DeleteAsync(id); return await systemRoleRepository.DeleteAsync(id); } /// /// 添加菜单 /// /// /// public async Task InsertMenusAsync(Entity.Menus.Menus model) { return await menusRepository.InsertAsync(model) > 0; } /// /// 添加菜单 /// /// /// public async Task InsertMenusAsync(List models) { try { using (var transactionScope = new TransactionScope()) { //查询所用的菜单 var menus = await GetMenusAllAsync(); foreach (var menu in models) { if (!menus.Any(n => n.Path == menu.Path && n.Name == menu.Name)) menu.IsUp = true; } foreach (var item in models.Where(n => n.IsUp == true)) { var menuEntity = new Entity.Menus.Menus() { Icon = item.Icon, Name = item.Name, ParentId = item.ParentId, Path = item.Path, Title = item.Title }; var id = await menusRepository.InsertAsync(menuEntity); if (item.Children == null) continue; foreach (var menu in item.Children) { menuEntity = new Entity.Menus.Menus() { Icon = menu.Icon, Name = menu.Name, ParentId = id, Path = menu.Path, Title = menu.Title }; await menusRepository.InsertAsync(menuEntity); } } transactionScope.Complete(); } } catch (System.Exception ex) { throw new Common.Exceptions.BusinessException(ex.Message); } return true; } /// /// 修改菜单 /// /// /// public async Task UpdateMenusAsync(Entity.Menus.Menus model) { return await menusRepository.UpdateAsync(model); } /// /// 删除菜单 /// /// /// public async Task DeleteMenusAsync(int id) { return await menusRepository.DeleteAsync(id); } /// /// 根据权限ID获取菜单 /// /// /// public async Task> GetMenusAllAsync(int roleId) { //获取 var models = await systemRoleMenusRepository.GetAllAsync(roleId); var item = await menusRepository.GetAllAsync(models.Select(n => n.MenuId).ToList()); var result = new List(); result = item.Select(n => _mapper.Map(n)).ToList(); return result; } /// /// 获取所有菜单 /// /// /// public async Task> GetMenusAllAsync() { return await menusRepository.GetAllAsync(); } } }