年级班级
This commit is contained in:
parent
f7bf21f46a
commit
940ea162d2
@ -1476,23 +1476,27 @@ namespace VOL.Ai.Services
|
|||||||
// =========================
|
// =========================
|
||||||
var loginInfo = await _scanCodeLoginRepository
|
var loginInfo = await _scanCodeLoginRepository
|
||||||
.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == paramDto.SchoolCode)
|
.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == paramDto.SchoolCode)
|
||||||
//.FindAsIQueryable(x => x.Code == paramDto.Code)
|
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
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)
|
if (teacher == null)
|
||||||
throw new Exception("获取京师老师信息失败!");
|
throw new Exception("获取京师老师信息失败!");
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(teacher.TeacherNo))
|
if (string.IsNullOrWhiteSpace(teacher.TeacherNo))
|
||||||
throw new Exception("接口返回的教师编号为空,无法插入!");
|
throw new Exception("接口返回的教师编号为空!");
|
||||||
if (string.IsNullOrWhiteSpace(teacher.TeacherName))
|
if (string.IsNullOrWhiteSpace(teacher.TeacherName))
|
||||||
throw new Exception("接口返回的教师姓名为空,无法插入!");
|
throw new Exception("接口返回的教师姓名为空!");
|
||||||
|
|
||||||
|
var schoolCode = paramDto.SchoolCode;
|
||||||
|
var gradeDtos = teacher.GradeList ?? new List<GradeDto>();
|
||||||
|
|
||||||
// =========================
|
// =========================
|
||||||
// 3️⃣ 同步教师信息
|
// 3️⃣ 同步教师信息
|
||||||
@ -1510,7 +1514,7 @@ namespace VOL.Ai.Services
|
|||||||
var jsTeacher = new JS_Teacher
|
var jsTeacher = new JS_Teacher
|
||||||
{
|
{
|
||||||
Code = paramDto.Code,
|
Code = paramDto.Code,
|
||||||
SchoolCode = paramDto.SchoolCode,
|
SchoolCode = schoolCode,
|
||||||
SchoolName = teacher.School ?? "",
|
SchoolName = teacher.School ?? "",
|
||||||
TeacherName = teacher.TeacherName,
|
TeacherName = teacher.TeacherName,
|
||||||
TeacherNo = teacher.TeacherNo
|
TeacherNo = teacher.TeacherNo
|
||||||
@ -1522,7 +1526,8 @@ namespace VOL.Ai.Services
|
|||||||
await _teacherRepository.SaveChangesAsync();
|
await _teacherRepository.SaveChangesAsync();
|
||||||
tId = jsTeacher.Id;
|
tId = jsTeacher.Id;
|
||||||
}
|
}
|
||||||
catch (DbUpdateException ex) when (ex.InnerException?.Message.Contains("IX_JS_Teacher_TeacherNo") == true)
|
catch (DbUpdateException ex) when (
|
||||||
|
ex.InnerException?.Message.Contains("IX_JS_Teacher_TeacherNo") == true)
|
||||||
{
|
{
|
||||||
var conflictTeacher = await _teacherRepository.DbContext.Set<JS_Teacher>()
|
var conflictTeacher = await _teacherRepository.DbContext.Set<JS_Teacher>()
|
||||||
.FirstAsync(t => t.TeacherNo == teacher.TeacherNo);
|
.FirstAsync(t => t.TeacherNo == teacher.TeacherNo);
|
||||||
@ -1533,48 +1538,116 @@ namespace VOL.Ai.Services
|
|||||||
if (tId == 0)
|
if (tId == 0)
|
||||||
throw new Exception("教师信息同步失败!");
|
throw new Exception("教师信息同步失败!");
|
||||||
|
|
||||||
// =========================
|
// =====================================================
|
||||||
// 4️⃣ 获取数据库中的班级 Id
|
// 4️⃣ 同步【年级 + 班级】(你提供的核心逻辑)
|
||||||
// =========================
|
// =====================================================
|
||||||
var classNos = teacher.GradeList
|
var allGradeNos = gradeDtos
|
||||||
|
.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
||||||
|
.Select(g => g.GradeNo)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var allClassNos = gradeDtos
|
||||||
.SelectMany(g => g.ClassList ?? new List<ClassDto>())
|
.SelectMany(g => g.ClassList ?? new List<ClassDto>())
|
||||||
|
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo))
|
||||||
.Select(c => c.ClassNo)
|
.Select(c => c.ClassNo)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var dbClasses = await _classRepository.DbContext.Set<JS_Class>()
|
var existGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||||
.Where(c => c.SchoolCode == paramDto.SchoolCode && classNos.Contains(c.ClassNo))
|
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var existClasses = await _classRepository.DbContext.Set<JS_Class>()
|
||||||
|
.Where(x => x.SchoolCode == schoolCode && allClassNos.Contains(x.ClassNo))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var existGradeNoSet = existGrades.Select(x => x.GradeNo).ToHashSet();
|
||||||
|
var existClassNoSet = existClasses.Select(x => x.ClassNo).ToHashSet();
|
||||||
|
|
||||||
|
var newGrades = new List<JS_Grade>();
|
||||||
|
|
||||||
|
foreach (var g in gradeDtos)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(g.GradeNo) || existGradeNoSet.Contains(g.GradeNo))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var grade = new JS_Grade
|
||||||
|
{
|
||||||
|
TeacherNo = teacher.TeacherNo,
|
||||||
|
TeacherName = teacher.TeacherName,
|
||||||
|
SchoolCode = schoolCode,
|
||||||
|
Code = paramDto.Code,
|
||||||
|
GradeNo = g.GradeNo,
|
||||||
|
GradeName = g.GradeName,
|
||||||
|
Classes = g.ClassList?
|
||||||
|
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo)
|
||||||
|
&& !existClassNoSet.Contains(c.ClassNo))
|
||||||
|
.Select(c => 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
|
||||||
|
}).ToList() ?? new List<JS_Class>()
|
||||||
|
};
|
||||||
|
|
||||||
|
newGrades.Add(grade);
|
||||||
|
|
||||||
|
existGradeNoSet.Add(g.GradeNo);
|
||||||
|
foreach (var c in grade.Classes)
|
||||||
|
existClassNoSet.Add(c.ClassNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newGrades.Any())
|
||||||
|
await _studentRepository.DbContext.Set<JS_Grade>().AddRangeAsync(newGrades);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _studentRepository.DbContext.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateException ex) when (ex.InnerException?.Message.Contains("UNIQUE") == true)
|
||||||
|
{
|
||||||
|
// 并发唯一索引冲突可忽略
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// 5️⃣ 重新读取数据库,获取 Id
|
||||||
|
// =========================
|
||||||
|
var dbGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||||
|
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||||
|
.Include(g => g.Classes)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
// =========================
|
// =========================
|
||||||
// 5️⃣ 组装返回 DTO
|
// 6️⃣ 组装返回 DTO
|
||||||
// =========================
|
// =========================
|
||||||
var res = new Ai_TeacherFaceInfo
|
var res = new Ai_TeacherFaceInfo
|
||||||
{
|
{
|
||||||
Id = (int)tId,
|
Id = (int)tId,
|
||||||
TeacherName = teacher.TeacherName,
|
TeacherName = teacher.TeacherName,
|
||||||
Phone = teacher.TeacherNo,
|
Phone = teacher.TeacherNo,
|
||||||
|
GradeAndClassList = dbGrades
|
||||||
GradeAndClassList = teacher.GradeList
|
.SelectMany(g => g.Classes)
|
||||||
.SelectMany(g => g.ClassList ?? new List<ClassDto>())
|
.Select(c => new Classes
|
||||||
.Select(c =>
|
|
||||||
{
|
{
|
||||||
var dbCls = dbClasses.FirstOrDefault(x => x.ClassNo == c.ClassNo);
|
Id = (int)c.Id,
|
||||||
return new Classes
|
Name = $"{c.GradeName}-{c.ClassName}"
|
||||||
{
|
|
||||||
Id = dbCls?.Id != null ? (int)dbCls.Id : 0,
|
|
||||||
Name = c.ClassName ?? ""
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
.ToList()
|
.ToList()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// 7️⃣ 删除扫码记录
|
||||||
|
// =========================
|
||||||
_scanCodeLoginRepository.Delete(loginInfo);
|
_scanCodeLoginRepository.Delete(loginInfo);
|
||||||
await _scanCodeLoginRepository.SaveChangesAsync();
|
//await _scanCodeLoginRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 登录
|
/// 登录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user