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