Parcourir la source

增加选项校验

宋悦 il y a 7 ans
Parent
commit
0cae3c43bf

+ 2 - 2
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/CommonUtils.java

@@ -179,7 +179,7 @@ public final class CommonUtils {
     
     /**
      * 字母转换成数字
-     * @param character
+     * @param input
      * @return
      */
     public static Integer characterToNumber(String input){
@@ -257,6 +257,6 @@ public final class CommonUtils {
     public static void main(String[] args) {
         // QuesStructType quesStructType = getEnum(QuesStructType.class,"单选");
         // System.out.println(quesStructType.getName());
-        System.out.println(characterToNumber("E"));
+        System.out.println(characterToNumber("A"));
     }
 }

+ 13 - 3
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -679,9 +679,10 @@ public final class DocxProcessUtil {
 
     /**
      * 导出word
-     *
-     * @param dataMap
-     * @param fileName   fileName需要带后缀
+     * @param dataModel
+     * @param fileName
+     * @param template
+     * @throws Exception
      */
     public static void exportWord(Object dataModel, String fileName,Template template)throws Exception {
         Writer out = null;
@@ -1029,7 +1030,16 @@ public final class DocxProcessUtil {
 		return null;
     }
 
+    public static int getOptionNum(String wordText){
+        if(wordText.matches("^[a-zA-Z]\\.[\\s\\S]*")){
+            Integer num = CommonUtils.characterToNumber(wordText.substring(0,1));
+            return num;
+        }
+        return -1;
+    }
+
     public static void main(String[] args) throws Exception {
         System.out.println(formatPWordMl("<p>A</p>"));
+        System.out.println(getOptionNum("A.123123123"));
     }
 }

+ 5 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/ImportPaperMsg.java

@@ -142,6 +142,11 @@ public class ImportPaperMsg {
      * 一般校验
      */
     public static final String errMsg_12 = "格式错误,请仔细检查(题干必须有题号、选项必须有选项号、答案必须存在且格式正确)";
+
+    /**
+     * 选项排列顺序
+     */
+    public static final String errMsg_13 = "选项序号有误,必须从A开始且按字母顺序排列(ABCDEF)";
     
     
 }

+ 19 - 9
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -18,6 +18,7 @@ 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.exceptions.Docx4JException;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.docx4j.wml.P;
 import org.slf4j.Logger;
@@ -576,9 +577,6 @@ public class ImportPaperService {
     public String processQuesOption(List<Object> pList, int index, int subQuesNum, Question question,
             ImportPaperCheck importPaperCheck, WordprocessingMLPackage wordMLPackage) throws Exception {
 
-        // 定义试题选项wordml和html
-        // String quesOptionWordMl = "";
-        // String quesOptionHtml = "";
         // 定义选项集合
         List<QuesOption> quesOptions = new ArrayList<QuesOption>();
         // 定义选项数量
@@ -588,7 +586,6 @@ public class ImportPaperService {
         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);
             if (StringUtils.isEmpty(tmpText) && DocxProcessUtil.isText(pOption)) {
@@ -602,9 +599,14 @@ public class ImportPaperService {
             } else if (tmpText.matches("^[a-zA-Z]\\.[\\s\\S]*")) {
                 // 检测到选项开始段落
                 // 创建试题选项
+                number++;
                 current = new QuesOption();
-                String optionNumber = String.valueOf(number);
-                current.setNumber(optionNumber);
+                int optionNumber = DocxProcessUtil.getOptionNum(tmpText);
+                if(optionNumber != number){
+                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum)+ImportPaperMsg.errMsg_13);
+                    throw new PaperException(importPaperCheck.errorInfo);
+                }
+                current.setNumber(String.valueOf(optionNumber));
                 current.setOptionBody("");
                 current.setOptionBodyWord("");
                 quesOptions.add(current);
@@ -1094,9 +1096,17 @@ public class ImportPaperService {
     	String word = replaceContent.replace("[", "").replace("]", "");
     	return pText.replaceAll("\\["+word+"\\]","").replaceAll("[:|:]", "").trim();
     }
+
     public static void main(String[] args){
-    	String answer = "a";
-    	String pattern = "[A-Z]|[a-z]";
-    	System.out.println(Pattern.matches(pattern,answer));
+        try {
+            File file = new File("/Users/songyue/Downloads/行政组织学A卷.docx");
+            File outFile = new File("/Users/songyue/Downloads/行政组织学A1卷.docx");
+            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(file);
+            DocxProcessUtil.initPkgImage(wordMLPackage);
+            wordMLPackage.save(outFile);
+        } catch (Docx4JException e) {
+            e.printStackTrace();
+        }finally {
+        }
     }
 }