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();
}
}