diff --git a/VOL.Ai/Services/AiAppService.cs b/VOL.Ai/Services/AiAppService.cs index 3ad1810..3750efd 100644 --- a/VOL.Ai/Services/AiAppService.cs +++ b/VOL.Ai/Services/AiAppService.cs @@ -1521,13 +1521,12 @@ namespace VOL.Ai.Services if (teacher == null || string.IsNullOrWhiteSpace(teacher.TeacherNo) || string.IsNullOrWhiteSpace(teacher.TeacherName)) throw new Exception("获取京师老师信息失败!"); - // 2️⃣ 查询数据库中是否已有该老师 + // 3️⃣ 确保老师存在数据库 var dbTeacher = await _teacherRepository.DbContext.Set() .FirstOrDefaultAsync(t => t.TeacherNo == teacher.TeacherNo); if (dbTeacher == null) { - // 老师不存在,新增 dbTeacher = new JS_Teacher { TeacherNo = teacher.TeacherNo, @@ -1537,55 +1536,36 @@ namespace VOL.Ai.Services }; await _teacherRepository.DbContext.Set().AddAsync(dbTeacher); - await _teacherRepository.DbContext.SaveChangesAsync(); + await _teacherRepository.DbContext.SaveChangesAsync(); // 保存后 Id 可用 } var gradeDtos = teacher.GradeList ?? new List(); - var allGradeNos = gradeDtos.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo)) - .Select(g => g.GradeNo) - .ToList(); + var allGradeNos = gradeDtos + .Where(g => !string.IsNullOrWhiteSpace(g.GradeNo)) + .Select(g => g.GradeNo) + .ToList(); - // 3️⃣ 查询数据库已有年级和班级 + // 4️⃣ 查询数据库已有年级和班级 var existGrades = await _studentRepository.DbContext.Set() - .Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo)) + .Where(x => x.SchoolCode == schoolCode && x.TeacherNo == teacher.TeacherNo && allGradeNos.Contains(x.GradeNo)) .Include(g => g.Classes) .ToListAsync(); var existClasses = existGrades.SelectMany(g => g.Classes).ToList(); - // 先删班级 - _studentRepository.DbContext.Set().RemoveRange(existClasses); + // 5️⃣ 先删除旧班级,再删除旧年级 + if (existClasses.Any()) + _studentRepository.DbContext.Set().RemoveRange(existClasses); - // 再删年级 - _studentRepository.DbContext.Set().RemoveRange(existGrades); + if (existGrades.Any()) + _studentRepository.DbContext.Set().RemoveRange(existGrades); await _studentRepository.DbContext.SaveChangesAsync(); - - // 4️⃣ 更新已存在的年级老师信息(直接 UPDATE) - //foreach (var grade in existGrades) - //{ - // grade.TeacherNo = teacher.TeacherNo; - // grade.TeacherName = teacher.TeacherName; - - // foreach (var cls in grade.Classes) - // { - // cls.TeacherNo = teacher.TeacherNo; - // cls.TeacherName = teacher.TeacherName; - // } - //} - - // 5️⃣ 构造新增年级和班级 - var newGrades = new List(); - var existGradeNoSet = existGrades.Select(g => g.GradeNo).ToHashSet(); - var existClassNoSet = existGrades.SelectMany(g => g.Classes).Select(c => c.ClassNo).ToHashSet(); - - foreach (var g in gradeDtos) - { - if (string.IsNullOrWhiteSpace(g.GradeNo) || existGradeNoSet.Contains(g.GradeNo)) - continue; - - var gradeNew = new JS_Grade + // 6️⃣ 构造新增年级和班级 + var newGrades = gradeDtos + .Where(g => !string.IsNullOrWhiteSpace(g.GradeNo)) + .Select(g => new JS_Grade { TeacherNo = teacher.TeacherNo, TeacherName = teacher.TeacherName, @@ -1606,29 +1586,15 @@ namespace VOL.Ai.Services ClassNo = c.ClassNo, ClassName = c.ClassName }).ToList() ?? new List() - }; - newGrades.Add(gradeNew); - } + }).ToList(); if (newGrades.Any()) await _studentRepository.DbContext.Set().AddRangeAsync(newGrades); - // 6️⃣ 保存所有修改和新增 - - //// EF Core 显式标记更新 - //_studentRepository.UpdateRange(existGrades); - - //// 同时更新所有班级(必须显式) - //var allClasses = existGrades.SelectMany(g => g.Classes).ToList(); - //_classRepository.UpdateRange(allClasses); - await _studentRepository.DbContext.SaveChangesAsync(); - // 7️⃣ 返回结果 - var dbGrades = await _studentRepository.DbContext.Set() - .Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo) && x.TeacherNo == teacher.TeacherNo) - .Include(g => g.Classes) - .ToListAsync(); + // 7️⃣ 使用 EF 跟踪的实体直接返回,不用再查询数据库 + var dbGrades = newGrades; var res = new Ai_TeacherFaceInfo { @@ -1645,31 +1611,6 @@ namespace VOL.Ai.Services .ToList() }; - - //// 3️⃣ 直接从 teacher 里组装年级班级数据(不进数据库) - //var gradeDtos = teacher.GradeList ?? new List(); - - //var classList = gradeDtos - // .Where(g => !string.IsNullOrWhiteSpace(g.GradeNo)) - // .SelectMany(g => g.ClassList ?? new List(), - // (g, c) => new { g, c }) - // .Where(x => !string.IsNullOrWhiteSpace(x.c.ClassNo)) - // .Select(x => new Classes - // { - // Id = 0, // 不落库,Id 没意义 - // Name = $"{x.g.GradeName}-{x.c.ClassName}" - // }) - // .ToList(); - - //// 4️⃣ 返回结果 - //var res = new Ai_TeacherFaceInfo - //{ - // Id = 0, - // TeacherName = teacher.TeacherName, - // Phone = teacher.TeacherNo, - // GradeAndClassList = classList - //}; - // 8️⃣ 删除扫码记录 _scanCodeLoginRepository.Delete(loginInfo); await _scanCodeLoginRepository.SaveChangesAsync(); @@ -1677,7 +1618,6 @@ namespace VOL.Ai.Services return res; } - /// /// 登录 ///