修复Mysql

This commit is contained in:
2026-07-26 10:19:46 +08:00 Unverified
parent 634ef69a27
commit 72297aa23f
31 changed files with 1642 additions and 1192 deletions
@@ -77,45 +77,57 @@ public sealed class BaseDataExcelController(AppDbContext db) : ControllerBase
}
if (rows.Count == 0) return ValidationProblem("Excel 中没有可导入的数据。");
var errors = new List<string>();
ExcelImportResult result;
await using var transaction = await db.Database.BeginTransactionAsync(cancellationToken);
try
{
result = kind.ToLowerInvariant() switch
return await db.ExecuteInRetriableTransactionAsync<
ActionResult<ExcelImportResult>>(
async transaction =>
{
"campuses" => await ImportCampusesAsync(rows, errors, cancellationToken),
"colleges" => await ImportCollegesAsync(rows, errors, cancellationToken),
"majors" => await ImportMajorsAsync(rows, errors, cancellationToken),
"classes" => await ImportClassesAsync(rows, errors, cancellationToken),
"terms" => await ImportTermsAsync(rows, errors, cancellationToken),
"buildings" => await ImportBuildingsAsync(rows, errors, cancellationToken),
"classrooms" => await ImportClassroomsAsync(rows, errors, cancellationToken),
"course-categories" => await ImportCourseCategoriesAsync(
rows, errors, cancellationToken),
_ => throw new InvalidOperationException()
};
var errors = new List<string>();
ExcelImportResult result;
try
{
result = kind.ToLowerInvariant() switch
{
"campuses" => await ImportCampusesAsync(
rows, errors, cancellationToken),
"colleges" => await ImportCollegesAsync(
rows, errors, cancellationToken),
"majors" => await ImportMajorsAsync(
rows, errors, cancellationToken),
"classes" => await ImportClassesAsync(
rows, errors, cancellationToken),
"terms" => await ImportTermsAsync(
rows, errors, cancellationToken),
"buildings" => await ImportBuildingsAsync(
rows, errors, cancellationToken),
"classrooms" => await ImportClassroomsAsync(
rows, errors, cancellationToken),
"course-categories" => await ImportCourseCategoriesAsync(
rows, errors, cancellationToken),
_ => throw new InvalidOperationException()
};
if (errors.Count > 0)
{
await transaction.RollbackAsync(cancellationToken);
return ImportValidationProblem(errors);
}
if (errors.Count > 0)
{
await transaction.RollbackAsync(cancellationToken);
return ImportValidationProblem(errors);
}
await db.SaveChangesAsync(cancellationToken);
await transaction.CommitAsync(cancellationToken);
return Ok(result);
}
catch (DbUpdateException)
{
await transaction.RollbackAsync(cancellationToken);
return Conflict(new ProblemDetails
{
Title = "导入失败",
Detail = "存在重复编码或无效关联,未写入任何数据。",
Status = StatusCodes.Status409Conflict
});
}
await db.SaveChangesAsync(cancellationToken);
await transaction.CommitAsync(cancellationToken);
return Ok(result);
}
catch (DbUpdateException)
{
await transaction.RollbackAsync(cancellationToken);
return Conflict(new ProblemDetails
{
Title = "导入失败",
Detail = "存在重复编码或无效关联,未写入任何数据。",
Status = StatusCodes.Status409Conflict
});
}
},
cancellationToken);
}
private async Task<IReadOnlyList<IReadOnlyList<object?>>> GetExportRowsAsync(
@@ -256,7 +268,9 @@ public sealed class BaseDataExcelController(AppDbContext db) : ControllerBase
{
entity = new Major
{
Code = code, Name = name, CollegeId = college.Id,
Code = code,
Name = name,
CollegeId = college.Id,
DegreeType = degreeType
};
db.Majors.Add(entity);
@@ -316,7 +330,10 @@ public sealed class BaseDataExcelController(AppDbContext db) : ControllerBase
{
entity = new AdministrativeClass
{
Code = code, Name = name, MajorId = major.Id, Grade = grade.Value
Code = code,
Name = name,
MajorId = major.Id,
Grade = grade.Value
};
db.AdministrativeClasses.Add(entity);
existing[code] = entity;
@@ -362,8 +379,11 @@ public sealed class BaseDataExcelController(AppDbContext db) : ControllerBase
{
entity = new AcademicTerm
{
Code = code, Name = name, AcademicYear = academicYear,
Season = season.Value, StartDate = startDate.Value,
Code = code,
Name = name,
AcademicYear = academicYear,
Season = season.Value,
StartDate = startDate.Value,
EndDate = endDate.Value
};
db.AcademicTerms.Add(entity);
@@ -461,7 +481,9 @@ public sealed class BaseDataExcelController(AppDbContext db) : ControllerBase
{
entity = new Classroom
{
Code = code, Name = name, BuildingId = building.Id,
Code = code,
Name = name,
BuildingId = building.Id,
RoomType = roomType
};
db.Classrooms.Add(entity);