diff --git a/VOL.Ai/Services/AiAppService.cs b/VOL.Ai/Services/AiAppService.cs index 710c8d5..3ad1810 100644 --- a/VOL.Ai/Services/AiAppService.cs +++ b/VOL.Ai/Services/AiAppService.cs @@ -1,4 +1,5 @@ using AutoMapper; +using EFCore.BulkExtensions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -253,7 +254,7 @@ namespace VOL.Ai.Services .ToListAsync(); res.Grade = dbGrades - .Where(g => g.Classes != null && g.Classes.Any()) + .Where(g => g.Classes != null && g.Classes.Any()) .Select(g => new Grades { Id = (int)g.Id, @@ -1520,6 +1521,25 @@ namespace VOL.Ai.Services if (teacher == null || string.IsNullOrWhiteSpace(teacher.TeacherNo) || string.IsNullOrWhiteSpace(teacher.TeacherName)) throw new Exception("获取京师老师信息失败!"); + // 2️⃣ 查询数据库中是否已有该老师 + var dbTeacher = await _teacherRepository.DbContext.Set() + .FirstOrDefaultAsync(t => t.TeacherNo == teacher.TeacherNo); + + if (dbTeacher == null) + { + // 老师不存在,新增 + dbTeacher = new JS_Teacher + { + TeacherNo = teacher.TeacherNo, + TeacherName = teacher.TeacherName, + SchoolCode = paramDto.SchoolCode, + Code = paramDto.Code + }; + + await _teacherRepository.DbContext.Set().AddAsync(dbTeacher); + await _teacherRepository.DbContext.SaveChangesAsync(); + } + var gradeDtos = teacher.GradeList ?? new List(); var allGradeNos = gradeDtos.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo)) .Select(g => g.GradeNo) @@ -1531,18 +1551,29 @@ namespace VOL.Ai.Services .Include(g => g.Classes) .ToListAsync(); - // 4️⃣ 更新已存在的年级老师信息(直接 UPDATE) - foreach (var grade in existGrades) - { - grade.TeacherNo = teacher.TeacherNo; - grade.TeacherName = teacher.TeacherName; + var existClasses = existGrades.SelectMany(g => g.Classes).ToList(); - foreach (var cls in grade.Classes) - { - cls.TeacherNo = teacher.TeacherNo; - cls.TeacherName = teacher.TeacherName; - } - } + // 先删班级 + _studentRepository.DbContext.Set().RemoveRange(existClasses); + + // 再删年级 + _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(); @@ -1584,12 +1615,12 @@ namespace VOL.Ai.Services // 6️⃣ 保存所有修改和新增 - // EF Core 显式标记更新 - _studentRepository.UpdateRange(existGrades); + //// EF Core 显式标记更新 + //_studentRepository.UpdateRange(existGrades); - // 同时更新所有班级(必须显式) - var allClasses = existGrades.SelectMany(g => g.Classes).ToList(); - _classRepository.UpdateRange(allClasses); + //// 同时更新所有班级(必须显式) + //var allClasses = existGrades.SelectMany(g => g.Classes).ToList(); + //_classRepository.UpdateRange(allClasses); await _studentRepository.DbContext.SaveChangesAsync(); @@ -1601,7 +1632,7 @@ namespace VOL.Ai.Services var res = new Ai_TeacherFaceInfo { - Id = 0, + Id = (int)dbTeacher.Id, TeacherName = teacher.TeacherName, Phone = teacher.TeacherNo, GradeAndClassList = dbGrades @@ -1614,6 +1645,31 @@ 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(); @@ -1622,7 +1678,6 @@ namespace VOL.Ai.Services } - /// /// 登录 ///