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