0
0

UserService.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. using Admin.Core.Common.Attributes;
  2. using Admin.Core.Common.Cache;
  3. using Admin.Core.Common.Configs;
  4. using Admin.Core.Common.Helpers;
  5. using Admin.Core.Common.Input;
  6. using Admin.Core.Common.Output;
  7. using Admin.Core.Model.Admin;
  8. using Admin.Core.Repository.Admin;
  9. using Admin.Core.Service.Admin.Auth.Output;
  10. using Admin.Core.Service.Admin.User.Input;
  11. using Admin.Core.Service.Admin.User.Output;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Threading.Tasks;
  15. namespace Admin.Core.Service.Admin.User
  16. {
  17. /// <summary>
  18. /// 用户服务
  19. /// </summary>
  20. public class UserService : BaseService, IUserService
  21. {
  22. private readonly AppConfig _appConfig;
  23. private readonly IUserRepository _userRepository;
  24. private readonly IUserRoleRepository _userRoleRepository;
  25. private readonly IRolePermissionRepository _rolePermissionRepository;
  26. private readonly ITenantRepository _tenantRepository;
  27. public UserService(
  28. AppConfig appConfig,
  29. IUserRepository userRepository,
  30. IUserRoleRepository userRoleRepository,
  31. IRolePermissionRepository rolePermissionRepository,
  32. ITenantRepository tenantRepository
  33. )
  34. {
  35. _appConfig = appConfig;
  36. _userRepository = userRepository;
  37. _userRoleRepository = userRoleRepository;
  38. _rolePermissionRepository = rolePermissionRepository;
  39. _tenantRepository = tenantRepository;
  40. }
  41. public async Task<ResponseOutput<AuthLoginOutput>> GetLoginUserAsync(long id)
  42. {
  43. var output = new ResponseOutput<AuthLoginOutput>();
  44. var entityDto = await _userRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(id).ToOneAsync<AuthLoginOutput>();
  45. if (_appConfig.Tenant && entityDto?.TenantId.Value > 0)
  46. {
  47. var tenant = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(entityDto.TenantId).ToOneAsync(a => new { a.TenantType, a.DataIsolationType });
  48. output.Data.TenantType = tenant.TenantType;
  49. output.Data.DataIsolationType = tenant.DataIsolationType;
  50. }
  51. return output.Ok(entityDto);
  52. }
  53. public async Task<ResponseOutput<UserGetOutput>> GetAsync(long id)
  54. {
  55. var res = new ResponseOutput<UserGetOutput>();
  56. var entity = await _userRepository.Select
  57. .WhereDynamic(id)
  58. .IncludeMany(a => a.Roles.Select(b => new RoleEntity { Id = b.Id }))
  59. .ToOneAsync();
  60. var entityDto = Mapper.Map<UserGetOutput>(entity);
  61. return res.Ok(entityDto);
  62. }
  63. public async Task<IResponseOutput> GetBasicAsync()
  64. {
  65. if (!(User?.Id > 0))
  66. {
  67. return ResponseOutput.NotOk("未登录!");
  68. }
  69. var data = await _userRepository.GetAsync<UserUpdateBasicInput>(User.Id);
  70. return ResponseOutput.Ok(data);
  71. }
  72. public async Task<IList<UserPermissionsOutput>> GetPermissionsAsync()
  73. {
  74. var key = string.Format(CacheKey.UserPermissions, User.Id);
  75. var result = await Cache.GetOrSetAsync(key, async () =>
  76. {
  77. var userPermissoins = await _rolePermissionRepository.Select
  78. .InnerJoin<UserRoleEntity>((a, b) => a.RoleId == b.RoleId && b.UserId == User.Id && a.Permission.Type == PermissionType.Api)
  79. .Include(a => a.Permission.Api)
  80. .Distinct()
  81. .ToListAsync(a => new UserPermissionsOutput { HttpMethods = a.Permission.Api.HttpMethods, Path = a.Permission.Api.Path });
  82. return userPermissoins;
  83. });
  84. return result;
  85. }
  86. public async Task<IResponseOutput> PageAsync(PageInput<UserEntity> input)
  87. {
  88. var list = await _userRepository.Select
  89. .WhereDynamicFilter(input.DynamicFilter)
  90. .Count(out var total)
  91. .OrderByDescending(true, a => a.Id)
  92. .IncludeMany(a => a.Roles.Select(b => new RoleEntity { Name = b.Name }))
  93. .Page(input.CurrentPage, input.PageSize)
  94. .ToListAsync();
  95. var data = new PageOutput<UserListOutput>()
  96. {
  97. List = Mapper.Map<List<UserListOutput>>(list),
  98. Total = total
  99. };
  100. return ResponseOutput.Ok(data);
  101. }
  102. [Transaction]
  103. public async Task<IResponseOutput> AddAsync(UserAddInput input)
  104. {
  105. if (input.Password.IsNull())
  106. {
  107. input.Password = "111111";
  108. }
  109. input.Password = MD5Encrypt.Encrypt32(input.Password);
  110. var entity = Mapper.Map<UserEntity>(input);
  111. var user = await _userRepository.InsertAsync(entity);
  112. if (!(user?.Id > 0))
  113. {
  114. return ResponseOutput.NotOk();
  115. }
  116. if (input.RoleIds != null && input.RoleIds.Any())
  117. {
  118. var roles = input.RoleIds.Select(a => new UserRoleEntity { UserId = user.Id, RoleId = a });
  119. await _userRoleRepository.InsertAsync(roles);
  120. }
  121. return ResponseOutput.Ok();
  122. }
  123. [Transaction]
  124. public async Task<IResponseOutput> UpdateAsync(UserUpdateInput input)
  125. {
  126. if (!(input?.Id > 0))
  127. {
  128. return ResponseOutput.NotOk();
  129. }
  130. var user = await _userRepository.GetAsync(input.Id);
  131. if (!(user?.Id > 0))
  132. {
  133. return ResponseOutput.NotOk("用户不存在!");
  134. }
  135. Mapper.Map(input, user);
  136. await _userRepository.UpdateAsync(user);
  137. await _userRoleRepository.DeleteAsync(a => a.UserId == user.Id);
  138. if (input.RoleIds != null && input.RoleIds.Any())
  139. {
  140. var roles = input.RoleIds.Select(a => new UserRoleEntity { UserId = user.Id, RoleId = a });
  141. await _userRoleRepository.InsertAsync(roles);
  142. }
  143. return ResponseOutput.Ok();
  144. }
  145. public async Task<IResponseOutput> UpdateBasicAsync(UserUpdateBasicInput input)
  146. {
  147. var entity = await _userRepository.GetAsync(input.Id);
  148. entity = Mapper.Map(input, entity);
  149. var result = (await _userRepository.UpdateAsync(entity)) > 0;
  150. //清除用户缓存
  151. await Cache.DelAsync(string.Format(CacheKey.UserInfo, input.Id));
  152. return ResponseOutput.Result(result);
  153. }
  154. public async Task<IResponseOutput> ChangePasswordAsync(UserChangePasswordInput input)
  155. {
  156. if (input.ConfirmPassword != input.NewPassword)
  157. {
  158. return ResponseOutput.NotOk("新密码和确认密码不一致!");
  159. }
  160. var entity = await _userRepository.GetAsync(input.Id);
  161. var oldPassword = MD5Encrypt.Encrypt32(input.OldPassword);
  162. if (oldPassword != entity.Password)
  163. {
  164. return ResponseOutput.NotOk("旧密码不正确!");
  165. }
  166. input.Password = MD5Encrypt.Encrypt32(input.NewPassword);
  167. entity = Mapper.Map(input, entity);
  168. var result = (await _userRepository.UpdateAsync(entity)) > 0;
  169. return ResponseOutput.Result(result);
  170. }
  171. public async Task<IResponseOutput> DeleteAsync(long id)
  172. {
  173. var result = false;
  174. if (id > 0)
  175. {
  176. result = (await _userRepository.DeleteAsync(m => m.Id == id)) > 0;
  177. }
  178. return ResponseOutput.Result(result);
  179. }
  180. [Transaction]
  181. public async Task<IResponseOutput> SoftDeleteAsync(long id)
  182. {
  183. var result = await _userRepository.SoftDeleteAsync(id);
  184. await _userRoleRepository.DeleteAsync(a => a.UserId == id);
  185. return ResponseOutput.Result(result);
  186. }
  187. [Transaction]
  188. public async Task<IResponseOutput> BatchSoftDeleteAsync(long[] ids)
  189. {
  190. var result = await _userRepository.SoftDeleteAsync(ids);
  191. await _userRoleRepository.DeleteAsync(a => ids.Contains(a.UserId));
  192. return ResponseOutput.Result(result);
  193. }
  194. }
  195. }