2026-01-28 16:17:17 +08:00

302 lines
11 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using VOL.Ai.IServices;
using VOL.Ai.Services;
using VOL.Business.IServices;
using VOL.Business.IServices.Training;
using VOL.Core.Filters;
using VOL.Core.Utilities;
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;
namespace VOL.WebApi.Controllers.JingShiTiJiao
{
[Route("api/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v3")]
[TypeFilter(typeof(CustomApiResponseFilter))]
[AllowAnonymous]
public class JingShiTiJiaoController : ControllerBase
{
#region 初始化
private readonly IS_HomeWorkService _homeWorkService;
private readonly IJingShiTiJiaoService _jingShiTiJiaoService;
private readonly II_TrainingDataService _trainingDataService;
private readonly S_StudentRepository _studentRepository;
public JingShiTiJiaoController(
IS_HomeWorkService homeWorkService, II_TrainingDataService trainingDataService,IJingShiTiJiaoService jingShiTiJiaoService, S_StudentRepository studentRepository)
{
_homeWorkService = homeWorkService;
_trainingDataService = trainingDataService;
_jingShiTiJiaoService = jingShiTiJiaoService;
_studentRepository = studentRepository;
}
#endregion
#region 作业
/// <summary>
/// 作业列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetHomeWorkPageList))]
public async Task<PageDataDto<HomeWorkListModel>> GetHomeWorkPageList(HomeWorkPageListParam paramDto)
{
return await _homeWorkService.GetHomeWorkPageList(paramDto);
}
/// <summary>
/// 作业下学生列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetHomeWorkStudents))]
public async Task<PageDataDto<HomeWorkStudentsModel>> GetHomeWorkStudents(HomeWorkStudentsParam paramDto)
{
return await _homeWorkService.GetHomeWorkStudents(paramDto);
}
/// <summary>
/// 作业详情
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetSubmittedAssignments))]
public async Task<List<SubmittedAssignmentsModel>> GetSubmittedAssignments(int homeWorkId, string studentNo)
{
return await _homeWorkService.GetSubmittedAssignments(homeWorkId, studentNo);
}
#endregion
#region 课堂报告
/// <summary>
/// 课堂报告列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetClassReportList))]
public async Task<PageDataDto<ClassReportModel>> GetClassReportList(ClassReportListParam paramDto)
{
return await _trainingDataService.GetClassReportList(paramDto);
}
/// <summary>
/// 课堂报告详情
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetClassReportDetails))]
public async Task<GetClassReportDetailsModel> GetClassReportDetails(int id)
{
return await _trainingDataService.GetClassReportDetails(id);
}
/// <summary>
/// 学生课堂报告详情
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetStudentClassReportDetails))]
public async Task<GetStudentClassReportDetailsModel> GetStudentClassReportDetails(GetStudentClassReportDetailsDto paramDto)
{
return await _trainingDataService.GetStudentClassReportDetails(paramDto);
}
#endregion
/// <summary>
/// 获取所有年级名称
/// </summary>
/// <returns></returns>
/// <summary>
/// 获取年级列表
/// </summary>
/// <returns></returns>
[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>();
//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())
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;
}
}
}