diff --git a/WeChatApplet/Controllers/HomeWorkController.cs b/WeChatApplet/Controllers/HomeWorkController.cs index 2da9a63..eae481a 100644 --- a/WeChatApplet/Controllers/HomeWorkController.cs +++ b/WeChatApplet/Controllers/HomeWorkController.cs @@ -71,7 +71,7 @@ namespace YD_WeChatApplet.Api.Controllers } /// - /// 作业详情 + /// 老师作业详情 /// /// /// @@ -81,5 +81,17 @@ namespace YD_WeChatApplet.Api.Controllers var res = await _homeWorkService.HomeWorkDetailsByTeacher(homeWorkId); return res; } + + /// + /// 学生作业详情 + /// + /// + /// + [HttpGet("HomeWorkDetailsByStudent")] + public async Task HomeWorkDetailsByStudent(int homeWorkId) + { + var res = await _homeWorkService.HomeWorkDetailsByStudent(homeWorkId); + return res; + } } } diff --git a/WeChatApplet/Services/Impl/HomeWorkService.cs b/WeChatApplet/Services/Impl/HomeWorkService.cs index c4cba6b..91007fa 100644 --- a/WeChatApplet/Services/Impl/HomeWorkService.cs +++ b/WeChatApplet/Services/Impl/HomeWorkService.cs @@ -296,6 +296,54 @@ namespace YD_WeChatApplet.Api.Services.Impl return res; } + /// + /// 学生作业详情 + /// + /// 作业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 }; + + var data = await query.FirstOrDefaultAsync(); + if (data == 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 + dto.Result = dto.Value.ToMinutesSeconds(); + + return dto; + } + /// /// 作业项目列表 /// diff --git a/WeChatApplet/Services/Interface/IHomeWorkService.cs b/WeChatApplet/Services/Interface/IHomeWorkService.cs index d5809d8..5066bd8 100644 --- a/WeChatApplet/Services/Interface/IHomeWorkService.cs +++ b/WeChatApplet/Services/Interface/IHomeWorkService.cs @@ -27,12 +27,19 @@ namespace YD_WeChatApplet.Services Task> HomeWorkRecordByTeacher(PatriarchHomeWorkHistoryDto dto); /// - /// 作业详情 + /// 老师作业详情 /// /// /// Task HomeWorkDetailsByTeacher(int homeWorkId); + /// + /// 学生作业详情 + /// + /// + /// + Task HomeWorkDetailsByStudent(int homeWorkId); + /// /// 作业项目列表 /// diff --git a/YD_WeChatApplet.Commons/Dto/HomeWork/HomeWorkRecordDto.cs b/YD_WeChatApplet.Commons/Dto/HomeWork/HomeWorkRecordDto.cs index 5b67b14..b2e5fa3 100644 --- a/YD_WeChatApplet.Commons/Dto/HomeWork/HomeWorkRecordDto.cs +++ b/YD_WeChatApplet.Commons/Dto/HomeWork/HomeWorkRecordDto.cs @@ -130,4 +130,52 @@ namespace YD_WeChatApplet.Commons.Dto.HomeWork /// public string Result { get; set; } } + + /// + /// 学生作业详情 + /// + public class StudentHomeWorkDetailDto + { + /// 作业Id + public int Id { get; set; } + + /// 作业名称(含类型) + public string WorkName { get; set; } + + /// 作业内容 + public string WorkText { get; set; } + + /// 开始时间 + public DateTime StartTime { get; set; } + + /// 结束时间 + public DateTime EndTime { get; set; } + + /// 学生范围 + public string StudentScope { get; set; } + + /// 模式类型 + public WorkModeType WorkModeType { get; set; } + + /// 当前学生学号 + public string StudentNo { get; set; } + + /// 学生姓名 + public string StudentName { get; set; } + + /// 性别 + public int Sex { get; set; } + + /// 学生照片 + public string Photo { get; set; } + + /// 作业状态(1-未开始/进行中等,根据业务定义) + public int WorkStatus { get; set; } + + /// 原始成绩(次数/秒数) + public int Value { get; set; } + + /// 格式化后的结果(如“30个”或“01:30”) + public string Result { get; set; } + } }