using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Sys.Entities; using Kurisu.AspNetCore.Authentication.Options; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Entity; using Kurisu.SqlSugar.Services; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; namespace Dlhis.ScheduledTask.CommonJobs { public class TempCreateUserJob { private readonly IDbContext _dbContext; private readonly ILogger _logger; private readonly IdentityServerOptions _identityServerOptions; private readonly IHttpClientFactory _httpClientFactory; public TempCreateUserJob( IDbContext dbContext, ILogger logger, IOptions options, IHttpClientFactory httpClientFactory) { _dbContext = dbContext; _logger = logger; _httpClientFactory = httpClientFactory; _identityServerOptions = options.Value; } public async Task RunAsync() { _dbContext.Client.QueryFilter.ClearAndBackup(); try { //var identityDbContext = _dbContext.ChangeDb("identity"); ////HST0001 //var users = await identityDbContext.Queryable().Where(x => x.UserName != "HST0001") // .Where(x => x.Id > 21) // .ToListAsync(); //var gainfos = await _dbContext.Queryable().ToListAsync(); //var hasher = new PasswordHasher(); //foreach (var user in users) //{ // var gainfo = gainfos.FirstOrDefault(x => x.Code == user.UserName); // if (gainfo != null && gainfo.IdNo.IsPresent()) // { // var password = gainfo.IdNo.TakeLast(6).Join(""); // password = hasher.HashPassword(user, password); // user.PasswordHash = password; // await identityDbContext.UpdateAsync(user); // } //} //var userNames = await identityDbContext.Queryable().Select(x => x.UserName).ToListAsync(); //var newUser = await _dbContext.Queryable() // .Where(x => !string.IsNullOrEmpty(x.Code)) // .Where(x => !userNames.Contains(x.Code)) // .Select(x => new // { // x.Code, // x.Factory, // x.Name, // }) // .ToListAsync(); //var httpClient = _httpClientFactory.CreateClient(); //httpClient.BaseAddress = new Uri(_identityServerOptions.Authority); //var hasher = new PasswordHasher(); //foreach (var item in newUser) //{ // var userName = item.Code; // var password = item.Code; // var factory = item.Factory; // if (password.Length > 6) // { // password = string.Join("", password.TakeLast(6)); // } // else // { // password = password.PadLeft(6, '0'); // } // var user = new UserEntity // { // UserName = userName, // NormalizedUserName = userName.ToUpper(), // ConcurrencyStamp = Guid.NewGuid().ToString(), // SecurityStamp = Guid.NewGuid().ToString(), // }; // password = hasher.HashPassword(user, password); // user.PasswordHash = password; // var id = (int)await identityDbContext.InsertReturnIdentityAsync(user); // await identityDbContext.InsertAsync(new UserTenantEntity() { UserId = id, TenantCode = factory }); // await identityDbContext.InsertAsync(new List // { // new UserClaimEntity{ UserId = id , ClaimType ="preferred_username", ClaimValue = item.Name}, // new UserClaimEntity{ UserId = id , ClaimType ="jinko-code", ClaimValue = item.Code}, // }); //} } catch (Exception ex) { _logger.LogError(ex, "创建用户失败:{message}", ex.Message); } finally { _dbContext.Client.QueryFilter.Restore(); } } } }