using YD_Event.Application.Role.Dtos; namespace YD_Event.Application.Role; /// /// 角色管理 /// public class SysRoleService : BaseService { private readonly ISqlSugarRepository _sysRoleRepository; private readonly ISqlSugarRepository _sysRoleMenuRepository; private readonly IEasyCachingProvider _easyCachingProvider; private readonly IIdGenerator _idGenerator; public SysRoleService(ISqlSugarRepository sysRoleRepository, ISqlSugarRepository sysRoleMenuRepository, IEasyCachingProvider easyCachingProvider, IIdGenerator idGenerator) : base(sysRoleRepository) { _sysRoleRepository = sysRoleRepository; _sysRoleMenuRepository = sysRoleMenuRepository; _easyCachingProvider = easyCachingProvider; _idGenerator = idGenerator; } /// /// 角色分页查询 /// /// /// [HttpGet] public async Task> Page([FromQuery] SysRoleQueryInput dto) { return await _sysRoleRepository.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(dto.Name), x => x.Name.Contains(dto.Name)) .OrderBy(x => x.Sort) .OrderByDescending(x => x.Id) .Select(x => new SysRolePageOutput { Id = x.Id, Name = x.Name, CreatedTime = x.CreatedTime, Status = x.Status, Code = x.Code, Sort = x.Sort, Remark = x.Remark }).ToPagedListAsync(dto); } /// /// 添加角色 /// /// /// [Description("添加角色")] [HttpPost("add")] [UnitOfWork] public async Task AddRole(AddSysRoleInput dto) { if (await _sysRoleRepository.IsAnyAsync(x => x.Code == dto.Code)) { throw Oops.Bah("角色编码已存在"); } var role = dto.Adapt(); role.Id = _idGenerator.NewLong(); var roleMenus = dto.Menus.Select(x => new SysRoleMenu() { MenuId = x, RoleId = role.Id }).ToList(); await _sysRoleRepository.InsertAsync(role); await _sysRoleMenuRepository.InsertRangeAsync(roleMenus); } /// /// 更新角色 /// /// /// [Description("更新角色")] [HttpPut("edit")] [UnitOfWork] public async Task UpdateRole(UpdateSysRoleInput dto) { var sysRole = await _sysRoleRepository.GetByIdAsync(dto.Id); if (sysRole == null) { throw Oops.Bah("无效参数"); } if (await _sysRoleRepository.IsAnyAsync(x => x.Id != dto.Id && x.Code == dto.Code)) { throw Oops.Bah("角色编码已存在"); } dto.Adapt(sysRole); var roleMenus = dto.Menus.Select(x => new SysRoleMenu() { MenuId = x, RoleId = sysRole.Id }).ToList(); await _sysRoleRepository.UpdateAsync(sysRole); await _sysRoleMenuRepository.DeleteAsync(x => x.RoleId == sysRole.Id); await _sysRoleMenuRepository.InsertRangeAsync(roleMenus); await _easyCachingProvider.RemoveByPrefixAsync(CacheConst.PermissionKey); } /// /// 获取角色可访问的菜单和按钮id /// /// 角色id /// [Description("获取角色可访问的菜单和按钮id")] [HttpGet("getRuleMenu")] public async Task> GetRuleMenu([FromQuery] long id) { return await _sysRoleRepository.AsQueryable().InnerJoin((role, roleMenu) => role.Id == roleMenu.RoleId) .InnerJoin((role, roleMenu, menu) => roleMenu.MenuId == menu.Id) .Where((role, roleMenu, menu) => role.Id == id && menu.Status == AvailabilityStatus.Enable) .Select((role, roleMenu) => roleMenu.MenuId).ToListAsync(); } /// /// 修改角色状态 /// /// /// [Description("修改角色状态"), HttpPut("setStatus")] public override async Task SetStatus(AvailabilityDto dto) { await base.SetStatus(dto); await _easyCachingProvider.RemoveByPrefixAsync(CacheConst.PermissionKey); } /// /// 删除角色 /// /// /// [Description("删除角色"), HttpDelete("delete")] public override async Task Delete(KeyDto dto) { await base.Delete(dto); await _easyCachingProvider.RemoveByPrefixAsync(CacheConst.PermissionKey); } /// /// 角色下拉选项 /// /// [Description("角色下拉选项")] [HttpGet] public async Task> RoleSelect() { return await _sysRoleRepository.AsQueryable().Where(x => x.Status == AvailabilityStatus.Enable) .OrderBy(x => x.Sort) .OrderBy(x => x.Id) .Select(x => new SelectOutput() { Value = x.Id, Label = x.Name }).ToListAsync(); } }