From 3e622926cf65b556d92d5da5cd92ddb2aa0e89dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 10:34:22 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E8=80=83=E8=AF=95=E8=80=83=E8=AF=95=E6=97=B6=E6=88=90=E7=BB=A9?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=BD=95=E5=85=A5=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ExamClassInfoController.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Learn.Archives.API/Controllers/ExamClassInfoController.cs b/Learn.Archives.API/Controllers/ExamClassInfoController.cs index ed75abf..1df6bac 100644 --- a/Learn.Archives.API/Controllers/ExamClassInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamClassInfoController.cs @@ -84,6 +84,11 @@ namespace Learn.Archives.API.Controllers var errorExcelInfo = new List(); var insertUserInfo = new List(); var insertClassInfo = new List(); + var oldUidAr = await examUserInfoService.AsQueryable() + .Where(s => s.ExamId == exam.Id) + .Select(s=>s.UserId) + .ToArrayAsync(); + var oldUidHash = oldUidAr.ToHashSet(); var db = schoolService.Context; SqlSugarExpand.SetDbAop(db); foreach (var schoolArr in dataList.GroupBy(s => s.School)) @@ -135,6 +140,12 @@ namespace Learn.Archives.API.Controllers return null; } var uid = userDic[name]; + if(oldUidHash!=null &&oldUidHash.Contains((long)uid)) + { + s.Error = "此学生已经在考试中已经录入过成绩"; + errorExcelInfo.Add(s); + return null; + } return new ExamUserInfo() { ExamId = exam.Id, From d651e6889bbd2ff95dc2d6b817df62ceee14b8e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 14:23:55 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E8=80=83=E8=AF=95?= =?UTF-8?q?=20=E6=9F=A5=E8=AF=A2=E5=B9=B4=E7=BA=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Dto/ExamClassInfoDto.cs | 16 ++++++++---- .../Controllers/ExamClassInfoController.cs | 19 +++++++------- .../Controllers/ExamUserInfoController.cs | 26 +++++++++++++++++++ .../Controllers/StudentController.cs | 4 ++- .../Model/Dto/SchoolBusinessDto.cs | 4 +++ .../Model/Dto/UserCenterServiceDto.cs | 6 +++++ .../Model/Enum/StudentTypeEnum.cs | 24 +++++++++++++++++ Learn.Archives.Core/Model/Student.cs | 6 +++++ 8 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 Learn.Archives.Core/Model/Enum/StudentTypeEnum.cs diff --git a/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs b/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs index 8745436..35bdf35 100644 --- a/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs +++ b/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs @@ -17,7 +17,7 @@ namespace Learn.Archives.API.Controllers.Dto /// /// 导入的错误结果 /// - public class ImportExamInfoError: ImportExamInfo + public class ImportExamInfoError : ImportExamInfo { /// /// 学校 @@ -25,10 +25,10 @@ namespace Learn.Archives.API.Controllers.Dto [ExcelColumnName("错误信息")] public string? Error { get; set; } } - /// - /// 导入考试成绩 - /// - public class ImportExamInfo + /// + /// 导入考试成绩 + /// + public class ImportExamInfo { /// /// 学校 @@ -117,6 +117,12 @@ namespace Learn.Archives.API.Controllers.Dto /// [ExcelColumnName("赋分后总分")] public decimal 赋分后总分 { get; set; } + + /// + /// 总分资源校排名 + /// + [ExcelColumnName("总分资源校排名")] + public int 资源校排名 { get; set; } } public class RestartEntryDto diff --git a/Learn.Archives.API/Controllers/ExamClassInfoController.cs b/Learn.Archives.API/Controllers/ExamClassInfoController.cs index 1df6bac..33632fe 100644 --- a/Learn.Archives.API/Controllers/ExamClassInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamClassInfoController.cs @@ -160,7 +160,7 @@ namespace Learn.Archives.API.Controllers Type = exam.Type, SubjectDic = sub, AssignScore = s.赋分后总分, - AssignRanking = 0, + AssignRanking = s.资源校排名, }; }).ToList(); insertUserInfo.AddRange(userList); @@ -207,14 +207,15 @@ namespace Learn.Archives.API.Controllers eCInfo.Average = avgTotal / eCInfo.PeopleCount; //计算上线率 eCInfo.OnLineRate = (decimal)eCInfo.OnLineCount / (decimal)eCInfo.PeopleCount; - //处理学生班级排名 - var i = 0; - foreach (var item in classUserArr.OrderByDescending(s => s.AssignScore) - .GroupBy(s => s.AssignScore)) - { - foreach (var u in item) - u.AssignRanking =++ i; - } + //不计算 直接Excel导入 + ////处理学生班级排名 + //var i = 0; + //foreach (var item in classUserArr.OrderByDescending(s => s.AssignScore) + // .GroupBy(s => s.AssignScore)) + //{ + // foreach (var u in item) + // u.AssignRanking =++ i; + //} } }; diff --git a/Learn.Archives.API/Controllers/ExamUserInfoController.cs b/Learn.Archives.API/Controllers/ExamUserInfoController.cs index d113338..8b0754e 100644 --- a/Learn.Archives.API/Controllers/ExamUserInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamUserInfoController.cs @@ -2,11 +2,13 @@ using Learn.Archives.API.Expand; using Learn.Archives.Core.Common; using Learn.Archives.Core.Model; +using Learn.Archives.Core.Model.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using System.Security.Claims; using UserCenter.Model; +using UserCenter.Model.Common; namespace Learn.Archives.API.Controllers { @@ -22,5 +24,29 @@ namespace Learn.Archives.API.Controllers this.baseService = baseService; this.userInfo = userInfo; } + public override Task PageList([FromBody] QueryRequestBase model) + { + var c = model.Conditions.FirstOrDefault(s => s.FieldName == "Grade"); + if (c != null) + { + var gInfo = GradeHelper.GetStudentGradeBaseByGrade(c.FieldValue); + if (gInfo != null) + { + model.Conditions = model.Conditions.Where(s => s != c).ToList(); + model.Conditions.Add(new SqlSugar.ConditionalModel() + { + FieldName = "GradeLevel", + FieldValue = gInfo.GradeLevel, + }); + model.Conditions.Add(new SqlSugar.ConditionalModel() + { + FieldName = "GradeYear", + FieldValue = gInfo.GradeYear.ToString(), + CSharpTypeName = "int" + }); + } + } + return base.PageList(model); + } } } diff --git a/Learn.Archives.API/Controllers/StudentController.cs b/Learn.Archives.API/Controllers/StudentController.cs index 60a9b1f..f09e55c 100644 --- a/Learn.Archives.API/Controllers/StudentController.cs +++ b/Learn.Archives.API/Controllers/StudentController.cs @@ -210,6 +210,7 @@ namespace Learn.Archives.API.Controllers ReliefApplication=s.ReliefApplication?.Contains("已申请")??false, ReliefSubTime = s.ReliefSubTime, ReliefType =s.ReliefType, + StudentType =s.StudentType.ToEnum(), }); userCenterImp.Add(new UserExcelExportData() { @@ -269,8 +270,9 @@ namespace Learn.Archives.API.Controllers ClassType = "必填:可选值\r\n[云校班 海豚智学班 蓝鲸智库班 中职班 其他 雅思班 点阵笔班级 移动校园班级 智学班 ...]", Status = "选填 可选值\r\n[就读,退出]", AmountRelief ="选填: 为0则视为 '未申请减免'", - ReliefType ="选填: 1.建卡贫困户\r\n2.低保户\r\n3.教师子女 \r\n4.孤儿\r\n5.艺体生\r\n6.残疾学生\r\n7.领导特殊承诺减免\r\n8.领导同意的特殊贫困减免", + ReliefType ="选填: 建卡贫困户\r\n低保户\r\n教师子女 \r\n孤儿\r\n艺体生\r\n残疾学生\r\n领导特殊承诺减免\r\n领导同意的特殊贫困减免", ReliefApplication ="选填: [已申请, 未申请]", + StudentType = "选填: 可选值:\r\n复读生\r\n艺术生\r\n春招生\r\n领导承诺批准全免\r\n资源班\r\n国际班\r\n合同制收费学校\r\n渠道商家属\r\n新开班但领导承诺第一学期不收费", Phone="选填", Remark="选填", } }; diff --git a/Learn.Archives.Core/Model/Dto/SchoolBusinessDto.cs b/Learn.Archives.Core/Model/Dto/SchoolBusinessDto.cs index aecc8d9..374f7fc 100644 --- a/Learn.Archives.Core/Model/Dto/SchoolBusinessDto.cs +++ b/Learn.Archives.Core/Model/Dto/SchoolBusinessDto.cs @@ -50,6 +50,10 @@ namespace Learn.Archives.Core.Model.Dto /// 执行时间 /// public DateTime? ExecutionTime { get; set; } + /// + /// 操作人 [后台自动赋值提交人名称] + /// + public string? Operator { get; set; } public string? ExecutionTimeStr => ExecutionTime?.ToString("yyyy-MM-dd"); diff --git a/Learn.Archives.Core/Model/Dto/UserCenterServiceDto.cs b/Learn.Archives.Core/Model/Dto/UserCenterServiceDto.cs index 9f85394..8cbf78c 100644 --- a/Learn.Archives.Core/Model/Dto/UserCenterServiceDto.cs +++ b/Learn.Archives.Core/Model/Dto/UserCenterServiceDto.cs @@ -162,6 +162,12 @@ namespace Learn.Archives.Core.Model.Dto + + /// + /// 学生类型 + /// + [ExcelColumn(Name = "学生类型", Width = 20)] + public string StudentType { get; set; } /// /// 学生状态[就读/退出] /// diff --git a/Learn.Archives.Core/Model/Enum/StudentTypeEnum.cs b/Learn.Archives.Core/Model/Enum/StudentTypeEnum.cs new file mode 100644 index 0000000..5796f7b --- /dev/null +++ b/Learn.Archives.Core/Model/Enum/StudentTypeEnum.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Learn.Archives.Core.Model.Enum +{ + /// + /// 学生类型 + /// + public enum StudentTypeEnum + { + 复读生 = 1, + 艺术生 = 10, + 春招生 = 20, + 领导承诺批准全免 = 30, + 资源班 = 40, + 国际班 = 50, + 合同制收费学校 = 60, + 渠道商家属 = 70, + 新开班但领导承诺第一学期不收费 = 80, + } +} diff --git a/Learn.Archives.Core/Model/Student.cs b/Learn.Archives.Core/Model/Student.cs index 81c5618..08ba783 100644 --- a/Learn.Archives.Core/Model/Student.cs +++ b/Learn.Archives.Core/Model/Student.cs @@ -36,6 +36,12 @@ namespace Learn.Archives.Core.Model /// [SugarColumn(IsNullable = true, Length = 20)] public string? ReliefType { get; set; } + + /// + /// 学生类型 + /// + [SugarColumn(IsNullable = true)] + public StudentTypeEnum? StudentType { get; set; } /// /// 减免申请时间 /// From 5f6b60c891207f8777f211e2ff07af1bd60b4276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 14:26:12 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=A0=A1=E6=8E=92=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs b/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs index 35bdf35..a6b065e 100644 --- a/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs +++ b/Learn.Archives.API/Controllers/Dto/ExamClassInfoDto.cs @@ -121,7 +121,7 @@ namespace Learn.Archives.API.Controllers.Dto /// /// 总分资源校排名 /// - [ExcelColumnName("总分资源校排名")] + [ExcelColumn(Name="赋分总分资源校排名",Width =20)] public int 资源校排名 { get; set; } } From 204c8acf026339f092e4cae0a67e8e89cabbe480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 15:00:54 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E8=80=81=E5=B8=88=E9=94=99=E8=AF=AF=E6=97=B6=20=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=9A=84=E6=A8=A1=E6=9D=BF=E6=98=AF=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Learn.Archives.API/Controllers/StudentController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Learn.Archives.API/Controllers/StudentController.cs b/Learn.Archives.API/Controllers/StudentController.cs index f09e55c..27e62a9 100644 --- a/Learn.Archives.API/Controllers/StudentController.cs +++ b/Learn.Archives.API/Controllers/StudentController.cs @@ -161,7 +161,7 @@ namespace Learn.Archives.API.Controllers var importRes = await _userCenterService.CallAPI_ImportJsonData(_httpContextAccessor.HttpContext, userCenterImp); //处理数据 - var errorExcelInfo = importRes.ErrorExcelExport.Select(s => s.Adapt()); + var errorExcelInfo = importRes.ErrorExcelExport.Select(s => s.Adapt()); //如果有错误数据则返回excel if (errorExcelInfo.Count() != 0) return File(errorExcelInfo.ExportExcel(), "application/ms-excel", $"导入错误的老师{DateTime.Now.ToString("MMddHHmm")}.xlsx"); From fa09396c296ac3fd0bab8f38df8da7da15e551e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 15:13:01 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=AD=A3=E5=BC=8F?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Learn.Archives.API/appsettings.Production.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Learn.Archives.API/appsettings.Production.json b/Learn.Archives.API/appsettings.Production.json index cd2dc43..2deaa53 100644 --- a/Learn.Archives.API/appsettings.Production.json +++ b/Learn.Archives.API/appsettings.Production.json @@ -6,11 +6,11 @@ } }, "Redis": { - "ConnectionString": "redis-external.23544.com:16379,password=poiuyt)(*&^%,defaultDatabase=3" + "ConnectionString": "r-2vc07uq6kgm580hxeu.redis.cn-chengdu.rds.aliyuncs.com:6379,password=r-2vc07uq6kgm580hxeu:JyFQa8MeZ4ndxVbdhUc6,defaultDatabase=3" }, "DB": { - //"ConnectionString": "AllowLoadLocalInfile=true;Server=10.255.255.3;Port=3306;Database=learn.videoanalysis;User ID=marking;Password=qwe123!@#;CharSet=utf8mb4;pooling=true;SslMode=None", - "ConnectionString": "AllowLoadLocalInfile=true;Server=rm-2vc20nd3d11g0oh6g2o.rwlb.cn-chengdu.rds.aliyuncs.com;User ID=marking;Password=poiuytPOIUYT098765)(*&^%;Port=3306;Database=learn.videoanalysis;CharSet=utf8mb4;pooling=true;SslMode=None", + "ConnectionString": "AllowLoadLocalInfile=true;Server=rm-2vc20nd3d11g0oh6g2o.rwlb.cn-chengdu.rds.aliyuncs.com;User ID=marking;Password=poiuytPOIUYT098765)(*&^%;Port=3306;Database=learn.archives;CharSet=utf8mb4;pooling=true;SslMode=None", + "SqlType": "MySql", "UpdateTable": false }, From b28931ce0fcfbb964aa1207169e67ceeffce220d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 17:22:55 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E8=80=83=E8=AF=95?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AD=A6=E7=94=9F=E6=88=90=E7=BB=A9=E6=8E=92?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ExamClassInfoController.cs | 3 +- .../Controllers/StudentController.cs | 30 +++++++++++++++++-- .../Common/Expand/SqlSugarExpand.cs | 21 +++++-------- Learn.Archives.Core/Common/Repository.cs | 10 ++++--- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/Learn.Archives.API/Controllers/ExamClassInfoController.cs b/Learn.Archives.API/Controllers/ExamClassInfoController.cs index 33632fe..3758d59 100644 --- a/Learn.Archives.API/Controllers/ExamClassInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamClassInfoController.cs @@ -79,7 +79,6 @@ namespace Learn.Archives.API.Controllers if (dataList == null || dataList.Count() == 0) Oh.ModelError("导入失败:无有效数据"); - //todo //处理数据 var errorExcelInfo = new List(); var insertUserInfo = new List(); @@ -97,6 +96,8 @@ namespace Learn.Archives.API.Controllers if (school == null) Oh.ModelError($"导入失败:学校 [{schoolArr.Key}] 未找到!"); var gradeInfo = GradeHelper.GetStudentGradeBaseByGrade(schoolArr.First().Grade); if (gradeInfo == null) Oh.ModelError($"导入失败:学校 [{schoolArr.Key}] 年级[{schoolArr.First().Grade}]不符合规范!"); + if(exam.Level != GradeHelper.GetGrade(gradeInfo.GradeLevel,gradeInfo.GradeYear).ToEnum()) + Oh.ModelError($"导入失败:导入年级[{schoolArr.First().Grade}] 与 考试年级不匹配!"); //学校下的所属班级 var classArr = await db.Queryable().Where(c => c.SchoolId == school.Id && c.GradeLevel == gradeInfo.GradeLevel && diff --git a/Learn.Archives.API/Controllers/StudentController.cs b/Learn.Archives.API/Controllers/StudentController.cs index 27e62a9..1435f77 100644 --- a/Learn.Archives.API/Controllers/StudentController.cs +++ b/Learn.Archives.API/Controllers/StudentController.cs @@ -1,4 +1,5 @@ using Aliyun.OSS; +using Dm; using Learn.Archives.API.Controllers.Dto; using Learn.Archives.API.Expand; using Learn.Archives.Core.Common; @@ -138,9 +139,19 @@ namespace Learn.Archives.API.Controllers if (dataList == null || dataList.Count() == 0) Oh.ModelError("导入失败:无有效数据"); var insertInfo = new List(); + var impError = new List(); var userCenterImp = new List(); foreach (var s in dataList) { + + var ginfo = GradeHelper.GetStudentGradeBaseByGrade(s.Grade); + var gStr = GradeHelper.GetGrade(ginfo.GradeLevel, ginfo.GradeYear); + if (gStr.ToEnum() == null) //无效的传入年级 + { + s.ErrorMsg = "无效的年级 例如[初一/初2028] [年级范围应当是当前有效的就读年级]"; + impError.Add(s); + continue; + } userCenterImp.Add(new UserExcelExportData() { UserType = s.UserType, @@ -148,7 +159,7 @@ namespace Learn.Archives.API.Controllers Subject = s.Subject, ExamNo = s.ExamNo, School = s.School, - Grade = s.Grade, + Grade = gStr, Class = s.Class, ClassType = s.ClassType, Phone = s.Phone, @@ -157,6 +168,9 @@ namespace Learn.Archives.API.Controllers }); } + //如果有错误数据则返回excel + if (impError.Count() != 0) + return File(impError.ExportExcel(), "application/ms-excel", $"导入错误的老师{DateTime.Now.ToString("MMddHHmm")}.xlsx"); //调用 用户中心 导入接口 var importRes = await _userCenterService.CallAPI_ImportJsonData(_httpContextAccessor.HttpContext, userCenterImp); @@ -196,9 +210,18 @@ namespace Learn.Archives.API.Controllers if (dataList == null || dataList.Count() == 0) Oh.ModelError("导入失败:无有效数据"); var insertInfo = new List(); + var impError = new List(); var userCenterImp = new List(); foreach (var s in dataList) { + var ginfo = GradeHelper.GetStudentGradeBaseByGrade(s.Grade); + var gStr = GradeHelper.GetGrade(ginfo.GradeLevel, ginfo.GradeYear); + if (gStr.ToEnum() == null) //无效的传入年级 + { + s.ErrorMsg = "无效的年级 例如[初一/初2028] [年级范围应当是当前有效的就读年级]"; + impError.Add(s); + continue; + } insertInfo.Add(new Student() { AmountRelief = decimal.TryParse(s.AmountRelief,out decimal v)?v:0, @@ -217,7 +240,7 @@ namespace Learn.Archives.API.Controllers UserType = "学生", Account = s.Id.ToString(), School = s.School, - Grade = s.Grade, + Grade = gStr, Class = s.Class, ClassType = s.ClassType??ClassTypeEnum.云校班.ToString(), ExamNo = s.Id.ToString(), @@ -227,6 +250,9 @@ namespace Learn.Archives.API.Controllers }); } + //如果有错误数据则返回excel + if (impError.Count() != 0) + return File(impError.ExportExcel(), "application/ms-excel", $"导入错误学生{DateTime.Now.ToString("MMddHHmm")}.xlsx"); //调用 用户中心 导入接口 var importRes = await _userCenterService.CallAPI_ImportJsonData(_httpContextAccessor.HttpContext, userCenterImp); diff --git a/Learn.Archives.Core/Common/Expand/SqlSugarExpand.cs b/Learn.Archives.Core/Common/Expand/SqlSugarExpand.cs index 85b6696..a6eaa96 100644 --- a/Learn.Archives.Core/Common/Expand/SqlSugarExpand.cs +++ b/Learn.Archives.Core/Common/Expand/SqlSugarExpand.cs @@ -64,13 +64,13 @@ namespace Learn.Archives.Core.Common.Expand /// 配置 学校数据 sql过滤 默认true public static void SetDbAop(ISqlSugarClient db) { - if (db.Ado.CommandTimeOut == 61) - { - return; - } + //if (db.Ado.CommandTimeOut == 61) + //{ + // return; + //} var config = db.CurrentConnectionConfig; - // 设置超时时间 - db.Ado.CommandTimeOut = 61; + //设置超时时间 + //db.Ado.CommandTimeOut = 61; #if DEBUG // 打印SQL语句 db.Aop.OnLogExecuting = (sql, pars) => @@ -105,11 +105,6 @@ namespace Learn.Archives.Core.Common.Expand } }; - // 超管时排除各种过滤器 - //if (App.User?.FindFirst(ClaimEnum.Role)?.Value == "1") - //return; - // 配置用户机构(数据范围)过滤器 - //SetOrgEntityFilter(db); } @@ -161,13 +156,13 @@ namespace Learn.Archives.Core.Common.Expand if (!AppCommon.Config.DB.UpdateTable) { Console.WriteLine($"【1】初始化主库表 跳过...."); - //ShowSQL = true; + ShowSQL = true; return; } Console.WriteLine($"【1】初始化主库表 执行中...."); var entityTypes = AppCommon.DbMatserType; Console.WriteLine($"【1】数量{entityTypes.Count()} ...."); - if (!entityTypes.Any()) return; + if (!entityTypes.Any()) { ShowSQL = true; return; }; var i = 0; var totalCount = entityTypes.Count().ToString().Length; foreach (var t in entityTypes) diff --git a/Learn.Archives.Core/Common/Repository.cs b/Learn.Archives.Core/Common/Repository.cs index 586c91c..347a068 100644 --- a/Learn.Archives.Core/Common/Repository.cs +++ b/Learn.Archives.Core/Common/Repository.cs @@ -20,10 +20,12 @@ namespace Learn.Archives.Core.Common public void SwitchConnection() { var t = typeof(T); - if (AppCommon.DbMatserType.Contains(t)) - base.Context = DbScoped.SugarScope; - else if (AppCommon.UserCenterType.Contains(t)) - base.Context = DbScoped.SugarScope.GetConnectionScope(1001); + ISqlSugarClient d; + if (AppCommon.UserCenterType.Contains(t)) + d = DbScoped.SugarScope.GetConnectionScope(1001); + else + d = DbScoped.SugarScope; + base.Context = d; SqlSugarExpand.SetDbAop(base.Context); } } From a234d947c19f80046f1b14650ca5a069b84ff5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 19:10:33 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E8=80=83=E8=AF=95?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ExamClassInfoController.cs | 84 ++++++++++++------- .../Controllers/ExamController.cs | 46 +++++++++- .../Controllers/SchoolBusinessController.cs | 18 +++- Learn.Archives.Core/Model/Exam.cs | 24 +++++- Learn.Archives.Core/Model/ExamClassInfo.cs | 10 +-- 5 files changed, 136 insertions(+), 46 deletions(-) diff --git a/Learn.Archives.API/Controllers/ExamClassInfoController.cs b/Learn.Archives.API/Controllers/ExamClassInfoController.cs index 3758d59..4d1136d 100644 --- a/Learn.Archives.API/Controllers/ExamClassInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamClassInfoController.cs @@ -7,11 +7,13 @@ using Learn.Archives.Core.Model.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; +using System.Buffers.Text; using System.Diagnostics; using System.Security.Claims; using UserCenter.Model; using UserCenter.Model.Common; using UserCenter.Model.Enum; +using static System.Net.Mime.MediaTypeNames; namespace Learn.Archives.API.Controllers { @@ -89,14 +91,13 @@ namespace Learn.Archives.API.Controllers .ToArrayAsync(); var oldUidHash = oldUidAr.ToHashSet(); var db = schoolService.Context; - SqlSugarExpand.SetDbAop(db); foreach (var schoolArr in dataList.GroupBy(s => s.School)) { var school = await schoolService.GetFirstAsync(s => s.Name == schoolArr.Key); if (school == null) Oh.ModelError($"导入失败:学校 [{schoolArr.Key}] 未找到!"); var gradeInfo = GradeHelper.GetStudentGradeBaseByGrade(schoolArr.First().Grade); if (gradeInfo == null) Oh.ModelError($"导入失败:学校 [{schoolArr.Key}] 年级[{schoolArr.First().Grade}]不符合规范!"); - if(exam.Level != GradeHelper.GetGrade(gradeInfo.GradeLevel,gradeInfo.GradeYear).ToEnum()) + if(exam.GradeLevel != gradeInfo.GradeLevel || exam.GradeYear != gradeInfo.GradeYear) Oh.ModelError($"导入失败:导入年级[{schoolArr.First().Grade}] 与 考试年级不匹配!"); //学校下的所属班级 var classArr = await db.Queryable().Where(c => c.SchoolId == school.Id && @@ -165,9 +166,46 @@ namespace Learn.Archives.API.Controllers }; }).ToList(); insertUserInfo.AddRange(userList); - insertUserInfo = insertUserInfo.Where(s => s != null).ToList(); - foreach (var classUserArr in insertUserInfo.GroupBy(s => s.ClassId)) + }; + + if (errorExcelInfo.Count != 0) + return File(errorExcelInfo.ExportExcel(), "application/ms-excel", $"错误考试信息{DateTime.Now.ToString("MMddHHmm")}.xlsx"); + + //写入数据库 + await examUserInfoService.AsInsertable(insertUserInfo).ExecuteCommandAsync(); + + await CalculatingTestResults(exam,examUserInfoService,schoolService); + + return Ok(); + } + + /// + /// 计算考试成绩 + /// + /// + /// + /// + /// + [NonAction] + public static async Task CalculatingTestResults(Exam exam, Repository eUService, Repository sService) + { + var userInfoArr = await eUService.AsQueryable() + .Where(s => s.ExamId == exam.Id) + .ToArrayAsync(); + + var insertTotalClassInfo = new List(); + var db = sService.Context; + foreach (var schoolArr in userInfoArr.GroupBy(s => s.SchoolId)) + { + + var insertClassInfo = new List(); + var school = await sService.GetFirstAsync(s => s.Id == schoolArr.Key); + var classArr = await db.Queryable().Where(c => c.SchoolId == school.Id && + c.GradeLevel == exam.GradeLevel && + c.GraduationYear == exam.GradeYear && !c.DeleteState).ToArrayAsync(); + + foreach (var classUserArr in userInfoArr.GroupBy(s => s.ClassId)) { var classInfo = classArr.First(s => s.Id == classUserArr.Key); var eCInfo = new ExamClassInfo() @@ -182,9 +220,7 @@ namespace Learn.Archives.API.Controllers GradeYear = classInfo.GraduationYear, PeopleCount = classUserArr.Count(), MinScore = int.MaxValue, - EntryPersonId = userInfo.Id, BaseSchoolScore = exam.BaseSchoolScore, - EntryPerson = userInfo.Name, TestPaperType = exam.TestPaperType, Type = exam.Type, Average1 = exam.BaseSchoolScore, @@ -195,12 +231,12 @@ namespace Learn.Archives.API.Controllers { var v = eUserInfo.AssignScore; //上线人数 - if (v>=exam.ScoreLine) - eCInfo.OnLineCount ++; + if (v >= exam.ScoreLine) + eCInfo.OnLineCount++; //最大小分 if (v < eCInfo.MinScore) eCInfo.MinScore = v; - else if(v > eCInfo.MaxScore) + else if (v > eCInfo.MaxScore) eCInfo.MaxScore = v; avgTotal += v;//追加得分 } @@ -208,23 +244,14 @@ namespace Learn.Archives.API.Controllers eCInfo.Average = avgTotal / eCInfo.PeopleCount; //计算上线率 eCInfo.OnLineRate = (decimal)eCInfo.OnLineCount / (decimal)eCInfo.PeopleCount; - //不计算 直接Excel导入 - ////处理学生班级排名 - //var i = 0; - //foreach (var item in classUserArr.OrderByDescending(s => s.AssignScore) - // .GroupBy(s => s.AssignScore)) - //{ - // foreach (var u in item) - // u.AssignRanking =++ i; - //} } - }; - + insertTotalClassInfo.AddRange(insertClassInfo); + } { //计算年级上线率排名 var i = 0; - foreach (var item in insertClassInfo.OrderByDescending(s => s.OnLineRate) + foreach (var item in insertTotalClassInfo.OrderByDescending(s => s.OnLineRate) .GroupBy(s => s.OnLineRate)) { foreach (var u in item) @@ -233,33 +260,28 @@ namespace Learn.Archives.API.Controllers //计算年级平均分排名 i = 0; - foreach (var item in insertClassInfo.OrderByDescending(s => s.Average) + foreach (var item in insertTotalClassInfo.OrderByDescending(s => s.Average) .GroupBy(s => s.Average)) { foreach (var u in item) u.AverageRank = ++i; } } - if (errorExcelInfo.Count != 0) - return File(errorExcelInfo.ExportExcel(), "application/ms-excel", $"错误考试信息{DateTime.Now.ToString("MMddHHmm")}.xlsx"); - //写入数据库 - var baseDB = baseService.Context; + var baseDB = eUService.Context; baseDB.Ado.BeginTran(); try { - await baseDB.Insertable(insertUserInfo).ExecuteCommandAsync(); - await baseDB.Insertable(insertClassInfo).ExecuteCommandAsync(); + await baseDB.Deleteable().Where(s=>s.ExamId==exam.Id).ExecuteCommandAsync(); + await baseDB.Insertable(insertTotalClassInfo).ExecuteCommandAsync(); baseDB.Ado.CommitTran(); - } catch (Exception ex) { - baseDB.Ado.RollbackTran(); + baseDB.Ado.RollbackTran(); Oh.ModelError($"导入失败:写入数据时候出现了异常 [{ex.Message}] !"); } - return Ok(); } /// diff --git a/Learn.Archives.API/Controllers/ExamController.cs b/Learn.Archives.API/Controllers/ExamController.cs index fa86d17..1b8d7d8 100644 --- a/Learn.Archives.API/Controllers/ExamController.cs +++ b/Learn.Archives.API/Controllers/ExamController.cs @@ -3,11 +3,13 @@ using Learn.Archives.API.Controllers.Dto; using Learn.Archives.API.Expand; using Learn.Archives.Core.Common; using Learn.Archives.Core.Model; +using Learn.Archives.Core.Model.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using System.Security.Claims; using UserCenter.Model; +using UserCenter.Model.Common; namespace Learn.Archives.API.Controllers { @@ -17,17 +19,59 @@ namespace Learn.Archives.API.Controllers public class ExamController : BackController { readonly Repository baseService; + readonly Repository schoolService; readonly Repository examClassInfoService; readonly Repository examUserInfoService; readonly LiveUserInfo userInfo; - public ExamController(Repository baseService, LiveUserInfo userInfo, Repository examClassInfoService, Repository examUserInfoService) : base(baseService) + public ExamController(Repository baseService, LiveUserInfo userInfo, + Repository examClassInfoService, Repository examUserInfoService, + Repository schoolService) : base(baseService) { this.baseService = baseService; this.userInfo = userInfo; this.examClassInfoService = examClassInfoService; this.examUserInfoService = examUserInfoService; + this.schoolService = schoolService; } + public override Task PageList([FromBody] QueryRequestBase model) + { + var c = model.Conditions.FirstOrDefault(s => s.FieldName == "Grade"); + if (c != null) + { + var gInfo = GradeHelper.GetStudentGradeBaseByGrade(c.FieldValue); + if (gInfo != null) + { + model.Conditions = model.Conditions.Where(s => s != c).ToList(); + model.Conditions.Add(new SqlSugar.ConditionalModel() + { + FieldName = "GradeLevel", + FieldValue = gInfo.GradeLevel, + }); + model.Conditions.Add(new SqlSugar.ConditionalModel() + { + FieldName = "GradeYear", + FieldValue = gInfo.GradeYear.ToString(), + CSharpTypeName = "int" + }); + } + } + return base.PageList(model); + } + public override async Task Edit([FromBody] Exam model) + { + + if (!string.IsNullOrEmpty(model._grade)) + { + var g = GradeHelper.GetStudentGradeBaseByGrade(model._grade); + model.GradeLevel = g.GradeLevel; + model.GradeYear = g.GradeYear; + } + var res =await base.Edit(model); + if (res) + await ExamClassInfoController.CalculatingTestResults(model, examUserInfoService, schoolService); + return res ; + } public override async Task Del([FromBody] params long[] ids) { if (ids.Length > 1) diff --git a/Learn.Archives.API/Controllers/SchoolBusinessController.cs b/Learn.Archives.API/Controllers/SchoolBusinessController.cs index d043afb..dc4ea6c 100644 --- a/Learn.Archives.API/Controllers/SchoolBusinessController.cs +++ b/Learn.Archives.API/Controllers/SchoolBusinessController.cs @@ -165,6 +165,12 @@ namespace Learn.Archives.API.Controllers var adminArr = await adminService.AsQueryable() .Where(s => adminNameArr.Contains(s.Name)) .Select(s => s.Name).ToArrayAsync(); + if (adminArr == null || adminArr.Length!= adminNameArr.Length) + { + imp.Error = $"赴校人员未能完全识别成功"; + errorExcelInfo.Add(imp); + continue; + } var qStr = new Dictionary() { {FeedbackQuestionTypeEnum.学校领导班子,(imp.Q学校领导班子,imp.P学校领导班子) }, @@ -255,8 +261,6 @@ namespace Learn.Archives.API.Controllers }; business.SolutionEnd = business.SolutionRecord.EndRecordTime != null; insertInfo.Add(business); - - }; if (errorExcelInfo.Count != 0) return File(errorExcelInfo.ExportExcel(), "application/ms-excel" @@ -292,7 +296,15 @@ namespace Learn.Archives.API.Controllers //todo完善数据转换 - var resultList = new List() { new SchoolBusinessImport() { } }; + var resultList = new List() { new SchoolBusinessImport() + { + School="必填 与系统对应", + Grade="必填 : 初一/高一/初2025", + IsDiscussion="是/否", + IsClassMeeting="是/否", + Remark="备注", + Users="必填: 例 用户1,用户2 与系统中用户名称对应" + } }; return File(resultList.ExportExcel(), "application/ms-excel", "导入赴校信息模板.xlsx"); } diff --git a/Learn.Archives.Core/Model/Exam.cs b/Learn.Archives.Core/Model/Exam.cs index 8aa2725..58f9fbb 100644 --- a/Learn.Archives.Core/Model/Exam.cs +++ b/Learn.Archives.Core/Model/Exam.cs @@ -5,6 +5,7 @@ using System.ComponentModel.DataAnnotations; using System.Net; using System.Text.Json; using UserCenter.Model; +using UserCenter.Model.Common; using UserCenter.Model.Enum; using UserCenter.Model.Interface; @@ -24,8 +25,27 @@ namespace Learn.Archives.Core.Model /// /// 年级 /// - [SugarColumn(Length = 12)] - public GradeEnum Level { get; set; } + [SugarColumn(Length = 2)] + public string? GradeLevel { get; set; } + /// + /// 毕业届 + /// + [SugarColumn(Length = 2)] + public int GradeYear { get; set; } + + /// + /// dto 处理的grade + /// + public string? _grade; + /// + /// 年级 + /// + [SugarColumn(IsIgnore = true)] + public string Grade + { + get => GradeHelper.GetGrade(GradeLevel, GradeYear); + set => _grade = value; + } /// /// 试卷类型 /// diff --git a/Learn.Archives.Core/Model/ExamClassInfo.cs b/Learn.Archives.Core/Model/ExamClassInfo.cs index 1f2a9bf..4223d4c 100644 --- a/Learn.Archives.Core/Model/ExamClassInfo.cs +++ b/Learn.Archives.Core/Model/ExamClassInfo.cs @@ -61,6 +61,7 @@ namespace Learn.Archives.Core.Model [SugarColumn(IsIgnore = true)] public string Grade => GradeHelper.GetGrade(GradeLevel, GradeYear); + /// /// 年级 /// @@ -119,15 +120,6 @@ namespace Learn.Archives.Core.Model public decimal BaseSchoolScore { get; set; } - /// - /// 录入人Id - /// - public long EntryPersonId { get; set; } - /// - /// 录入人名称 - /// - public string EntryPerson { get; set; } = string.Empty; - /// /// 创建时间 /// From 8695b0951341f213400b9800d775ecc12722b386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 19:16:55 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E8=A7=A3=E5=86=B3=20?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dockerfiles/Dockerfile-production | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Learn.Archives.API/Dockerfiles/Dockerfile-production diff --git a/Learn.Archives.API/Dockerfiles/Dockerfile-production b/Learn.Archives.API/Dockerfiles/Dockerfile-production new file mode 100644 index 0000000..d7599a1 --- /dev/null +++ b/Learn.Archives.API/Dockerfiles/Dockerfile-production @@ -0,0 +1,15 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS publish +WORKDIR /src +COPY . . +WORKDIR "/src/Learn.Archives.API" +ENV NUGET_XMLDOC_MODE none +RUN dotnet nuget add source --name marking https://gitea.23544.com/api/packages/marking/nuget/index.json +RUN dotnet publish "Learn.Archives.API.csproj" -c Release -o /app + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final +WORKDIR /app +COPY --from=publish /app . +ENV ASPNETCORE_ENVIRONMENT=Production +ENV TZ=Asia/Shanghai +EXPOSE 8080 +ENTRYPOINT ["dotnet", "Learn.Archives.API.dll"] \ No newline at end of file From d35eda9895168d5f5d76739728da20d0ebebc875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 19:38:29 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BC=96=E8=BE=91=E6=97=B6=E8=87=AA=E5=B8=A6?= =?UTF-8?q?=E7=9A=84=E5=87=BA=E5=85=A5=E7=8F=AD=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Learn.Archives.API/Controllers/StudentController.cs | 4 ++-- Learn.Archives.Core/Model/Student.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Learn.Archives.API/Controllers/StudentController.cs b/Learn.Archives.API/Controllers/StudentController.cs index 1435f77..c3f6dad 100644 --- a/Learn.Archives.API/Controllers/StudentController.cs +++ b/Learn.Archives.API/Controllers/StudentController.cs @@ -98,8 +98,8 @@ namespace Learn.Archives.API.Controllers if (!exDataDic.ContainsKey(item.Id)) continue; var ex = exDataDic[item.Id].First(); item.Status = ex.Status; - item.ExitTime = ex.ExitTime?.ToString("yyyy-MM-dd")??string.Empty; - item.JoinTime = ex.JoinTime?.ToString("yyyy-MM-dd") ?? string.Empty; + item.ExitTime = ex.ExitTime==null? string.Empty : ex.ExitTime?.ToString("yyyy-MM-dd"); + item.JoinTime = ex.JoinTime == null ? string.Empty : ex.JoinTime?.ToString("yyyy-MM-dd"); item.AmountRelief = ex.AmountRelief; item.ReliefApplication = ex.ReliefApplication; diff --git a/Learn.Archives.Core/Model/Student.cs b/Learn.Archives.Core/Model/Student.cs index 08ba783..67900ac 100644 --- a/Learn.Archives.Core/Model/Student.cs +++ b/Learn.Archives.Core/Model/Student.cs @@ -64,13 +64,13 @@ namespace Learn.Archives.Core.Model /// 退出时间 /// [SugarColumn(IsNullable = true)] - public DateTime? ExitTime { get; set; } = DateTime.Now; + public DateTime? ExitTime { get; set; } /// /// 退出时间 /// [SugarColumn(IsNullable = true)] - public DateTime? JoinTime { get; set; } = DateTime.Now; + public DateTime? JoinTime { get; set; } /// /// 创建时间 From 070057ba96df4fd64d9d6c273146f868653fd1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 19:58:54 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=9C=80=E9=AB=98?= =?UTF-8?q?=E5=88=86=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Learn.Archives.API/Controllers/ExamClassInfoController.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Learn.Archives.API/Controllers/ExamClassInfoController.cs b/Learn.Archives.API/Controllers/ExamClassInfoController.cs index 4d1136d..b74a5d7 100644 --- a/Learn.Archives.API/Controllers/ExamClassInfoController.cs +++ b/Learn.Archives.API/Controllers/ExamClassInfoController.cs @@ -220,6 +220,7 @@ namespace Learn.Archives.API.Controllers GradeYear = classInfo.GraduationYear, PeopleCount = classUserArr.Count(), MinScore = int.MaxValue, + MaxScore = -99, BaseSchoolScore = exam.BaseSchoolScore, TestPaperType = exam.TestPaperType, Type = exam.Type, @@ -236,7 +237,7 @@ namespace Learn.Archives.API.Controllers //最大小分 if (v < eCInfo.MinScore) eCInfo.MinScore = v; - else if (v > eCInfo.MaxScore) + if (v > eCInfo.MaxScore) eCInfo.MaxScore = v; avgTotal += v;//追加得分 } From bc260b44ed72c4d8ff3fc99210d36c89291f996c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 26 Aug 2025 20:08:57 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E8=B5=B4=E6=A0=A1?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SchoolBusinessController.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Learn.Archives.API/Controllers/SchoolBusinessController.cs b/Learn.Archives.API/Controllers/SchoolBusinessController.cs index dc4ea6c..d0a8791 100644 --- a/Learn.Archives.API/Controllers/SchoolBusinessController.cs +++ b/Learn.Archives.API/Controllers/SchoolBusinessController.cs @@ -296,14 +296,21 @@ namespace Learn.Archives.API.Controllers //todo完善数据转换 - var resultList = new List() { new SchoolBusinessImport() + var resultList = new List() { new SchoolBusinessImport() { School="必填 与系统对应", Grade="必填 : 初一/高一/初2025", IsDiscussion="是/否", IsClassMeeting="是/否", - Remark="备注", - Users="必填: 例 用户1,用户2 与系统中用户名称对应" + Remark="选填 备注", + ClassMeeting ="选填 开展班会情况", + Discussion ="选填 开展会谈情况", + Solution="选填 需求/方案的描述", + Users="必填: 例 用户1,用户2 与系统中用户名称对应", + Record="选填 格式[时间:记录内容;] \r\n 例 2025年9月11日:执行了第一次沟通;\r\n2025年9月12日:执行了第二次沟通,沟通非常顺畅;", + EndRecord="选填 格式 [时间:记录内容]\r\n 例 2025年9月13日:已经顺利落地了解决方案", + Q学校领导班子="例子: 问题1:问题内容;问题2:问题内容2;", + P学校领导班子="例子: 问题1:问题解决方法;问题2:问题解决方法2;", } }; return File(resultList.ExportExcel(), "application/ms-excel", "导入赴校信息模板.xlsx"); }