Kaynağa Gözat

提交 优化导入试卷代码

chenken 8 yıl önce
ebeveyn
işleme
3e59e3e7dc

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

@@ -0,0 +1,136 @@
+package com.qmth.cqb.paper.model;
+/**
+ * @author  	chenken
+ * @date    	2017年6月8日 下午2:46:09
+ * @company 	QMTH
+ * @description ImportPaperMsg.java
+ */
+public class ImportPaperMsg {
+	/**
+	 * [试题分类]
+	 */
+	public static final String questionClassify_word = "[试题分类]";
+	/**
+	 * [题型]
+	 */
+	public static final String questionType_word = "[题型]";
+	/**
+	 * [小题型]
+	 */
+    public static final String subQuestionType_word = "[小题型]";
+    /**
+	 * [试题编号]
+	 */
+    public static final String questionNo_word = "[试题编号]";
+    /**
+	 * [命题人]
+	 */
+    public static final String question_creator = "[命题人]";
+    /**
+	 * [题干]
+	 */
+    public static final String questionBody_word = "[题干]";
+    /**
+	 * [选项]
+	 */
+    public static final String option_word = "[选项]";
+    /**
+	 * [答案]
+	 */
+    public static final String answer_word = "[答案]";
+    /**
+	 * [属性]
+	 */
+    public static final String attribute_word = "[属性]";
+    /**
+	 * [适用年级]
+	 */
+    public static final String grade_word = "[适用年级]";
+    /**
+	 * [测评项目]
+	 */
+    public static final String course_word = "[测评项目]";
+    /**
+     * [分数]
+     */
+    public static final String score_word = "[分数]";
+    /**
+	 * [小题分数]
+	 */
+    public static final String subQuesScore_word = "[小题分数]";
+    /**
+	 * [解析]
+	 */
+    public static final String analyze_word = "[解析]";
+    /**
+     *[题目数量]
+     */
+    public static final String questionNum_word = "[题目数量]";
+    /**
+	 *[题组数量]
+	 */
+    public static final String subQuestionNum_word = "[题组数量]";
+    /**
+	 * 套题
+	 */
+    public static final String nestedQuestion_word = "套题";
+    /**
+	 * [大题名称]
+	 */
+    public static final String questionName_word = "[大题名称]";
+    /**
+     * 单选
+     */
+    public static final String singleSelection = "单选";
+    /**
+     * 多选
+     */
+    public static final String multipleSelection = "多选";
+    /**
+     * [
+     */
+    public static final String left_bracket = "[";
+    /**
+     * ]
+     */
+    public static final String right_bracket = "]";
+    /**
+     * 题干为空或格式不正确
+     */
+    public static final String errMsg_01 = "题干为空或格式不正确";
+    /**
+     * 小题型为空或格式不正确\n
+     */
+    public static final String errMsg_02 = "小题型为空或格式不正确\n";
+    /**
+     * 题干为空或格式不正确,必须以数字.开头\n
+     */
+    public static final String errMsg_03 = "题干为空或格式不正确,必须以数字.开头\n";
+    /**
+     * 试题分类为空或格式不正确\n
+     */
+    public static final String errMsg_04 = "试题分类为空或格式不正确\n";
+    /**
+     * 题型为空或格式不正确\n
+     */
+    public static final String errMsg_05 = "题型为空或格式不正确\n";
+    /**
+     * 大题名称为空或格式不正确\n
+     */
+    public static final String errMsg_06 = "大题名称为空或格式不正确\n";
+    /**
+     * 题目数量为空或格式不正确\n
+     */
+    public static final String errMsg_07 = "题目数量为空或格式不正确\n";
+    /**
+     * 分数为空或格式不正确\n
+     */
+    public static final String errMsg_08 = "分数为空或格式不正确\n";
+    /**
+     * 题型必须是单选、多选、判断、填空、问答、套题中的一种\n
+     */
+    public static final String errMsg_09 = "题型必须是单选、多选、判断、填空、问答、套题中的一种\n";
+    
+    
+}
+

+ 84 - 121
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -28,6 +28,7 @@ import com.qmth.cqb.paper.dao.PaperDetailRepo;
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
 import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.model.ImportPaperCheck;
+import com.qmth.cqb.paper.model.ImportPaperMsg;
 import com.qmth.cqb.paper.model.Paper;
 import com.qmth.cqb.paper.model.PaperDetail;
 import com.qmth.cqb.paper.model.PaperDetailUnit;
@@ -49,7 +50,6 @@ import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 public class ImportPaperService {
 
     protected static final Logger log = LoggerFactory.getLogger(ImportPaperService.class);
-
     @Autowired
     PaperRepo paperRepo;
 
@@ -95,8 +95,7 @@ public class ImportPaperService {
      * @param file
      * @return
      */
-    public Paper ImportPaper(Paper paper, AccessUser user,
-            File file) throws Exception {
+    public Paper ImportPaper(Paper paper, AccessUser user,File file) throws Exception {
         paperService.checkPaperNameNew(paper.getName(), user.getRootOrgId().toString());
         return processImportPaper(paper,user,file);
     }
@@ -124,24 +123,18 @@ public class ImportPaperService {
         	checkUnitNum(paperDetailUnits,importPaperCheck);
         	//校验答案是否不全
         	checkAnswerISfull(paperDetailUnits,importPaperCheck);
-        	
             tempPaper = paperRepo.save(paper);
         }
-
         if (paperDetails.size() > 0) {
             paperDetailRepo.save(paperDetails);
         }
-
         if (questions.size() > 0) {
             quesService.saveImportQuesList(questions);
         }
-
         if (paperDetailUnits.size() > 0) {
             paperDetailUnitRepo.save(paperDetailUnits);
         }
-
         paperService.formatPaper(tempPaper, null);
-
         return tempPaper;
     }
 
@@ -152,10 +145,7 @@ public class ImportPaperService {
      * @param paperDetailUnits
      * @param questions
      */
-    public void clearPaper(Paper paper,
-                           List<PaperDetail> paperDetails,
-                           List<PaperDetailUnit> paperDetailUnits,
-                           List<Question> questions){
+    public void clearPaper(Paper paper,List<PaperDetail> paperDetails,List<PaperDetailUnit> paperDetailUnits, List<Question> questions){
         paper = null;
         paperDetails.clear();
         for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
@@ -230,7 +220,7 @@ public class ImportPaperService {
                 // 设置当前索引,防止多余循环
                 i = importPaperCheck.index - 1;
             } else if (pText.matches("^\\d{1,}\\.[\\s\\S]*")
-                    || (isNested(importPaperCheck) && !pText.startsWith("["))) {
+                    || (isNested(importPaperCheck) && !pText.startsWith(ImportPaperMsg.left_bracket))) {
                 if(paperDetail == null){
                     throw new PaperException("导入文件格式有误,必须有大题头信息,且以 [ 开头!");
                 }
@@ -242,7 +232,7 @@ public class ImportPaperService {
                 // 初始化小题类和试题类
                 initPaperDetail(paper, paperDetail, paperDetailUnit, question, subQuesNum , importPaperCheck);
                 // 处理客观题
-                if (importPaperCheck.quesType.equals("单选") || importPaperCheck.quesType.equals("多选")) {
+                if (importPaperCheck.quesType.equals(ImportPaperMsg.singleSelection) || importPaperCheck.quesType.equals(ImportPaperMsg.multipleSelection)) {
                     // 处理题干
                     processQuesBody(pList, importPaperCheck.index, subQuesNum, question, importPaperCheck, tmpWordMlPackage);
                     // 处理选项
@@ -253,15 +243,13 @@ public class ImportPaperService {
                             importPaperCheck, tmpWordMlPackage, false);
                     // 处理选择题的option--chenken 20170425
                     processSelectOption(question);
-                } else if (importPaperCheck.quesType.equals("套题")) {
+                } else if (importPaperCheck.quesType.equals(ImportPaperMsg.nestedQuestion_word)) {
                     // 处理套题
-                    processNestedQues(pList, importPaperCheck.index,question, paperDetailUnit, importPaperCheck,
-                            tmpWordMlPackage);
+                    processNestedQues(pList, importPaperCheck.index,question, paperDetailUnit, importPaperCheck,tmpWordMlPackage);
                 } else {
                     // 处理其他题型
                     processQuesBody(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);
                 }
                 // 设置WordMlPackage二进制数据
                 question.setQuesPkg(writeByte);
@@ -296,10 +284,10 @@ public class ImportPaperService {
     }
 
     public boolean isQuesHeader(String pText){
-        return pText.startsWith("[")
-                && !pText.startsWith("[答案]")
-                && !pText.startsWith("[小题分数]")
-                && !pText.startsWith("[小题型]");
+        return pText.startsWith(ImportPaperMsg.left_bracket)
+                && !pText.startsWith(ImportPaperMsg.answer_word)
+                && !pText.startsWith(ImportPaperMsg.score_word)
+                && !pText.startsWith(ImportPaperMsg.subQuestionType_word);
     }
 
     /**
@@ -370,26 +358,26 @@ public class ImportPaperService {
 
         String tmpErrorInfo = "";
         if (StringUtils.isEmpty(importPaperCheck.quesGroup)) {
-            tmpErrorInfo += "试题分类为空或格式不正确\n";
+            tmpErrorInfo += ImportPaperMsg.errMsg_04;
 
         }
         if (StringUtils.isEmpty(importPaperCheck.quesType)) {
-            tmpErrorInfo += "题型为空或格式不正确\n";
+            tmpErrorInfo += ImportPaperMsg.errMsg_05;
 
         }
         if (StringUtils.isEmpty(importPaperCheck.quesName)) {
-            tmpErrorInfo += "大题名称为空或格式不正确\n";
+            tmpErrorInfo += ImportPaperMsg.errMsg_06;
 
         }
         if (StringUtils.isEmpty(importPaperCheck.quesCount)) {
-            tmpErrorInfo += "题目数量为空或格式不正确\n";
+            tmpErrorInfo += ImportPaperMsg.errMsg_07;
 
         }
         if (StringUtils.isEmpty(importPaperCheck.quesScore)) {
-            tmpErrorInfo += "分数为空或格式不正确\n";
+            tmpErrorInfo += ImportPaperMsg.errMsg_08;
         }
         if (!StringUtils.isEmpty(importPaperCheck.quesType) && !CommonUtils.checkQuesType(importPaperCheck.quesType)) {
-            tmpErrorInfo += "题型必须是单选、多选、判断、填空、问答、套题中的一种\n";
+            tmpErrorInfo += ImportPaperMsg.errMsg_09;
         }
         if (StringUtils.isEmpty(tmpErrorInfo)) {
             return true;
@@ -405,34 +393,41 @@ public class ImportPaperService {
      * @param pList
      * @param index
      * @param importPaperCheck
+     * @throws PaperException 
      */
-    public void processMainQuesHeader(List pList, int index, ImportPaperCheck importPaperCheck) {
-
+    public void processMainQuesHeader(List<Object> pList, int index, ImportPaperCheck importPaperCheck) throws PaperException {
         int i = 0;
-
         for (i = index; i < pList.size(); i++) {
             P pHeader = (P) pList.get(i);
+            P pNextHeader = (P) pList.get(i+1);
             String tmpText = DocxProcessUtil.getPText(pHeader);
-            if (tmpText.startsWith("[试题分类]")) {
-
-                importPaperCheck.setQuesGroup(tmpText.replaceAll("\\[试题分类\\]", "").replaceAll("[:|:]", "").trim());
-
-            } else if (tmpText.startsWith("[题型]")) {
-
-                importPaperCheck.setQuesType(tmpText.replaceAll("\\[题型\\]", "").replaceAll("[:|:]", "").trim());
-
-            } else if (tmpText.startsWith("[大题名称]")) {
-
-                importPaperCheck.setQuesName(tmpText.replaceAll("\\[大题名称\\]", "").replaceAll("[:|:]", "").trim());
-
-            } else if (tmpText.startsWith("[题目数量]")) {
-
-                importPaperCheck.setQuesCount(tmpText.replaceAll("\\[题目数量\\]", "").replaceAll("[:|:]", "").trim());
-
-            } else if (tmpText.startsWith("[分数]")) {
-
-                importPaperCheck.setQuesScore(tmpText.replaceAll("\\[分数\\]", "").replaceAll("[:|:]", "").trim());
-
+            String nextTmpText = DocxProcessUtil.getPText(pNextHeader);
+            if (tmpText.startsWith(ImportPaperMsg.questionClassify_word)) {
+            	if(!nextTmpText.startsWith(ImportPaperMsg.questionType_word)){
+                	importPaperCheck.setErrorInfo("[试题分类]的下一题头应该是[题型],当前读到的信息为:“" +nextTmpText+"”,请检查word中格式问题");
+                	throw new PaperException(importPaperCheck.errorInfo);
+                }
+                importPaperCheck.setQuesGroup(getContent(tmpText,ImportPaperMsg.questionClassify_word));
+            } else if (tmpText.startsWith(ImportPaperMsg.questionType_word)) {
+            	if(!nextTmpText.startsWith(ImportPaperMsg.questionName_word)){
+                	importPaperCheck.setErrorInfo("[题型]的下一题头应该是[大题名称],当前读到的信息为:“"+nextTmpText+"”,请检查word中格式问题");
+                	throw new PaperException(importPaperCheck.errorInfo);
+                }
+                importPaperCheck.setQuesType(getContent(tmpText,ImportPaperMsg.questionType_word));
+            } else if (tmpText.startsWith(ImportPaperMsg.questionName_word)) {
+            	if(!nextTmpText.startsWith(ImportPaperMsg.questionNum_word)){
+                	importPaperCheck.setErrorInfo("[大题名称]的下一题头应该是[题目数量],当前读到的信息为:“"+nextTmpText+"”,请检查word中格式问题");
+                	throw new PaperException(importPaperCheck.errorInfo);
+                }
+                importPaperCheck.setQuesName(getContent(tmpText,ImportPaperMsg.questionName_word));
+            } else if (tmpText.startsWith(ImportPaperMsg.questionNum_word)) {
+            	if(!nextTmpText.startsWith(ImportPaperMsg.score_word)){
+                	importPaperCheck.setErrorInfo("[题目数量]的下一题头应该是[分数],当前读到的信息为:“"+nextTmpText+"”,请检查word中格式问题");
+                	throw new PaperException(importPaperCheck.errorInfo);
+                }
+                importPaperCheck.setQuesCount(getContent(tmpText,ImportPaperMsg.questionNum_word));
+            } else if (tmpText.startsWith(ImportPaperMsg.score_word)) {
+                importPaperCheck.setQuesScore(getContent(tmpText,ImportPaperMsg.score_word));
             } else if (StringUtils.isEmpty(tmpText)) {
                 continue;
             } else {
@@ -452,24 +447,21 @@ public class ImportPaperService {
      * @param wordMLPackage
      * @throws Exception
      */
-    public void processQuesBody(List pList, int index, int subQuesNum,Question question, ImportPaperCheck importPaperCheck,
+    public void processQuesBody(List<Object> pList, int index, int subQuesNum,Question question, ImportPaperCheck importPaperCheck,
             WordprocessingMLPackage wordMLPackage) throws Exception {
         // 定义题干wordml和html
         StringBuilder quesBodyWordMl = new StringBuilder();
         StringBuilder quesBodyHtml = new StringBuilder();
         int i = 0;
-        boolean bodyStart = false;
         for (i = index; i < pList.size(); i++) {
             P pBody = (P) pList.get(i);
             String tmpText = DocxProcessUtil.getPText(pBody);
-
             if (StringUtils.isEmpty(tmpText) && DocxProcessUtil.isText(pBody)) {
                 // 跳过空白段落
                 continue;
             } else if (tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
                 // 题干第一段
                 // 过滤题干标题
-                bodyStart = true;
                 pBody = DocxProcessUtil.formatP(pBody, QuesUnit.QUES_BODY);
                 String tmpWordMl = DocxProcessUtil.getPWordMl(pBody);
                 tmpWordMl = DocxProcessUtil.formatPWordMl(tmpWordMl);
@@ -488,11 +480,9 @@ public class ImportPaperService {
         }
         if(StringUtils.isEmpty(quesBodyHtml) || StringUtils.isEmpty(quesBodyWordMl)){
             if(subQuesNum == 0){
-                importPaperCheck.setErrorInfo(importPaperCheck.quesName
-                        +"题干为空或格式不正确");
+                importPaperCheck.setErrorInfo(importPaperCheck.quesName+ImportPaperMsg.errMsg_01);
             }else{
-                importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName,subQuesNum)
-                        +"题干为空或格式不正确");
+                importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName,subQuesNum)+ImportPaperMsg.errMsg_01);
             }
             throw new PaperException(importPaperCheck.errorInfo);
         }
@@ -513,7 +503,7 @@ public class ImportPaperService {
      * @return
      * @throws Exception
      */
-    public String processQuesOption(List pList, int index, int subQuesNum, Question question,
+    public String processQuesOption(List<Object> pList, int index, int subQuesNum, Question question,
             ImportPaperCheck importPaperCheck, WordprocessingMLPackage wordMLPackage) throws Exception {
 
         // 定义试题选项wordml和html
@@ -525,14 +515,12 @@ public class ImportPaperService {
         int optionCount = 0;
         // 当前所处的选项
         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);
-
             if (StringUtils.isEmpty(tmpText) && DocxProcessUtil.isText(pOption)) {
                 // 跳过空白段落
                 continue;
@@ -540,9 +528,7 @@ public class ImportPaperService {
                 // 检测到选项开始段落
                 // 创建试题选项
                 current = new QuesOption();
-                String optionNumber = String.valueOf(number);// number设置
-                                                             // 为1,2,3,4--chenken
-                                                             // 2017.4.25
+                String optionNumber = String.valueOf(number);
                 current.setNumber(optionNumber);
                 current.setOptionBody("");
                 current.setOptionBodyWord("");
@@ -553,7 +539,7 @@ public class ImportPaperService {
                 String tmpWordMl = DocxProcessUtil.getPWordMl(pOption);
                 current.setOptionBody(current.getOptionBody() + DocxProcessUtil.docx2Html(tmpWordMl, wordMLPackage));
                 current.setOptionBodyWord(current.getOptionBodyWord() + DocxProcessUtil.formatPWordMl(tmpWordMl));
-            } else if (tmpText.startsWith("[")) {
+            } else if (tmpText.startsWith(ImportPaperMsg.left_bracket)) {
                 // 非选项的其他内容直接退出
                 break;
             } else if (current != null) {
@@ -567,8 +553,7 @@ public class ImportPaperService {
         }
         importPaperCheck.setIndex(i);
         if (optionCount < 2) {
-            importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum)
-                            + "中选项格式不正确或有缺失\n");
+            importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum)+ "中选项格式不正确或有缺失\n");
             throw new PaperException(importPaperCheck.errorInfo);
         } else {
             question.setQuesOptions(quesOptions);
@@ -586,7 +571,7 @@ public class ImportPaperService {
      * @param paperDetailUnit
      * @param importPaperCheck
      */
-    public void processQuesTail(List pList, int index, int subQuesNum, Question question,
+    public void processQuesTail(List<Object> pList, int index, int subQuesNum, Question question,
             PaperDetailUnit paperDetailUnit, ImportPaperCheck importPaperCheck, WordprocessingMLPackage wordMLPackage,
             boolean isNested) throws Exception {
 
@@ -604,7 +589,7 @@ public class ImportPaperService {
             if (StringUtils.isEmpty(tmpText) && DocxProcessUtil.isText(pAnswer)) {
                 // 跳过空白段落
                 continue;
-            } else if (tmpText.startsWith("[答案]")) {
+            } else if (tmpText.startsWith(ImportPaperMsg.answer_word)) {
                 // 检测到答案开始段落
                 pAnswer = DocxProcessUtil.formatP(pAnswer, QuesUnit.QUES_ANSWER);
                 String tmpWordMl = DocxProcessUtil.getPWordMl(pAnswer);
@@ -613,20 +598,20 @@ public class ImportPaperService {
                 	//校验单选多选答案
                 	checkAnswer(question,pList.get(i).toString(),importPaperCheck,subQuesNum);
                     answerWordML.append(DocxProcessUtil.formatPWordMl(tmpWordMl));
-                    answerHTML.append(tmpText.replaceAll("\\[答案\\]", "").replaceAll("[:|:]", "").trim());
+                    answerHTML.append(getContent(tmpText, ImportPaperMsg.answer_word));
                 }else if(question.getQuestionType() == QuesStructType.BOOL_ANSWER_QUESTION){
                 	answerWordML.append(DocxProcessUtil.formatPWordMl(tmpWordMl));
-                    answerHTML.append(tmpText.replaceAll("\\[答案\\]", "").replaceAll("[:|:]", "").trim());
+                    answerHTML.append(getContent(tmpText, ImportPaperMsg.answer_word));
                 }else{
                     answerWordML.append(DocxProcessUtil.formatPWordMl(tmpWordMl));
                     answerHTML.append(DocxProcessUtil.docx2Html(tmpWordMl, wordMLPackage));
                 }
                 answerStart = true;
-            } else if (tmpText.startsWith("[小题分数]")) {
+            } else if (tmpText.startsWith(ImportPaperMsg.subQuesScore_word)) {
                 // 检测到分数开始段落
-                quesScore = tmpText.replaceAll("\\[小题分数\\]", "").replaceAll("[:|:]", "").trim();
+                quesScore = getContent(tmpText, ImportPaperMsg.subQuesScore_word);
                 answerStart = false;
-            } else if (tmpText.startsWith("[") || tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
+            } else if (tmpText.startsWith(ImportPaperMsg.left_bracket) || tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
                 // 检测到其他特殊段落或下一题直接退出
                 break;
             } else if (answerStart) {
@@ -685,93 +670,65 @@ public class ImportPaperService {
      * @param importPaperCheck
      * @throws Exception
      */
-    public void processNestedQues(List pList, int index,Question question, PaperDetailUnit paperDetailUnit,
+    public void processNestedQues(List<Object> pList, int index,Question question, PaperDetailUnit paperDetailUnit,
             ImportPaperCheck importPaperCheck, WordprocessingMLPackage wordMLPackage) throws Exception {
         // 题型
         String nestedQuesType = "";
-
         // 设置套题题干
         processQuesBody(pList, index, 0,question, importPaperCheck, wordMLPackage);
-
         // 创建小题集合
         List<Question> subQuesList = new ArrayList<Question>();
-
         Question subQues = null;
-
         int beginNum = importPaperCheck.index;
-
         int quesTypeNum = 0;
-
         int subQuesNum = 0;
         for (int i = beginNum; i < pList.size(); i++) {
             P pSubQues = (P) pList.get(i);
             String tmpText = DocxProcessUtil.getPText(pSubQues);
-
             if (StringUtils.isEmpty(tmpText)) {
                 continue;
             }
-            if (tmpText.startsWith("[小题型]")) {
-
-                nestedQuesType = tmpText.replaceAll("\\[小题型\\]", "").replaceAll("[:|:]", "").trim();
+            if (tmpText.startsWith(ImportPaperMsg.subQuestionType_word)) {
+                nestedQuesType = getContent(tmpText, ImportPaperMsg.subQuestionType_word);
                 importPaperCheck.index++;
                 quesTypeNum++;
-
             } else if (tmpText.matches("^\\d{1,}\\.[\\s\\S]*")) {
-
                 ++subQuesNum;
-
                 if (StringUtils.isEmpty(nestedQuesType)) {
-                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum)
-                            + "小题型为空或格式不正确\n");
+                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, subQuesNum) + ImportPaperMsg.errMsg_02);
                     throw new PaperException(importPaperCheck.errorInfo);
                 }
-
                 subQues = new Question();
                 subQues.setQuestionType(getQuesStructType(nestedQuesType));
                 if (StringUtils.isNumeric(importPaperCheck.getQuesScore())) {
                     subQues.setScore(Double.parseDouble(importPaperCheck.getQuesScore()));
                 }
-
                 // 处理客观题
-                if (nestedQuesType.equals("单选") || nestedQuesType.equals("多选")) {
-
+                if (nestedQuesType.equals(ImportPaperMsg.singleSelection) || nestedQuesType.equals(ImportPaperMsg.multipleSelection)) {
                     // 处理题干
                     processQuesBody(pList, importPaperCheck.index, subQuesNum,subQues, importPaperCheck, wordMLPackage);
-
                     // 处理选项
-                    processQuesOption(pList, importPaperCheck.index, subQuesNum, subQues, importPaperCheck,
-                            wordMLPackage);
-
+                    processQuesOption(pList, importPaperCheck.index, subQuesNum, subQues, importPaperCheck,wordMLPackage);
                     // 处理尾信息
-                    processQuesTail(pList, importPaperCheck.index, subQuesNum, subQues, paperDetailUnit,
-                            importPaperCheck, wordMLPackage, true);
-
+                    processQuesTail(pList, importPaperCheck.index, subQuesNum, subQues, paperDetailUnit,importPaperCheck, wordMLPackage, true);
                     // 处理选择题的option--chenken 20170426
                     processSelectOption(subQues);
-
                 } else {
                     // 处理其他题型
                     processQuesBody(pList, importPaperCheck.index, subQuesNum, subQues, importPaperCheck, wordMLPackage);
-
-                    processQuesTail(pList, importPaperCheck.index, subQuesNum, subQues, paperDetailUnit,
-                            importPaperCheck, wordMLPackage, true);
+                    processQuesTail(pList, importPaperCheck.index, subQuesNum, subQues, paperDetailUnit,importPaperCheck, wordMLPackage, true);
                 }
                 subQuesList.add(subQues);
                 i = importPaperCheck.index - 1;
                 nestedQuesType = "";
-
             }else if(subQuesNum != quesTypeNum){
-
                 if (StringUtils.isEmpty(nestedQuesType)) {
-                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, quesTypeNum)
-                            + "小题型为空或格式不正确\n");
+                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, quesTypeNum) + ImportPaperMsg.errMsg_02);
                 }else{
-                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, quesTypeNum)
-                            + "题干为空或格式不正确,必须以数字.开头\n");
+                    importPaperCheck.setErrorInfo(getQuesNumInfo(importPaperCheck.quesName, quesTypeNum) + ImportPaperMsg.errMsg_03);
                 }
                 throw new PaperException(importPaperCheck.errorInfo);
-
-            }else if(tmpText.startsWith("[")){
+            }else if(tmpText.startsWith(ImportPaperMsg.left_bracket)){
                 break;
             }
             if (!StringUtils.isEmpty(importPaperCheck.errorInfo)) {
@@ -845,7 +802,7 @@ public class ImportPaperService {
      * @return
      */
     public static boolean isNested(ImportPaperCheck importPaperCheck) {
-        if (importPaperCheck.getQuesType().equals("套题")) {
+        if (importPaperCheck.getQuesType().equals(ImportPaperMsg.nestedQuestion_word)) {
             return true;
         } else {
             return false;
@@ -1057,9 +1014,15 @@ public class ImportPaperService {
     	}
     }
     
-    /*public static void main(String[] args) {
-    	String pattern = "\\s*([A-Z]|[a-z])\\s*";
-    	System.out.println(Pattern.matches(pattern, " C"));
-	}*/
+    /**
+     * 替换字符串中的属性头得到属性值
+     * @param pText
+     * @param replaceContent
+     * @return
+     */
+    private static String getContent(String pText,String replaceContent){
+    	String word = replaceContent.replace("[", "").replace("]", "");
+    	return pText.replaceAll("\\["+word+"\\]","").replaceAll("[:|:]", "").trim();
+    }
     
 }