using System.Linq; using System.Threading.Tasks; using ZhonTai.Admin.Core.Repositories; using ZhonTai.Admin.Core.Dto; using ZhonTai.Admin.Domain.Role; using ZhonTai.Admin.Domain.RolePermission; using ZhonTai.Admin.Services.Role.Dto; using ZhonTai.Admin.Domain.Role.Dto; using ZhonTai.DynamicApi; using ZhonTai.DynamicApi.Attributes; using Microsoft.AspNetCore.Mvc; using ZhonTai.Admin.Core.Consts; using ZhonTai.Admin.Core.Attributes; using ZhonTai.Admin.Domain.UserRole; using System.DirectoryServices.Protocols; namespace ZhonTai.Admin.Services.Role; /// /// 角色服务 /// [DynamicApi(Area = AdminConsts.AreaName)] public class RoleService : BaseService, IRoleService, IDynamicApi { private IRoleRepository _roleRepository => LazyGetRequiredService(); private IRepositoryBase _userRoleRepository => LazyGetRequiredService>(); private IRepositoryBase _rolePermissionRepository => LazyGetRequiredService>(); public RoleService() { } /// /// 查询角色 /// /// /// public async Task GetAsync(long id) { var result = await _roleRepository.GetAsync(id); return ResultOutput.Ok(result); } /// /// 查询角色列表 /// /// /// public async Task GetListAsync([FromQuery]RoleGetListInput input) { var list = await _roleRepository.Select .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name)) .OrderBy(a => new {a.ParentId, a.Sort}) .ToListAsync(); return ResultOutput.Ok(list); } /// /// 查询角色列表 /// /// /// [HttpPost] public async Task GetPageAsync(PageInput input) { var key = input.Filter?.Name; var list = await _roleRepository.Select .WhereDynamicFilter(input.DynamicFilter) .WhereIf(key.NotNull(), a => a.Name.Contains(key)) .Count(out var total) .OrderByDescending(true, c => c.Id) .Page(input.CurrentPage, input.PageSize) .ToListAsync(); var data = new PageOutput() { List = list, Total = total }; return ResultOutput.Ok(data); } /// /// 新增 /// /// /// public async Task AddAsync(RoleAddInput input) { if(await _roleRepository.Select.AnyAsync(a=>a.ParentId == input.ParentId && a.Name == input.Name)) { return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组":"角色")}已存在"); } if (input.Code.NotNull() && await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) { return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在"); } var entity = Mapper.Map(input); if (entity.Sort == 0) { var sort = await _roleRepository.Select.Where(a=>a.ParentId == input.ParentId).MaxAsync(a => a.Sort); entity.Sort = sort + 1; } var id = (await _roleRepository.InsertAsync(entity)).Id; return ResultOutput.Result(id > 0); } /// /// 修改 /// /// /// public async Task UpdateAsync(RoleUpdateInput input) { if (!(input?.Id > 0)) { return ResultOutput.NotOk(); } var entity = await _roleRepository.GetAsync(input.Id); if (!(entity?.Id > 0)) { return ResultOutput.NotOk("角色不存在!"); } Mapper.Map(input, entity); await _roleRepository.UpdateAsync(entity); return ResultOutput.Ok(); } /// /// 彻底删除 /// /// /// [Transaction] public async Task DeleteAsync(long id) { await _userRoleRepository.DeleteAsync(a => a.UserId == id); await _rolePermissionRepository.DeleteAsync(a => a.RoleId == id); await _roleRepository.DeleteAsync(m => m.Id == id); return ResultOutput.Ok(); } /// /// 批量彻底删除 /// /// /// [Transaction] public async Task BatchDeleteAsync(long[] ids) { await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId)); await _rolePermissionRepository.DeleteAsync(a => ids.Contains(a.RoleId)); await _roleRepository.DeleteAsync(a => ids.Contains(a.Id)); return ResultOutput.Ok(); } /// /// 删除 /// /// /// [Transaction] public async Task SoftDeleteAsync(long id) { await _userRoleRepository.DeleteAsync(a => a.RoleId == id); await _rolePermissionRepository.DeleteAsync(a => a.RoleId == id); await _roleRepository.SoftDeleteAsync(id); return ResultOutput.Ok(); } /// /// 批量删除 /// /// /// [Transaction] public async Task BatchSoftDeleteAsync(long[] ids) { await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId)); await _rolePermissionRepository.DeleteAsync(a => ids.Contains(a.RoleId)); await _roleRepository.SoftDeleteAsync(ids); return ResultOutput.Ok(); } }