0
0

RoleService.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using ZhonTai.Admin.Core.Repositories;
  4. using ZhonTai.Admin.Core.Dto;
  5. using ZhonTai.Admin.Domain.Role;
  6. using ZhonTai.Admin.Domain.RolePermission;
  7. using ZhonTai.Admin.Services.Role.Dto;
  8. using ZhonTai.Admin.Domain.Role.Dto;
  9. using ZhonTai.DynamicApi;
  10. using ZhonTai.DynamicApi.Attributes;
  11. using Microsoft.AspNetCore.Mvc;
  12. using ZhonTai.Admin.Core.Consts;
  13. using ZhonTai.Admin.Core.Attributes;
  14. using ZhonTai.Admin.Domain.UserRole;
  15. using System.DirectoryServices.Protocols;
  16. namespace ZhonTai.Admin.Services.Role;
  17. /// <summary>
  18. /// 角色服务
  19. /// </summary>
  20. [DynamicApi(Area = AdminConsts.AreaName)]
  21. public class RoleService : BaseService, IRoleService, IDynamicApi
  22. {
  23. private IRoleRepository _roleRepository => LazyGetRequiredService<IRoleRepository>();
  24. private IRepositoryBase<UserRoleEntity> _userRoleRepository => LazyGetRequiredService<IRepositoryBase<UserRoleEntity>>();
  25. private IRepositoryBase<RolePermissionEntity> _rolePermissionRepository => LazyGetRequiredService<IRepositoryBase<RolePermissionEntity>>();
  26. public RoleService()
  27. {
  28. }
  29. /// <summary>
  30. /// 查询角色
  31. /// </summary>
  32. /// <param name="id"></param>
  33. /// <returns></returns>
  34. public async Task<IResultOutput> GetAsync(long id)
  35. {
  36. var result = await _roleRepository.GetAsync<RoleGetOutput>(id);
  37. return ResultOutput.Ok(result);
  38. }
  39. /// <summary>
  40. /// 查询角色列表
  41. /// </summary>
  42. /// <param name="input"></param>
  43. /// <returns></returns>
  44. public async Task<IResultOutput> GetListAsync([FromQuery]RoleGetListInput input)
  45. {
  46. var list = await _roleRepository.Select
  47. .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name))
  48. .OrderBy(a => new {a.ParentId, a.Sort})
  49. .ToListAsync<RoleGetListOutput>();
  50. return ResultOutput.Ok(list);
  51. }
  52. /// <summary>
  53. /// 查询角色列表
  54. /// </summary>
  55. /// <param name="input"></param>
  56. /// <returns></returns>
  57. [HttpPost]
  58. public async Task<IResultOutput> GetPageAsync(PageInput<RoleGetPageDto> input)
  59. {
  60. var key = input.Filter?.Name;
  61. var list = await _roleRepository.Select
  62. .WhereDynamicFilter(input.DynamicFilter)
  63. .WhereIf(key.NotNull(), a => a.Name.Contains(key))
  64. .Count(out var total)
  65. .OrderByDescending(true, c => c.Id)
  66. .Page(input.CurrentPage, input.PageSize)
  67. .ToListAsync<RoleGetPageOutput>();
  68. var data = new PageOutput<RoleGetPageOutput>()
  69. {
  70. List = list,
  71. Total = total
  72. };
  73. return ResultOutput.Ok(data);
  74. }
  75. /// <summary>
  76. /// 新增
  77. /// </summary>
  78. /// <param name="input"></param>
  79. /// <returns></returns>
  80. public async Task<IResultOutput> AddAsync(RoleAddInput input)
  81. {
  82. if(await _roleRepository.Select.AnyAsync(a=>a.ParentId == input.ParentId && a.Name == input.Name))
  83. {
  84. return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组":"角色")}已存在");
  85. }
  86. if (input.Code.NotNull() && await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code))
  87. {
  88. return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在");
  89. }
  90. var entity = Mapper.Map<RoleEntity>(input);
  91. if (entity.Sort == 0)
  92. {
  93. var sort = await _roleRepository.Select.Where(a=>a.ParentId == input.ParentId).MaxAsync(a => a.Sort);
  94. entity.Sort = sort + 1;
  95. }
  96. var id = (await _roleRepository.InsertAsync(entity)).Id;
  97. return ResultOutput.Result(id > 0);
  98. }
  99. /// <summary>
  100. /// 修改
  101. /// </summary>
  102. /// <param name="input"></param>
  103. /// <returns></returns>
  104. public async Task<IResultOutput> UpdateAsync(RoleUpdateInput input)
  105. {
  106. if (!(input?.Id > 0))
  107. {
  108. return ResultOutput.NotOk();
  109. }
  110. var entity = await _roleRepository.GetAsync(input.Id);
  111. if (!(entity?.Id > 0))
  112. {
  113. return ResultOutput.NotOk("角色不存在!");
  114. }
  115. Mapper.Map(input, entity);
  116. await _roleRepository.UpdateAsync(entity);
  117. return ResultOutput.Ok();
  118. }
  119. /// <summary>
  120. /// 彻底删除
  121. /// </summary>
  122. /// <param name="id"></param>
  123. /// <returns></returns>
  124. [Transaction]
  125. public async Task<IResultOutput> DeleteAsync(long id)
  126. {
  127. await _userRoleRepository.DeleteAsync(a => a.UserId == id);
  128. await _rolePermissionRepository.DeleteAsync(a => a.RoleId == id);
  129. await _roleRepository.DeleteAsync(m => m.Id == id);
  130. return ResultOutput.Ok();
  131. }
  132. /// <summary>
  133. /// 批量彻底删除
  134. /// </summary>
  135. /// <param name="ids"></param>
  136. /// <returns></returns>
  137. [Transaction]
  138. public async Task<IResultOutput> BatchDeleteAsync(long[] ids)
  139. {
  140. await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId));
  141. await _rolePermissionRepository.DeleteAsync(a => ids.Contains(a.RoleId));
  142. await _roleRepository.DeleteAsync(a => ids.Contains(a.Id));
  143. return ResultOutput.Ok();
  144. }
  145. /// <summary>
  146. /// 删除
  147. /// </summary>
  148. /// <param name="id"></param>
  149. /// <returns></returns>
  150. [Transaction]
  151. public async Task<IResultOutput> SoftDeleteAsync(long id)
  152. {
  153. await _userRoleRepository.DeleteAsync(a => a.RoleId == id);
  154. await _rolePermissionRepository.DeleteAsync(a => a.RoleId == id);
  155. await _roleRepository.SoftDeleteAsync(id);
  156. return ResultOutput.Ok();
  157. }
  158. /// <summary>
  159. /// 批量删除
  160. /// </summary>
  161. /// <param name="ids"></param>
  162. /// <returns></returns>
  163. [Transaction]
  164. public async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
  165. {
  166. await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId));
  167. await _rolePermissionRepository.DeleteAsync(a => ids.Contains(a.RoleId));
  168. await _roleRepository.SoftDeleteAsync(ids);
  169. return ResultOutput.Ok();
  170. }
  171. }