我的练习-练习查询

This commit is contained in:
Lqc 2025-10-14 05:44:32 +08:00
parent 1887802f52
commit 1bd0490dd9
2 changed files with 104 additions and 0 deletions

View File

@ -1550,6 +1550,107 @@ public class AiolExamController extends JeecgController<AiolExam, IAiolExamServi
return Result.ok(myExamDTOList);
}
@Operation(summary = "我的练习-练习查询")
@GetMapping(value = "/myPracticeList")
public Result<?> queryMyPracticeList(HttpServletRequest request,@RequestParam(name = "type" , defaultValue = "4" , required = false) Integer type) {
// 尝试获取token判断用户id
String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
List<MyExamDTO> myExamDTOList = new ArrayList<>();
if (token != null && !token.trim().isEmpty()) {
try {
String username = JwtUtil.getUsername(token);
LoginUser sysUser = sysBaseApi.getUserByName(username);
if (sysUser != null) {
//获取课程id列表
List<AiolCourseSignup> courseSignupList = aiolCourseSignupMapper.selectList(
new QueryWrapper<AiolCourseSignup>()
.eq("user_id", sysUser.getId())
.select("course_id")
);
// 获取课程章节id列表
List<AiolCourseSection> courseId = aiolCourseSectionService.list(
new QueryWrapper<AiolCourseSection>()
.in("course_id", courseSignupList.stream().map(AiolCourseSignup::getCourseId).collect(Collectors.toList()))
.select("id"));
List<String> courseIdList = courseId.stream()
.map(AiolCourseSection::getId)
.collect(Collectors.toList());
//获取实体列表里的练习
List<String> list = new ArrayList<>();
if (!courseIdList.isEmpty()) {
list = aiolEntityLinkService.list(new QueryWrapper<AiolEntityLink>()
.eq("source_type", "course_section")
.in("source_id", courseIdList)
.eq("target_type", "exam")
.select("target_id")).stream().map(AiolEntityLink::getTargetId).collect(Collectors.toList());
} else return Result.ok();
// 查询练习
QueryWrapper<AiolExam> queryWrapper = new QueryWrapper<>();
//练习
queryWrapper.eq("type",0);
if (type != 4) {
queryWrapper.eq("status", type);
}
if (!list.isEmpty()) {
queryWrapper.in("id", list);
} else return Result.ok();
// 查询练习列表并去重
List<AiolExam> examList = aiolExamService.list(queryWrapper)
.stream()
.distinct()
.collect(Collectors.toList());
// 查询练习关联的练习记录
if(examList.isEmpty()){
return Result.ok();
}
List<AiolExamRecord> examRecordList = aiolExamRecordService.
list(
new QueryWrapper<AiolExamRecord>().
in("exam_id", examList.stream().map(AiolExam::getId).collect(Collectors.toList()))
);
// 预先构建examId到examRecord的Map
Map<String, AiolExamRecord> examRecordMap = examRecordList.stream()
.collect(Collectors.toMap(
AiolExamRecord::getExamId,
record -> record,
(existing, replacement) -> existing // 如果有重复key保留第一个
));
for (AiolExam exam : examList) {
MyExamDTO myExamDTO = new MyExamDTO();
myExamDTO.setExamId(exam.getId());
myExamDTO.setExamName(exam.getName());
long currentTime = new Date().getTime();
long endTime = 0 ;
if (exam.getEndTime()!= null){
endTime = exam.getEndTime().getTime();
}
if(endTime==0||currentTime <= endTime){
myExamDTO.setExamStatus("进行中");
}else {
myExamDTO.setExamStatus("已结束"); // 已结束
}
myExamDTO.setExamStartTime(exam.getStartTime());
myExamDTO.setExamTime(exam.getTotalTime());
AiolExamRecord examRecord = examRecordMap.get(exam.getId());
if (examRecord != null) {
myExamDTO.setExamScore(examRecord.getTotalScore());
}
myExamDTOList.add(myExamDTO);
}
}
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
return Result.ok(myExamDTOList);
}
@Scheduled(cron = "0 */5 * * * ?") // 每5分钟执行一次
public void updateExamStatus() {
// 获取当前时间

View File

@ -238,6 +238,9 @@ public class AiolPaperQuestionController extends JeecgController<AiolPaperQuesti
List<String> questionIds = list.stream()
.map(AiolPaperQuestion::getQuestionId)
.collect(Collectors.toList());
if(questionIds.isEmpty()){
return Result.error("试卷没有题目");
}
return Result.OK(convertToQuestionAnswerDTO(questionIds,aiolQuestionService,optionService,answerService));
}