成绩册导出修正-总分列后移

This commit is contained in:
2026-08-10 16:41:51 +08:00 Unverified
parent 9eb0916c3f
commit 720ff6ef1d
2 changed files with 25 additions and 8 deletions
@@ -706,7 +706,7 @@ public sealed class GradesController(
var itemNames = sheet.Items.Select(i => i.Name).ToList(); var itemNames = sheet.Items.Select(i => i.Name).ToList();
var headers = new List<string> { "学号", "姓名", "班级", "平时成绩" }; var headers = new List<string> { "学号", "姓名", "班级", "平时成绩" };
headers.AddRange(itemNames); headers.AddRange(itemNames);
headers.AddRange(["总分(自动计算)", "期末成绩", "考试状态", "备注"]); headers.AddRange(["期末成绩", "总分(自动计算)", "考试状态", "备注"]);
var rows = sheet.Records.Select(record => var rows = sheet.Records.Select(record =>
{ {
@@ -723,8 +723,8 @@ public sealed class GradesController(
.FirstOrDefault(s => s.GradeItemId == item.Id)?.Score; .FirstOrDefault(s => s.GradeItemId == item.Id)?.Score;
values.Add(score); values.Add(score);
} }
values.Add(null);
values.Add(record.FinalScore); values.Add(record.FinalScore);
values.Add(null);
values.Add(record.ExamStatus == GradeExamStatus.Normal ? "正常" : values.Add(record.ExamStatus == GradeExamStatus.Normal ? "正常" :
record.ExamStatus == GradeExamStatus.Absent ? "缺考" : record.ExamStatus == GradeExamStatus.Absent ? "缺考" :
record.ExamStatus == GradeExamStatus.Deferred ? "缓考" : record.ExamStatus == GradeExamStatus.Deferred ? "缓考" :
@@ -745,9 +745,9 @@ public sealed class GradesController(
var regularColumn = 4; var regularColumn = 4;
var itemColumns = Enumerable.Range(5, sheet.Items.Count).ToArray(); var itemColumns = Enumerable.Range(5, sheet.Items.Count).ToArray();
var totalColumn = regularColumn + itemColumns.Length + 1; var finalColumn = regularColumn + itemColumns.Length + 1;
var finalColumn = totalColumn + 1; var totalColumn = finalColumn + 1;
var statusColumn = finalColumn + 1; var statusColumn = totalColumn + 1;
var weightedColumns = new List<(int Column, decimal Weight)> { (regularColumn, sheet.RegularWeight) }; var weightedColumns = new List<(int Column, decimal Weight)> { (regularColumn, sheet.RegularWeight) };
weightedColumns.AddRange(sheet.Items.Select((item, index) => weightedColumns.AddRange(sheet.Items.Select((item, index) =>
(itemColumns[index], item.Weight))); (itemColumns[index], item.Weight)));
@@ -819,7 +819,7 @@ public sealed class GradesController(
var itemNames = sheet.Items.Select(i => i.Name).ToList(); var itemNames = sheet.Items.Select(i => i.Name).ToList();
var headers = new List<string> { "学号", "姓名", "班级", "平时成绩" }; var headers = new List<string> { "学号", "姓名", "班级", "平时成绩" };
headers.AddRange(itemNames); headers.AddRange(itemNames);
headers.AddRange(["总分(自动计算)", "期末成绩", "考试状态", "备注"]); headers.AddRange(["期末成绩", "总分(自动计算)", "考试状态", "备注"]);
IReadOnlyList<ExcelRow> rows; IReadOnlyList<ExcelRow> rows;
try try
@@ -1,3 +1,4 @@
using ClosedXML.Excel;
using Jiaowu.Api.Contracts; using Jiaowu.Api.Contracts;
using Jiaowu.Api.Controllers; using Jiaowu.Api.Controllers;
using Jiaowu.Api.Domain.Academic; using Jiaowu.Api.Domain.Academic;
@@ -83,8 +84,12 @@ public sealed class GradesPaginationTests
var sheet = new GradeSheet var sheet = new GradeSheet
{ {
TeachingTaskId = tasks[0].Id, TeachingTaskId = tasks[0].Id,
RegularWeight = 30, RegularWeight = 20,
FinalWeight = 70, FinalWeight = 60,
Items =
[
new GradeItem { Name = "实验", Weight = 20, SortOrder = 0 }
],
Records = students.Select(student => new GradeRecord Records = students.Select(student => new GradeRecord
{ {
StudentId = student.Id StudentId = student.Id
@@ -129,6 +134,18 @@ public sealed class GradesPaginationTests
var secondSheet = secondDetail.Value!.GetType().GetProperty("Sheet")! var secondSheet = secondDetail.Value!.GetType().GetProperty("Sheet")!
.GetValue(secondDetail.Value)!; .GetValue(secondDetail.Value)!;
Assert.Single(ReadItems(secondSheet, "Records")); Assert.Single(ReadItems(secondSheet, "Records"));
var templateResult = Assert.IsType<FileContentResult>(
await controller.DownloadTemplate(sheet.Id, CancellationToken.None));
using var stream = new MemoryStream(templateResult.FileContents);
using var workbook = new XLWorkbook(stream);
var worksheet = workbook.Worksheet("成绩导入");
Assert.Equal(
["学号", "姓名", "班级", "平时成绩", "实验", "期末成绩", "总分(自动计算)", "考试状态", "备注"],
worksheet.Row(1).CellsUsed().Select(cell => cell.GetString()));
Assert.Contains("D2*20/100", worksheet.Cell("G2").FormulaA1);
Assert.Contains("E2*20/100", worksheet.Cell("G2").FormulaA1);
Assert.Contains("F2*60/100", worksheet.Cell("G2").FormulaA1);
} }
private static int ReadInt(object value, string property) => private static int ReadInt(object value, string property) =>