Selaa lähdekoodia

保存调卷规则逻辑

chenken 8 vuotta sitten
vanhempi
commit
69b131290e

+ 6 - 10
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java

@@ -1,7 +1,5 @@
 package com.qmth.cqb.paper.service;
 
-import java.util.Map;
-
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
 
@@ -31,16 +29,14 @@ public interface ExtractConfigService {
 	 */
 	public void saveExtractConfig(ExtractConfig extractConfig);
 	/**
-	 * 按照设定调卷规则规则生成一套试卷
-	 * @param examId
-	 * @param courseCode
-	 * @param groupCode
-	 * @return
+	 * 按照设定调卷规则生成一套试卷
+	 * @param extractConfigId	规则 ID
+	 * @return 
 	 */
-	public Map<String, String> makePaperByConfig(String extractConfigId);
+	public void makePaperByConfig(String extractConfigId);
 	/**
-	 * 重组试卷,生成新的试卷
-	 * @param paper					选中的试卷
+	 * 根据给定试卷重组试卷,生成新的试卷
+	 * @param paper					给定的试卷
 	 * @param upSetQuestionOrder	小题乱序		1:乱序  0:不乱序
 	 * @param upSetOptionOrder		选项乱序		1:乱序  0:不乱序
 	 * @return

+ 73 - 45
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java

@@ -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
 	}
 }