|
@@ -18,6 +18,11 @@ import org.springframework.data.mongodb.core.query.Query;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.Assert;
|
|
|
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.PaperDetailDto;
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.PaperDetailUnitDto;
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.PaperDto;
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.QuesOptionDto;
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.SubQuestionDto;
|
|
|
import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
|
|
|
|
|
|
import com.qmth.cqb.paper.dao.ExtractConfigRepo;
|
|
@@ -32,7 +37,10 @@ import com.qmth.cqb.paper.model.PaperDetailUnit;
|
|
|
import com.qmth.cqb.question.dao.QuesRepo;
|
|
|
import com.qmth.cqb.question.model.QuesOption;
|
|
|
import com.qmth.cqb.question.model.Question;
|
|
|
+import com.qmth.cqb.utils.BeanCopierUtil;
|
|
|
+import com.qmth.cqb.utils.CommonUtils;
|
|
|
import com.qmth.cqb.utils.enums.PaperType;
|
|
|
+import com.qmth.cqb.utils.word.DocxProcessUtil;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -110,6 +118,26 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
return extractConfigRepo.findOne(id);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public PaperDto extract(String exam_id,String course_code,String group_code){
|
|
|
+ ExtractConfig extractConfig = this.findConfig(new ExtractConfig(exam_id,course_code));
|
|
|
+ if(extractConfig==null){
|
|
|
+ throw new RuntimeException("调卷规则不存在");
|
|
|
+ }
|
|
|
+ //获得规则中设置的试卷
|
|
|
+ Map<String,Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
|
|
|
+ if(paperMap.isEmpty()){
|
|
|
+ throw new RuntimeException("抽取试卷失败");
|
|
|
+ }
|
|
|
+ Paper paper = paperMap.get("group_code");
|
|
|
+ //根据规则中设置的试卷重新组卷得到新试卷
|
|
|
+ Paper newPaper = this.recombinationPaper(paper,
|
|
|
+ extractConfig.getScrambling_the_question_order(),
|
|
|
+ extractConfig.getScrambling_the_option_order());
|
|
|
+ PaperDto paperDto = getPaperDtoByPaper(newPaper);
|
|
|
+ return paperDto;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Map<String, String> makePaperByConfig(String extractConfigId) {
|
|
|
Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
|
|
@@ -118,7 +146,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
if(extractConfig==null){
|
|
|
throw new RuntimeException("调卷规则不存在");
|
|
|
}
|
|
|
- //获得抽取好的试卷
|
|
|
+ //获得规则中设置的试卷
|
|
|
Map<String,Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
|
|
|
if(paperMap.isEmpty()){
|
|
|
throw new RuntimeException("抽取试卷失败");
|
|
@@ -310,4 +338,48 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
}
|
|
|
return paperIdList;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 根据paper得到PaperDto
|
|
|
+ * @param paper
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private PaperDto getPaperDtoByPaper(Paper paper){
|
|
|
+ PaperDto paperDto = BeanCopierUtil.copyProperties(paper, PaperDto.class);
|
|
|
+ // 获取大题
|
|
|
+ List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
+ List<PaperDetailDto> paperDetailDtos = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailDto.class);
|
|
|
+ paperDto.setPaperDetails(paperDetailDtos);
|
|
|
+ // 封装小题
|
|
|
+ for (int i = 0; i < paperDetailDtos.size(); i++) {
|
|
|
+ List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
|
|
|
+ List<PaperDetailUnitDto> paperDetailUnitDtos = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
|
|
|
+ PaperDetailUnitDto.class);
|
|
|
+ for (int j = 0; j < paperDetailUnitDtos.size(); j++) {
|
|
|
+ PaperDetailUnitDto unitDto = paperDetailUnitDtos.get(j);
|
|
|
+ unitDto.setQuesId(paperDetailUnits.get(j).getQuestion().getId());
|
|
|
+ if (StringUtils.isNotEmpty(paperDetailUnits.get(j).getQuestion().getQuesAnswer())) {
|
|
|
+ String answer = DocxProcessUtil
|
|
|
+ .getTextInHtml(paperDetailUnits.get(j).getQuestion().getQuesAnswer());
|
|
|
+ unitDto.setAnswer(answer);
|
|
|
+ }
|
|
|
+ if (unitDto.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {// 假如是套题
|
|
|
+ List<Question> subQuesList = paperDetailUnits.get(j).getQuestion().getSubQuestions();
|
|
|
+ List<SubQuestionDto> subQuesDtos = BeanCopierUtil.copyPropertiesOfList(subQuesList,
|
|
|
+ SubQuestionDto.class);
|
|
|
+ for (int m = 0; m < subQuesList.size(); m++) {
|
|
|
+ List<QuesOptionDto> quesOptionDtos = BeanCopierUtil
|
|
|
+ .copyPropertiesOfList(subQuesList.get(m).getQuesOptions(), QuesOptionDto.class);
|
|
|
+ subQuesDtos.get(m).setQuesOptions(quesOptionDtos);
|
|
|
+ subQuesDtos.get(m)
|
|
|
+ .setQuesAnswer(DocxProcessUtil.getTextInHtml(subQuesList.get(m).getQuesAnswer()));
|
|
|
+ subQuesDtos.get(m).setNumber(m + 1);
|
|
|
+ }
|
|
|
+ unitDto.setSubQuestions(subQuesDtos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ paperDetailDtos.get(i).setPaperDetailUnits(paperDetailUnitDtos);
|
|
|
+ paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
|
|
|
+ }
|
|
|
+ return paperDto;
|
|
|
+ }
|
|
|
}
|