扫码登陆
This commit is contained in:
parent
379339627e
commit
4223361919
@ -1,5 +1,6 @@
|
||||
using AutoMapper;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@ -139,6 +140,9 @@ namespace VOL.Ai.Services
|
||||
//if (res == null)
|
||||
// return new Ai_SchoolDto();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(paramDto.Code))
|
||||
throw new ArgumentException("学校编码不能为空", nameof(paramDto.Code));
|
||||
|
||||
var schoolCode = paramDto.Code;
|
||||
|
||||
// =========================
|
||||
@ -1489,13 +1493,19 @@ namespace VOL.Ai.Services
|
||||
/// </summary>
|
||||
/// <param name="paramDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost(nameof(ScanCodeLogin))]
|
||||
public async Task<Ai_TeacherFaceInfo> ScanCodeLogin(Ai_Request paramDto)
|
||||
{
|
||||
if (paramDto == null || string.IsNullOrWhiteSpace(paramDto.Code) || string.IsNullOrWhiteSpace(paramDto.SchoolCode))
|
||||
throw new ArgumentException("参数不能为空!");
|
||||
|
||||
var schoolCode = paramDto.SchoolCode;
|
||||
|
||||
// =========================
|
||||
// 1️⃣ 查询登录信息
|
||||
// 1️⃣ 查询扫码登录信息
|
||||
// =========================
|
||||
var loginInfo = await _scanCodeLoginRepository
|
||||
.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == paramDto.SchoolCode)
|
||||
.FindAsIQueryable(x => x.Code == paramDto.Code && x.SchoolCode == schoolCode)
|
||||
.FirstOrDefaultAsync();
|
||||
|
||||
if (loginInfo == null)
|
||||
@ -1504,93 +1514,80 @@ namespace VOL.Ai.Services
|
||||
// =========================
|
||||
// 2️⃣ 获取京师老师信息
|
||||
// =========================
|
||||
var teacher = await _jingShiTiJiaoService
|
||||
.GetClassListByTeacher(loginInfo.TeacherPhoneNo);
|
||||
|
||||
if (teacher == null)
|
||||
var teacher = await _jingShiTiJiaoService.GetClassListByTeacher(loginInfo.TeacherPhoneNo);
|
||||
if (teacher == null || string.IsNullOrWhiteSpace(teacher.TeacherNo) || string.IsNullOrWhiteSpace(teacher.TeacherName))
|
||||
throw new Exception("获取京师老师信息失败!");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(teacher.TeacherNo))
|
||||
throw new Exception("接口返回的教师编号为空!");
|
||||
if (string.IsNullOrWhiteSpace(teacher.TeacherName))
|
||||
throw new Exception("接口返回的教师姓名为空!");
|
||||
|
||||
var schoolCode = paramDto.SchoolCode;
|
||||
var gradeDtos = teacher.GradeList ?? new List<GradeDto>();
|
||||
|
||||
// =========================
|
||||
// 3️⃣ 同步教师信息
|
||||
// 3️⃣ 提取所有 GradeNo / ClassNo
|
||||
// =========================
|
||||
var existingTeacher = await _teacherRepository.DbContext.Set<JS_Teacher>()
|
||||
.FirstOrDefaultAsync(t => t.TeacherNo == teacher.TeacherNo);
|
||||
|
||||
long tId;
|
||||
if (existingTeacher != null)
|
||||
{
|
||||
tId = existingTeacher.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
var jsTeacher = new JS_Teacher
|
||||
{
|
||||
Code = paramDto.Code,
|
||||
SchoolCode = schoolCode,
|
||||
SchoolName = teacher.School ?? "",
|
||||
TeacherName = teacher.TeacherName,
|
||||
TeacherNo = teacher.TeacherNo
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
await _teacherRepository.DbContext.Set<JS_Teacher>().AddAsync(jsTeacher);
|
||||
await _teacherRepository.SaveChangesAsync();
|
||||
tId = jsTeacher.Id;
|
||||
}
|
||||
catch (DbUpdateException ex) when (
|
||||
ex.InnerException?.Message.Contains("IX_JS_Teacher_TeacherNo") == true)
|
||||
{
|
||||
var conflictTeacher = await _teacherRepository.DbContext.Set<JS_Teacher>()
|
||||
.FirstAsync(t => t.TeacherNo == teacher.TeacherNo);
|
||||
tId = conflictTeacher.Id;
|
||||
}
|
||||
}
|
||||
|
||||
if (tId == 0)
|
||||
throw new Exception("教师信息同步失败!");
|
||||
|
||||
// =====================================================
|
||||
// 4️⃣ 同步【年级 + 班级】(你提供的核心逻辑)
|
||||
// =====================================================
|
||||
var allGradeNos = gradeDtos
|
||||
.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
||||
.Select(g => g.GradeNo)
|
||||
.ToList();
|
||||
|
||||
var allClassNos = gradeDtos
|
||||
.SelectMany(g => g.ClassList ?? new List<ClassDto>())
|
||||
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo))
|
||||
.Select(c => c.ClassNo)
|
||||
.ToList();
|
||||
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))
|
||||
.ToListAsync();
|
||||
|
||||
var existClasses = await _classRepository.DbContext.Set<JS_Class>()
|
||||
.Where(x => x.SchoolCode == schoolCode && allClassNos.Contains(x.ClassNo))
|
||||
.Include(g => g.Classes)
|
||||
.ToListAsync();
|
||||
|
||||
var existGradeNoSet = existGrades.Select(x => x.GradeNo).ToHashSet();
|
||||
var existClassNoSet = existClasses.Select(x => x.ClassNo).ToHashSet();
|
||||
var existClassNoSet = existGrades.SelectMany(g => g.Classes).Select(c => c.ClassNo).ToHashSet();
|
||||
|
||||
var newGrades = new List<JS_Grade>();
|
||||
|
||||
foreach (var g in gradeDtos)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(g.GradeNo) || existGradeNoSet.Contains(g.GradeNo))
|
||||
if (string.IsNullOrWhiteSpace(g.GradeNo))
|
||||
continue;
|
||||
|
||||
var grade = new JS_Grade
|
||||
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
|
||||
{
|
||||
TeacherNo = teacher.TeacherNo,
|
||||
TeacherName = teacher.TeacherName,
|
||||
@ -1599,8 +1596,7 @@ namespace VOL.Ai.Services
|
||||
GradeNo = g.GradeNo,
|
||||
GradeName = g.GradeName,
|
||||
Classes = g.ClassList?
|
||||
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo)
|
||||
&& !existClassNoSet.Contains(c.ClassNo))
|
||||
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo))
|
||||
.Select(c => new JS_Class
|
||||
{
|
||||
TeacherNo = teacher.TeacherNo,
|
||||
@ -1614,16 +1610,18 @@ namespace VOL.Ai.Services
|
||||
}).ToList() ?? new List<JS_Class>()
|
||||
};
|
||||
|
||||
newGrades.Add(grade);
|
||||
|
||||
newGrades.Add(gradeNew);
|
||||
existGradeNoSet.Add(g.GradeNo);
|
||||
foreach (var c in grade.Classes)
|
||||
foreach (var c in gradeNew.Classes)
|
||||
existClassNoSet.Add(c.ClassNo);
|
||||
}
|
||||
|
||||
if (newGrades.Any())
|
||||
await _studentRepository.DbContext.Set<JS_Grade>().AddRangeAsync(newGrades);
|
||||
|
||||
// =========================
|
||||
// 5️⃣ 保存(EF Core 自动生成 UPDATE)
|
||||
// =========================
|
||||
try
|
||||
{
|
||||
await _studentRepository.DbContext.SaveChangesAsync();
|
||||
@ -1634,22 +1632,18 @@ namespace VOL.Ai.Services
|
||||
}
|
||||
|
||||
// =========================
|
||||
// 5️⃣ 重新读取数据库,获取 Id
|
||||
// 6️⃣ 组装返回 DTO
|
||||
// =========================
|
||||
var dbGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||
.Include(g => g.Classes)
|
||||
.ToListAsync();
|
||||
|
||||
// =========================
|
||||
// 6️⃣ 组装返回 DTO
|
||||
// =========================
|
||||
var res = new Ai_TeacherFaceInfo
|
||||
{
|
||||
Id = (int)tId,
|
||||
Id = 0, // 老师表不操作
|
||||
TeacherName = teacher.TeacherName,
|
||||
Phone = teacher.TeacherNo,
|
||||
//Photo = teacher.TeacherNo,
|
||||
GradeAndClassList = dbGrades
|
||||
.SelectMany(g => g.Classes)
|
||||
.Select(c => new Classes
|
||||
@ -1669,6 +1663,7 @@ namespace VOL.Ai.Services
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 登录
|
||||
/// </summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user