年级班级
This commit is contained in:
parent
be31757973
commit
e6f5ef8932
@ -139,126 +139,167 @@ namespace VOL.Ai.Services
|
||||
//if (res == null)
|
||||
// return new Ai_SchoolDto();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//var schoolCode = paramDto.Code;
|
||||
|
||||
|
||||
//// =========================
|
||||
//// 2️⃣ 调用京师接口获取学校年级班级
|
||||
//// =========================
|
||||
//var schoolClass = await _jingShiTiJiaoService.GetClassBySchoolAsync(schoolCode);
|
||||
|
||||
//if (schoolClass?.Grades == null || !schoolClass.Grades.Any())
|
||||
// throw new Exception("获取京师年级班级失败!");
|
||||
|
||||
//var res = new Ai_SchoolDto()
|
||||
//{
|
||||
// SchoolCode = schoolCode,
|
||||
// Name = schoolClass.SchoolName,
|
||||
// Type = 1,
|
||||
// Province = "",
|
||||
// City = ""
|
||||
//};
|
||||
|
||||
//var gradeDtos = schoolClass.Grades;
|
||||
|
||||
//// =========================
|
||||
//// 3️⃣ 提取所有 GradeNo / ClassNo
|
||||
//// =========================
|
||||
//var allGradeNos = gradeDtos
|
||||
// .Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
||||
// .Select(g => g.GradeNo)
|
||||
// .ToList();
|
||||
|
||||
//var allClassNos = gradeDtos
|
||||
// .SelectMany(g => g.Classes ?? new List<JingShiClassDto>())
|
||||
// .Where(c => !string.IsNullOrWhiteSpace(c.ClassNo))
|
||||
// .Select(c => c.ClassNo)
|
||||
// .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))
|
||||
// .ToListAsync();
|
||||
|
||||
//var existGradeNoSet = existGrades.Select(x => x.GradeNo).ToHashSet();
|
||||
//var existClassNoSet = existClasses.Select(x => x.ClassNo).ToHashSet();
|
||||
|
||||
//// =========================
|
||||
//// 5️⃣ 构造待插入的年级 + 班级
|
||||
//// =========================
|
||||
//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
|
||||
// {
|
||||
// SchoolCode = schoolCode,
|
||||
// Code = paramDto.Code,
|
||||
// GradeNo = g.GradeNo,
|
||||
// GradeName = g.GradeName,
|
||||
// Classes = g.Classes?
|
||||
// .Where(c => !string.IsNullOrWhiteSpace(c.ClassNo) && !existClassNoSet.Contains(c.ClassNo))
|
||||
// .Select(c => new JS_Class
|
||||
// {
|
||||
// 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);
|
||||
|
||||
//// =========================
|
||||
//// 6️⃣ 保存(并发幂等兜底)
|
||||
//// =========================
|
||||
//try
|
||||
//{
|
||||
// await _studentRepository.DbContext.SaveChangesAsync();
|
||||
//}
|
||||
//catch (DbUpdateException ex) when (ex.InnerException?.Message.Contains("UNIQUE") == true)
|
||||
//{
|
||||
// // 并发下唯一索引冲突可忽略
|
||||
//}
|
||||
|
||||
//// =========================
|
||||
//// 7️⃣ 回查数据库,组装返回 DTO
|
||||
//// =========================
|
||||
//var dbGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||
// .Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||
// .Include(g => g.Classes)
|
||||
// .ToListAsync();
|
||||
|
||||
//res.Grade = dbGrades.Select(g => new Grades
|
||||
//{
|
||||
// Id = (int)g.Id,
|
||||
// Name = g.GradeName,
|
||||
// Class = g.Classes.Select(c => new Classes
|
||||
// {
|
||||
// Id = (int)c.Id,
|
||||
// Name = c.ClassName
|
||||
// }).ToList()
|
||||
//}).ToList();
|
||||
|
||||
//return res;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(paramDto.Code))
|
||||
throw new ArgumentException("学校编码不能为空", nameof(paramDto.Code));
|
||||
|
||||
var schoolCode = paramDto.Code;
|
||||
|
||||
|
||||
|
||||
// =========================
|
||||
// 2️⃣ 调用京师接口获取学校年级班级
|
||||
// 1️⃣ 调用京师接口获取学校信息及年级班级
|
||||
// =========================
|
||||
var schoolClass = await _jingShiTiJiaoService.GetClassBySchoolAsync(schoolCode);
|
||||
|
||||
if (schoolClass?.Grades == null || !schoolClass.Grades.Any())
|
||||
throw new Exception("获取京师年级班级失败!");
|
||||
|
||||
// =========================
|
||||
// 2️⃣ 组装返回 DTO
|
||||
// =========================
|
||||
var res = new Ai_SchoolDto()
|
||||
{
|
||||
SchoolCode = schoolCode,
|
||||
Name = schoolClass.SchoolName,
|
||||
Type = 1,
|
||||
Type = 1, // 可根据业务修改
|
||||
Province = "",
|
||||
City = ""
|
||||
};
|
||||
|
||||
var gradeDtos = schoolClass.Grades;
|
||||
|
||||
// =========================
|
||||
// 3️⃣ 提取所有 GradeNo / ClassNo
|
||||
// =========================
|
||||
var allGradeNos = gradeDtos
|
||||
.Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
||||
.Select(g => g.GradeNo)
|
||||
.ToList();
|
||||
|
||||
var allClassNos = gradeDtos
|
||||
.SelectMany(g => g.Classes ?? new List<JingShiClassDto>())
|
||||
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo))
|
||||
.Select(c => c.ClassNo)
|
||||
.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))
|
||||
.ToListAsync();
|
||||
|
||||
var existGradeNoSet = existGrades.Select(x => x.GradeNo).ToHashSet();
|
||||
var existClassNoSet = existClasses.Select(x => x.ClassNo).ToHashSet();
|
||||
|
||||
// =========================
|
||||
// 5️⃣ 构造待插入的年级 + 班级
|
||||
// =========================
|
||||
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
|
||||
City = "",
|
||||
Grade = schoolClass.Grades.Select(g => new Grades
|
||||
{
|
||||
SchoolCode = schoolCode,
|
||||
Code = paramDto.Code,
|
||||
GradeNo = g.GradeNo,
|
||||
GradeName = g.GradeName,
|
||||
Classes = g.Classes?
|
||||
.Where(c => !string.IsNullOrWhiteSpace(c.ClassNo) && !existClassNoSet.Contains(c.ClassNo))
|
||||
.Select(c => new JS_Class
|
||||
{
|
||||
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);
|
||||
|
||||
// =========================
|
||||
// 6️⃣ 保存(并发幂等兜底)
|
||||
// =========================
|
||||
try
|
||||
{
|
||||
await _studentRepository.DbContext.SaveChangesAsync();
|
||||
}
|
||||
catch (DbUpdateException ex) when (ex.InnerException?.Message.Contains("UNIQUE") == true)
|
||||
{
|
||||
// 并发下唯一索引冲突可忽略
|
||||
}
|
||||
|
||||
// =========================
|
||||
// 7️⃣ 回查数据库,组装返回 DTO
|
||||
// =========================
|
||||
var dbGrades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||
.Include(g => g.Classes)
|
||||
.ToListAsync();
|
||||
|
||||
res.Grade = dbGrades.Select(g => new Grades
|
||||
{
|
||||
Id = (int)g.Id,
|
||||
Name = g.GradeName,
|
||||
Class = g.Classes.Select(c => new Classes
|
||||
{
|
||||
Id = (int)c.Id,
|
||||
Name = c.ClassName
|
||||
Id = 0, // 京师接口没有数据库 Id,可用占位
|
||||
Name = g.GradeName,
|
||||
Class = g.Classes?.Select(c => new Classes
|
||||
{
|
||||
Id = 0, // 同上
|
||||
Name = c.ClassName
|
||||
}).ToList() ?? new List<Classes>()
|
||||
}).ToList()
|
||||
}).ToList();
|
||||
};
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -16,6 +16,7 @@ using VOL.Entity.DomainModels;
|
||||
using VOL.Entity.Enum;
|
||||
using VOL.Model;
|
||||
using VOL.Model.HomeWork;
|
||||
using VOL.Model.JingShiTiJiao;
|
||||
using VOL.Model.Training.Response;
|
||||
using VOL.System.IRepositories;
|
||||
using VOL.System.Repositories;
|
||||
@ -128,40 +129,173 @@ namespace VOL.WebApi.Controllers.JingShiTiJiao
|
||||
[HttpGet(nameof(GetGradeList))]
|
||||
public async Task<List<GradeNameModel>> GetGradeList(string schoolCode)
|
||||
{
|
||||
//if (string.IsNullOrWhiteSpace(schoolCode))
|
||||
// return new List<GradeNameModel>();
|
||||
|
||||
//var dbContext = _studentRepository.DbContext;
|
||||
|
||||
//// 1️⃣ 先从数据库读取年级
|
||||
//var grades = await dbContext.Set<JS_Grade>()
|
||||
// .Where(x => x.SchoolCode == schoolCode)
|
||||
// .Include(g => g.Classes)
|
||||
// .ToListAsync();
|
||||
|
||||
//// 2️⃣ 如果数据库有数据,直接返回
|
||||
//if (grades != null && grades.Any())
|
||||
//{
|
||||
// return grades.Select(g => new GradeNameModel
|
||||
// {
|
||||
// Id = (int)g.Id,
|
||||
// GradeName = g.GradeName,
|
||||
// Class = g.Classes.Select(c => new ClassNameModel
|
||||
// {
|
||||
// Id = (int)c.Id,
|
||||
// ClassName = c.ClassName
|
||||
// }).ToList()
|
||||
// }).ToList();
|
||||
//}
|
||||
|
||||
//// 3️⃣ 数据库没有,调用京师接口获取学校年级班级
|
||||
//var schoolClass = await _jingShiTiJiaoService.GetClassBySchoolAsync(schoolCode);
|
||||
//if (schoolClass?.Grades == null || !schoolClass.Grades.Any())
|
||||
// throw new Exception("获取京师年级班级失败!");
|
||||
|
||||
//var gradeDtos = schoolClass.Grades;
|
||||
|
||||
//// 4️⃣ 提取所有 GradeNo / ClassNo
|
||||
//var allGradeNos = gradeDtos
|
||||
// .Where(g => !string.IsNullOrWhiteSpace(g.GradeNo))
|
||||
// .Select(g => g.GradeNo)
|
||||
// .ToList();
|
||||
|
||||
//var allClassNos = gradeDtos
|
||||
// .SelectMany(g => g.Classes ?? new List<JingShiClassDto>())
|
||||
// .Where(c => !string.IsNullOrWhiteSpace(c.ClassNo))
|
||||
// .Select(c => c.ClassNo)
|
||||
// .ToList();
|
||||
|
||||
//// 5️⃣ 查询数据库中已存在的数据(幂等)
|
||||
//var existGrades = await dbContext.Set<JS_Grade>()
|
||||
// .Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||
// .ToListAsync();
|
||||
|
||||
//var existClasses = await 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();
|
||||
|
||||
//// 6️⃣ 构造待插入的年级 + 班级
|
||||
//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
|
||||
// {
|
||||
// SchoolCode = schoolCode,
|
||||
// Code = "SYSTEM", // 这里可以用默认值或 paramDto.Code
|
||||
// GradeNo = g.GradeNo,
|
||||
// GradeName = g.GradeName,
|
||||
// Classes = g.Classes?
|
||||
// .Where(c => !string.IsNullOrWhiteSpace(c.ClassNo) && !existClassNoSet.Contains(c.ClassNo))
|
||||
// .Select(c => new JS_Class
|
||||
// {
|
||||
// SchoolCode = schoolCode,
|
||||
// Code = "SYSTEM",
|
||||
// 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 dbContext.Set<JS_Grade>().AddRangeAsync(newGrades);
|
||||
|
||||
//// 7️⃣ 保存(并发幂等兜底)
|
||||
//try
|
||||
//{
|
||||
// await dbContext.SaveChangesAsync();
|
||||
//}
|
||||
//catch (DbUpdateException ex) when (ex.InnerException?.Message.Contains("UNIQUE") == true)
|
||||
//{
|
||||
// // 并发冲突可忽略
|
||||
//}
|
||||
|
||||
//// 8️⃣ 回查数据库,组装返回 DTO
|
||||
//grades = await dbContext.Set<JS_Grade>()
|
||||
// .Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||
// .Include(g => g.Classes)
|
||||
// .ToListAsync();
|
||||
|
||||
//return grades.Select(g => new GradeNameModel
|
||||
//{
|
||||
// Id = (int)g.Id,
|
||||
// GradeName = g.GradeName,
|
||||
// Class = g.Classes.Select(c => new ClassNameModel
|
||||
// {
|
||||
// Id = (int)c.Id,
|
||||
// ClassName = c.ClassName
|
||||
// }).ToList()
|
||||
//}).ToList();
|
||||
|
||||
|
||||
if (string.IsNullOrWhiteSpace(schoolCode))
|
||||
return new List<GradeNameModel>();
|
||||
|
||||
// 1️⃣ 从数据库读取年级
|
||||
var grades = await _studentRepository.DbContext.Set<JS_Grade>()
|
||||
var dbContext = _studentRepository.DbContext;
|
||||
|
||||
// 1️⃣ 先从数据库读取年级
|
||||
var grades = await dbContext.Set<JS_Grade>()
|
||||
.Where(x => x.SchoolCode == schoolCode)
|
||||
.Include(g => g.Classes)
|
||||
.ToListAsync();
|
||||
|
||||
if (grades == null || !grades.Any())
|
||||
return new List<GradeNameModel>();
|
||||
|
||||
// 2️⃣ 从数据库读取班级
|
||||
var allGradeNos = grades.Select(x => x.GradeNo).ToList();
|
||||
var classes = await _studentRepository.DbContext.Set<JS_Class>()
|
||||
.Where(x => x.SchoolCode == schoolCode && allGradeNos.Contains(x.GradeNo))
|
||||
.ToListAsync();
|
||||
|
||||
// 3️⃣ 按年级分组班级
|
||||
var result = grades.Select(g => new GradeNameModel
|
||||
// 2️⃣ 数据库有数据,直接返回
|
||||
if (grades != null && grades.Any())
|
||||
{
|
||||
Id = (int)g.Id,
|
||||
GradeName = g.GradeName,
|
||||
Class = classes
|
||||
.Where(c => c.GradeNo == g.GradeNo)
|
||||
.Select(c => new ClassNameModel
|
||||
return grades.Select(g => new GradeNameModel
|
||||
{
|
||||
Id = (int)g.Id,
|
||||
GradeName = g.GradeName,
|
||||
Class = g.Classes.Select(c => new ClassNameModel
|
||||
{
|
||||
Id = (int)c.Id,
|
||||
ClassName = c.ClassName
|
||||
})
|
||||
.ToList()
|
||||
}).ToList()
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
// 3️⃣ 数据库没有数据,调用京师接口获取年级班级
|
||||
var schoolClass = await _jingShiTiJiaoService.GetClassBySchoolAsync(schoolCode);
|
||||
if (schoolClass?.Grades == null || !schoolClass.Grades.Any())
|
||||
return new List<GradeNameModel>(); // 或抛异常
|
||||
|
||||
var gradeDtos = schoolClass.Grades;
|
||||
|
||||
// 4️⃣ 直接组装 DTO 返回,不落库
|
||||
var result = gradeDtos.Select(g => new GradeNameModel
|
||||
{
|
||||
Id = 0, // 京师接口数据没有数据库 Id,可以用 0 或其他占位
|
||||
GradeName = g.GradeName,
|
||||
Class = g.Classes?.Select(c => new ClassNameModel
|
||||
{
|
||||
Id = 0, // 同上
|
||||
ClassName = c.ClassName
|
||||
}).ToList() ?? new List<ClassNameModel>()
|
||||
}).ToList();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user