Browse Source
删除appsettings.json和appsettings.Development.json中无用的日志文件配置和Quartz配置信息。 重命名数据初始化类,并简化数据初始化逻辑,仅保留用户数据初始化。pull/1149/head
4 changed files with 226 additions and 537 deletions
@ -0,0 +1,226 @@ |
|||||
|
using Microsoft.Extensions.Logging; |
||||
|
using PackageName.CompanyName.ProjectName.Users; |
||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Guids; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
using Volo.Abp.Uow; |
||||
|
using IdentityRole = Volo.Abp.Identity.IdentityRole; |
||||
|
using IdentityUser = Volo.Abp.Identity.IdentityUser; |
||||
|
|
||||
|
namespace PackageName.CompanyName.ProjectName.AIO.EntityFrameworkCore.DataSeeder |
||||
|
{ |
||||
|
public class ProjectNameDataSeeder : IProjectNameDataSeeder, ITransientDependency |
||||
|
{ |
||||
|
private readonly ICurrentTenant _currentTenant; |
||||
|
private readonly IGuidGenerator _guidGenerator; |
||||
|
private readonly ILogger<ProjectNameDataSeeder> _logger; |
||||
|
private readonly IRepository<User, Guid> _userRepository; |
||||
|
private readonly IdentityUserManager _identityUserManager; |
||||
|
private readonly IdentityRoleManager _identityRoleManager; |
||||
|
private readonly IUnitOfWorkManager _unitOfWorkManager; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 构造函数
|
||||
|
/// </summary>
|
||||
|
public ProjectNameDataSeeder( |
||||
|
ICurrentTenant currentTenant, |
||||
|
IGuidGenerator guidGenerator, |
||||
|
ILogger<ProjectNameDataSeeder> logger, |
||||
|
IRepository<User, Guid> userRepository, |
||||
|
IdentityUserManager identityUserManager, |
||||
|
IdentityRoleManager identityRoleManager, |
||||
|
IUnitOfWorkManager unitOfWorkManager) |
||||
|
{ |
||||
|
_currentTenant = currentTenant; |
||||
|
_guidGenerator = guidGenerator; |
||||
|
_logger = logger; |
||||
|
_userRepository = userRepository; |
||||
|
_identityUserManager = identityUserManager; |
||||
|
_identityRoleManager = identityRoleManager; |
||||
|
_unitOfWorkManager = unitOfWorkManager; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 初始化数据
|
||||
|
/// </summary>
|
||||
|
/// <param name="context">数据种子上下文</param>
|
||||
|
/// <returns>任务</returns>
|
||||
|
public async Task SeedAsync(DataSeedContext context) |
||||
|
{ |
||||
|
using (_currentTenant.Change(context.TenantId)) |
||||
|
{ |
||||
|
_logger.LogInformation("开始初始化数据..."); |
||||
|
|
||||
|
// 初始化角色
|
||||
|
using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) |
||||
|
{ |
||||
|
await SeedRolesAsync(); |
||||
|
await uow.CompleteAsync(); |
||||
|
} |
||||
|
|
||||
|
// 初始化用户数据
|
||||
|
using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) |
||||
|
{ |
||||
|
await SeedUsersAsync(); |
||||
|
await uow.CompleteAsync(); |
||||
|
} |
||||
|
|
||||
|
_logger.LogInformation("数据初始化完成"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 初始化角色数据
|
||||
|
/// </summary>
|
||||
|
private async Task SeedRolesAsync() |
||||
|
{ |
||||
|
// 超级管理员
|
||||
|
await CreateRoleIfNotExistsAsync( |
||||
|
"超级管理员", |
||||
|
"系统超级管理员,拥有所有权限"); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建角色(如果不存在)
|
||||
|
/// </summary>
|
||||
|
private async Task CreateRoleIfNotExistsAsync(string roleName, string description) |
||||
|
{ |
||||
|
if (await _identityRoleManager.FindByNameAsync(roleName) == null) |
||||
|
{ |
||||
|
var role = new IdentityRole( |
||||
|
_guidGenerator.Create(), |
||||
|
roleName, |
||||
|
_currentTenant.Id) |
||||
|
{ |
||||
|
IsStatic = true, |
||||
|
IsPublic = true |
||||
|
}; |
||||
|
|
||||
|
await _identityRoleManager.CreateAsync(role); |
||||
|
|
||||
|
_logger.LogInformation($"创建角色:{roleName}"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 初始化用户数据
|
||||
|
/// </summary>
|
||||
|
private async Task SeedUsersAsync() |
||||
|
{ |
||||
|
|
||||
|
// 查找超级管理员角色
|
||||
|
var superAdminRole = await _identityRoleManager.FindByNameAsync("超级管理员"); |
||||
|
if (superAdminRole == null) |
||||
|
{ |
||||
|
_logger.LogError("未找到超级管理员角色,无法为用户分配角色"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 创建用户数据(使用固定用户名避免生成问题)
|
||||
|
await CreateUserIfNotExistsAsync("user1", "user1", "超级管理员"); |
||||
|
await CreateUserIfNotExistsAsync("user2", "user2", "超级管理员"); |
||||
|
await CreateUserIfNotExistsAsync("user3", "user3", "超级管理员"); |
||||
|
await CreateUserIfNotExistsAsync("user4", "user4", "超级管理员"); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建用户(如果不存在)
|
||||
|
/// </summary>
|
||||
|
private async Task CreateUserIfNotExistsAsync( |
||||
|
string name, |
||||
|
string userName, |
||||
|
string roles) |
||||
|
{ |
||||
|
// 检查用户是否已存在
|
||||
|
var existingUser = await _userRepository.FindAsync(u => u.NickName == name); |
||||
|
if (existingUser != null) |
||||
|
{ |
||||
|
_logger.LogInformation($"用户[{name}]已存在,跳过创建"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var identityUser = await _identityUserManager.FindByNameAsync(userName); |
||||
|
if (identityUser == null) |
||||
|
{ |
||||
|
// 创建Identity用户
|
||||
|
identityUser = new IdentityUser( |
||||
|
_guidGenerator.Create(), |
||||
|
userName, |
||||
|
$"{userName}@example.com", |
||||
|
_currentTenant.Id) |
||||
|
{ |
||||
|
Name = name, |
||||
|
Surname = "" |
||||
|
}; |
||||
|
|
||||
|
// 设置默认密码 123456
|
||||
|
var identityResult = await _identityUserManager.CreateAsync(identityUser, "123456"); |
||||
|
if (!identityResult.Succeeded) |
||||
|
{ |
||||
|
_logger.LogError($"创建Identity用户[{name}]失败: {string.Join(", ", identityResult.Errors.Select(e => e.Description))}"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 分配角色
|
||||
|
if (!string.IsNullOrWhiteSpace(roles)) |
||||
|
{ |
||||
|
var roleNames = roles.Split(',', StringSplitOptions.RemoveEmptyEntries); |
||||
|
foreach (var roleName in roleNames) |
||||
|
{ |
||||
|
var trimmedRoleName = roleName.Trim(); |
||||
|
var role = await _identityRoleManager.FindByNameAsync(trimmedRoleName); |
||||
|
if (role != null) |
||||
|
{ |
||||
|
var roleResult = await _identityUserManager.AddToRoleAsync(identityUser, trimmedRoleName); |
||||
|
if (!roleResult.Succeeded) |
||||
|
{ |
||||
|
_logger.LogWarning($"为用户[{name}]分配角色[{trimmedRoleName}]失败: {string.Join(", ", roleResult.Errors.Select(e => e.Description))}"); |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
_logger.LogWarning($"角色[{trimmedRoleName}]不存在,无法为用户[{name}]分配"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 创建系统用户
|
||||
|
var user = new User( |
||||
|
_guidGenerator.Create(), |
||||
|
name, |
||||
|
identityUser.Id); |
||||
|
|
||||
|
// 保存用户
|
||||
|
await _userRepository.InsertAsync(user); |
||||
|
|
||||
|
_logger.LogInformation($"创建用户:{name},用户名:{userName}"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
_logger.LogInformation($"Identity用户[{userName}]已存在,检查是否需要创建业务用户"); |
||||
|
|
||||
|
// 检查是否需要创建业务用户
|
||||
|
var businessUser = await _userRepository.FindAsync(u => u.IdentityUserId == identityUser.Id); |
||||
|
if (businessUser == null) |
||||
|
{ |
||||
|
// 创建系统用户
|
||||
|
var user = new User( |
||||
|
_guidGenerator.Create(), |
||||
|
name, |
||||
|
identityUser.Id); |
||||
|
|
||||
|
// 保存用户
|
||||
|
await _userRepository.InsertAsync(user); |
||||
|
|
||||
|
_logger.LogInformation($"为已存在的Identity用户创建业务用户:{name}"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,503 +0,0 @@ |
|||||
using Microsoft.Extensions.Logging; |
|
||||
using System; |
|
||||
using System.Linq; |
|
||||
using System.Threading.Tasks; |
|
||||
using Volo.Abp.Data; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.Domain.Repositories; |
|
||||
using Volo.Abp.Guids; |
|
||||
using Volo.Abp.Identity; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
using Volo.Abp.Uow; |
|
||||
using IdentityRole = Volo.Abp.Identity.IdentityRole; |
|
||||
using IdentityUser = Volo.Abp.Identity.IdentityUser; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.EntityFrameworkCore.DataSeeder |
|
||||
{ |
|
||||
public class ProjectNameDataSeederDataSeeder : IProjectNameDataSeeder, ITransientDependency |
|
||||
{ |
|
||||
private readonly ICurrentTenant _currentTenant; |
|
||||
private readonly IGuidGenerator _guidGenerator; |
|
||||
private readonly ILogger<ProjectNameDataSeeder> _logger; |
|
||||
private readonly IRepository<Org, Guid> _orgRepository; |
|
||||
private readonly IRepository<WorkUnit, Guid> _workUnitRepository; |
|
||||
private readonly IRepository<User, Guid> _userRepository; |
|
||||
private readonly IdentityUserManager _identityUserManager; |
|
||||
private readonly IdentityRoleManager _identityRoleManager; |
|
||||
private readonly IUnitOfWorkManager _unitOfWorkManager; |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 构造函数
|
|
||||
/// </summary>
|
|
||||
public ProjectNameDataSeeder( |
|
||||
ICurrentTenant currentTenant, |
|
||||
IGuidGenerator guidGenerator, |
|
||||
ILogger<ProjectNameDataSeeder> logger, |
|
||||
IRepository<Org, Guid> orgRepository, |
|
||||
IRepository<WorkUnit, Guid> workUnitRepository, |
|
||||
IRepository<User, Guid> userRepository, |
|
||||
IdentityUserManager identityUserManager, |
|
||||
IdentityRoleManager identityRoleManager, |
|
||||
IUnitOfWorkManager unitOfWorkManager) |
|
||||
{ |
|
||||
_currentTenant = currentTenant; |
|
||||
_guidGenerator = guidGenerator; |
|
||||
_logger = logger; |
|
||||
_orgRepository = orgRepository; |
|
||||
_workUnitRepository = workUnitRepository; |
|
||||
_userRepository = userRepository; |
|
||||
_identityUserManager = identityUserManager; |
|
||||
_identityRoleManager = identityRoleManager; |
|
||||
_unitOfWorkManager = unitOfWorkManager; |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 初始化数据
|
|
||||
/// </summary>
|
|
||||
/// <param name="context">数据种子上下文</param>
|
|
||||
/// <returns>任务</returns>
|
|
||||
public async Task SeedAsync(DataSeedContext context) |
|
||||
{ |
|
||||
using (_currentTenant.Change(context.TenantId)) |
|
||||
{ |
|
||||
_logger.LogInformation("开始初始化巡检数据..."); |
|
||||
|
|
||||
// 初始化角色
|
|
||||
using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) |
|
||||
{ |
|
||||
await SeedRolesAsync(); |
|
||||
await uow.CompleteAsync(); |
|
||||
} |
|
||||
|
|
||||
// 初始化单位数据
|
|
||||
using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) |
|
||||
{ |
|
||||
await SeedWorkUnitsAsync(); |
|
||||
await uow.CompleteAsync(); |
|
||||
} |
|
||||
|
|
||||
// 初始化组织数据
|
|
||||
using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) |
|
||||
{ |
|
||||
await SeedOrgsAsync(); |
|
||||
await uow.CompleteAsync(); |
|
||||
} |
|
||||
|
|
||||
// 初始化用户数据
|
|
||||
using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) |
|
||||
{ |
|
||||
await SeedUsersAsync(); |
|
||||
await uow.CompleteAsync(); |
|
||||
} |
|
||||
|
|
||||
_logger.LogInformation("巡检数据初始化完成"); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 初始化角色数据
|
|
||||
/// </summary>
|
|
||||
private async Task SeedRolesAsync() |
|
||||
{ |
|
||||
// 超级管理员
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"超级管理员", |
|
||||
"系统超级管理员,拥有所有权限"); |
|
||||
|
|
||||
// 区委办公室-督查室管理员
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"区委办公室-督查室管理员", |
|
||||
"区委办公室督查室管理员"); |
|
||||
|
|
||||
// 责任领导秘书
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"责任领导秘书", |
|
||||
"负责协助责任领导进行工作"); |
|
||||
|
|
||||
// 责任单位管理员
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"责任单位管理员", |
|
||||
"负责管理责任单位的信息"); |
|
||||
|
|
||||
// 责任单位落实人员
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"责任单位落实人员", |
|
||||
"负责执行责任单位的任务"); |
|
||||
|
|
||||
// 责任单位分管领导
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"责任单位分管领导", |
|
||||
"负责管理责任单位的部分工作"); |
|
||||
|
|
||||
// 责任单位党组书记
|
|
||||
await CreateRoleIfNotExistsAsync( |
|
||||
"责任单位党组书记", |
|
||||
"负责责任单位的党组工作"); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 创建角色(如果不存在)
|
|
||||
/// </summary>
|
|
||||
private async Task CreateRoleIfNotExistsAsync(string roleName, string description) |
|
||||
{ |
|
||||
if (await _identityRoleManager.FindByNameAsync(roleName) == null) |
|
||||
{ |
|
||||
var role = new IdentityRole( |
|
||||
_guidGenerator.Create(), |
|
||||
roleName, |
|
||||
_currentTenant.Id) |
|
||||
{ |
|
||||
IsStatic = true, |
|
||||
IsPublic = true |
|
||||
}; |
|
||||
|
|
||||
await _identityRoleManager.CreateAsync(role); |
|
||||
|
|
||||
_logger.LogInformation($"创建角色:{roleName}"); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 初始化单位数据
|
|
||||
/// </summary>
|
|
||||
private async Task SeedWorkUnitsAsync() |
|
||||
{ |
|
||||
// 创建永川区
|
|
||||
var yongchuanDistrict = await CreateWorkUnitIfNotExistsAsync( |
|
||||
"永川区", |
|
||||
"001", |
|
||||
"001", |
|
||||
"永川区"); |
|
||||
|
|
||||
// 创建区政府
|
|
||||
var districtGovernment = await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区政府", |
|
||||
"002", |
|
||||
"001.002", |
|
||||
"永川区政府", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区委办公室
|
|
||||
var districtCommitteeOffice = await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区委办公室", |
|
||||
"003", |
|
||||
"001.003", |
|
||||
"永川区委办公室", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建督查室
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"督查室", |
|
||||
"004", |
|
||||
"001.003.004", |
|
||||
"区委办公室督查室", |
|
||||
districtCommitteeOffice.Id); |
|
||||
|
|
||||
// 创建区委扫黑办
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区委扫黑办", |
|
||||
"005", |
|
||||
"001.005", |
|
||||
"永川区委扫黑办", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区体育局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区体育局", |
|
||||
"006", |
|
||||
"001.006", |
|
||||
"永川区体育局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区统计局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区统计局", |
|
||||
"007", |
|
||||
"001.007", |
|
||||
"永川区统计局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区信访办
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区信访办", |
|
||||
"008", |
|
||||
"001.008", |
|
||||
"永川区信访办", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区医保局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区医保局", |
|
||||
"009", |
|
||||
"001.009", |
|
||||
"永川区医保局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区大数据发展局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区大数据发展局", |
|
||||
"010", |
|
||||
"001.010", |
|
||||
"永川区大数据发展局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区机关事务局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区机关事务局", |
|
||||
"011", |
|
||||
"001.011", |
|
||||
"永川区机关事务局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区广播电视局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区广播电视局", |
|
||||
"012", |
|
||||
"001.012", |
|
||||
"永川区广播电视局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建区中新项目管理局
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"区中新项目管理局", |
|
||||
"013", |
|
||||
"001.013", |
|
||||
"永川区中新项目管理局", |
|
||||
yongchuanDistrict.Id); |
|
||||
|
|
||||
// 创建镇街
|
|
||||
await CreateWorkUnitIfNotExistsAsync( |
|
||||
"镇街", |
|
||||
"014", |
|
||||
"001.014", |
|
||||
"永川区镇街", |
|
||||
yongchuanDistrict.Id); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 创建单位(如果不存在)
|
|
||||
/// </summary>
|
|
||||
private async Task<WorkUnit> CreateWorkUnitIfNotExistsAsync( |
|
||||
string name, |
|
||||
string code, |
|
||||
string treeCode, |
|
||||
string description, |
|
||||
Guid? parentId = null) |
|
||||
{ |
|
||||
var workUnit = await _workUnitRepository.FindAsync(w => w.Name == name); |
|
||||
|
|
||||
if (workUnit == null) |
|
||||
{ |
|
||||
workUnit = new WorkUnit( |
|
||||
_guidGenerator.Create(), |
|
||||
code, |
|
||||
treeCode, |
|
||||
name, |
|
||||
description) |
|
||||
{ |
|
||||
ParentId = parentId |
|
||||
}; |
|
||||
|
|
||||
await _workUnitRepository.InsertAsync(workUnit); |
|
||||
|
|
||||
_logger.LogInformation($"创建单位:{name}"); |
|
||||
} |
|
||||
|
|
||||
return workUnit; |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 初始化组织数据
|
|
||||
/// </summary>
|
|
||||
private async Task SeedOrgsAsync() |
|
||||
{ |
|
||||
// 创建区委办公室-督查室
|
|
||||
var supervisionOffice = await CreateOrgIfNotExistsAsync( |
|
||||
"区委办公室-督查室", |
|
||||
"001", |
|
||||
"001", |
|
||||
"区委办公室督查室"); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 创建组织(如果不存在)
|
|
||||
/// </summary>
|
|
||||
private async Task<Org> CreateOrgIfNotExistsAsync( |
|
||||
string name, |
|
||||
string code, |
|
||||
string treeCode, |
|
||||
string description, |
|
||||
Guid? parentId = null) |
|
||||
{ |
|
||||
var org = await _orgRepository.FindAsync(o => o.Name == name); |
|
||||
|
|
||||
if (org == null) |
|
||||
{ |
|
||||
org = new Org( |
|
||||
_guidGenerator.Create(), |
|
||||
code, |
|
||||
treeCode, |
|
||||
name, |
|
||||
description) |
|
||||
{ |
|
||||
ParentId = parentId |
|
||||
}; |
|
||||
|
|
||||
await _orgRepository.InsertAsync(org); |
|
||||
|
|
||||
_logger.LogInformation($"创建组织:{name}"); |
|
||||
} |
|
||||
|
|
||||
return org; |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 初始化用户数据
|
|
||||
/// </summary>
|
|
||||
private async Task SeedUsersAsync() |
|
||||
{ |
|
||||
// 获取所需单位
|
|
||||
var supervisionOffice = await _workUnitRepository.FindAsync(w => w.Name == "督查室"); |
|
||||
if (supervisionOffice == null) |
|
||||
{ |
|
||||
_logger.LogError("未找到督查室单位,无法创建用户"); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// 获取所需组织
|
|
||||
var supervisionOrg = await _orgRepository.FindAsync(o => o.Name == "区委办公室-督查室"); |
|
||||
if (supervisionOrg == null) |
|
||||
{ |
|
||||
_logger.LogError("未找到区委办公室-督查室组织,无法创建用户"); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// 查找超级管理员角色
|
|
||||
var superAdminRole = await _identityRoleManager.FindByNameAsync("超级管理员"); |
|
||||
if (superAdminRole == null) |
|
||||
{ |
|
||||
_logger.LogError("未找到超级管理员角色,无法为用户分配角色"); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// 创建用户数据(使用固定用户名避免生成问题)
|
|
||||
await CreateUserIfNotExistsAsync("李达康", "lidk001", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员"); |
|
||||
await CreateUserIfNotExistsAsync("高育良", "gyl002", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员"); |
|
||||
await CreateUserIfNotExistsAsync("祁同伟", "qtw003", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员"); |
|
||||
await CreateUserIfNotExistsAsync("侯亮平", "hlp004", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员"); |
|
||||
await CreateUserIfNotExistsAsync("赵瑞龙", "zrl005", GenderType.Female, supervisionOffice.Id, supervisionOrg.Id, "超级管理员"); |
|
||||
await CreateUserIfNotExistsAsync("宋梦平", "smp006", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员, 部门领导"); |
|
||||
await CreateUserIfNotExistsAsync("李太亮", "ltl007", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员, 部门领导"); |
|
||||
await CreateUserIfNotExistsAsync("高峰", "gf008", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员, 部门领导"); |
|
||||
await CreateUserIfNotExistsAsync("朱丽平", "zlp009", GenderType.Female, supervisionOffice.Id, supervisionOrg.Id, "超级管理员, 部门领导"); |
|
||||
await CreateUserIfNotExistsAsync("安欣", "ax010", GenderType.Male, supervisionOffice.Id, supervisionOrg.Id, "超级管理员"); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 创建用户(如果不存在)
|
|
||||
/// </summary>
|
|
||||
private async Task CreateUserIfNotExistsAsync( |
|
||||
string name, |
|
||||
string userName, |
|
||||
GenderType gender, |
|
||||
Guid workUnitId, |
|
||||
Guid orgId, |
|
||||
string roles) |
|
||||
{ |
|
||||
// 检查用户是否已存在
|
|
||||
var existingUser = await _userRepository.FindAsync(u => u.NickName == name); |
|
||||
if (existingUser != null) |
|
||||
{ |
|
||||
_logger.LogInformation($"用户[{name}]已存在,跳过创建"); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
var identityUser = await _identityUserManager.FindByNameAsync(userName); |
|
||||
if (identityUser == null) |
|
||||
{ |
|
||||
// 创建Identity用户
|
|
||||
identityUser = new IdentityUser( |
|
||||
_guidGenerator.Create(), |
|
||||
userName, |
|
||||
$"{userName}@example.com", |
|
||||
_currentTenant.Id) |
|
||||
{ |
|
||||
Name = name, |
|
||||
Surname = "" |
|
||||
}; |
|
||||
|
|
||||
// 设置默认密码 123456
|
|
||||
var identityResult = await _identityUserManager.CreateAsync(identityUser, "123456"); |
|
||||
if (!identityResult.Succeeded) |
|
||||
{ |
|
||||
_logger.LogError($"创建Identity用户[{name}]失败: {string.Join(", ", identityResult.Errors.Select(e => e.Description))}"); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// 分配角色
|
|
||||
if (!string.IsNullOrWhiteSpace(roles)) |
|
||||
{ |
|
||||
var roleNames = roles.Split(',', StringSplitOptions.RemoveEmptyEntries); |
|
||||
foreach (var roleName in roleNames) |
|
||||
{ |
|
||||
var trimmedRoleName = roleName.Trim(); |
|
||||
var role = await _identityRoleManager.FindByNameAsync(trimmedRoleName); |
|
||||
if (role != null) |
|
||||
{ |
|
||||
var roleResult = await _identityUserManager.AddToRoleAsync(identityUser, trimmedRoleName); |
|
||||
if (!roleResult.Succeeded) |
|
||||
{ |
|
||||
_logger.LogWarning($"为用户[{name}]分配角色[{trimmedRoleName}]失败: {string.Join(", ", roleResult.Errors.Select(e => e.Description))}"); |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
_logger.LogWarning($"角色[{trimmedRoleName}]不存在,无法为用户[{name}]分配"); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 创建系统用户
|
|
||||
var user = new User( |
|
||||
_guidGenerator.Create(), |
|
||||
name, |
|
||||
workUnitId, |
|
||||
identityUser.Id, |
|
||||
gender) |
|
||||
{ |
|
||||
OrgId = orgId |
|
||||
}; |
|
||||
|
|
||||
// 保存用户
|
|
||||
await _userRepository.InsertAsync(user); |
|
||||
|
|
||||
_logger.LogInformation($"创建用户:{name},用户名:{userName}"); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
_logger.LogInformation($"Identity用户[{userName}]已存在,检查是否需要创建业务用户"); |
|
||||
|
|
||||
// 检查是否需要创建业务用户
|
|
||||
var businessUser = await _userRepository.FindAsync(u => u.IdentityUserId == identityUser.Id); |
|
||||
if (businessUser == null) |
|
||||
{ |
|
||||
// 创建系统用户
|
|
||||
var user = new User( |
|
||||
_guidGenerator.Create(), |
|
||||
name, |
|
||||
workUnitId, |
|
||||
identityUser.Id, |
|
||||
gender) |
|
||||
{ |
|
||||
OrgId = orgId |
|
||||
}; |
|
||||
|
|
||||
// 保存用户
|
|
||||
await _userRepository.InsertAsync(user); |
|
||||
|
|
||||
_logger.LogInformation($"为已存在的Identity用户创建业务用户:{name}"); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue