Merge pull request 'staging' (#49) from staging into master

Reviewed-on: #49
This commit is contained in:
hy 2025-12-04 18:37:26 +08:00
commit 36520ab5ec
4 changed files with 50 additions and 40 deletions

View File

@ -65,61 +65,61 @@ namespace Learn.Archives.API.Controllers.Dto
/// 语文
/// </summary>
[ExcelColumnName("语文")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 数学
/// </summary>
[ExcelColumnName("数学")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 英语
/// </summary>
[ExcelColumnName("英语")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 物理
/// </summary>
[ExcelColumnName("物理")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 化学
/// </summary>
[ExcelColumnName("化学")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 生物
/// </summary>
[ExcelColumnName("生物")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 政治
/// </summary>
[ExcelColumnName("政治")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 历史
/// </summary>
[ExcelColumnName("历史")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 地理
/// </summary>
[ExcelColumnName("地理")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 赋分后总分
/// </summary>
[ExcelColumnName("赋分后总分")]
public decimal { get; set; }
public string { get; set; }
/// <summary>
/// 总分资源校排名

View File

@ -116,6 +116,12 @@ namespace Learn.Archives.API.Controllers
}
var grade = GradeHelper.GetStudentGradeBaseByGrade(s.Grade);
var sub = ImportExamInfoSubjectDic(s);
if(sub is null)
{
s.Error = "遇到了无法处理成绩值! 请检查本行的成绩";
errorExcelInfo.Add(s);
return null;
}
var name = s.Class + s.Student;
if (!userDic.ContainsKey(name))
{
@ -130,6 +136,9 @@ namespace Learn.Archives.API.Controllers
errorExcelInfo.Add(s);
return null;
}
var assignScore = decimal.TryParse(s..Trim(), out decimal ass)
? ass
: 0m;
return new ExamUserInfo()
{
ExamId = exam.Id,
@ -143,7 +152,7 @@ namespace Learn.Archives.API.Controllers
SchoolId = classInfo.SchoolId,
Type = exam.Type,
SubjectDic = sub,
AssignScore = s.,
AssignScore = assignScore,
AssignRanking = s.,
};
}).ToList();
@ -172,20 +181,20 @@ namespace Learn.Archives.API.Controllers
{
List<ImportExamInfo> resultList = new List<ImportExamInfo>() { new ImportExamInfo()
{
School="例子学校[导入时候请删除]",
School="例子学校[导入时候请删除本行]",
Class="测试班级",
Grade="高2028",
Student="学生姓名",
=80.5m,
=80.5m,
=80m,
= 80m,
= 80m,
= 80m,
= 80m,
= 80m,
= 80.5m,
=721.5m
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
= "得分 例: 80.5",
="赋分后总分",
} };
return File(resultList.ExportExcel(), "application/ms-excel",
$"导入成绩模板{DateTime.Now.ToString("MMddHHmm")}.xlsx");
@ -287,7 +296,7 @@ namespace Learn.Archives.API.Controllers
[NonAction]
private Dictionary<SubjectEnum, decimal>? ImportExamInfoSubjectDic(ImportExamInfo info)
{
return new Dictionary<SubjectEnum, decimal>()
var c = new Dictionary<SubjectEnum, string>()
{
{ SubjectEnum., info.},
{ SubjectEnum., info.},
@ -299,6 +308,17 @@ namespace Learn.Archives.API.Controllers
{ SubjectEnum., info.},
{ SubjectEnum., info.},
};
var res = new Dictionary<SubjectEnum, decimal>();
foreach (var item in c)
{
if (string.IsNullOrWhiteSpace(item.Value))
res.Add(item.Key, 0m);
else if (decimal.TryParse(item.Value.Trim(), out decimal r))
res.Add(item.Key, r);
else
return null;
}
return res;
}
[NonAction]
private static decimal? SubjectScore(ExamUserInfo info, SubjectEnum? s)
@ -336,8 +356,9 @@ namespace Learn.Archives.API.Controllers
var db = sService.Context;
foreach (var schoolArr in userInfoArr.GroupBy(s => s.SchoolId))
{
var school = await sService.GetFirstAsync(s => s.Id == schoolArr.Key);
if(school is null)
continue;
var classArr = await db.Queryable<Classes>()
.Where(c => c.SchoolId == school.Id &&
c.GradeLevel == exam.GradeLevel &&

View File

@ -261,19 +261,8 @@ namespace Learn.Archives.API.Controllers
[HttpLogEnable]
public async Task<IActionResult> Import(IFormFile? file)
{
var fl = file != null ? file : _httpContextAccessor.HttpContext?.Request.Form.Files[0];
if (fl == null) Oh.ModelError("传入无效的数据");
if (!Path.GetExtension(fl.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
Oh.ModelError("请选择导入文件为.xlsx的后缀名!");
//分析excel
IEnumerable<StudentInfoImportError> dataList;
using var stream = new MemoryStream();
{
await fl.CopyToAsync(stream);
dataList = stream.Query<StudentInfoImportError>()
.Where(s => !string.IsNullOrEmpty(s.School));
}
var dataList = await _httpContextAccessor.ParsingExcelAsync<StudentInfoImportError>();
dataList = dataList.Where(s => !string.IsNullOrEmpty(s.School)).ToArray();
if (dataList == null || dataList.Count() == 0)
Oh.ModelError("导入失败:无有效数据");
var insertInfo = new List<Student>();

View File

@ -152,8 +152,8 @@ namespace Learn.Archives.API.Expand
{
//特殊处理ResultIgnore不进行返回结果包装原样输出
var endpoint = context.GetEndpoint();
// 直接返回原始结果,不封装
if (endpoint?.Metadata.GetMetadata<HttpLogEnable>() == null&& e is null) return;
// 所有数据不允许删除
//if (endpoint?.Metadata.GetMetadata<HttpLogEnable>() == null&& e is null) return;
string request = null;
var logId = Yitter.IdGenerator.YitIdHelper.NextId();
@ -204,7 +204,7 @@ namespace Learn.Archives.API.Expand
Url = context.Request.Path + context.Request.QueryString,
Method = context.Request.Method,
Request = request,
IP = $"{userInfo.Scope} {context.Connection?.RemoteIpAddress?.ToString()}",
IP = $"{userInfo.Scope} {userInfo.Name} {context.Connection?.RemoteIpAddress?.ToString()}",
ResponseCode = result?.Code ?? -1,
Response = (result != null ? JsonSerializer.Serialize(result) : null) ,
Authorization = context.Request.Headers.ContainsKey("Authorization")