Explorar o código

检查题目是否已经在考试使用

yangfeng %!s(int64=2) %!d(string=hai) anos
pai
achega
393625f9a2

+ 8 - 4
web/src/main/java/com/yntravelsky/buss/exam/examstatistics/service/impl/ExamStatisticsServiceImpl.java

@@ -153,8 +153,11 @@ public class ExamStatisticsServiceImpl extends ServiceImpl<ExamStatisticsMapper,
      * @param userExamQuestionList
      * @return
      */
-    public double calcExamAccuracy(List<UserExamQuestion> userExamQuestionList) {
-        long rightNum = userExamQuestionList.stream().filter(o -> o.getIsRight() == true).count();
+    public Double calcExamAccuracy(List<UserExamQuestion> userExamQuestionList) {
+        if (CollectionUtils.isEmpty(userExamQuestionList)) {
+            return null;
+        }
+        long rightNum = userExamQuestionList.stream().filter(o -> !Objects.isNull(o.getIsRight()) && o.getIsRight() == true).count();
         return NumberUtil.div(multi(rightNum), userExamQuestionList.size(), 2);
     }
 
@@ -166,7 +169,7 @@ public class ExamStatisticsServiceImpl extends ServiceImpl<ExamStatisticsMapper,
     public Double calcUserAccuracy(Map<String, List<UserExamQuestion>> ueqMap, ExamStatisticsDTO dto) {
         List<UserExamQuestion> questions = ueqMap.get(dto.getUserExamId());
         if (!CollectionUtils.isEmpty(questions)) {
-            long rightNum = questions.stream().filter(o -> o.getIsRight() == true).count();
+            long rightNum = questions.stream().filter(o -> !Objects.isNull(o.getIsRight()) && o.getIsRight() == true).count();
             return NumberUtil.div(multi(rightNum), questions.size(), 2);
         }
         return null;
@@ -180,7 +183,8 @@ public class ExamStatisticsServiceImpl extends ServiceImpl<ExamStatisticsMapper,
     public Double calcScoreRate(Map<String, List<UserExamQuestion>> ueqMap, ExamStatisticsDTO dto) {
         List<UserExamQuestion> questions = ueqMap.get(dto.getUserExamId());
         if (!CollectionUtils.isEmpty(questions)) {
-            int userScoreTotal = questions.stream().filter(o -> o.getIsRight() == true).mapToInt(UserExamQuestion::getQuestionScore).sum();
+            int userScoreTotal = questions.stream().filter(o -> !Objects.isNull(o.getIsRight()) && o.getIsRight() == true)
+                    .mapToInt(UserExamQuestion::getQuestionScore).sum();
             int scoreTotal = questions.stream().mapToInt(UserExamQuestion::getQuestionScore).sum();
             return NumberUtil.div(multi(userScoreTotal), scoreTotal, 2);
         }

+ 3 - 1
web/src/main/java/com/yntravelsky/buss/exam/paper/service/impl/PaperServiceImpl.java

@@ -286,15 +286,17 @@ public class PaperServiceImpl extends ServiceImpl<PaperMapper, Paper> implements
             List<PaperQuestion> paperQuestionList = temps.stream().sorted(Comparator.comparing(PaperQuestion::getSort)).collect(Collectors.toList());
             List<String> questionIdList = paperQuestionList.stream().map(PaperQuestion::getQuestionId).collect(Collectors.toList());
             List<Question> questions = questionService.listByIds(questionIdList);
+            List<Question> sortQuestions = new ArrayList<>();
             paperQuestionList.stream().forEach(paperQuestion -> {
                 List<Question> list = questions.stream().filter(question -> question.getId().equals(paperQuestion.getQuestionId())).collect(Collectors.toList());
                 if (!CollectionUtils.isEmpty(list)) {
                     Question question = list.get(0);
                     question.setScore(paperQuestion.getQuestionScore());
                     question.setAnswerList(questionAnswerService.listAnswerByQuestionId(question.getId()));
+                    sortQuestions.add(question);
                 }
             });
-            g.setQuestionList(questions);
+            g.setQuestionList(sortQuestions);
         }
     }
 

+ 4 - 4
web/src/main/java/com/yntravelsky/buss/exam/paperquestion/service/IPaperQuestionService.java

@@ -32,7 +32,7 @@ public interface IPaperQuestionService extends IService<PaperQuestion> {
     void removeByQuestionIds(String[] paperIds);
 
     /**
-     * 检查题目列表是否已经被试卷使用
+     * 检查题目是否已经被试卷使用
      *
      * @param questionIds
      * @return
@@ -40,10 +40,10 @@ public interface IPaperQuestionService extends IService<PaperQuestion> {
     boolean checkIsUsedInPaper(String[] questionIds);
 
     /**
-     * 检查题目是否已经被试卷使用
+     * 检查题目是否已经被使用
      *
-     * @param questionId
+     * @param questionIds
      * @return
      */
-    boolean checkIsUsedInPaper(String questionId);
+    boolean checkIsUsed(String[] questionIds);
 }

+ 11 - 7
web/src/main/java/com/yntravelsky/buss/exam/paperquestion/service/impl/PaperQuestionServiceImpl.java

@@ -8,6 +8,8 @@ import com.yntravelsky.buss.exam.paperquestion.mapper.PaperQuestionMapper;
 import com.yntravelsky.buss.exam.paperquestion.service.IPaperQuestionService;
 import com.yntravelsky.buss.exam.paperrulegroup.entity.PaperRuleGroup;
 import com.yntravelsky.buss.exam.question.entity.Question;
+import com.yntravelsky.buss.exam.userexamquestion.service.IUserExamQuestionService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -25,6 +27,9 @@ import java.util.stream.Collectors;
 @Service
 public class PaperQuestionServiceImpl extends ServiceImpl<PaperQuestionMapper, PaperQuestion> implements IPaperQuestionService {
 
+    @Autowired
+    private IUserExamQuestionService userExamQuestionService;
+
     /**
      * 删除已保存
      */
@@ -94,7 +99,7 @@ public class PaperQuestionServiceImpl extends ServiceImpl<PaperQuestionMapper, P
     }
 
     /**
-     * 检查题目列表是否已经被试卷使用
+     * 检查题目是否已经被试卷使用
      *
      * @param questionIds
      * @return
@@ -106,16 +111,15 @@ public class PaperQuestionServiceImpl extends ServiceImpl<PaperQuestionMapper, P
         return this.count(wrapper) > 0 ? true : false;
     }
 
+
     /**
-     * 检查题目是否已经被试卷使用
+     * 检查题目是否已经被使用
      *
-     * @param questionId
+     * @param questionIds
      * @return
      */
     @Override
-    public boolean checkIsUsedInPaper(String questionId) {
-        LambdaQueryWrapper<PaperQuestion> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(PaperQuestion::getQuestionId, questionId);
-        return this.count(wrapper) > 0 ? true : false;
+    public boolean checkIsUsed(String[] questionIds) {
+        return checkIsUsedInPaper(questionIds) || userExamQuestionService.checkIsUsedInExam(questionIds);
     }
 }

+ 20 - 4
web/src/main/java/com/yntravelsky/buss/exam/question/controller/QuestionController.java

@@ -16,6 +16,7 @@ import com.yntravelsky.buss.exam.questionanswer.entity.QuestionAnswer;
 import com.yntravelsky.buss.exam.questionanswer.service.IQuestionAnswerService;
 import com.yntravelsky.buss.exam.repository.entity.Repository;
 import com.yntravelsky.buss.exam.repository.service.IRepositoryService;
+import com.yntravelsky.buss.exam.userexamquestion.service.IUserExamQuestionService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -61,6 +62,9 @@ public class QuestionController extends JeecgController<Question, IQuestionServi
     @Autowired
     private IPaperQuestionService paperQuestionService;
 
+    @Autowired
+    private IUserExamQuestionService userExamQuestionService;
+
     /**
      * 分页列表查询
      *
@@ -245,13 +249,25 @@ public class QuestionController extends JeecgController<Question, IQuestionServi
     /**
      * 检查题目是否已经被试卷使用
      *
-     * @param id
+     * @param questionIds
      * @return
      */
     @ApiOperation(value = "题目-检查题目是否已经被试卷使用", notes = "题目-检查题目是否已经被试卷使用")
-    @GetMapping(value = "/checkIsUsedInPaper")
-    public Result<?> checkIsUsedInPaper(@RequestParam(name = "id", required = true) String id) {
-        return Result.OK(paperQuestionService.checkIsUsedInPaper(id));
+    @GetMapping(value = "/checkIsUsed")
+    public Result<?> checkIsUsed(@RequestParam(name = "questionIds", required = true) String questionIds) {
+        return Result.OK(paperQuestionService.checkIsUsed(questionIds.split(",")));
+    }
+
+    /**
+     * 检查题目是否已经被考试
+     *
+     * @param questionIds
+     * @return
+     */
+    @ApiOperation(value = "题目-检查题目是否已经被考试", notes = "题目-检查题目是否已经被考试")
+    @GetMapping(value = "/checkIsUsedInExam")
+    public Result<?> checkIsUsedInExam(@RequestParam(name = "questionIds", required = true) String questionIds) {
+        return Result.OK(userExamQuestionService.checkIsUsedInExam(questionIds.split(",")));
     }
 
 }

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yntravelsky.buss.exam.questionanswer.entity.QuestionAnswer;
 import com.yntravelsky.buss.exam.questionanswer.mapper.QuestionAnswerMapper;
 import com.yntravelsky.buss.exam.questionanswer.service.IQuestionAnswerService;
+import com.yntravelsky.common.utils.CharUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -56,6 +57,7 @@ public class QuestionAnswerServiceImpl extends ServiceImpl<QuestionAnswerMapper,
             for (QuestionAnswer item : list) {
                 item.setId(null);
                 item.setQuestionId(questionId);
+                item.setTag(CharUtil.getZm(sort - 1));
                 item.setSort(sort);
                 sort++;
             }

+ 8 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestion/service/IUserExamQuestionService.java

@@ -17,4 +17,12 @@ public interface IUserExamQuestionService extends IService<UserExamQuestion> {
 
 
     List<UserExamQuestion> listByUserExamIds(List<String> userExamIds);
+
+    /**
+     * 检查题目是否已经在考试使用
+     *
+     * @param questionIds
+     * @return
+     */
+    boolean checkIsUsedInExam(String[] questionIds);
 }

+ 13 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestion/service/impl/UserExamQuestionServiceImpl.java

@@ -32,4 +32,17 @@ public class UserExamQuestionServiceImpl extends ServiceImpl<UserExamQuestionMap
         wrapper.in(UserExamQuestion::getUserExamId, userExamIds);
         return this.list(wrapper);
     }
+
+    /**
+     * 检查题目是否已经在考试使用
+     *
+     * @param questionIds
+     * @return
+     */
+    @Override
+    public boolean checkIsUsedInExam(String[] questionIds) {
+        LambdaQueryWrapper<UserExamQuestion> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(UserExamQuestion::getQuestionId, questionIds);
+        return this.count(wrapper) > 0 ? true : false;
+    }
 }

+ 17 - 0
web/src/main/java/com/yntravelsky/common/utils/CharUtil.java

@@ -0,0 +1,17 @@
+package com.yntravelsky.common.utils;
+
+public class CharUtil {
+
+    private static final String ZM = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+    /**
+     * 根据索引获取字母
+     *
+     * @param index
+     * @return
+     */
+    public static String getZm(int index) {
+        String[] split = ZM.split("");
+        return split[index];
+    }
+}