学生作业详情

This commit is contained in:
tanglong 2026-05-13 11:24:46 +08:00
parent 93ae5ab8c1
commit 1f8a7ea1c6

View File

@ -300,42 +300,43 @@ namespace YD_WeChatApplet.Api.Services.Impl
/// 学生作业详情 /// 学生作业详情
/// </summary> /// </summary>
/// <param name="homeWorkId">作业Id</param> /// <param name="homeWorkId">作业Id</param>
/// <summary>
/// 学生作业详情
/// </summary>
public async Task<StudentHomeWorkDetailDto> HomeWorkDetailsByStudent(int homeWorkId) public async Task<StudentHomeWorkDetailDto> HomeWorkDetailsByStudent(int homeWorkId)
{ {
// 获取当前登录学生学号
var studentNo = UserLoginContext.Current.UserNo; var studentNo = UserLoginContext.Current.UserNo;
if (string.IsNullOrEmpty(studentNo)) if (string.IsNullOrEmpty(studentNo))
throw new Exception("未获取到当前学生信息"); throw new Exception("未获取到当前学生信息");
// 联合作业表和学生作业关联表,筛选出指定作业且属于当前学生的记录 // 方案:直接投影到目标 DTO,并处理所有可能为 null 的数据库字段
var query = from h in _sportsContext.HomeWork var dto = await _sportsContext.HomeWork
join hs in _sportsContext.HomeWorkStudents on h.Id equals hs.HomeWorkId .Where(h => h.Id == homeWorkId)
where h.Id == homeWorkId && hs.StudentNo == studentNo .SelectMany(h => h.HomeWorkStudents, (h, hs) => new { h, hs })
select new { HomeWork = h, StudentWork = hs }; .Where(x => x.hs.StudentNo == studentNo)
.Select(x => new StudentHomeWorkDetailDto
{
Id = x.h.Id,
WorkName = x.h.WorkName + "-" + x.h.WorkType.GetDescription(),
WorkText = x.h.WorkText,
StartTime = x.h.StartTime,
EndTime = x.h.EndTime,
StudentScope = x.h.StudentScope == 1 ? "全部学生" : "部分学生",
WorkModeType = x.h.WorkModeType,
var data = await query.FirstOrDefaultAsync(); StudentNo = x.hs.StudentNo,
if (data == null) StudentName = x.hs.StudentName ?? "",
Sex = x.hs.Sex,
Photo = x.hs.Photo ?? "",
WorkStatus = x.hs.WorkStatus,
Value = x.hs.Value
})
.FirstOrDefaultAsync();
if (dto == null)
throw new Exception("作业不存在或当前学生无权查看该作业"); throw new Exception("作业不存在或当前学生无权查看该作业");
// 组装平铺Dto // 格式化结果(与老师接口逻辑一致)
var dto = new StudentHomeWorkDetailDto
{
Id = data.HomeWork.Id,
WorkName = $"{data.HomeWork.WorkName}-{data.HomeWork.WorkType.GetDescription()}",
WorkText = data.HomeWork.WorkText,
StartTime = data.HomeWork.StartTime,
EndTime = data.HomeWork.EndTime,
StudentScope = data.HomeWork.StudentScope == 1 ? "全部学生" : "部分学生",
WorkModeType = data.HomeWork.WorkModeType,
StudentNo = data.StudentWork.StudentNo,
StudentName = data.StudentWork.StudentName,
Sex = data.StudentWork.Sex,
Photo = data.StudentWork.Photo,
WorkStatus = data.StudentWork.WorkStatus,
Value = data.StudentWork.Value
};
// 根据模式类型格式化结果(与老师详情接口逻辑一致)
if (dto.WorkModeType == WorkModeType.TimerCount) if (dto.WorkModeType == WorkModeType.TimerCount)
dto.Result = $"{dto.Value}个"; dto.Result = $"{dto.Value}个";
else else