ai 运动
This commit is contained in:
parent
4223361919
commit
17d110a878
@ -21,6 +21,7 @@ using VOL.Model.JingShiTiJiao;
|
|||||||
using VOL.Model.Norm.Response;
|
using VOL.Model.Norm.Response;
|
||||||
using VOL.Model.Training.Response;
|
using VOL.Model.Training.Response;
|
||||||
using VOL.System.IRepositories;
|
using VOL.System.IRepositories;
|
||||||
|
using VOL.System.Repositories;
|
||||||
|
|
||||||
namespace VOL.Ai.Services
|
namespace VOL.Ai.Services
|
||||||
{
|
{
|
||||||
@ -251,16 +252,20 @@ namespace VOL.Ai.Services
|
|||||||
.Include(g => g.Classes)
|
.Include(g => g.Classes)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
res.Grade = dbGrades.Select(g => new Grades
|
res.Grade = dbGrades
|
||||||
{
|
.Where(g => g.Classes != null && g.Classes.Any())
|
||||||
Id = (int)g.Id,
|
.Select(g => new Grades
|
||||||
Name = g.GradeName,
|
|
||||||
Class = g.Classes.Select(c => new Classes
|
|
||||||
{
|
{
|
||||||
Id = (int)c.Id,
|
Id = (int)g.Id,
|
||||||
Name = c.ClassName
|
Name = g.GradeName,
|
||||||
}).ToList()
|
Class = g.Classes.Select(c => new Classes
|
||||||
}).ToList();
|
{
|
||||||
|
Id = (int)c.Id,
|
||||||
|
Name = c.ClassName
|
||||||
|
}).ToList()
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
@ -1494,6 +1499,7 @@ namespace VOL.Ai.Services
|
|||||||
/// <param name="paramDto"></param>
|
/// <param name="paramDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost(nameof(ScanCodeLogin))]
|
[HttpPost(nameof(ScanCodeLogin))]
|
||||||
|
[HttpPost(nameof(ScanCodeLogin))]
|
||||||
public async Task<Ai_TeacherFaceInfo> ScanCodeLogin(Ai_Request paramDto)
|
public async Task<Ai_TeacherFaceInfo> ScanCodeLogin(Ai_Request paramDto)
|
||||||
{
|
{
|
||||||
if (paramDto == null || string.IsNullOrWhiteSpace(paramDto.Code) || string.IsNullOrWhiteSpace(paramDto.SchoolCode))
|
if (paramDto == null || string.IsNullOrWhiteSpace(paramDto.Code) || string.IsNullOrWhiteSpace(paramDto.SchoolCode))
|
||||||
@ -1501,9 +1507,7 @@ namespace VOL.Ai.Services
|
|||||||
|
|
||||||
var schoolCode = paramDto.SchoolCode;
|
var schoolCode = paramDto.SchoolCode;
|
||||||
|
|
||||||
// =========================
|
|
||||||
// 1️⃣ 查询扫码登录信息
|
// 1️⃣ 查询扫码登录信息
|
||||||
// =========================
|
|
||||||
var loginInfo = await _scanCodeLoginRepository
|
var loginInfo = await _scanCodeLoginRepository
|
||||||
.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == schoolCode)
|
.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == schoolCode)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
@ -1511,82 +1515,45 @@ namespace VOL.Ai.Services
|
|||||||
if (loginInfo == null)
|
if (loginInfo == null)
|
||||||
throw new Exception("未查询到登录信息!");
|
throw new Exception("未查询到登录信息!");
|
||||||
|
|
||||||
// =========================
|
|
||||||
// 2️⃣ 获取京师老师信息
|
// 2️⃣ 获取京师老师信息
|
||||||
// =========================
|
|
||||||
var teacher = await _jingShiTiJiaoService.GetClassListByTeacher(loginInfo.TeacherPhoneNo);
|
var teacher = await _jingShiTiJiaoService.GetClassListByTeacher(loginInfo.TeacherPhoneNo);
|
||||||
if (teacher == null || string.IsNullOrWhiteSpace(teacher.TeacherNo) || string.IsNullOrWhiteSpace(teacher.TeacherName))
|
if (teacher == null || string.IsNullOrWhiteSpace(teacher.TeacherNo) || string.IsNullOrWhiteSpace(teacher.TeacherName))
|
||||||
throw new Exception("获取京师老师信息失败!");
|
throw new Exception("获取京师老师信息失败!");
|
||||||
|
|
||||||
var gradeDtos = teacher.GradeList ?? new List<GradeDto>();
|
var gradeDtos = teacher.GradeList ?? new List<GradeDto>();
|
||||||
|
|
||||||
// =========================
|
|
||||||
// 3️⃣ 提取所有 GradeNo / ClassNo
|
|
||||||
// =========================
|
|
||||||
var allGradeNos = gradeDtos.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
var allGradeNos = gradeDtos.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
||||||
.Select(g => g.GradeNo)
|
.Select(g => g.GradeNo)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
// =========================
|
// 3️⃣ 查询数据库已有年级和班级
|
||||||
// 4️⃣ 查询已有年级和班级
|
|
||||||
// =========================
|
|
||||||
var existGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
var existGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||||
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||||
.Include(g => g.Classes)
|
.Include(g => g.Classes)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var existGradeNoSet = existGrades.Select(x => x.GradeNo).ToHashSet();
|
// 4️⃣ 更新已存在的年级老师信息(直接 UPDATE)
|
||||||
var existClassNoSet = existGrades.SelectMany(g => g.Classes).Select(c => c.ClassNo).ToHashSet();
|
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<JS_Grade>();
|
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();
|
||||||
|
|
||||||
foreach (var g in gradeDtos)
|
foreach (var g in gradeDtos)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(g.GradeNo))
|
if (string.IsNullOrWhiteSpace(g.GradeNo) || existGradeNoSet.Contains(g.GradeNo))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (existGradeNoSet.Contains(g.GradeNo))
|
|
||||||
{
|
|
||||||
// 已存在年级,更新老师信息
|
|
||||||
var grade = existGrades.First(x => x.GradeNo == g.GradeNo);
|
|
||||||
grade.TeacherNo = teacher.TeacherNo; // ✅ 更新老师编号
|
|
||||||
grade.TeacherName = teacher.TeacherName; // ✅ 更新老师姓名
|
|
||||||
|
|
||||||
foreach (var c in g.ClassList ?? new List<ClassDto>())
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(c.ClassNo))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var cls = grade.Classes.FirstOrDefault(x => x.ClassNo == c.ClassNo);
|
|
||||||
if (cls != null)
|
|
||||||
{
|
|
||||||
cls.TeacherNo = teacher.TeacherNo; // ✅ 更新班级老师编号
|
|
||||||
cls.TeacherName = teacher.TeacherName; // ✅ 更新班级老师姓名
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 新增班级
|
|
||||||
var newClass = new JS_Class
|
|
||||||
{
|
|
||||||
TeacherNo = teacher.TeacherNo,
|
|
||||||
TeacherName = teacher.TeacherName,
|
|
||||||
SchoolCode = schoolCode,
|
|
||||||
Code = paramDto.Code,
|
|
||||||
GradeNo = g.GradeNo,
|
|
||||||
GradeName = g.GradeName,
|
|
||||||
ClassNo = c.ClassNo,
|
|
||||||
ClassName = c.ClassName,
|
|
||||||
GradeId = grade.Id
|
|
||||||
};
|
|
||||||
grade.Classes.Add(newClass);
|
|
||||||
existClassNoSet.Add(c.ClassNo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 新增年级 + 班级
|
|
||||||
var gradeNew = new JS_Grade
|
var gradeNew = new JS_Grade
|
||||||
{
|
{
|
||||||
TeacherNo = teacher.TeacherNo,
|
TeacherNo = teacher.TeacherNo,
|
||||||
@ -1609,39 +1576,32 @@ namespace VOL.Ai.Services
|
|||||||
ClassName = c.ClassName
|
ClassName = c.ClassName
|
||||||
}).ToList() ?? new List<JS_Class>()
|
}).ToList() ?? new List<JS_Class>()
|
||||||
};
|
};
|
||||||
|
|
||||||
newGrades.Add(gradeNew);
|
newGrades.Add(gradeNew);
|
||||||
existGradeNoSet.Add(g.GradeNo);
|
|
||||||
foreach (var c in gradeNew.Classes)
|
|
||||||
existClassNoSet.Add(c.ClassNo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newGrades.Any())
|
if (newGrades.Any())
|
||||||
await _studentRepository.DbContext.Set<JS_Grade>().AddRangeAsync(newGrades);
|
await _studentRepository.DbContext.Set<JS_Grade>().AddRangeAsync(newGrades);
|
||||||
|
|
||||||
// =========================
|
// 6️⃣ 保存所有修改和新增
|
||||||
// 5️⃣ 保存(EF Core 自动生成 UPDATE)
|
|
||||||
// =========================
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _studentRepository.DbContext.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
catch (DbUpdateException ex) when (ex.InnerException?.Message.Contains("UNIQUE") == true)
|
|
||||||
{
|
|
||||||
// 并发唯一索引冲突可忽略
|
|
||||||
}
|
|
||||||
|
|
||||||
// =========================
|
// EF Core 显式标记更新
|
||||||
// 6️⃣ 组装返回 DTO
|
_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>()
|
var dbGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||||
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo) && x.TeacherNo == teacher.TeacherNo)
|
||||||
.Include(g => g.Classes)
|
.Include(g => g.Classes)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var res = new Ai_TeacherFaceInfo
|
var res = new Ai_TeacherFaceInfo
|
||||||
{
|
{
|
||||||
Id = 0, // 老师表不操作
|
Id = 0,
|
||||||
TeacherName = teacher.TeacherName,
|
TeacherName = teacher.TeacherName,
|
||||||
Phone = teacher.TeacherNo,
|
Phone = teacher.TeacherNo,
|
||||||
GradeAndClassList = dbGrades
|
GradeAndClassList = dbGrades
|
||||||
@ -1654,9 +1614,7 @@ namespace VOL.Ai.Services
|
|||||||
.ToList()
|
.ToList()
|
||||||
};
|
};
|
||||||
|
|
||||||
// =========================
|
// 8️⃣ 删除扫码记录
|
||||||
// 7️⃣ 删除扫码记录
|
|
||||||
// =========================
|
|
||||||
_scanCodeLoginRepository.Delete(loginInfo);
|
_scanCodeLoginRepository.Delete(loginInfo);
|
||||||
await _scanCodeLoginRepository.SaveChangesAsync();
|
await _scanCodeLoginRepository.SaveChangesAsync();
|
||||||
|
|
||||||
@ -1664,6 +1622,7 @@ namespace VOL.Ai.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 登录
|
/// 登录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user