diff --git a/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs b/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs index a18a342..ef40a07 100644 --- a/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs +++ b/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs @@ -65,61 +65,61 @@ namespace Learn.Archives.API.Controllers.Dto /// 语文 /// [ExcelColumnName("语文")] - public decimal 语文 { get; set; } + public string 语文 { get; set; } /// /// 数学 /// [ExcelColumnName("数学")] - public decimal 数学 { get; set; } + public string 数学 { get; set; } /// /// 英语 /// [ExcelColumnName("英语")] - public decimal 英语 { get; set; } + public string 英语 { get; set; } /// /// 物理 /// [ExcelColumnName("物理")] - public decimal 物理 { get; set; } + public string 物理 { get; set; } /// /// 化学 /// [ExcelColumnName("化学")] - public decimal 化学 { get; set; } + public string 化学 { get; set; } /// /// 生物 /// [ExcelColumnName("生物")] - public decimal 生物 { get; set; } + public string 生物 { get; set; } /// /// 政治 /// [ExcelColumnName("政治")] - public decimal 政治 { get; set; } + public string 政治 { get; set; } /// /// 历史 /// [ExcelColumnName("历史")] - public decimal 历史 { get; set; } + public string 历史 { get; set; } /// /// 地理 /// [ExcelColumnName("地理")] - public decimal 地理 { get; set; } + public string 地理 { get; set; } /// /// 赋分后总分 /// [ExcelColumnName("赋分后总分")] - public decimal 赋分后总分 { get; set; } + public string 赋分后总分 { get; set; } /// /// 总分资源校排名 diff --git a/Learn.Archives.API/Controllers/ExamClassInfoController.cs b/Learn.Archives.API/Controllers/ExamClassInfoController.cs index d87d527..e3f022b 100644 --- a/Learn.Archives.API/Controllers/ExamClassInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamClassInfoController.cs @@ -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 resultList = new List() { 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? ImportExamInfoSubjectDic(ImportExamInfo info) { - return new Dictionary() + var c = new Dictionary() { { SubjectEnum.语文, info.语文}, { SubjectEnum.数学, info.数学}, @@ -299,6 +308,17 @@ namespace Learn.Archives.API.Controllers { SubjectEnum.历史, info.历史}, { SubjectEnum.地理, info.地理}, }; + var res = new Dictionary(); + 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() .Where(c => c.SchoolId == school.Id && c.GradeLevel == exam.GradeLevel && diff --git a/Learn.Archives.API/Controllers/StudentController.cs b/Learn.Archives.API/Controllers/StudentController.cs index 0ed1d5a..616ffb8 100644 --- a/Learn.Archives.API/Controllers/StudentController.cs +++ b/Learn.Archives.API/Controllers/StudentController.cs @@ -261,19 +261,8 @@ namespace Learn.Archives.API.Controllers [HttpLogEnable] public async Task 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 dataList; - using var stream = new MemoryStream(); - { - await fl.CopyToAsync(stream); - dataList = stream.Query() - .Where(s => !string.IsNullOrEmpty(s.School)); - } + var dataList = await _httpContextAccessor.ParsingExcelAsync(); + dataList = dataList.Where(s => !string.IsNullOrEmpty(s.School)).ToArray(); if (dataList == null || dataList.Count() == 0) Oh.ModelError("导入失败:无有效数据"); var insertInfo = new List(); diff --git a/Learn.Archives.API/Expand/HttpFilter.cs b/Learn.Archives.API/Expand/HttpFilter.cs index 585faa4..4e0687d 100644 --- a/Learn.Archives.API/Expand/HttpFilter.cs +++ b/Learn.Archives.API/Expand/HttpFilter.cs @@ -152,8 +152,8 @@ namespace Learn.Archives.API.Expand { //特殊处理:ResultIgnore,不进行返回结果包装,原样输出 var endpoint = context.GetEndpoint(); - // 直接返回原始结果,不封装 - if (endpoint?.Metadata.GetMetadata() == null&& e is null) return; + // 所有数据不允许删除 + //if (endpoint?.Metadata.GetMetadata() == 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")