deason před 5 roky
rodič
revize
960dedf169

+ 30 - 46
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java

@@ -1,21 +1,20 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
+import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLog;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLogFactory;
+import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
+import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
+import cn.com.qmth.examcloud.core.questions.dao.*;
+import cn.com.qmth.examcloud.core.questions.dao.entity.*;
+import cn.com.qmth.examcloud.core.questions.service.*;
 import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
+import cn.com.qmth.examcloud.question.commons.core.question.QuestionType;
+import cn.com.qmth.examcloud.question.commons.core.question.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,36 +22,10 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Example;
 import org.springframework.stereotype.Service;
 
-import cn.com.qmth.examcloud.commons.exception.StatusException;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
-import cn.com.qmth.examcloud.core.questions.dao.AudioTimeConfigRepo;
-import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
-import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
-import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
-import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
-import cn.com.qmth.examcloud.core.questions.dao.entity.AudioTimeConfig;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
-import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
-import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetail;
-import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
-import cn.com.qmth.examcloud.core.questions.dao.entity.QuesOption;
-import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
-import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionAudio;
-import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
-import cn.com.qmth.examcloud.core.questions.service.ExtractConfigService;
-import cn.com.qmth.examcloud.core.questions.service.PaperService;
-import cn.com.qmth.examcloud.core.questions.service.QuesService;
-import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
-import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestion;
-import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionOption;
-import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionStructure;
-import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestionUnit;
-import cn.com.qmth.examcloud.question.commons.core.question.QuestionType;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * @author weiwenhai
@@ -212,32 +185,36 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
     public DefaultPaper buildDefaultByBasePaper(Paper basePaper, String examId, String courseCode, String groupCode) {
         log.debug("开始包装网考需要的试卷结构...");
         long beginTime = System.currentTimeMillis();
+
         //获取大题
         List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(basePaper);
         long pdTime = System.currentTimeMillis();
         log.debug("数据库取大题耗时:" + (pdTime - beginTime) + "ms");
+
         Collections.sort(paperDetails);
         long pdSortEndTime = System.currentTimeMillis();
         log.debug("排序大题耗时:" + (pdSortEndTime - pdTime) + "ms");
+
         //将小题全部取出来,只取一次,减少对数据库的查询
         List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaper(basePaper);
         boolean fullyObjective = checkIsAllQbjectiveQuestion(allPaperDetailUnits);
         long pduEndTime = System.currentTimeMillis();
         log.debug("数据库取所有小题耗时:" + (pduEndTime - pdSortEndTime) + "ms");
+
         //根据大题id将小题归类
         Map<String, List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream().collect(Collectors.groupingBy(PaperDetailUnit::getDetailId));
         long pduMapEndTime = System.currentTimeMillis();
         log.debug("获取大题与小题对应关系耗时:" + (pduMapEndTime - pduEndTime) + "ms");
+
         log.debug("循环大题,开始组装对象...");
         //生成新的分组集合
-        List<DefaultQuestionGroup> questionGroupList = new ArrayList<DefaultQuestionGroup>();
+        List<DefaultQuestionGroup> questionGroupList = new ArrayList<>();
         for (int i = 0; i < paperDetails.size(); i++) {
             PaperDetail paperDetail = paperDetails.get(i);
             DefaultQuestionGroup defaultQuestionGroup = new DefaultQuestionGroup();
             defaultQuestionGroup.setGroupName(paperDetail.getName());
             defaultQuestionGroup.setGroupScore(paperDetail.getScore());
-            //生成新的题包装器集合
-            List<DefaultQuestionStructureWrapper> questionWrapperList = new ArrayList<DefaultQuestionStructureWrapper>();
+
             //获取原小题的集合
             List<PaperDetailUnit> paperDetailUnits = pduMap.get(paperDetail.getId());
             if (paperDetailUnits == null || paperDetailUnits.size() < 1) {
@@ -248,6 +225,8 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
             //按题号顺序排序
             Collections.sort(paperDetailUnits);
 
+            //生成新的题包装器集合
+            List<DefaultQuestionStructureWrapper> questionWrapperList = new ArrayList<>();
             for (int j = 0; j < paperDetailUnits.size(); j++) {
                 PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
                 DefaultQuestionStructureWrapper defaultQuestionStructureWrapper = new DefaultQuestionStructureWrapper();
@@ -255,6 +234,7 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
                 defaultQuestionStructureWrapper.setVersion(CommonUtils.QUESTION_VERSION);
                 defaultQuestionStructureWrapper.setQuestionScore(paperDetailUnit.getScore());
                 defaultQuestionStructureWrapper.setTimeLimit(paperDetailUnit.getTimeLimit());
+
                 if (examId != null) {
                     //设置音频播放次数
                     if (paperDetailUnit.getQuestion().getHasAudio() != null && paperDetailUnit.getQuestion().getHasAudio() == true) {
@@ -264,8 +244,9 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
                         }
                     }
                 }
+
                 //生成新的题单元包装器
-                List<DefaultQuestionUnitWrapper> defaultQuestionUnitWrappers = new ArrayList<DefaultQuestionUnitWrapper>();
+                List<DefaultQuestionUnitWrapper> defaultQuestionUnitWrappers = new ArrayList<>();
                 if (paperDetailUnit.getQuestion().getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
                     List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
                     List<Double> scoreList = paperDetailUnit.getSubScoreList();
@@ -279,12 +260,15 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
                     DefaultQuestionUnitWrapper defaultQuestionUnitWrapper = buildQuesUnitWrapper(paperDetailUnit.getQuestion(), paperDetailUnit.getScore());
                     defaultQuestionUnitWrappers.add(defaultQuestionUnitWrapper);
                 }
+
                 defaultQuestionStructureWrapper.setQuestionUnitWrapperList(defaultQuestionUnitWrappers);
                 questionWrapperList.add(defaultQuestionStructureWrapper);
             }
+
             defaultQuestionGroup.setQuestionWrapperList(questionWrapperList);
             questionGroupList.add(defaultQuestionGroup);
         }
+
         DefaultPaper defaultPaper = new DefaultPaper();
         defaultPaper.setName(basePaper.getName());
         defaultPaper.setQuestionGroupList(questionGroupList);