From 1f8a7ea1c671d275a2cbcb47b4fd3e8fe9388215 Mon Sep 17 00:00:00 2001 From: tanglong <842690096@qq.com> Date: Wed, 13 May 2026 11:24:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E4=BD=9C=E4=B8=9A=E8=AF=A6?= =?UTF-8?q?=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WeChatApplet/Services/Impl/HomeWorkService.cs | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/WeChatApplet/Services/Impl/HomeWorkService.cs b/WeChatApplet/Services/Impl/HomeWorkService.cs index 91007fa..efb82ab 100644 --- a/WeChatApplet/Services/Impl/HomeWorkService.cs +++ b/WeChatApplet/Services/Impl/HomeWorkService.cs @@ -300,42 +300,43 @@ namespace YD_WeChatApplet.Api.Services.Impl /// 学生作业详情 /// /// 作业Id + /// + /// 学生作业详情 + /// public async Task HomeWorkDetailsByStudent(int homeWorkId) { - // 获取当前登录学生学号 var studentNo = UserLoginContext.Current.UserNo; if (string.IsNullOrEmpty(studentNo)) throw new Exception("未获取到当前学生信息"); - // 联合作业表和学生作业关联表,筛选出指定作业且属于当前学生的记录 - var query = from h in _sportsContext.HomeWork - join hs in _sportsContext.HomeWorkStudents on h.Id equals hs.HomeWorkId - where h.Id == homeWorkId && hs.StudentNo == studentNo - select new { HomeWork = h, StudentWork = hs }; + // 方案:直接投影到目标 DTO,并处理所有可能为 null 的数据库字段 + var dto = await _sportsContext.HomeWork + .Where(h => h.Id == homeWorkId) + .SelectMany(h => h.HomeWorkStudents, (h, hs) => new { h, 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(); - if (data == null) + StudentNo = x.hs.StudentNo, + 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("作业不存在或当前学生无权查看该作业"); - // 组装平铺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) dto.Result = $"{dto.Value}个"; else