Merge branch 'jingshitijiaov1_qa' into jingshitijiaov1

This commit is contained in:
tanglong 2026-01-28 11:17:05 +08:00
commit d2d95e1815
2 changed files with 43 additions and 48 deletions

View File

@ -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,41 +1521,51 @@ namespace VOL.Ai.Services
if (teacher == null || string.IsNullOrWhiteSpace(teacher.TeacherNo) || string.IsNullOrWhiteSpace(teacher.TeacherName))
throw new Exception("获取京师老师信息失败!");
var gradeDtos = teacher.GradeList ?? new List<GradeDto>();
var allGradeNos = gradeDtos.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
.Select(g => g.GradeNo)
.ToList();
// 3️⃣ 确保老师存在数据库
var dbTeacher = await _teacherRepository.DbContext.Set<JS_Teacher>()
.FirstOrDefaultAsync(t => t.TeacherNo == teacher.TeacherNo);
// 3️⃣ 查询数据库已有年级和班级
if (dbTeacher == null)
{
dbTeacher = new JS_Teacher
{
TeacherNo = teacher.TeacherNo,
TeacherName = teacher.TeacherName,
SchoolCode = paramDto.SchoolCode,
Code = paramDto.Code
};
await _teacherRepository.DbContext.Set<JS_Teacher>().AddAsync(dbTeacher);
await _teacherRepository.DbContext.SaveChangesAsync(); // 保存后 Id 可用
}
var gradeDtos = teacher.GradeList ?? new List<GradeDto>();
var allGradeNos = gradeDtos
.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
.Select(g => g.GradeNo)
.ToList();
// 4️⃣ 查询数据库已有年级和班级
var existGrades = await _studentRepository.DbContext.Set<JS_Grade>()
.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();
// 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;
}
}
// 5️⃣ 先删除旧班级,再删除旧年级
if (existClasses.Any())
_studentRepository.DbContext.Set<JS_Class>().RemoveRange(existClasses);
// 5️⃣ 构造新增年级和班级
var newGrades = new List<JS_Grade>();
var existGradeNoSet = existGrades.Select(g => g.GradeNo).ToHashSet();
var existClassNoSet = existGrades.SelectMany(g => g.Classes).Select(c => c.ClassNo).ToHashSet();
if (existGrades.Any())
_studentRepository.DbContext.Set<JS_Grade>().RemoveRange(existGrades);
foreach (var g in gradeDtos)
{
if (string.IsNullOrWhiteSpace(g.GradeNo) || existGradeNoSet.Contains(g.GradeNo))
continue;
await _studentRepository.DbContext.SaveChangesAsync();
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,
@ -1575,33 +1586,19 @@ namespace VOL.Ai.Services
ClassNo = c.ClassNo,
ClassName = c.ClassName
}).ToList() ?? new List<JS_Class>()
};
newGrades.Add(gradeNew);
}
}).ToList();
if (newGrades.Any())
await _studentRepository.DbContext.Set<JS_Grade>().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<JS_Grade>()
.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
{
Id = 0,
Id = (int)dbTeacher.Id,
TeacherName = teacher.TeacherName,
Phone = teacher.TeacherNo,
GradeAndClassList = dbGrades
@ -1621,8 +1618,6 @@ namespace VOL.Ai.Services
return res;
}
/// <summary>
/// 登录
/// </summary>

View File

@ -141,7 +141,7 @@ namespace VOL.Business.Services.Norm
if (paramDto.EndTime.HasValue)
{
DateTime detectionDate = paramDto.EndTime.Value.Date;
query = query.Where(x => x.EndTime.HasValue && x.EndTime.Value.Date < detectionDate);
query = query.Where(x => x.EndTime.HasValue && x.EndTime.Value.Date <= detectionDate);
}
res.Total = await query.CountAsync();