diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java index eb7660d0..4b1bf8fc 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java @@ -173,10 +173,11 @@ public class StudyCourseApi extends ApiBaseController{ exportMap.put("学习进度", "学习进度"); // 2.查询课程的所有考试答卷信息,拼接动态表头(XXX考试成绩) // 注意:这里的考试信息每个学生每门课程只有一条,实际数据可能多次考试,因此根据考试配置中的(最高分/最新数据)获取对应列表数据即可(本次新增接口) - // TODO 这里回头要换成根据考试设置最新/最多的接口 List studyExams = studyExamService.getByCourseId(courseId); // courseExam和studyExam表都有testName字段,查看现有逻辑后,选择studyExam表的testName字段作为考试名称 // 因为需求没提,因此查询按默认id排序 + // 查询学习记录接口,学习记录默认存储获取最高/最新的分数,备用 + List studyCourseItems = service.getStudyCourseItemByCourseId(courseId); // 判断非空则拼接表头 // 用于处理考试名称重复的情况 if (studyExams != null && !studyExams.isEmpty()) { @@ -297,16 +298,25 @@ public class StudyCourseApi extends ApiBaseController{ map.put("学习进度", studyCourse1.getProgress() != null ? studyCourse1.getProgress() + "%" : ""); // 按考试顺序拼接考试信息 if (studyExams != null && !studyExams.isEmpty()) { - // 获取当前学生该课程的所有考试成绩 TODO 这里需要确认 - List studentExams = studyExamService.getByStudyIdAndContentId(studyCourse1.getId(), null); + // 获取当前学生该课程的所有考试成绩 + List studentExams = studyExams.stream().filter(studyExam -> Objects.equals(studyExam.getStudyId(), studyCourse1.getId())).collect(Collectors.toList()); // 修改为使用testId作为键而不是testName Map examMap = studentExams.stream().collect(Collectors.toMap(StudyExam::getTestId, Function.identity(), (e1, e2) -> e1)); // 按顺序添加考试成绩,使用testId匹配 for (StudyExam studyExam : studyExams) { String testId = studyExam.getTestId(); String examName = studyExam.getTestName(); + String contentId = studyExam.getContentId(); if (examMap.containsKey(testId)) { - map.put(examName, examMap.get(testId).getScore()); + // 这里不直接用考试成绩,因为有多次考试 + // 使用contentId+aid组合筛选学习记录数据获取成绩,因为学习记录中的成绩默认按考试设置最新/最高分的方式计算 + Optional studyCourseItemOptional = studyCourseItems.stream().filter(studyCourseItem -> Objects.equals(studyCourseItem.getContentId(), contentId) && Objects.equals(studyCourseItem.getAid(), studyCourse1.getAid())).findFirst(); + // 如果存在成绩,填写成绩,否则填入空值 + if (studyCourseItemOptional.isPresent()) { + map.put(examName, studyCourseItemOptional.get().getScore()); + } else { + map.put(examName, ""); + } } else { // 当前学生未进行的考试,填入空值 map.put(examName, ""); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java index 2c2d621f..1e6c3857 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java @@ -116,4 +116,15 @@ public interface IStudyCourseService { List findByCourseAndUsers(String courseId,List aids) throws Exception; List getCourseId(String userId); + + /** + * 根据课程id得到对应课程学习记录(包括考试记录) + * 这个接口从study_course_item表获取,这个表的score考试分数字段保存或更新时,是根据考试设置最新/最高分的 + * 25.11.24新增 + * + * @param courseId 课程id + * @return 考试记录集合 + */ + List getStudyCourseItemByCourseId(String courseId); + } \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java index d6bb3f6d..57754dc3 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java @@ -748,4 +748,17 @@ public class StudyCourseServiceImpl implements IStudyCourseService{ return studyCourseDao.findList(FieldFilters.in("id", ids)); } + /** + * 根据课程id得到对应考试记录 + * 这个接口从study_course_item表获取,这个表的score分数字段更新时,是根据考试设置最新/最高分的 + * 25.11.24新增 + * + * @param courseId 课程id + * @return 考试记录集合 + */ + @Override + public List getStudyCourseItemByCourseId(String courseId) { + return studyCourseItemDao.findList(FieldFilters.eq("courseId", courseId)); + } + } \ No newline at end of file