From 1bd0490dd9ca514f2b462b69663815e50a616c6e Mon Sep 17 00:00:00 2001 From: Lqc Date: Tue, 14 Oct 2025 05:44:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E7=BB=83=E4=B9=A0-=E7=BB=83?= =?UTF-8?q?=E4=B9=A0=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aiol/controller/AiolExamController.java | 101 ++++++++++++++++++ .../AiolPaperQuestionController.java | 3 + 2 files changed, 104 insertions(+) diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolExamController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolExamController.java index 3ab60d65..f732bcb3 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolExamController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolExamController.java @@ -1550,6 +1550,107 @@ public class AiolExamController extends JeecgController queryMyPracticeList(HttpServletRequest request,@RequestParam(name = "type" , defaultValue = "4" , required = false) Integer type) { + // 尝试获取token,判断用户id + String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); + List 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 courseSignupList = aiolCourseSignupMapper.selectList( + new QueryWrapper() + .eq("user_id", sysUser.getId()) + .select("course_id") + ); + + // 获取课程章节id列表 + List courseId = aiolCourseSectionService.list( + new QueryWrapper() + .in("course_id", courseSignupList.stream().map(AiolCourseSignup::getCourseId).collect(Collectors.toList())) + .select("id")); + List courseIdList = courseId.stream() + .map(AiolCourseSection::getId) + .collect(Collectors.toList()); + + //获取实体列表里的练习 + List list = new ArrayList<>(); + if (!courseIdList.isEmpty()) { + list = aiolEntityLinkService.list(new QueryWrapper() + .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 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 examList = aiolExamService.list(queryWrapper) + .stream() + .distinct() + .collect(Collectors.toList()); + + // 查询练习关联的练习记录 + if(examList.isEmpty()){ + return Result.ok(); + } + List examRecordList = aiolExamRecordService. + list( + new QueryWrapper(). + in("exam_id", examList.stream().map(AiolExam::getId).collect(Collectors.toList())) + ); + // 预先构建examId到examRecord的Map + Map 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() { // 获取当前时间 diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolPaperQuestionController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolPaperQuestionController.java index f5f38129..7e20017f 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolPaperQuestionController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolPaperQuestionController.java @@ -238,6 +238,9 @@ public class AiolPaperQuestionController extends JeecgController questionIds = list.stream() .map(AiolPaperQuestion::getQuestionId) .collect(Collectors.toList()); + if(questionIds.isEmpty()){ + return Result.error("试卷没有题目"); + } return Result.OK(convertToQuestionAnswerDTO(questionIds,aiolQuestionService,optionService,answerService)); }