Pārlūkot izejas kodu

提交选择题选项乱序代码

chenken 8 gadi atpakaļ
vecāks
revīzija
53f69cc3ae

+ 16 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/model/PaperDetailUnit.java

@@ -35,6 +35,13 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
 
     @DBRef
     private Question question;// 关联试题
+    
+    /**
+     * 选择题下option的排序,按照number排序
+     * 一般:4,2,3,1
+     * 套题下的选择题:1,2,3,4;2,3,4,1;3,2,1,4  题与题之间按分号";"分隔
+     */
+    private String optionOrder;
 
     private String creator;// 创建人id
 
@@ -148,7 +155,15 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
         return subScoreList;
     }
 
-    public void setSubScoreList(List<Double> subScoreList) {
+	public String getOptionOrder() {
+		return optionOrder;
+	}
+
+	public void setOptionOrder(String optionOrder) {
+		this.optionOrder = optionOrder;
+	}
+
+	public void setSubScoreList(List<Double> subScoreList) {
         this.subScoreList = subScoreList;
         if (subScoreList != null) {
             double totalScore = 0;

+ 4 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java

@@ -1,5 +1,7 @@
 package com.qmth.cqb.paper.service;
 
+import java.util.Map;
+
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
 
@@ -36,9 +38,9 @@ public interface ExtractConfigService {
 	 * 4.得到试卷类型--->试卷ID的map,设置到finishedPaperIdMap属性中
 	 * 5.如果 是第一次生成试卷,保存finishedPaperIdMap
 	 * @param extractConfigId	规则 ID
-	 * @return 
+	 * @return 类型--->试卷ID的Map集合
 	 */
-	public void makePaperByConfig(String extractConfigId);
+	public Map<String, String> makePaperByConfig(String extractConfigId);
 	/**
 	 * 根据给定试卷重组试卷,生成新的试卷
 	 * @param paper					给定的试卷

+ 28 - 9
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java

@@ -103,7 +103,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	}
 	
 	@Override
-	public void makePaperByConfig(String extractConfigId) {
+	public Map<String, String> makePaperByConfig(String extractConfigId) {
 		Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
 		//取出调卷规则
 		ExtractConfig extractConfig = this.findConfigById(extractConfigId);
@@ -132,6 +132,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         	extractConfig.setIfFinish((short)1);
         	extractConfigRepo.save(extractConfig);
         }
+        return finishedPaperIdMap;
 	}
 
 	/**
@@ -156,7 +157,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 				Collections.shuffle(paperDetailUnits);//打乱小题List
 			}
 			for(int j = 0;j<paperDetailUnits.size();j++){
-				//重新设置保存PaperDetailUnit、question,
+				//重新设置保存PaperDetailUnit
 				PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
 				paperDetailUnit.setPaper(newPaper);				//关联新Paper
 				paperDetailUnit.setPaperDetail(newPaperDetail); //关联新paperDetail
@@ -247,19 +248,37 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			//单选或多选
 			if(question.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION||
 			   question.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
+				List<String> numberList = new ArrayList<String>();
 				List<QuesOption> options = question.getQuesOptions();
-				Collections.shuffle(options);//打乱选项List
 				for(int k = 0;k<options.size();k++){
 					QuesOption quesOption = options.get(k);
-					Character num = (char) (k+64+1);
-					quesOption.setNumber(String.valueOf(num));//重新设置顺序
+					numberList.add(quesOption.getNumber());
 				}
+				Collections.shuffle(numberList);				 	  //打乱number顺序
+				paperDetailUnit.setOptionOrder(StringUtils.join(numberList.toArray(),","));//设置option顺序
+			}
+			//套题,套题下小题不乱序,选择题选项乱序
+			if(question.getQuestionType()==QuesStructType.NESTED_ANSWER_QUESTION){
+				List<Question> subQuestions = question.getSubQuestions();
+				StringBuffer optionOrder = new StringBuffer();
+				for(int m=0;m<subQuestions.size();m++){
+					Question subQuestion = subQuestions.get(m);
+					if(subQuestion.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION||
+					   subQuestion.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
+						List<String> numberList = new ArrayList<String>();
+						List<QuesOption> options = subQuestion.getQuesOptions();
+						for(int n = 0;n<options.size();n++){
+							QuesOption quesOption = options.get(n);
+							numberList.add(quesOption.getNumber());
+						}
+						Collections.shuffle(numberList);				 	  //打乱number顺序
+						optionOrder.append(StringUtils.join(numberList.toArray(),",")).append(";");
+					}
+				}
+				paperDetailUnit.setOptionOrder(optionOrder.toString());		 //设置option顺序
 			}
 		}
-		question.setId(null);
-		Question newQuestion = quesRepo.save(question);
-		paperDetailUnit.setQuestion(newQuestion);	//保存新的试题
 		paperDetailUnit.setId(null);
-		paperDetailUnitRepo.save(paperDetailUnit);	//保存新的paperDetailUnit
+		paperDetailUnitRepo.save(paperDetailUnit);//保存新的paperDetailUnit
 	}
 }

+ 45 - 15
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -8,9 +8,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.docx4j.wml.P;
@@ -247,24 +250,19 @@ public class ImportPaperService {
 
                         // 处理题干
                         processQuesBody(pList, importPaperCheck.index, question, importPaperCheck, tmpWordMlPackage);
-
                         // 处理选项
-                        processQuesOption(pList, importPaperCheck.index, subQuesNum, question, importPaperCheck,
-                                tmpWordMlPackage);
+                        processQuesOption(pList, importPaperCheck.index, subQuesNum, question, importPaperCheck,tmpWordMlPackage);
                         // 处理尾信息
-                        processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,
-                                importPaperCheck, tmpWordMlPackage, false);
-
+                        processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,importPaperCheck, tmpWordMlPackage, false);
+                        //处理选择题的option
+                        processSelectOption(question);
                     } else if (importPaperCheck.quesType.equals("套题")) {
                         // 处理套题
-                        processNestedQues(pList, importPaperCheck.index, question, paperDetailUnit, importPaperCheck,
-                                tmpWordMlPackage);
+                        processNestedQues(pList, importPaperCheck.index, question, paperDetailUnit, importPaperCheck,tmpWordMlPackage);
                     } else {
                         // 处理其他题型
                         processQuesBody(pList, importPaperCheck.index, question, importPaperCheck, tmpWordMlPackage);
-
-                        processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,
-                                importPaperCheck, tmpWordMlPackage, false);
+                        processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,importPaperCheck, tmpWordMlPackage, false);
                     }
                     // 设置WordMlPackage二进制数据
                     setPkgByte(question, writePkg);
@@ -512,8 +510,9 @@ public class ImportPaperService {
         QuesOption current = null;
 
         int i = 0;
-
+        int number = 0;
         for (i = index; i < pList.size(); i++) {
+        	number++;
             P pOption = (P) pList.get(i);
             String tmpText = DocxProcessUtil.getPText(pOption);
 
@@ -524,7 +523,8 @@ public class ImportPaperService {
                 // 检测到选项开始段落
                 // 创建试题选项
                 current = new QuesOption();
-                current.setNumber(tmpText.substring(0, 1));
+                String optionNumber = String.valueOf(number);//number设置 为1,2,3,4--chenken 2017.4.25
+                current.setNumber(optionNumber);
                 current.setOptionBody("");
                 current.setOptionBodyWord("");
                 quesOptions.add(current);
@@ -553,7 +553,7 @@ public class ImportPaperService {
         }
         return importPaperCheck.errorInfo;
     }
-
+    
     /**
      * 处理小题尾信息
      *
@@ -605,7 +605,15 @@ public class ImportPaperService {
         importPaperCheck.setIndex(i);
         // 校验答案
         if (answerHTML.length() > 0) {
-            question.setQuesAnswer(answerHTML.toString());
+        	//选择题过滤html标签--chenken 2017.4.25
+        	if (importPaperCheck.quesType.equals("单选") || importPaperCheck.quesType.equals("多选")){
+        		String regEx_html="<[^>]+>";
+        		Pattern p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE); 
+                Matcher m_html=p_html.matcher(answerHTML.toString()); //过滤html标签 
+                question.setQuesAnswer(m_html.replaceAll(""));
+        	}else{
+        		question.setQuesAnswer(answerHTML.toString());
+        	}
             question.setQuesAnswerWord(answerWordML.toString());
         } else {
             importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum) + "答案为空或格式不正确\n");
@@ -620,6 +628,28 @@ public class ImportPaperService {
             paperDetailUnit.setScore(Double.parseDouble(quesScore));
         }
     }
+    
+    /**
+     * 处理选择题option信息
+     * @param question
+     */
+    public void processSelectOption(Question question){
+    	String answer = question.getQuesAnswer();
+    	if(StringUtils.isNotBlank(answer)){
+    		String[] answerArray = answer.split(",");
+    		for(int i=0;i<question.getQuesOptions().size();i++){
+    			QuesOption quesOption = question.getQuesOptions().get(i);
+    			char number = (char) (Integer.parseInt(quesOption.getNumber())+64);
+    			if(ArrayUtils.contains(answerArray,String.valueOf(number))){
+    				quesOption.setIsCorrect((short) 1);
+    			}else{
+    				quesOption.setIsCorrect((short) 0);
+    			}
+    		}
+    		//选择题答案不持久化
+    		question.setQuesAnswer(null);
+    	}
+    }
 
     /**
      * 处理套题