修复Mysql
This commit is contained in:
@@ -158,52 +158,60 @@ public sealed class PersonnelController(
|
||||
TeacherAccountActivationRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var teacher = await db.Teachers.FindAsync([id], cancellationToken);
|
||||
if (teacher is null) return NotFound();
|
||||
if (!CanAccessCollege(teacher.CollegeId)) return Forbid();
|
||||
if (teacher.Status != TeacherStatus.Active)
|
||||
{
|
||||
return ConflictProblem("仅在职教师可以激活登录账号。");
|
||||
}
|
||||
if (teacher.UserId.HasValue)
|
||||
{
|
||||
return ConflictProblem("该教师档案已经关联登录账号。");
|
||||
}
|
||||
return await db.ExecuteInRetriableTransactionAsync<ActionResult>(
|
||||
async transaction =>
|
||||
{
|
||||
db.ChangeTracker.Clear();
|
||||
var teacher = await db.Teachers.FindAsync([id], cancellationToken);
|
||||
if (teacher is null) return NotFound();
|
||||
if (!CanAccessCollege(teacher.CollegeId)) return Forbid();
|
||||
if (teacher.Status != TeacherStatus.Active)
|
||||
{
|
||||
return ConflictProblem("仅在职教师可以激活登录账号。");
|
||||
}
|
||||
if (teacher.UserId.HasValue)
|
||||
{
|
||||
return ConflictProblem("该教师档案已经关联登录账号。");
|
||||
}
|
||||
|
||||
var userName = teacher.TeacherNumber.Trim();
|
||||
if (await userManager.FindByNameAsync(userName) is not null)
|
||||
{
|
||||
return ConflictProblem("该工号已有登录账号但未正确关联,请到账号管理中核对。");
|
||||
}
|
||||
var userName = teacher.TeacherNumber.Trim();
|
||||
if (await userManager.FindByNameAsync(userName) is not null)
|
||||
{
|
||||
return ConflictProblem(
|
||||
"该工号已有登录账号但未正确关联,请到账号管理中核对。");
|
||||
}
|
||||
|
||||
await using var transaction = await db.Database.BeginTransactionAsync(cancellationToken);
|
||||
var user = new ApplicationUser
|
||||
{
|
||||
UserName = userName,
|
||||
DisplayName = teacher.Name,
|
||||
StaffNumber = userName,
|
||||
CollegeId = teacher.CollegeId,
|
||||
IsEnabled = true,
|
||||
LockoutEnabled = true
|
||||
};
|
||||
var result = await userManager.CreateAsync(user, request.Password);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
var user = new ApplicationUser
|
||||
{
|
||||
UserName = userName,
|
||||
DisplayName = teacher.Name,
|
||||
StaffNumber = userName,
|
||||
CollegeId = teacher.CollegeId,
|
||||
IsEnabled = true,
|
||||
LockoutEnabled = true
|
||||
};
|
||||
var result = await userManager.CreateAsync(user, request.Password);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
|
||||
result = await userManager.AddToRoleAsync(user, SystemRoles.Teacher);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
result = await userManager.AddToRoleAsync(
|
||||
user,
|
||||
SystemRoles.Teacher);
|
||||
if (!result.Succeeded)
|
||||
{
|
||||
await transaction.RollbackAsync(cancellationToken);
|
||||
return IdentityValidationProblem(result);
|
||||
}
|
||||
|
||||
teacher.UserId = user.Id;
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
await transaction.CommitAsync(cancellationToken);
|
||||
return Ok(new { user.Id, UserName = userName });
|
||||
teacher.UserId = user.Id;
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
await transaction.CommitAsync(cancellationToken);
|
||||
return Ok(new { user.Id, UserName = userName });
|
||||
},
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
[HttpGet("students")]
|
||||
|
||||
Reference in New Issue
Block a user