Эх сурвалжийг харах

在线练习条件 按练习模式获取指定题库题目

yangfeng 1 жил өмнө
parent
commit
dbb6241fce

+ 13 - 0
web/src/main/java/com/ynfy/buss/exam/question/controller/QuestionController.java

@@ -259,4 +259,17 @@ public class QuestionController extends JeecgController<Question, IQuestionServi
         return Result.OK(userExamQuestionService.checkIsUsedInExam(questionIds.split(",")));
     }
 
+    /**
+     * 按练习模式获取指定题库题目
+     *
+     * @return
+     */
+    @ApiOperation(value = "按练习模式获取指定题库题目", notes = "按练习模式获取指定题库题目")
+    @GetMapping(value = "/listQuestionByMode")
+    public Result<?> listQuestionByPracticeMode(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                @RequestParam String repositoryId, Integer questionType, @RequestParam Integer mode) {
+        return Result.OK(questionService.listQuestionByPracticeMode(pageNo, pageSize, repositoryId, questionType, mode));
+    }
+
 }

+ 3 - 0
web/src/main/java/com/ynfy/buss/exam/question/service/IQuestionService.java

@@ -120,4 +120,7 @@ public interface IQuestionService extends IService<Question> {
      * @return
      */
     List<QuestionDTO> countQuestionNumByType(String repositoryId);
+
+    IPage<Question> listQuestionByPracticeMode(Integer pageNo, Integer pageSize,
+                                               String repositoryId, Integer questionType, Integer mode);
 }

+ 46 - 0
web/src/main/java/com/ynfy/buss/exam/question/service/impl/QuestionServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ynfy.buss.exam.question.dto.QuestionConditionDTO;
 import com.ynfy.buss.exam.question.dto.QuestionDTO;
@@ -17,6 +18,7 @@ import com.ynfy.buss.exam.questionanswer.entity.QuestionAnswer;
 import com.ynfy.buss.exam.questionanswer.service.IQuestionAnswerService;
 import com.ynfy.buss.exam.repository.entity.Repository;
 import com.ynfy.buss.exam.repository.service.IRepositoryService;
+import com.ynfy.buss.practice.userpractice.enums.PracticeMode;
 import com.ynfy.common.utils.CharUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -555,4 +557,48 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     public List<QuestionDTO> countQuestionNumByType(String repositoryId) {
         return questionMapper.countQuestionNumByType(repositoryId);
     }
+
+    @Override
+    public IPage<Question> listQuestionByPracticeMode(Integer pageNo, Integer pageSize, String repositoryId,
+                                                      Integer questionType, Integer mode) {
+        Page<Question> page = new Page<Question>(pageNo, pageSize);
+        LambdaQueryWrapper<Question> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Question::getRepositoryId, repositoryId);
+
+        IPage<Question> pageList = null;
+        switch (PracticeMode.getByCode(mode)) {
+            case SX://顺序练习
+                pageList = page(page, queryWrapper);
+                break;
+            case SJ://随机练习
+                pageList = page(page, queryWrapper);
+                if (!CollectionUtils.isEmpty(pageList.getRecords())) {
+                    Collections.shuffle(pageList.getRecords());
+                }
+                break;
+            case TX://题型练习
+                if (Objects.isNull(questionType)) {
+                    throw new JeecgBootException("题型缺失异常");
+                }
+                queryWrapper.eq(Question::getType, questionType);
+                pageList = page(page, queryWrapper);
+                break;
+        }
+        List<String> questionIds = pageList.getRecords().stream().map(Question::getId).collect(Collectors.toList());
+
+        //获取题目答案
+        List<QuestionAnswer> answerList = questionAnswerService.listAnswerByQuestionIds(questionIds);
+        if (!CollectionUtils.isEmpty(answerList)) {
+            Map<String, List<QuestionAnswer>> answerMap = answerList.stream().collect(Collectors
+                    .groupingBy(QuestionAnswer::getQuestionId, Collectors.toList()));
+            pageList.getRecords().forEach(item -> {
+                List<QuestionAnswer> answers = answerMap.get(item.getId());
+                if (!CollectionUtils.isEmpty(answers)) {
+                    //答案排序
+                    item.setAnswerList(answers.stream().sorted(Comparator.comparing(QuestionAnswer::getSort)).collect(Collectors.toList()));
+                }
+            });
+        }
+        return pageList;
+    }
 }

+ 7 - 0
web/src/main/java/com/ynfy/buss/exam/questionanswer/service/IQuestionAnswerService.java

@@ -38,4 +38,11 @@ public interface IQuestionAnswerService extends IService<QuestionAnswer> {
 
     void removeByQuestionIds(String[] questionIds);
 
+    /**
+     * 查询试题集合答案
+     *
+     * @param questionIds
+     */
+    List<QuestionAnswer> listAnswerByQuestionIds(List<String> questionIds);
+
 }

+ 12 - 0
web/src/main/java/com/ynfy/buss/exam/questionanswer/service/impl/QuestionAnswerServiceImpl.java

@@ -102,4 +102,16 @@ public class QuestionAnswerServiceImpl extends ServiceImpl<QuestionAnswerMapper,
         this.remove(wrapper);
     }
 
+    /**
+     * 查询试题集合答案
+     *
+     * @param questionIds
+     */
+    @Override
+    public List<QuestionAnswer> listAnswerByQuestionIds(List<String> questionIds) {
+        LambdaQueryWrapper<QuestionAnswer> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(QuestionAnswer::getQuestionId, questionIds);
+        return this.list(wrapper);
+    }
+
 }

+ 14 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/controller/UserPracticeController.java

@@ -3,6 +3,7 @@ package com.ynfy.buss.practice.userpractice.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
 import com.ynfy.buss.practice.userpractice.entity.UserPractice;
 import com.ynfy.buss.practice.userpractice.service.IUserPracticeService;
 import io.swagger.annotations.Api;
@@ -169,4 +170,17 @@ public class UserPracticeController extends JeecgController<UserPractice, IUserP
         return Result.OK(userPracticeService.getRecentPractice());
     }
 
+
+    /**
+     * 提交练习
+     *
+     * @return
+     */
+    @ApiOperation(value = "考试-交卷")
+    @PostMapping(value = "/submitPractice")
+    public Result<?> submitPractice(@RequestBody ExamSubmitDTO dto) {
+        userPracticeService.submitPractice(dto);
+        return Result.ok("提交练习成功!");
+    }
+
 }

+ 50 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/enums/PracticeMode.java

@@ -0,0 +1,50 @@
+package com.ynfy.buss.practice.userpractice.enums;
+
+
+/**
+ * 练习模式
+ *
+ * @author bool
+ * @date 2019-10-30 13:11
+ */
+public enum PracticeMode {
+
+    SX(1, "顺序练习"),
+    SJ(2, "随机练习"),
+    TX(3, "题型练习");
+
+    private Integer code;
+
+    private String value;
+
+    PracticeMode(Integer code, String value) {
+        this.code = code;
+        this.value = value;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public static PracticeMode getByCode(Integer code) {
+        for (PracticeMode mode : values()) {
+            if (mode.getCode().equals(code)) {
+                return mode;
+            }
+        }
+        return null;
+    }
+
+}

+ 3 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/service/IUserPracticeService.java

@@ -1,6 +1,7 @@
 package com.ynfy.buss.practice.userpractice.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
 import com.ynfy.buss.practice.userpractice.entity.UserPractice;
 
 import java.util.List;
@@ -20,4 +21,6 @@ public interface IUserPracticeService extends IService<UserPractice> {
      * @return
      */
     List<UserPractice> getRecentPractice();
+
+    void submitPractice(ExamSubmitDTO dto);
 }

+ 6 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/service/impl/UserPracticeServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ynfy.buss.exam.exam.dto.ExamSubmitDTO;
 import com.ynfy.buss.practice.userpractice.entity.UserPractice;
 import com.ynfy.buss.practice.userpractice.mapper.UserPracticeMapper;
 import com.ynfy.buss.practice.userpractice.service.IUserPracticeService;
@@ -38,4 +39,9 @@ public class UserPracticeServiceImpl extends ServiceImpl<UserPracticeMapper, Use
         IPage<UserPractice> pageList = page(page, wrapper);
         return pageList.getRecords();
     }
+
+    @Override
+    public void submitPractice(ExamSubmitDTO dto) {
+
+    }
 }