Ver Fonte

继续完善调卷规则代码

chenken há 8 anos atrás
pai
commit
0afaf69795

+ 31 - 23
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java

@@ -74,6 +74,12 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 
 	@Override
 	public void saveExtractConfig(ExtractConfig extractConfig) {
+		if(extractConfig.getScrambling_the_question_order()==null){
+			extractConfig.setScrambling_the_question_order((short) 0);
+		}
+		if(extractConfig.getScrambling_the_option_order()==null){
+			extractConfig.setScrambling_the_option_order((short) 0);
+		}
 		List<ExamPaper> examPapers = extractConfig.getExamPaperList();
 		for(int i=0;i<examPapers.size();i++){
 			ExamPaper examPaper = examPapers.get(i);
@@ -91,30 +97,30 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		}
 		return extractConfigRepo.findOne(id);
 	}
+	
 	@Override
 	public void makePaperByConfig(String extractConfigId) {
 		Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
 		//取出调卷规则
-		ExtractConfig extractConfig = this.findConfig(new ExtractConfig(extractConfigId));
+		ExtractConfig extractConfig = this.findConfigById(extractConfigId);
 		//获得抽取好的试卷
 		Map<String,Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
         if(paperMap==null){
         	return;
         }
-        Iterator<String> paperMapIterator = paperMap.keySet().iterator();
-        while(paperMapIterator.hasNext()){
-        	String key = paperMapIterator.next();
+        for (Map.Entry<String, Paper> entry : paperMap.entrySet()) {
+        	String key = entry.getKey();
         	//根据原有试卷重新组卷得到新试卷
-        	Paper newPaper = this.recombinationPaper(paperMap.get(paperMapIterator.next()), 
-							        			extractConfig.getScrambling_the_question_order(), 
-							        			extractConfig.getScrambling_the_option_order());
+        	Paper newPaper = this.recombinationPaper(entry.getValue(), 
+							        				 extractConfig.getScrambling_the_question_order(), 
+							        				 extractConfig.getScrambling_the_option_order());
         	finishedPaperIdMap.put(key, newPaper.getId());
         }
         /**
          * 设置map,并保存调卷规则
          * 如果已经设置过了,就不再设置
          */
-        if(extractConfig.getIfFinish()==0){
+        if(extractConfig.getIfFinish()==null){
         	extractConfig.setFinishedPaperIdMap(finishedPaperIdMap);
         	extractConfig.setIfFinish((short)1);
         	extractConfigRepo.save(extractConfig);
@@ -140,14 +146,14 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			PaperDetail newPaperDetail = paperDetailRepo.save(paperDetail);//保存新的paperDetail
 			//小题乱序
 			if(upSetQuestionOrder==1){
-				Collections.shuffle(paperDetailUnits);
+				Collections.shuffle(paperDetailUnits);//打乱小题List
 			}
-			for(int j = 0;i<paperDetailUnits.size();j++){
-				//重新设置保存PaperDetailUnitquestion,
+			for(int j = 0;j<paperDetailUnits.size();j++){
+				//重新设置保存PaperDetailUnitquestion,
 				PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
-				paperDetailUnit.setPaper(newPaper);//关联新Paper
-				paperDetailUnit.setPaperDetail(newPaperDetail);//关联新paperDetail
-				paperDetailUnit.setNumber(j+1);//重新设置序号
+				paperDetailUnit.setPaper(newPaper);				//关联新Paper
+				paperDetailUnit.setPaperDetail(newPaperDetail); //关联新paperDetail
+				paperDetailUnit.setNumber(j+1);					//重新设置序号
 				reSavePaperDetailUtilAndQuestion(paperDetailUnit,upSetOptionOrder);
 			}
 			
@@ -195,6 +201,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		}
         return paperByTypeMap;
 	}
+	
 	/**
 	 * 根据设定几率取出一套试卷
 	 * @param examPaperList
@@ -217,23 +224,24 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         return null;
 	}
 	
+	/**
+	 * 重新设置并保存paperDetailUnit和question
+	 * @param paperDetailUnit
+	 * @param upSetOptionOrder
+	 */
 	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){
+			if(question.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION||
+			   question.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
 				List<QuesOption> options = question.getQuesOptions();
-				
-				Collections.shuffle(options);
-				
+				Collections.shuffle(options);//打乱选项List
 				for(int k = 0;k<options.size();k++){
 					QuesOption quesOption = options.get(k);
-					Character num = (char) (0+64+1);
-					quesOption.setNumber(String.valueOf(num));
+					Character num = (char) (k+64+1);
+					quesOption.setNumber(String.valueOf(num));//重新设置顺序
 				}
 			}
 		}

+ 114 - 0
cqb-starter/src/test/java/com/qmth/cqb/ExtractConfigServiceTest.java

@@ -0,0 +1,114 @@
+package com.qmth.cqb;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.qmth.cqb.paper.dao.PaperRepo;
+import com.qmth.cqb.paper.model.ExamPaper;
+import com.qmth.cqb.paper.model.ExtractConfig;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.service.ExtractConfigService;
+
+/**
+ * @author  	chenken
+ * @date    	2017年4月18日 下午3:32:25
+ * @company 	QMTH
+ * @description PaperServiceTest.java
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ExtractConfigServiceTest {
+	
+	@Autowired
+	private PaperRepo paperRepo;
+	@Autowired
+	private ExtractConfigService extractConfigService;
+	
+	/**
+	 * 测试保存调卷规则
+	 */
+	@Test
+	public void testSaveExtractConfig(){
+		ExtractConfig extractConfig = new ExtractConfig();
+		extractConfig.setExamId(1L);
+		extractConfig.setExamName("测试考试0419");
+		extractConfig.setExamType("ONLINE");
+		extractConfig.setCourseCode("03013750");
+		extractConfig.setCourseName("测试课程0419");
+		extractConfig.setCallType("WHOLE_SET");
+		extractConfig.setScrambling_the_question_order((short)1);
+		extractConfig.setScrambling_the_option_order((short)1);
+		List<ExamPaper> examPaperList = buildExamPaper();
+		extractConfig.setExamPaperList(examPaperList);
+		extractConfigService.saveExtractConfig(extractConfig);
+	}
+	/**
+	 * 测试根据调卷规则ID生成试卷
+	 */
+	@Test
+	public void testMakePaperByConfig(){
+		extractConfigService.makePaperByConfig("58f6c285aa9e292ae0c3af5c");
+	}
+	
+	private List<ExamPaper> buildExamPaper(){
+		List<ExamPaper> examPaperList = new ArrayList<ExamPaper>();
+		/*******************A类型********************/
+		ExamPaper examPaper1 = new ExamPaper();
+		examPaper1.setExamId(1L);
+		examPaper1.setCourseCode("03013750");
+		examPaper1.setGroupCode("A");
+		examPaper1.setWeight(80);
+		Paper paper1 = new Paper();
+		paper1.setId("58f0a15258e31a0d7448d58c");
+		examPaper1.setPaper(paper1);
+		examPaperList.add(examPaper1);
+		ExamPaper examPaper2 = new ExamPaper();
+		examPaper2.setExamId(1L);
+		examPaper2.setCourseCode("03013750");
+		examPaper2.setGroupCode("A");
+		examPaper2.setWeight(20);
+		Paper paper2 = new Paper();
+		paper2.setId("58f42fcd58e31a025844bfff");
+		examPaper2.setPaper(paper2);
+		examPaperList.add(examPaper2);
+		/*******************B类型********************/
+		ExamPaper examPaper3 = new ExamPaper();
+		examPaper3.setExamId(1L);
+		examPaper3.setCourseCode("03013750");
+		examPaper3.setGroupCode("B");
+		examPaper3.setWeight(60);
+		Paper paper3 = new Paper();
+		paper3.setId("58f4300c58e31a025844c02f");
+		examPaper3.setPaper(paper3);
+		examPaperList.add(examPaper3);
+		ExamPaper examPaper4 = new ExamPaper();
+		examPaper4.setExamId(1L);
+		examPaper4.setCourseCode("03013750");
+		examPaper4.setGroupCode("B");
+		examPaper4.setWeight(40);
+		Paper paper4 = new Paper();
+		paper4.setId("e483c730-921e-4212-a67e-42235a0aec00");
+		examPaper4.setPaper(paper4);
+		examPaperList.add(examPaper4);
+		return examPaperList;
+	}
+	
+	public static void main(String[] args) {
+		List<String> newList = new ArrayList<String>();
+		newList.add("a");
+		newList.add("b");
+		newList.add("c");
+		newList.add("d");
+		newList.add("e");
+		Collections.shuffle(newList);
+		System.out.println(newList);
+	}
+}
+