成绩册导出修正-总分列后移
This commit is contained in:
@@ -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) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user