This commit is contained in:
2026-07-24 22:18:32 +08:00 Unverified
parent d67a07f23e
commit 27c3944c28
12 changed files with 781 additions and 14 deletions
@@ -14,7 +14,8 @@ namespace Jiaowu.Api.Controllers;
[Route("api/personnel")]
public sealed class PersonnelExcelController(
AppDbContext db,
ICurrentUserDataScope currentUserDataScope) : ControllerBase
ICurrentUserDataScope currentUserDataScope,
PersonnelAccountService personnelAccountService) : ControllerBase
{
private const string ReadRoles =
SystemRoles.SuperAdmin + "," +
@@ -32,13 +33,13 @@ public sealed class PersonnelExcelController(
private static readonly string[] TeacherHeaders =
[
"工号", "姓名", "性别", "学院编码", "职称", "任职状态",
"入职日期", "教师类别", "联系电话", "电子邮箱", "备注"
"入职日期", "教师类别", "联系电话", "电子邮箱", "备注", "初始密码"
];
private static readonly string[] StudentHeaders =
[
"学号", "姓名", "性别", "行政班编码", "入学年级", "入学日期",
"学籍状态", "出生日期", "联系电话", "电子邮箱", "备注"
"学籍状态", "出生日期", "联系电话", "电子邮箱", "备注", "初始密码"
];
[HttpGet("{kind}/template")]
@@ -56,6 +57,7 @@ public sealed class PersonnelExcelController(
? "工号是唯一标识;学院编码必须已存在。"
: "学号是唯一标识;行政班编码必须已存在。",
"编号已存在时更新档案,不存在时新增档案。",
"新增人员或补建账号时必须填写至少 8 位初始密码;已有关联账号时可留空。",
"日期填写为 yyyy-MM-dd;不适用的可选字段可以留空。",
"整批数据会先校验,任一行有误时均不会写入。"
]);
@@ -81,7 +83,7 @@ public sealed class PersonnelExcelController(
.Select(x => Row(
x.TeacherNumber, x.Name, GenderName(x.Gender), x.College!.Code,
x.Title, TeacherStatusName(x.Status), x.HireDate,
x.IsExternal ? "外聘" : "校内", x.Phone, x.Email, x.Notes))
x.IsExternal ? "外聘" : "校内", x.Phone, x.Email, x.Notes, null))
.ToList();
}
else
@@ -94,7 +96,7 @@ public sealed class PersonnelExcelController(
.Select(x => Row(
x.StudentNumber, x.Name, GenderName(x.Gender),
x.AdministrativeClass!.Code, x.EnrollmentYear, x.EnrollmentDate,
StudentStatusName(x.Status), x.DateOfBirth, x.Phone, x.Email, x.Notes))
StudentStatusName(x.Status), x.DateOfBirth, x.Phone, x.Email, x.Notes, null))
.ToList();
}
@@ -212,6 +214,12 @@ public sealed class PersonnelExcelController(
entity.Phone = Optional(row, "联系电话");
entity.Email = Optional(row, "电子邮箱");
entity.Notes = Optional(row, "备注");
var account = await personnelAccountService.EnsureTeacherAccountAsync(
entity,
Optional(row, "初始密码"),
cancellationToken);
if (!account.Success)
errors.Add($"第 {row.RowNumber} 行:{account.Error}");
}
return new(created, updated, rows.Count);
}
@@ -284,6 +292,12 @@ public sealed class PersonnelExcelController(
entity.Phone = Optional(row, "联系电话");
entity.Email = Optional(row, "电子邮箱");
entity.Notes = Optional(row, "备注");
var account = await personnelAccountService.EnsureStudentAccountAsync(
entity,
Optional(row, "初始密码"),
cancellationToken);
if (!account.Success)
errors.Add($"第 {row.RowNumber} 行:{account.Error}");
}
return new(created, updated, rows.Count);
}