Bladeren bron

导入填空题题干与答案校验

weiwenhai 7 jaren geleden
bovenliggende
commit
078b63467b
1 gewijzigde bestanden met toevoegingen van 40 en 4 verwijderingen
  1. 40 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

+ 40 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -320,6 +320,10 @@ public class ImportPaperService {
                     // 处理其他题型
                     processQuesBody(pList, importPaperCheck.index, subQuesNum,question, importPaperCheck, tmpWordMlPackage);
                     processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,importPaperCheck, tmpWordMlPackage, false,paper);
+                    //填空题空格校验
+                    if(question.getQuestionType().getName() == QuesStructType.FILL_BLANK_QUESTION.getName()){
+                    	processFill(question,paperDetailUnit,importPaperCheck,subQuesNum);
+                    }
                 }
                 // 设置WordMlPackage二进制数据
                 byte[] pkgByte = getZipResource(wordMLPackage,question);
@@ -524,10 +528,16 @@ public class ImportPaperService {
      */
     public void processMainQuesHeader(List<Object> pList, int index, ImportPaperCheck importPaperCheck,String courseNo) throws PaperException {
         int i = 0;
-        P pFirst = (P) pList.get(index);
-        String tmpTextFirst = DocxProcessUtil.getPText(pFirst);
-        if(!tmpTextFirst.startsWith(ImportPaperMsg.questionClassify_word)){
-        	throw new PaperException("导入文件格式有误,必须有大题头信息,且以[试题分类]开头!");
+        for(i=index;i< pList.size(); i++){
+        	P pFirst = (P) pList.get(i);
+            String tmpTextFirst = DocxProcessUtil.getPText(pFirst);
+            if(StringUtils.isBlank(tmpTextFirst)){
+            	continue;
+            }
+            if(!tmpTextFirst.startsWith(ImportPaperMsg.questionClassify_word)){
+            	throw new PaperException("导入文件格式有误,必须有大题头信息,且以[试题分类]开头!");
+            }
+            break;
         }
         for (i = index; i < pList.size(); i++) {
             P pHeader = (P) pList.get(i);
@@ -1223,6 +1233,10 @@ public class ImportPaperService {
                     // 处理其他题型
                     processQuesBody(pList, importPaperCheck.index, subQuesNum, subQues, importPaperCheck, wordMLPackage);
                     processQuesTail(pList, importPaperCheck.index, subQuesNum, subQues, paperDetailUnit,importPaperCheck, wordMLPackage, true,paper);
+                    //填空题空格校验
+                    if(subQues.getQuestionType().getName() == QuesStructType.FILL_BLANK_QUESTION.getName()){
+                    	processFill(question,paperDetailUnit,importPaperCheck,subQuesNum);
+                    }
                 }
                 subQuesList.add(subQues);
                 i = importPaperCheck.index - 1;
@@ -1744,4 +1758,26 @@ public class ImportPaperService {
 		Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");  
     	return pattern.matcher(str).matches();
 	}
+	
+	/**
+	 * 判断填空题题干和答案空格数量是否一致
+	 * @throws PaperException 
+	 */
+	public void processFill(Question question, PaperDetailUnit paperDetailUnit, ImportPaperCheck importPaperCheck,int subQuesNum) throws PaperException{
+		//按3个#号截取题干
+		String[] quesBody = question.getQuesBody().split("(</span><span>###");
+		String[] quesAnwser = question.getQuesAnswer().split("<span>##");
+		//如果有答案,进行判断
+		if(quesAnwser.length>1){
+			//判断题干空格和答案空格是否相等
+			if((quesBody.length -1) != quesAnwser.length){
+				if(importPaperCheck.nestedHeadNumber == 0){
+            		importPaperCheck.setErrorInfo("[大题名称]:"+importPaperCheck.quesName+"第"+subQuesNum+"题中,题干与答案的空格数量不一样");
+            	}else {
+            		importPaperCheck.setErrorInfo("[大题名称]:"+importPaperCheck.quesName+"第"+importPaperCheck.nestedHeadNumber+"个套题中,第"+subQuesNum+"题中,题干与答案的空格数量不一样");
+				}
+            	throw new PaperException(importPaperCheck.errorInfo);
+			}
+		}
+	}
 }