|
@@ -25,6 +25,7 @@ import com.qmth.cqb.paper.model.ExtractConfig;
|
|
|
import com.qmth.cqb.paper.model.Paper;
|
|
|
import com.qmth.cqb.paper.model.PaperDetail;
|
|
|
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;
|
|
|
|
|
@@ -56,6 +57,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
@Autowired
|
|
|
PaperRepo paperRepo;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ QuesRepo quesRepo;
|
|
|
+
|
|
|
@Override
|
|
|
public ExtractConfig findConfig(ExtractConfig condition) {
|
|
|
if(condition.getExamId()==null){
|
|
@@ -88,25 +92,67 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
return extractConfigRepo.findOne(id);
|
|
|
}
|
|
|
@Override
|
|
|
- public Map<String, String> makePaperByConfig(String extractConfigId) {
|
|
|
+ public void makePaperByConfig(String extractConfigId) {
|
|
|
Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
|
|
|
//取出调卷规则
|
|
|
ExtractConfig extractConfig = this.findConfig(new ExtractConfig(extractConfigId));
|
|
|
//获得抽取好的试卷
|
|
|
Map<String,Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
|
|
|
if(paperMap==null){
|
|
|
- return null;
|
|
|
+ return;
|
|
|
}
|
|
|
Iterator<String> paperMapIterator = paperMap.keySet().iterator();
|
|
|
while(paperMapIterator.hasNext()){
|
|
|
String key = paperMapIterator.next();
|
|
|
- //根据原有试卷重组新试卷
|
|
|
+ //根据原有试卷重新组卷得到新试卷
|
|
|
Paper newPaper = this.recombinationPaper(paperMap.get(paperMapIterator.next()),
|
|
|
extractConfig.getScrambling_the_question_order(),
|
|
|
extractConfig.getScrambling_the_option_order());
|
|
|
finishedPaperIdMap.put(key, newPaper.getId());
|
|
|
}
|
|
|
- return finishedPaperIdMap;
|
|
|
+ /**
|
|
|
+ * 设置map,并保存调卷规则
|
|
|
+ * 如果已经设置过了,就不再设置
|
|
|
+ */
|
|
|
+ if(extractConfig.getIfFinish()==0){
|
|
|
+ extractConfig.setFinishedPaperIdMap(finishedPaperIdMap);
|
|
|
+ extractConfig.setIfFinish((short)1);
|
|
|
+ extractConfigRepo.save(extractConfig);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重组试卷,生成新的试卷
|
|
|
+ * @param paper 选中的试卷
|
|
|
+ * @param upSetQuestionOrder 小题乱序 1:乱序 0:不乱序
|
|
|
+ * @param upSetOptionOrder 选项乱序 1:乱序 0:不乱序
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Paper recombinationPaper(Paper paper,int upSetQuestionOrder,int upSetOptionOrder){
|
|
|
+ List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
+ paper.setId(null);
|
|
|
+ Paper newPaper = paperRepo.save(paper);//重新保存成新的paper
|
|
|
+ for(int i = 0;i<paperDetails.size();i++){
|
|
|
+ PaperDetail paperDetail = paperDetails.get(i);
|
|
|
+ List<PaperDetailUnit> paperDetailUnits = paperDetailUnitService.getUnitsByPaperDetail(paperDetail);
|
|
|
+ paperDetail.setPaper(newPaper);//关联新Paper
|
|
|
+ paperDetail.setId(null);
|
|
|
+ PaperDetail newPaperDetail = paperDetailRepo.save(paperDetail);//保存新的paperDetail
|
|
|
+ //小题乱序
|
|
|
+ if(upSetQuestionOrder==1){
|
|
|
+ Collections.shuffle(paperDetailUnits);
|
|
|
+ }
|
|
|
+ for(int j = 0;i<paperDetailUnits.size();j++){
|
|
|
+ //重新设置保存PaperDetailUnitquestion,
|
|
|
+ PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
|
|
|
+ paperDetailUnit.setPaper(newPaper);//关联新Paper
|
|
|
+ paperDetailUnit.setPaperDetail(newPaperDetail);//关联新paperDetail
|
|
|
+ paperDetailUnit.setNumber(j+1);//重新设置序号
|
|
|
+ reSavePaperDetailUtilAndQuestion(paperDetailUnit,upSetOptionOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return newPaper;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -170,49 +216,31 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
- /**
|
|
|
- * 重组试卷,生成新的试卷
|
|
|
- * @param paper 选中的试卷
|
|
|
- * @param upSetQuestionOrder 小题乱序 1:乱序 0:不乱序
|
|
|
- * @param upSetOptionOrder 选项乱序 1:乱序 0:不乱序
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Paper recombinationPaper(Paper paper,int upSetQuestionOrder,int upSetOptionOrder){
|
|
|
- paper.setId(null);
|
|
|
- Paper newPaper = paper;
|
|
|
- newPaper = paperRepo.save(newPaper);//重新保存paper
|
|
|
- List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
- for(int i = 0;i<paperDetails.size();i++){
|
|
|
- PaperDetail paperDetail = paperDetails.get(i);
|
|
|
- paperDetail.setPaper(newPaper);//关联新Paper
|
|
|
- List<PaperDetailUnit> paperDetailUnits = paperDetailUnitService.getUnitsByPaperDetail(paperDetail);
|
|
|
- //小题乱序
|
|
|
- if(upSetQuestionOrder==1){
|
|
|
- Collections.shuffle(paperDetailUnits);
|
|
|
- for(int j = 0;i<paperDetailUnits.size();j++){
|
|
|
- PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
|
|
|
- paperDetailUnit.setPaper(newPaper);//关联新Paper
|
|
|
- paperDetailUnit.setPaperDetail(paperDetail);//关联新paperDetail
|
|
|
- paperDetailUnit.setNumber(j+1);//重新设置序号
|
|
|
- //选项乱序
|
|
|
- if(upSetOptionOrder==1){
|
|
|
- //如果题目类型为单选或多选
|
|
|
- Question question = paperDetailUnit.getQuestion();
|
|
|
- QuesStructType quesStructType = question.getQuestionType();
|
|
|
- if(quesStructType==QuesStructType.SINGLE_ANSWER_QUESTION||
|
|
|
- quesStructType==QuesStructType.MULTIPLE_ANSWER_QUESTION){
|
|
|
- List<QuesOption> options = question.getQuesOptions();
|
|
|
- Collections.shuffle(options);
|
|
|
- for(int k = 0;k<options.size();k++){
|
|
|
- QuesOption quesOption = options.get(k);
|
|
|
- Character num = (char) (0+64+1);
|
|
|
- quesOption.setNumber(String.valueOf(num));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ private void reSavePaperDetailUtilAndQuestion(PaperDetailUnit paperDetailUnit,Integer upSetOptionOrder){
|
|
|
+ //重新设置保存Question
|
|
|
+ Question question = paperDetailUnit.getQuestion();
|
|
|
+ QuesStructType quesStructType = question.getQuestionType();
|
|
|
+ //选项乱序
|
|
|
+ if(upSetOptionOrder==1){
|
|
|
+ //单选或多选
|
|
|
+ if(quesStructType==QuesStructType.SINGLE_ANSWER_QUESTION||
|
|
|
+ quesStructType==QuesStructType.MULTIPLE_ANSWER_QUESTION){
|
|
|
+ List<QuesOption> options = question.getQuesOptions();
|
|
|
+
|
|
|
+ Collections.shuffle(options);
|
|
|
+
|
|
|
+ for(int k = 0;k<options.size();k++){
|
|
|
+ QuesOption quesOption = options.get(k);
|
|
|
+ Character num = (char) (0+64+1);
|
|
|
+ quesOption.setNumber(String.valueOf(num));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return newPaper;
|
|
|
+ question.setId(null);
|
|
|
+ Question newQuestion = quesRepo.save(question);
|
|
|
+ paperDetailUnit.setQuestion(newQuestion); //保存新的试题
|
|
|
+ paperDetailUnit.setId(null);
|
|
|
+ paperDetailUnitRepo.save(paperDetailUnit); //保存新的paperDetailUnit
|
|
|
}
|
|
|
}
|