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

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 headers = new List<string> { "学号", "姓名", "班级", "平时成绩" };
headers.AddRange(itemNames);
headers.AddRange(["总分(自动计算)", "期末成绩", "考试状态", "备注"]);
headers.AddRange(["期末成绩", "总分(自动计算)", "考试状态", "备注"]);
var rows = sheet.Records.Select(record =>
{
@@ -723,8 +723,8 @@ public sealed class GradesController(
.FirstOrDefault(s => s.GradeItemId == item.Id)?.Score;
values.Add(score);
}
values.Add(null);
values.Add(record.FinalScore);
values.Add(null);
values.Add(record.ExamStatus == GradeExamStatus.Normal ? "正常" :
record.ExamStatus == GradeExamStatus.Absent ? "缺考" :
record.ExamStatus == GradeExamStatus.Deferred ? "缓考" :
@@ -745,9 +745,9 @@ public sealed class GradesController(
var regularColumn = 4;
var itemColumns = Enumerable.Range(5, sheet.Items.Count).ToArray();
var totalColumn = regularColumn + itemColumns.Length + 1;
var finalColumn = totalColumn + 1;
var statusColumn = finalColumn + 1;
var finalColumn = regularColumn + itemColumns.Length + 1;
var totalColumn = finalColumn + 1;
var statusColumn = totalColumn + 1;
var weightedColumns = new List<(int Column, decimal Weight)> { (regularColumn, sheet.RegularWeight) };
weightedColumns.AddRange(sheet.Items.Select((item, index) =>
(itemColumns[index], item.Weight)));
@@ -819,7 +819,7 @@ public sealed class GradesController(
var itemNames = sheet.Items.Select(i => i.Name).ToList();
var headers = new List<string> { "学号", "姓名", "班级", "平时成绩" };
headers.AddRange(itemNames);
headers.AddRange(["总分(自动计算)", "期末成绩", "考试状态", "备注"]);
headers.AddRange(["期末成绩", "总分(自动计算)", "考试状态", "备注"]);
IReadOnlyList<ExcelRow> rows;
try
@@ -1,3 +1,4 @@
using ClosedXML.Excel;
using Jiaowu.Api.Contracts;
using Jiaowu.Api.Controllers;
using Jiaowu.Api.Domain.Academic;
@@ -83,8 +84,12 @@ public sealed class GradesPaginationTests
var sheet = new GradeSheet
{
TeachingTaskId = tasks[0].Id,
RegularWeight = 30,
FinalWeight = 70,
RegularWeight = 20,
FinalWeight = 60,
Items =
[
new GradeItem { Name = "实验", Weight = 20, SortOrder = 0 }
],
Records = students.Select(student => new GradeRecord
{
StudentId = student.Id
@@ -129,6 +134,18 @@ public sealed class GradesPaginationTests
var secondSheet = secondDetail.Value!.GetType().GetProperty("Sheet")!
.GetValue(secondDetail.Value)!;
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) =>