Browse Source

考试新老 阅卷合并代码

yuanjunhao 2 weeks ago
parent
commit
380aa2c5fd

+ 74 - 7
web/src/main/java/com/ynfy/buss/exam/exam/controller/ExamController.java

@@ -14,6 +14,7 @@ import com.ynfy.buss.exam.paper.entity.Paper;
 import com.ynfy.buss.exam.paperrulegroup.service.IPaperRuleGroupService;
 import com.ynfy.buss.exam.question.enums.QuestionType;
 import com.ynfy.buss.exam.userexam.entity.UserExam;
+import com.ynfy.buss.exam.userexam.service.IUserExamPapersService;
 import com.ynfy.buss.exam.userexam.service.IUserExamService;
 import com.ynfy.buss.exam.userexamresult.entity.vo.UserExamScoreVO;
 import com.ynfy.buss.exam.userexamresult.service.IUserExamResultService;
@@ -32,6 +33,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
@@ -62,6 +64,8 @@ public class ExamController extends JeecgController<Exam, IExamService> {
     @Autowired
     private IExamPapersService iExamPapersService;
 
+    @Autowired
+    private IUserExamPapersService UserExamPapersService;
     /**
      * 分页列表查询
      *
@@ -83,11 +87,51 @@ public class ExamController extends JeecgController<Exam, IExamService> {
         IPage<Exam> pageList = examService.page(page, queryWrapper);
         if (!CollectionUtils.isEmpty(pageList.getRecords())) {
             pageList.getRecords().forEach(item -> item.setState(examService.getExamState(item)));
+//            pageList.getRecords().forEach(item -> item.setExamPapers(iExamPapersService.ExamIdExamPapers(item.getId())));
+        }
+        List<Exam> examList1=new ArrayList<>();
+        List<Exam>  examList=pageList.getRecords();
+        for (Exam value : examList) {
+            if (value.getPaperId()!=null) {
+                examList1.add(value);
+            }
+        }
+        pageList.setRecords(examList1);
+        return Result.OK(pageList);
+    }
+    /**
+     * 分页列表查询
+     *
+     * @param exam
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "考试-分页列表查询", notes = "考试-分页列表查询")
+    @RequiresPermissions("exam:listPapers")
+    @GetMapping(value = "/listPapers")
+    public Result<IPage<Exam>> queryPagePapersList(Exam exam,
+                                             @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                             HttpServletRequest req) {
+        QueryWrapper<Exam> queryWrapper = QueryGenerator.initQueryWrapper(exam, req.getParameterMap());
+        Page<Exam> page = new Page<Exam>(pageNo, pageSize);
+        IPage<Exam> pageList = examService.page(page, queryWrapper);
+        if (!CollectionUtils.isEmpty(pageList.getRecords())) {
+            pageList.getRecords().forEach(item -> item.setState(examService.getExamState(item)));
             pageList.getRecords().forEach(item -> item.setExamPapers(iExamPapersService.ExamIdExamPapers(item.getId())));
         }
+        List<Exam> examList1=new ArrayList<>();
+        List<Exam>  examList=pageList.getRecords();
+        for (Exam value : examList) {
+            if (value.getPaperId()==null) {
+                examList1.add(value);
+            }
+        }
+        pageList.setRecords(examList1);
         return Result.OK(pageList);
     }
-
     /**
      * 添加
      *
@@ -400,14 +444,21 @@ public class ExamController extends JeecgController<Exam, IExamService> {
     }
     /**
      * 用户考试成绩详情,包括答题卡,试题(包含正确答案)
-     *
+     *,@RequestParam(name = "paperId") String paperId
      * @param userExamId
      * @return
      */
     @ApiOperation(value = "考试-用户考试成绩详情")
     @GetMapping(value = "/userExamResultDetail")
-    public Result<?> userExamResultDetail(@RequestParam(name = "userExamId") String userExamId) {
-        return Result.ok(examService.userExamResultDetail(userExamId));
+    public Result<?> userExamResultDetail(@RequestParam(name = "userExamId") String userExamId,@RequestParam(name = "paperId") String paperId) {
+        //判断当前考试是不是单次考试
+        if (UserExamPapersService.UserExamIdAllUserExamPapers2(userExamId).isEmpty()){
+            return Result.ok(examService.userExamResultDetail(userExamId));
+        }else {
+//1905441425739988993
+            return Result.ok(examService.userExamPaperResultDetail(userExamId,paperId));
+
+        }
     }
 //    /**
 //     * 用户考试成绩详情,包括答题卡,试题(包含正确答案)
@@ -416,9 +467,9 @@ public class ExamController extends JeecgController<Exam, IExamService> {
 //     * @return
 //     */
 //    @ApiOperation(value = "考试-用户考试成绩详情")
-//    @GetMapping(value = "/userExamResultDetail")
-//    public Result<?> userExamResultDetail(@RequestParam(name = "userExamId") String userExamId,@RequestParam(name = "paperId") String paperId) {
-//        return Result.ok(examService.userExamResultDetail(userExamId,paperId));
+//    @GetMapping(value = "/userExamPaperResultDetail")
+//    public Result<?> userExamPaperResultDetail(@RequestParam(name = "userExamId") String userExamId,@RequestParam(name = "paperId") String paperId) {
+//        return Result.ok(examService.userExamPaperResultDetail(userExamId,paperId));
 //    }
     /**
      * 用户考试成绩详情,下一张试卷阅卷
@@ -499,4 +550,20 @@ public class ExamController extends JeecgController<Exam, IExamService> {
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         return Result.ok(examService.examRecordExist(user.getId(), examId));
     }
+
+    /**
+     * 获取考试有几套试卷
+     *
+     * @param examId
+     * @return
+     */
+    @ApiOperation(value = "获取考试有几套试卷")
+    @GetMapping(value = "/chaPaper")
+    public Result<?> chaPaper(@RequestParam(name = "examId") String examId) {
+        List<ExamPapers>  examPapersList=iExamPapersService.ExamIdExamPapers(examId);
+        if (examPapersList.isEmpty()){
+            examPapersList=iExamPapersService.ExamIdExamPapers2(examId);
+        }
+        return Result.ok(examPapersList);
+    }
 }

+ 1 - 0
web/src/main/java/com/ynfy/buss/exam/exam/mapper/ExamPapersMapper.java

@@ -23,4 +23,5 @@ public interface ExamPapersMapper extends BaseMapper<ExamPapers> {
      */
     List<ExamPapers> getExamIdExamPaper(@Param("examId")String examId);
     List<ExamPapers> ExamIdExamPapers(@Param("examId")String examId);
+    List<ExamPapers> ExamIdExamPapers2(@Param("examId")String examId);
 }

+ 5 - 0
web/src/main/java/com/ynfy/buss/exam/exam/mapper/xml/ExamPapersMapper.xml

@@ -16,4 +16,9 @@
         and ep.exam_id=#{examId}
         order by ep.paper_order
     </select>
+    <select id="ExamIdExamPapers2" resultType="com.ynfy.buss.exam.exam.entity.ExamPapers">
+        select ep.*,p.title,p.join_type,p.question_count from 	exam ep,	paper p
+        where ep.paper_id=p.id
+          and ep.exam_id=#{examId}
+    </select>
 </mapper>

+ 1 - 0
web/src/main/java/com/ynfy/buss/exam/exam/service/IExamPapersService.java

@@ -34,4 +34,5 @@ public interface IExamPapersService extends IService<ExamPapers> {
     List<ExamPapers> getExamIdPaper(String examId);
     //根据考试id获取考试绑定的所有试卷详情
     List<ExamPapers> ExamIdExamPapers(String examId);
+    List<ExamPapers> ExamIdExamPapers2(String examId);
 }

+ 1 - 1
web/src/main/java/com/ynfy/buss/exam/exam/service/IExamService.java

@@ -60,7 +60,7 @@ public interface IExamService extends IService<Exam> {
      * @return
      */
     UserExamDTO userExamResultDetail(String userExamId);
-//    UserExamDTO userExamResultDetail(String userExamId,String paperId);
+    UserExamDTO userExamPaperResultDetail(String userExamId,String paperId);
     /**
      * 用户考试成绩详情,
      *

+ 4 - 0
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamPapersServiceImpl.java

@@ -48,4 +48,8 @@ public class ExamPapersServiceImpl extends ServiceImpl<ExamPapersMapper, ExamPap
     public List<ExamPapers> ExamIdExamPapers(String examId) {
         return examPapersMapper.ExamIdExamPapers(examId);
     }
+    @Override
+    public List<ExamPapers> ExamIdExamPapers2(String examId) {
+        return examPapersMapper.ExamIdExamPapers2(examId);
+    }
 }

+ 68 - 42
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -733,7 +733,6 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     public UserExamDTO examDetail(String userExamId, boolean needAnswerFlag, boolean needAnalysis, boolean needClearBlankContent, boolean needRenderBlank) {
         UserExamDTO dto = new UserExamDTO();
         UserExam userExam = userExamService.listUserExam(userExamId);
-//        System.out.println("yyz显示提交"+userExam);
         if (Objects.isNull(userExam)) {
             throw new JeecgBootException("考试不存在!");
         }
@@ -821,14 +820,12 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     public UserExamDTO userExamResultDetail(String userExamId,String paperId, boolean needAnswerFlag, boolean needAnalysis, boolean needClearBlankContent, boolean needRenderBlank) {
         UserExamDTO dto = new UserExamDTO();
         UserExam userExam = userExamService.listUserExamYueJuan(userExamId,paperId);
-        //显示试卷详情
         if (Objects.isNull(userExam)) {
             throw new JeecgBootException("考试不存在!");
         }
         BeanUtils.copyProperties(userExam, dto);
         List<UserExamQuestion> userExamQuestionList = dto.getUserExamQuestionList();
         List<Map<String, AnswerCardDTO>> answerCardList = new ArrayList<>();
-        List< AnswerCardDTO> answerCardList2 = new ArrayList<>();
         if (!CollectionUtils.isEmpty(userExamQuestionList)) {
             List<UserExamQuestion> rootQuestionList = userExamQuestionList.stream().filter(r -> !Objects.isNull(r.getChild()) && !r.getChild())
                     .sorted(Comparator.comparing(UserExamQuestion::getQuestionIndex)).collect(Collectors.toList());
@@ -843,37 +840,66 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
 
                 //设置答题卡
                 setAnswerCard(rootQuestionList, answerCardList);
-                setAnswerCard2(rootQuestionList, answerCardList2);
                 dto.setUserExamQuestionList(rootQuestionList);
             }
         }
         dto.setAnswerCardList(answerCardList);
-        dto.setAnswerCardList2(answerCardList2);
-//        //获取有没有正在考试的试卷信息
-//        LambdaQueryWrapper<UserExamPapers> wrapperpaper = new LambdaQueryWrapper<UserExamPapers>();
-//        wrapperpaper.eq(UserExamPapers::getUserExamId, userExam.getId())
-//                .eq(UserExamPapers::getState, PaperState.ING);
-//        List<UserExamPapers> userExamPapersList=BeanContext.getApplicationContext().getBean(IUserExamPapersService.class).list(wrapperpaper);
-//        //获取本地当前时间
-//        userExamPapersList.get(0).setSystemTime(new Date());
-//        //在返回值中添加考试试卷信息
-//        dto.setUserExamPapersList(userExamPapersList);
-        //添加当前考试的所有试卷信息
-        List<ExamPapers> examPapersList=iExamPapersService.getExamIdPaper(userExam.getExamId());
-        List<UserExamPapers> userExamPapersList1=new ArrayList<UserExamPapers>();
-        for (ExamPapers examPapers : examPapersList) {
-            //获取是否考试状态并赋值
-            userExamPapersList1 = iUserExamPapersService.UserExamPapersList(userExamId, examPapers.getPaperId());
-            if (userExamPapersList1.size() == 0) {
-                examPapers.setState(9);
-            } else {
-                examPapers.setState(userExamPapersList1.get(0).getState());
-            }
-
-        }
-
-        dto.setExamPapersList(examPapersList);
         return dto;
+        //        UserExamDTO dto = new UserExamDTO();
+//        UserExam userExam = userExamService.listUserExamYueJuan(userExamId,paperId);
+//        //显示试卷详情
+//        if (Objects.isNull(userExam)) {
+//            throw new JeecgBootException("考试不存在!");
+//        }
+//        BeanUtils.copyProperties(userExam, dto);
+//        List<UserExamQuestion> userExamQuestionList = dto.getUserExamQuestionList();
+//        List<Map<String, AnswerCardDTO>> answerCardList = new ArrayList<>();
+//        List< AnswerCardDTO> answerCardList2 = new ArrayList<>();
+//        if (!CollectionUtils.isEmpty(userExamQuestionList)) {
+//            List<UserExamQuestion> rootQuestionList = userExamQuestionList.stream().filter(r -> !Objects.isNull(r.getChild()) && !r.getChild())
+//                    .sorted(Comparator.comparing(UserExamQuestion::getQuestionIndex)).collect(Collectors.toList());
+//            List<UserExamQuestion> childQuestionList = userExamQuestionList.stream().filter(r -> !Objects.isNull(r.getChild()) && r.getChild())
+//                    .sorted(Comparator.comparing(UserExamQuestion::getQuestionIndex)).collect(Collectors.toList());
+//            if (!CollectionUtils.isEmpty(rootQuestionList)) {
+//                //获取题目和答案
+//                assembleUserExamQuestion(userExamId, rootQuestionList, childQuestionList, needAnswerFlag, needAnalysis, false, true, needClearBlankContent);
+//
+//                //设置题目
+//                setUserExamQuestion(rootQuestionList, needRenderBlank);
+//
+//                //设置答题卡
+//                setAnswerCard(rootQuestionList, answerCardList);
+//                setAnswerCard2(rootQuestionList, answerCardList2);
+//                dto.setUserExamQuestionList(rootQuestionList);
+//            }
+//        }
+//        dto.setAnswerCardList(answerCardList);
+//        dto.setAnswerCardList2(answerCardList2);
+////        //获取有没有正在考试的试卷信息
+////        LambdaQueryWrapper<UserExamPapers> wrapperpaper = new LambdaQueryWrapper<UserExamPapers>();
+////        wrapperpaper.eq(UserExamPapers::getUserExamId, userExam.getId())
+////                .eq(UserExamPapers::getState, PaperState.ING);
+////        List<UserExamPapers> userExamPapersList=BeanContext.getApplicationContext().getBean(IUserExamPapersService.class).list(wrapperpaper);
+////        //获取本地当前时间
+////        userExamPapersList.get(0).setSystemTime(new Date());
+////        //在返回值中添加考试试卷信息
+////        dto.setUserExamPapersList(userExamPapersList);
+//        //添加当前考试的所有试卷信息
+//        List<ExamPapers> examPapersList=iExamPapersService.getExamIdPaper(userExam.getExamId());
+//        List<UserExamPapers> userExamPapersList1=new ArrayList<UserExamPapers>();
+//        for (ExamPapers examPapers : examPapersList) {
+//            //获取是否考试状态并赋值
+//            userExamPapersList1 = iUserExamPapersService.UserExamPapersList(userExamId, examPapers.getPaperId());
+//            if (userExamPapersList1.size() == 0) {
+//                examPapers.setState(9);
+//            } else {
+//                examPapers.setState(userExamPapersList1.get(0).getState());
+//            }
+//
+//        }
+//
+//        dto.setExamPapersList(examPapersList);
+//        return dto;
     }
     public UserExamDTO userExamResultDetails(String paperId,boolean needAnswerFlag, boolean needAnalysis, boolean needClearBlankContent, boolean needRenderBlank) {
         UserExamDTO dto = new UserExamDTO();
@@ -953,19 +979,19 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         setAnswerTag(userExamDTO);
         return userExamDTO;
     }
-//    /**
-//     * 用户考试成绩详情,包括答题卡,试题(包含正确答案和解析)
-//     *
-//     * @param userExamId
-//     * @return
-//     */
-//    @Override
-//    public UserExamDTO userExamResultDetail(String userExamId,String paperId) {
-//        UserExamDTO userExamDTO = userExamResultDetail(userExamId,paperId, true, true, false, true);
-//        //设置单选题/多选题/判断题的答案tag
-//        setAnswerTag(userExamDTO);
-//        return userExamDTO;
-//    }
+    /**
+     * 用户考试成绩详情,包括答题卡,试题(包含正确答案和解析)
+     *
+     * @param userExamId
+     * @return
+     */
+    @Override
+    public UserExamDTO userExamPaperResultDetail(String userExamId,String paperId) {
+        UserExamDTO userExamDTO = userExamResultDetail(userExamId,paperId, true, true, false, true);
+        //设置单选题/多选题/判断题的答案tag
+        setAnswerTag(userExamDTO);
+        return userExamDTO;
+    }
     /**
      * 用户考试成绩详情,包括答题卡,试题(包含正确答案和解析)
      *

+ 9 - 1
web/src/main/java/com/ynfy/buss/exam/examreview/controller/ExamReviewController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ynfy.buss.exam.examreview.dto.PreviewSubmitDTO;
 import com.ynfy.buss.exam.examreview.entity.ExamReview;
 import com.ynfy.buss.exam.examreview.service.IExamReviewService;
+import com.ynfy.buss.exam.userexam.service.IUserExamPapersService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -31,6 +32,8 @@ import javax.servlet.http.HttpServletRequest;
 public class ExamReviewController extends JeecgController<ExamReview, IExamReviewService> {
     @Autowired
     private IExamReviewService examReviewService;
+    @Autowired
+    private IUserExamPapersService UserExamPapersService;
 
     /**
      * 分页列表查询
@@ -79,7 +82,12 @@ public class ExamReviewController extends JeecgController<ExamReview, IExamRevie
     @PostMapping(value = "/submitPreview")
     public Result<?> submitPreview(@RequestBody PreviewSubmitDTO dto) {
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        examReviewService.submitPreview(dto, user);
+        if(UserExamPapersService.UserExamIdAllUserExamPapers2(dto.getUserExamId()).isEmpty()){
+            examReviewService.submitPreview(dto, user);
+        }else {
+            examReviewService.submitPaperPreview(dto, user);
+        }
+//        examReviewService.submitPaperPreview(dto, user);
         return Result.OK("提交阅卷成功!");
     }
 }

+ 1 - 0
web/src/main/java/com/ynfy/buss/exam/examreview/service/IExamReviewService.java

@@ -32,6 +32,7 @@ public interface IExamReviewService extends IService<ExamReview> {
 
 
     void submitPreview(PreviewSubmitDTO dto, LoginUser user);
+    void submitPaperPreview(PreviewSubmitDTO dto, LoginUser user);
 
 
     IPage<ExamReview> selectPageList(IPage<ExamReview> page, ExamReview examReview, LoginUser user);

+ 92 - 2
web/src/main/java/com/ynfy/buss/exam/examreview/service/impl/ExamReviewServiceImpl.java

@@ -84,10 +84,96 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
             saveBatch(examReviews);
         }
     }
-
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void submitPreview(PreviewSubmitDTO dto, LoginUser user) {
+        if (StringUtils.isEmpty(dto.getUserExamId())) {
+            throw new JeecgBootException("考试ID不能为空");
+        }
+        UserExam userExam = userExamService.listUserExam(dto.getUserExamId());
+        if (Objects.isNull(userExam)) {
+            throw new JeecgBootException("考试记录不存在");
+        }
+        if (PaperState.FINISHED.equals(userExam.getState())) {
+            throw new JeecgBootException("该试卷已经阅卷,不允许重复阅卷");
+        }
+        List<UserExamQuestion> userExamQuestionList = userExam.getUserExamQuestionList();
+        if (CollectionUtils.isEmpty(userExamQuestionList)) {
+            throw new JeecgBootException("考题查询失败");
+        }
+
+        List<UserExamQuestion> rootQuestionList = userExamQuestionList.stream().filter(r -> !Objects.isNull(r.getChild()) && !r.getChild())
+                .sorted(Comparator.comparing(UserExamQuestion::getQuestionIndex)).collect(Collectors.toList());
+        List<UserExamQuestion> childQuestionList = userExamQuestionList.stream().filter(r -> !Objects.isNull(r.getChild()) && r.getChild())
+                .sorted(Comparator.comparing(UserExamQuestion::getQuestionIndex)).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(rootQuestionList)) {
+            //组装题目、子题目和答案
+            examService.assembleUserExamQuestion(dto.getUserExamId(), rootQuestionList, childQuestionList, true, false, true, true, false);
+        }
+        Map<Integer, UserExamQuestion> userExamQuestionMap = rootQuestionList.stream().collect(Collectors.toMap(UserExamQuestion::getQuestionIndex, a -> a, (k1, k2) -> k1));
+
+        List<ExamPreviewDTO> examPreviews = dto.getExamPreviews();
+
+        if (!CollectionUtils.isEmpty(examPreviews)) {
+            List<UserExamQuestion> resultList = new ArrayList<>();
+            for (ExamPreviewDTO o : examPreviews) {
+                //根据题目序号中获取考题
+                UserExamQuestion userExamQuestion = examService.getUserExamQuestionByIndex(o.getIndex(), userExamQuestionMap);
+                if (Objects.isNull(userExamQuestion) || userExamQuestion.getQuestionType() != QuestionType.SIMPLE.getCode()) {
+                    return;
+                }
+                userExamQuestion.setActualScore(o.getActualScore());
+                userExamQuestion.setIsRight(o.getIsRight());
+                resultList.add(userExamQuestion);
+            }
+            //主观题得分
+            double subjectiveScore = resultList.stream().mapToDouble(UserExamQuestion::getActualScore).sum();
+            //组合题
+            List<UserExamQuestion> combinationQuestionList = rootQuestionList.stream().filter(q ->
+                    QuestionType.COMBINATION.getCode().equals(q.getQuestionType())).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(combinationQuestionList)) {
+                combinationQuestionList.forEach(question -> {
+                    //组合题子题目中包含简答题,重新计算分值
+                    long simpleCount = question.getSubQuestionList().stream().filter(q -> QuestionType.SIMPLE.getCode()
+                            .equals(q.getQuestionType())).count();
+                    if (simpleCount > 0) {
+                        //更新组合题得分
+                        question.setActualScore(question.getSubQuestionList().stream().filter(o ->
+                                !Objects.isNull(o.getActualScore())).mapToDouble(UserExamQuestion::getActualScore).sum());
+                        if (question.getActualScore() > 0) {
+                            question.setIsRight(true);
+                        } else {
+                            question.setIsRight(false);
+                        }
+                        resultList.add(question);
+                    }
+                });
+            }
+
+            //更新评分
+            if (!CollectionUtils.isEmpty(resultList)) {
+                userExamQuestionService.updateBatchById(resultList);
+            }
+
+            //用户得分,主观题得分,更新阅卷人,阅卷时间,考试状态
+            userExam.setSubjectiveScore(subjectiveScore);//主观题得分
+            userExam.setUserScore(NumberUtil.round(NumberUtil.add(userExam.getUserScore().doubleValue(), subjectiveScore),
+                    1).doubleValue());//用户最终得分
+            userExam.setPreviewTime(new Date());
+            //阅卷人
+            userExam.setPreviewUser(user.getRealname());
+            userExam.setState(PaperState.FINISHED);
+            int pass = userExam.getUserScore() >= userExam.getQualifyScore() ? 1 : 0;
+            userExam.setPassed(pass);
+            userExamService.updateById(userExam);
+
+            //考试完成后加入成绩
+            userExamResultService.joinResult(userExam.getUserId(), userExam.getExamId(), userExam.getUserScore(), pass);
+        }
+    }
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void submitPaperPreview(PreviewSubmitDTO dto, LoginUser user) {
         if (StringUtils.isEmpty(dto.getUserExamId())) {
             throw new JeecgBootException("考试ID不能为空");
         }
@@ -168,6 +254,11 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
             int pass = userExamPapers.getUserScore() >= userExamPapers.getQualifyScore() ? 1 : 0;
             userExamPapers.setPassed(pass);
             userExamPapersService.updateById(userExamPapers);
+            //判断是不是最后一个阅卷是的话把考试记录状态改掉
+            if(userExamPapersService.UserExamIdAllUserExamPapers3(userExam.getId()).isEmpty()){
+                userExam.setState(PaperState.FINISHED);
+                userExamService.updateById(userExam);
+            }
 //            //用户得分,主观题得分,更新阅卷人,阅卷时间,考试状态
 //            userExam.setSubjectiveScore(subjectiveScore);//主观题得分
 //            userExam.setUserScore(NumberUtil.round(NumberUtil.add(userExam.getUserScore().doubleValue(), subjectiveScore),
@@ -185,7 +276,6 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
         }
     }
 
-
     @Override
     public IPage<ExamReview> selectPageList(IPage<ExamReview> page, ExamReview examReview, LoginUser user) {
         return examReviewMapper.selectPageList(page, examReview, user);

+ 36 - 32
web/src/main/java/com/ynfy/buss/exam/job/BreakExamJob.java

@@ -39,48 +39,52 @@ public class BreakExamJob implements Job {
         JobDetail detail = jobExecutionContext.getJobDetail();
         String key = String.valueOf(detail.getJobDataMap().get("parameter"));
         log.info("{} 定时任务:处理到期的交卷", key);
-        //获取userExamId以及paperId  19位截取
-        String userExamId=key.substring(0, 19);
-        String paperId=key.substring(key.length() - 19);
-        UserExam userExam = userExamService.getById(userExamId);
+        //判断key是不是19位
+        if(key.length()==19){
+         UserExam userExam = userExamService.getById(key);
         if (!Objects.isNull(userExam) && !userExam.getState().equals(PaperState.FINISHED)) {
             Object data = redisUtil.get(key);
             // 强制交卷
             if (!Objects.isNull(data)) {
-                log.info("yyz定时任务有获取到redis缓存的答案");
                 ExamSubmitDTO dto = JSON.parseObject(String.valueOf(data), ExamSubmitDTO.class);
-                String biaozhi=examService.submitExamPaper(dto);
-                if (biaozhi.equals("0")) {
-                    System.out.println("最后一套试卷直接提交考试");
-                }else {
-                    //提交试卷同时开启下一套试卷
-                    examService.createExamPapers(userExam.getUserId(), userExamService.getById(dto.getUserExamId()).getExamId());
-                }
+                examService.submitExam(dto);
                 return;
-            }else {
-                log.info("yyz定时任务未获取到redis缓存的答案");
-                //直接没有做题,redis中查找不到答案时自动交卷
-                ExamSubmitDTO dto =new ExamSubmitDTO(userExam.getId(),paperId, null, null);
-                String biaozhi=examService.submitExamPaper(dto);
-                if (biaozhi.equals("0")) {
-                    System.out.println("最后一套试卷直接提交考试");
+            }
+        }
+        }else {
+            //获取userExamId以及paperId  19位截取
+            String userExamId=key.substring(0, 19);
+            String paperId=key.substring(key.length() - 19);
+            UserExam userExam = userExamService.getById(userExamId);
+            if (!Objects.isNull(userExam) && !userExam.getState().equals(PaperState.FINISHED)) {
+                Object data = redisUtil.get(key);
+                // 强制交卷
+                if (!Objects.isNull(data)) {
+                    log.info("yyz定时任务有获取到redis缓存的答案");
+                    ExamSubmitDTO dto = JSON.parseObject(String.valueOf(data), ExamSubmitDTO.class);
+                    String biaozhi=examService.submitExamPaper(dto);
+                    if (biaozhi.equals("0")) {
+                        System.out.println("最后一套试卷直接提交考试");
+                    }else {
+                        //提交试卷同时开启下一套试卷
+                        examService.createExamPapers(userExam.getUserId(), userExamService.getById(dto.getUserExamId()).getExamId());
+                    }
+                    return;
                 }else {
-                    //提交试卷同时开启下一套试卷
-                    examService.createExamPapers(userExam.getUserId(), userExamService.getById(dto.getUserExamId()).getExamId());
+                    log.info("yyz定时任务未获取到redis缓存的答案");
+                    //直接没有做题,redis中查找不到答案时自动交卷
+                    ExamSubmitDTO dto =new ExamSubmitDTO(userExam.getId(),paperId, null, null);
+                    String biaozhi=examService.submitExamPaper(dto);
+                    if (biaozhi.equals("0")) {
+                        System.out.println("最后一套试卷直接提交考试");
+                    }else {
+                        //提交试卷同时开启下一套试卷
+                        examService.createExamPapers(userExam.getUserId(), userExamService.getById(dto.getUserExamId()).getExamId());
+                    }
+                    return;
                 }
-                return;
             }
         }
-//        UserExam userExam = userExamService.getById(key);
-//        if (!Objects.isNull(userExam) && !userExam.getState().equals(PaperState.FINISHED)) {
-//            Object data = redisUtil.get(key);
-//            // 强制交卷
-//            if (!Objects.isNull(data)) {
-//                ExamSubmitDTO dto = JSON.parseObject(String.valueOf(data), ExamSubmitDTO.class);
-//                examService.submitExam(dto);
-//                return;
-//            }
-//        }
         examService.deleteAutoCommitJob(key);
     }
 }

+ 15 - 2
web/src/main/java/com/ynfy/buss/exam/userexam/controller/UserExamController.java

@@ -2,6 +2,7 @@ package com.ynfy.buss.exam.userexam.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ynfy.buss.exam.exam.service.IExamService;
 import com.ynfy.buss.exam.userexam.entity.UserExam;
 import com.ynfy.buss.exam.userexam.service.IUserExamService;
 import io.swagger.annotations.Api;
@@ -34,7 +35,8 @@ public class UserExamController extends JeecgController<UserExam, IUserExamServi
 
     @Autowired
     private IUserExamService userExamService;
-
+    @Autowired
+    private IExamService examService;
 
     /**
      * 考生查询自己的考试记录
@@ -114,7 +116,18 @@ public class UserExamController extends JeecgController<UserExam, IUserExamServi
                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                   HttpServletRequest req) {
         Page<UserExam> page = new Page<>(pageNo, pageSize);
-        IPage<UserExam> pageList = userExamService.selectPageList(page, userExam);
+        IPage<UserExam> pageList=new Page<>();
+//        if(userExam.getPaperId()==null){
+//            pageList = userExamService.selectPageListPapers(page, userExam);
+//            System.out.println("1");
+//        } else {
+            //判断是多次考试还是单次考试
+            if(examService.getById(userExam.getExamId()).getPaperId()!=null){
+                pageList =userExamService.selectPageList(page, userExam);
+            }else {
+                pageList = userExamService.selectPageListPapers(page, userExam);
+            };
+//        }
         return Result.OK(pageList);
     }
 

+ 0 - 1
web/src/main/java/com/ynfy/buss/exam/userexam/mapper/UserExamPapersMapper.java

@@ -13,5 +13,4 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface UserExamPapersMapper extends BaseMapper<UserExamPapers> {
 
-
 }

+ 1 - 0
web/src/main/java/com/ynfy/buss/exam/userexam/service/IUserExamPapersService.java

@@ -18,6 +18,7 @@ public interface IUserExamPapersService extends IService<UserExamPapers> {
     List<UserExamPapers> UserExamIdAllUserExamPapers(String userExamId);
     //根据用户考试id获取已经考完的考试
     List<UserExamPapers> UserExamIdAllUserExamPapers2(String userExamId);
+    List<UserExamPapers> UserExamIdAllUserExamPapers3(String userExamId);
     List<UserExamPapers> UserExamIdPaperUserExamPapers(String userExamId,String paperId);
     List<UserExamPapers> UserExamPapersList(String userExamId,String paperId);
 }

+ 5 - 0
web/src/main/java/com/ynfy/buss/exam/userexam/service/impl/UserExamPapersServiceImpl.java

@@ -34,6 +34,11 @@ public class UserExamPapersServiceImpl extends ServiceImpl<UserExamPapersMapper,
         LambdaQueryWrapper<UserExamPapers> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(UserExamPapers::getUserExamId, userExamId);
         return this.list(wrapper);
+    }   @Override
+    public List<UserExamPapers> UserExamIdAllUserExamPapers3(String userExamId) {
+        LambdaQueryWrapper<UserExamPapers> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserExamPapers::getUserExamId, userExamId).eq(UserExamPapers::getState, "1");
+        return this.list(wrapper);
     }
 
     @Override