1.添加根据课程id得到对应学习记录(包括考试记录)接口
2.修改学习记录中的分数根据考试设置为最新/最高分数
This commit is contained in:
miaowenbo
2025-11-24 17:42:17 +08:00
parent a579317829
commit 2df7e9061c
3 changed files with 38 additions and 4 deletions

View File

@@ -173,10 +173,11 @@ public class StudyCourseApi extends ApiBaseController{
exportMap.put("学习进度", "学习进度");
// 2.查询课程的所有考试答卷信息拼接动态表头XXX考试成绩
// 注意:这里的考试信息每个学生每门课程只有一条,实际数据可能多次考试,因此根据考试配置中的(最高分/最新数据)获取对应列表数据即可(本次新增接口)
// TODO 这里回头要换成根据考试设置最新/最多的接口
List<StudyExam> studyExams = studyExamService.getByCourseId(courseId);
// courseExam和studyExam表都有testName字段查看现有逻辑后选择studyExam表的testName字段作为考试名称
// 因为需求没提因此查询按默认id排序
// 查询学习记录接口,学习记录默认存储获取最高/最新的分数,备用
List<StudyCourseItem> 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<StudyExam> studentExams = studyExamService.getByStudyIdAndContentId(studyCourse1.getId(), null);
// 获取当前学生该课程的所有考试成绩
List<StudyExam> studentExams = studyExams.stream().filter(studyExam -> Objects.equals(studyExam.getStudyId(), studyCourse1.getId())).collect(Collectors.toList());
// 修改为使用testId作为键而不是testName
Map<String, StudyExam> 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<StudyCourseItem> 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, "");

View File

@@ -116,4 +116,15 @@ public interface IStudyCourseService {
List<CourseStudyItem> findByCourseAndUsers(String courseId,List<String> aids) throws Exception;
List<StudyCourse> getCourseId(String userId);
/**
* 根据课程id得到对应课程学习记录包括考试记录
* 这个接口从study_course_item表获取这个表的score考试分数字段保存或更新时是根据考试设置最新/最高分的
* 25.11.24新增
*
* @param courseId 课程id
* @return 考试记录集合
*/
List<StudyCourseItem> getStudyCourseItemByCourseId(String courseId);
}

View File

@@ -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<StudyCourseItem> getStudyCourseItemByCourseId(String courseId) {
return studyCourseItemDao.findList(FieldFilters.eq("courseId", courseId));
}
}