Files
jinko.yikatong/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs
2024-03-23 17:22:36 +08:00

106 lines
3.5 KiB
C#

using System.Security.Claims;
using Dlhis.Entity.Sys.Entities;
using Dlhis.Sys.Identity.Request;
using Dlhis.Sys.Identity.Response;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
using Microsoft.AspNetCore.Identity;
namespace Dlhis.Sys.Identity.Services.Implements;
public class UserService : IUserService
{
private readonly IDbContext _dbContext;
public UserService(IDbContext dbContext)
{
_dbContext = dbContext.ChangeDb("identity");
}
public async Task<Pagination<UserResponse>> GetPageAsync(UserPageRequest request)
{
return await _dbContext.Queryable<UserEntity>()
.LeftJoin<UserRoleEntity>((x, ur) => x.Id == ur.UserId)
.LeftJoin<RoleEntity>((x, ur, r) => ur.RoleId == r.Id)
.WhereIF(request.Search.IsPresent(), x => x.UserName.Contains(request.Search)
|| x.NormalizedUserName.Contains(request.Search)
|| x.Email.Contains(request.Search)
|| x.NormalizedEmail.Contains(request.Search)
|| x.PhoneNumber.Contains(request.Search)
)
.Select((x, ur, r) => new UserResponse
{
Id = x.Id,
Role = r.Name
}, true)
.ToPageListAsync(request);
}
public async Task ResetAccessFailedCountAsync(int id)
{
var user = await _dbContext.Queryable<UserEntity>().Where(x => x.Id == id).FirstAsync();
user.ThrowIfNull("用户不存在,无法重置");
user.AccessFailedCount = 0;
await _dbContext.UpdateAsync(user);
}
public async Task<List<UserResponse>> GetUsersAsync()
{
var users = await _dbContext.Queryable<UserEntity>().Select<UserResponse>().ToListAsync();
return users;
}
public async Task<UserResponse> GetUserByIdAsync(int id)
{
var user = await _dbContext.Queryable<UserEntity>().Where(x => x.Id == id).Select<UserResponse>().FirstAsync();
return user;
}
public async Task UploadUserAvatarAsync(UserAvatarUploadRequest request)
{
var user = await _dbContext.Queryable<UserEntity>().Where(x => x.Id == request.UserNo).Select<UserResponse>().FirstAsync();
}
public async Task<List<UserResponse>> GetUserByIdsAsync(List<int> ids)
{
var users = await _dbContext.Queryable<UserEntity>().Where(x => ids.Contains(x.Id)).Select<UserResponse>().ToListAsync();
return users;
}
public async Task CreateUserAsync(UserCreateRequest request)
{
var hasher = new PasswordHasher<UserEntity>();
var user = new UserEntity
{
UserName = request.Username,
NormalizedUserName = request.Username.ToUpper(),
ConcurrencyStamp = Guid.NewGuid().ToString(),
SecurityStamp = Guid.NewGuid().ToString(),
};
request.Password = hasher.HashPassword(user, request.Password);
user.PasswordHash = request.Password;
var id = (int)await _dbContext.InsertReturnIdentityAsync(user);
await _dbContext.InsertAsync(new UserTenantEntity
{
TenantCode = request.Tenant,
UserId = id
});
if (request.Name.IsPresent())
{
await _dbContext.InsertAsync(new UserClaimEntity
{
ClaimType = "preferred_username",
ClaimValue = request.Name,
UserId = id
});
}
}
}