Kaynağa Gözat

fix PreviewPaper.

deason 6 yıl önce
ebeveyn
işleme
a34b22d655

+ 43 - 37
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/bean/paper/PreviewPaperHandler.java

@@ -15,6 +15,7 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,17 +32,15 @@ import java.util.List;
  */
 public class PreviewPaperHandler {
     private static final Logger log = LoggerFactory.getLogger(PreviewPaperHandler.class);
-    private final static String SINGLE_TITLE = "<p><b>在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分。</b></p>";//单选题提示语
-    private final static String MULTIPLE_TITLE = "<p><b>在每小题列出的备选项中有一个或多个符合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑。</b></p>";//多选题提示语
-    private final static String BOOL_TITLE = "<p><b>正确的填涂√、错误填涂×。错涂、多涂或未涂均无分正确的填涂√、错误填涂×。错涂、多涂或未涂均无分。</b></p>";//判断题提示语
-    private final static String SECTION_STYLE = "class=\"e_detail\"";//试卷大题样式
+    private final static String DETAIL_STYLE = "class=\"e_detail\"";//试卷大题样式
     private final static String QUESTION_STYLE = "class=\"e_question\"";//试题标题样式
     private final static String OPTION_STYLE = "class=\"e_option\"";//试题答案项样式
-    private final static String OPTION_END_STYLE = "class=\"e_option e_option_end\"";//试题答案项样式
-    private final static String FORMAT_SECTION = "<p %s><b>%s、%s</b></p>";//大题标题格式
+    private final static String OPTION_END_STYLE = "class=\"e_option e_option_end\"";//试题答案结束项样式
+
+    private final static String FORMAT_DETAIL = "<p %s><b>%s、%s</b></p>";//大题标题格式
     private final static String FORMAT_QUESTION = "<p %s>%s、%s</p>";//试题标题格式
-    private final static String FORMAT_SUB_QUESTION = "<p %s>%s、%s</p>";//子试题标题格式
     private final static String FORMAT_OPTION = "<p %s>%s、%s</p>";//选项内容格式
+
     private final static String[] REGEX_FILL_1 = {"[#][#]", "____"};//正则关键字
     private final static String[] REGEX_FILL_2 = {"[_][#]", "_"};//正则关键字
 
@@ -55,8 +54,7 @@ public class PreviewPaperHandler {
         }
 
         List<PaperDetailExp> details = data.getPaperDetails();
-        if (details == null || details.size() == 0) {
-            log.warn("Paper detail is empty.");
+        if (CollectionUtils.isEmpty(details)) {
             return "[]";
         }
 
@@ -64,17 +62,21 @@ public class PreviewPaperHandler {
         for (int x = 0; x < details.size(); x++) {
             PaperDetailExp detail = details.get(x);
             if (StringUtils.isNotBlank(detail.getTitle())) {
-                htmlTags.add(String.format(FORMAT_SECTION, SECTION_STYLE, detail.getCnNum(), replaceTagP(detail.getName() + detail.getTitle())));
+                htmlTags.add(String.format(FORMAT_DETAIL, DETAIL_STYLE, detail.getCnNum(), replaceTagP(detail.getName() + detail.getTitle())));
             } else {
-                htmlTags.add(String.format(FORMAT_SECTION, SECTION_STYLE, detail.getCnNum(), replaceTagP(detail.getName())));
+                htmlTags.add(String.format(FORMAT_DETAIL, DETAIL_STYLE, detail.getCnNum(), replaceTagP(detail.getName())));
             }
 
             if (StringUtils.isNotBlank(detail.getTitleDetail())) {
-                htmlTags.add(String.format("<p>%s</p>", replaceTagP(detail.getTitleDetail())));
+                htmlTags.add(String.format("<p><b>%s</b></p>", replaceTagP(detail.getTitleDetail())));
             }
 
             //封装大题的试题列表
             List<PaperDetailUnitExp> units = detail.getPaperDetailUnits();
+            if (CollectionUtils.isEmpty(units)) {
+                continue;
+            }
+
             for (int y = 0; y < units.size(); y++) {
                 PaperDetailUnitExp unit = units.get(y);
                 Question question = unit.getQuestion();
@@ -102,7 +104,7 @@ public class PreviewPaperHandler {
                 if (question.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
                     //套题的子题
                     List<Question> subQuestions = question.getSubQuestions();
-                    if (subQuestions != null && subQuestions.size() > 0) {
+                    if (CollectionUtils.isNotEmpty(subQuestions)) {
                         for (int m = 0; m < subQuestions.size(); m++) {
                             Question subQues = subQuestions.get(m);
 
@@ -115,7 +117,7 @@ public class PreviewPaperHandler {
                             //题干 替换特殊关键字
                             subBody = replaceFill(subQues, subBody);
                             String subQuesNumber = subQues.getQuesParams().get("number");
-                            htmlTags.add(String.format(FORMAT_SUB_QUESTION, QUESTION_STYLE, subQuesNumber, subBody));
+                            htmlTags.add(String.format(FORMAT_QUESTION, QUESTION_STYLE, subQuesNumber, subBody));
 
                             //客观题 选项列表
                             handleOptionStyle(htmlTags, subQues);
@@ -127,20 +129,6 @@ public class PreviewPaperHandler {
         return JsonUtil.toJson(htmlTags);
     }
 
-    private static void handleOptionStyle(List<String> htmlTags, Question question) {
-        List<QuesOption> options = question.getQuesOptions();
-        if (options != null && options.size() > 0) {
-            for (int i = 0; i < options.size(); i++) {
-                QuesOption option = options.get(i);
-                if (i == (options.size() - 1)) {
-                    htmlTags.add(String.format(FORMAT_OPTION, OPTION_END_STYLE, formatNum(option.getNumber()), replaceTagP(option.getOptionBody())));
-                } else {
-                    htmlTags.add(String.format(FORMAT_OPTION, OPTION_STYLE, formatNum(option.getNumber()), replaceTagP(option.getOptionBody())));
-                }
-            }
-        }
-    }
-
     /**
      * 转换试卷答案HTML内容
      */
@@ -150,7 +138,7 @@ public class PreviewPaperHandler {
         }
 
         List<PaperDetailExp> details = data.getPaperDetails();
-        if (details == null || details.size() == 0) {
+        if (CollectionUtils.isEmpty(details)) {
             return "[]";
         }
 
@@ -158,12 +146,16 @@ public class PreviewPaperHandler {
         List<String> htmlTags = new ArrayList<>();
         for (PaperDetailExp detail : details) {
             if (StringUtils.isNotBlank(detail.getTitle())) {
-                htmlTags.add(String.format(FORMAT_SECTION, SECTION_STYLE, detail.getCnNum(), detail.getName() + detail.getTitle()));
+                htmlTags.add(String.format(FORMAT_DETAIL, DETAIL_STYLE, detail.getCnNum(), replaceTagP(detail.getName() + detail.getTitle())));
             } else {
-                htmlTags.add(String.format(FORMAT_SECTION, SECTION_STYLE, detail.getCnNum(), detail.getName()));
+                htmlTags.add(String.format(FORMAT_DETAIL, DETAIL_STYLE, detail.getCnNum(), replaceTagP(detail.getName())));
             }
 
             List<PaperDetailUnitExp> units = detail.getPaperDetailUnits();
+            if (CollectionUtils.isEmpty(units)) {
+                continue;
+            }
+
             for (PaperDetailUnitExp unit : units) {
                 Question question = unit.getQuestion();
                 if (question == null) {
@@ -173,10 +165,10 @@ public class PreviewPaperHandler {
                 if (question.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
                     //htmlTags.add(String.format(FORMAT_QUESTION, QUESTION_STYLE, unit.getNumber(), "题"));
                     List<Question> subQuestions = question.getSubQuestions();
-                    if (subQuestions != null && subQuestions.size() > 0) {
+                    if (CollectionUtils.isNotEmpty(subQuestions)) {
                         for (Question subQues : subQuestions) {
                             String subQuesNumber = subQues.getQuesParams().get("number");
-                            htmlTags.add(String.format(FORMAT_SUB_QUESTION, QUESTION_STYLE, subQuesNumber, replaceFill(subQues, subQues.getQuesAnswer())));
+                            htmlTags.add(String.format(FORMAT_QUESTION, QUESTION_STYLE, subQuesNumber, replaceFill(subQues, subQues.getQuesAnswer())));
                         }
                     }
                 } else {
@@ -187,6 +179,20 @@ public class PreviewPaperHandler {
         return JsonUtil.toJson(htmlTags);
     }
 
+    private static void handleOptionStyle(List<String> htmlTags, Question question) {
+        List<QuesOption> options = question.getQuesOptions();
+        if (CollectionUtils.isNotEmpty(options)) {
+            for (int i = 0; i < options.size(); i++) {
+                QuesOption option = options.get(i);
+                if (i == (options.size() - 1)) {
+                    htmlTags.add(String.format(FORMAT_OPTION, OPTION_END_STYLE, formatNum(option.getNumber()), replaceTagP(option.getOptionBody())));
+                } else {
+                    htmlTags.add(String.format(FORMAT_OPTION, OPTION_STYLE, formatNum(option.getNumber()), replaceTagP(option.getOptionBody())));
+                }
+            }
+        }
+    }
+
     public static String formatValue(Double score) {
         if (score == null) {
             return "";
@@ -220,13 +226,13 @@ public class PreviewPaperHandler {
      * 去掉"p"标签
      */
     public static String replaceTagP(String str) {
-        if (str == null) {
-            return null;
+        if (StringUtils.isEmpty(str)) {
+            return "";
         }
         return str.replace("<p>", "")
                 .replace("</p>", "")
-                .replace("<P>", "")
-                .replace("</P>", "");
+                .replace("<span>", "")
+                .replace("</span>", "");
     }
 
 }

+ 22 - 24
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/CqdxExportPaperService.java

@@ -12,11 +12,11 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
+import org.apache.commons.collections.CollectionUtils;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -62,34 +62,32 @@ public class CqdxExportPaperService extends ExportPaperAbstractService {
      * 设置大题标题
      */
     @Override
-    public void setExportQuestionTitle(List<PaperDetailExp> paperDetailExps) {
-        for (PaperDetailExp paperDetailExp : paperDetailExps) {
-            String title = "";
-            String titleDetail = null;
-            String totalScore = BigDecimal.valueOf(paperDetailExp.getScore()).stripTrailingZeros().toPlainString();
-            QuesStructType type = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
-            String questionScore = checkPaperDetailUnitScore(paperDetailExp);
-            if (questionScore != null) {
-                questionScore = CommonUtils.clearZeroPoint(questionScore);
+    public void setExportQuestionTitle(List<PaperDetailExp> details) {
+        if (CollectionUtils.isEmpty(details)) {
+            return;
+        }
+
+        for (PaperDetailExp detail : details) {
+            String perQuesScore = checkPaperDetailUnitScore(detail);
+            if (perQuesScore != null) {
+                perQuesScore = String.format("每小题<em class=\"e_num\">%s</em>分,", CommonUtils.clearZeroPoint(perQuesScore));
+            } else {
+                perQuesScore = "";//每题分数不一致则不注明
             }
-            String scoreString = questionScore == null ? "" : "每小题" + questionScore + "分,";
+
+            String detailScore = CommonUtils.formatValue(detail.getScore());
+            String title = String.format("(本大题共<em class=\"e_num\">%s</em>小题,%s共<em class=\"e_num\">%s</em>分)", detail.getUnitCount(), perQuesScore, detailScore);
+            QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();
+
             if (type == QuesStructType.SINGLE_ANSWER_QUESTION) {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分)";
-                titleDetail = "在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
+                detail.setTitleDetail("在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分");
             } else if (type == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分)";
-                titleDetail = "在每小题列出的备选项中至少有两个符合题目要求,请将符合项选出并将“答题卡”的相应代码涂黑,错涂、多涂、少涂或未涂均无分";
+                detail.setTitleDetail("在每小题列出的备选项中至少有两个符合题目要求,请将符合项选出并将“答题卡”的相应代码涂黑");
             } else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分。"
-                        + "正确的填涂√、错误填涂×。错涂、多涂或未涂均无分)";
-            } else {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题," + scoreString + "共" + totalScore + "分)";
+                detail.setTitleDetail("正确的填涂√、错误填涂×。错涂、多涂或未涂均无分");
             }
-            paperDetailExp.setTitle(title);
-            paperDetailExp.setTitleDetail(titleDetail);
+
+            detail.setTitle(title);
         }
     }
 

+ 38 - 35
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/DzkdExportPaperService.java

@@ -107,46 +107,52 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
      * 设置大题标题,并将大题分类 主观题 客观题
      */
     @Override
-    public void setExportQuestionTitle(List<PaperDetailExp> paperDetailExps) {
-        int firstBlank = 0;
-        int lastBlank = 0;
-        for (PaperDetailExp paperDetailExp : paperDetailExps) {
-            String title = "";
-            String titleDetail = null;
-            String totalScore = BigDecimal.valueOf(paperDetailExp.getScore()).stripTrailingZeros().toPlainString();
-            QuesStructType type = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
-            String questionScore = checkPaperDetailUnitScore(paperDetailExp);
-            if (questionScore != null) {
-                questionScore = CommonUtils.clearZeroPoint(questionScore);
+    public void setExportQuestionTitle(List<PaperDetailExp> details) {
+        if (CollectionUtils.isEmpty(details)) {
+            return;
+        }
+
+        int firstBlank = 0, lastBlank = 0;
+        for (PaperDetailExp detail : details) {
+            String detailScore = CommonUtils.formatValue(detail.getScore());
+
+            String perQuesScore = checkPaperDetailUnitScore(detail);
+            if (perQuesScore != null) {
+                perQuesScore = String.format("每小题<em class=\"e_num\">%s</em>分,", CommonUtils.clearZeroPoint(perQuesScore));
+            } else {
+                perQuesScore = "";//每题分数不一致则不注明
             }
-            String scoreString = questionScore == null ? "" : "每小题" + questionScore + "分,";
+
+            QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();
+            String title = String.format("(本大题共<em class=\"e_num\">%s</em>小题,%s共<em class=\"e_num\">%s</em>分)", detail.getUnitCount(), perQuesScore, detailScore);
+
             if (type == QuesStructType.SINGLE_ANSWER_QUESTION) {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分)";
-                titleDetail = "在每小题列出的备选项中只有一个符号合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
+                detail.setTitleDetail("在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分");
             } else if (type == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分)";
-                titleDetail = "在每小题列出的备选项中有一个或多个符号合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑";
+                detail.setTitleDetail("在每小题列出的备选项中有一个或多个符合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑");
             } else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分。"
-                        + "正确的填涂A、错误填涂B。错涂、多涂或未涂均无分)";
+                detail.setTitleDetail("正确的填涂A、错误填涂B。错涂、多涂或未涂均无分");
             } else if (type == QuesStructType.FILL_BLANK_QUESTION) {
-                //计算填空空格数量
-                int blanksNumbers = blanksNumbers(paperDetailExp);
-                //设置填空题题干中 开始空格  和  结束空格
+                //计算填空题空格数量
+                int blanksNumbers = blanksNumbers(detail);
+
+                //设置填空题题干中 开始空格 和 结束空格
                 lastBlank = firstBlank + blanksNumbers;
-                questionScore = checkPaperDetailUnitblanksScore(paperDetailExp);
-                scoreString = questionScore == null ? "" : "每空" + questionScore + "分,";
-                title = "(本大题共" + blanksNumbers + "个空格,将每空答在答题卡 “" + String.valueOf(firstBlank + 1)
-                        + "—" + String.valueOf(lastBlank) + "”相应的序号上。" + scoreString + "共" + totalScore + "分。)";
+
+                perQuesScore = checkPaperDetailUnitblanksScore(detail);
+                if (perQuesScore != null) {
+                    perQuesScore = String.format("每空<em class=\"e_num\">%s</em>分,", CommonUtils.clearZeroPoint(perQuesScore));
+                } else {
+                    perQuesScore = "";//每题分数不一致则不注明
+                }
+
+                title = String.format("(本大题共<em class=\"e_num\">%s</em>个空格,将每空答在答题卡“%s-%s”相应的序号上。%s共<em class=\"e_num\">%s</em>分)",
+                        blanksNumbers, (firstBlank + 1), lastBlank, perQuesScore, detailScore);
+
                 firstBlank = lastBlank;
-            } else {
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题," + scoreString + "共" + totalScore + "分)";
             }
-            paperDetailExp.setTitle(title);
-            paperDetailExp.setTitleDetail(titleDetail);
+
+            detail.setTitle(title);
         }
     }
 
@@ -235,10 +241,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
 
     /**
      * 主观题   客观题的标题显示
-     *
-     * @param PaperExp
      */
-
     private void showTitle(PaperExp paperExp) {
         String title = "";
         List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();

+ 11 - 21
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java

@@ -842,36 +842,26 @@ public abstract class ExportPaperAbstractService {
         }
 
         for (PaperDetailExp detail : details) {
-            String detailTitle = "";
-            String detailDesc = null;
-            String detailScore = CommonUtils.formatValue(detail.getScore());
-
-            String questionScore = checkPaperDetailUnitScore(detail);
-            if (questionScore != null) {
-                questionScore = CommonUtils.clearZeroPoint(questionScore);
+            String perQuesScore = checkPaperDetailUnitScore(detail);
+            if (perQuesScore != null) {
+                perQuesScore = String.format("每小题<em class=\"e_num\">%s</em>分,", CommonUtils.clearZeroPoint(perQuesScore));
+            } else {
+                perQuesScore = "";//每题分数不一致则不注明
             }
 
             QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();
-            String scoreString = questionScore == null ? "" : "每小题" + questionScore + "分,";
+            String detailScore = CommonUtils.formatValue(detail.getScore());
+            String title = String.format("(本大题共<em class=\"e_num\">%s</em>小题,%s共<em class=\"e_num\">%s</em>分)", detail.getUnitCount(), perQuesScore, detailScore);
 
             if (type == QuesStructType.SINGLE_ANSWER_QUESTION) {
-                detailTitle = "(本大题共" + detail.getUnitCount() + "小题,"
-                        + scoreString + "共" + detailScore + "分)";
-                detailDesc = "在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
+                detail.setTitleDetail("在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分");
             } else if (type == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
-                detailTitle = "(本大题共" + detail.getUnitCount() + "小题,"
-                        + scoreString + "共" + detailScore + "分)";
-                detailDesc = "在每小题列出的备选项中有一个或多个符合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑";
+                detail.setTitleDetail("在每小题列出的备选项中有一个或多个符合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑");
             } else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
-                detailTitle = "(本大题共" + detail.getUnitCount() + "小题,"
-                        + scoreString + "共" + detailScore + "分。"
-                        + "正确的填涂√、错误填涂×。错涂、多涂或未涂均无分)";
-            } else {
-                detailTitle = "(本大题共" + detail.getUnitCount() + "小题," + scoreString + "共" + detailScore + "分)";
+                detail.setTitleDetail("正确的填涂√、错误填涂×。错涂、多涂或未涂均无分");
             }
 
-            detail.setTitle(detailTitle);
-            detail.setTitleDetail(detailDesc);
+            detail.setTitle(title);
         }
     }
 

+ 28 - 29
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/HzkjExportPaperService.java

@@ -12,10 +12,10 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionTypeNum;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -78,40 +78,39 @@ public class HzkjExportPaperService extends ExportPaperAbstractService {
         }
     }
 
-
     @Override
-    public void setExportQuestionTitle(List<PaperDetailExp> paperDetailExps) {
-        for (PaperDetailExp paperDetailExp : paperDetailExps) {
-            String title = "";
-            String titleDetail = null;
-            String totalScore = BigDecimal.valueOf(paperDetailExp.getScore()).stripTrailingZeros().toPlainString();
-            QuesStructType type = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
-            String questionScore = checkPaperDetailUnitScore(paperDetailExp);
-            String scoreString = questionScore == null ? "" : "每小题" + questionScore + "分,";
+    public void setExportQuestionTitle(List<PaperDetailExp> details) {
+        if (CollectionUtils.isEmpty(details)) {
+            return;
+        }
+
+        for (PaperDetailExp detail : details) {
+            String perQuesScore = checkPaperDetailUnitScore(detail);
+            if (perQuesScore != null) {
+                perQuesScore = String.format("每小题<em class=\"e_num\">%s</em>分,", CommonUtils.clearZeroPoint(perQuesScore));
+            } else {
+                perQuesScore = "";//每题分数不一致则不注明
+            }
+
+            String detailScore = CommonUtils.formatValue(detail.getScore());
+            QuesStructType type = detail.getPaperDetailUnits().get(0).getQuestionType();
+            String title = String.format("(本大题共<em class=\"e_num\">%s</em>小题,%s共<em class=\"e_num\">%s</em>分)", detail.getUnitCount(), perQuesScore, detailScore);
+
             if (type == QuesStructType.SINGLE_ANSWER_QUESTION) {
-                paperDetailExp.setName("单项选择题");
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分)";
-                titleDetail = "在每小题列出的备选项中只有一个符号合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
+                detail.setTitleDetail("在每小题列出的备选项中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分");
+                detail.setName("单项选择题");
             } else if (type == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
-                paperDetailExp.setName("多项选择题");
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分)";
-                titleDetail = "在每小题列出的备选项中有一个或多个符号合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑";
+                detail.setTitleDetail("在每小题列出的备选项中有一个或多个符合题目要求的,请将符合项选出并将“答题卡”的相应代码涂黑");
+                detail.setName("多项选择题");
             } else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
-                paperDetailExp.setName("判断题");
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
-                        + scoreString + "共" + totalScore + "分。"
-                        + "正确的填涂√、错误填涂×。错涂、多涂或未涂均无分)";
+                detail.setTitleDetail("正确的填涂√、错误填涂×。错涂、多涂或未涂均无分");
+                detail.setName("判断题");
             } else {
-                paperDetailExp.setName(type.getName());
-                title = "(本大题共" + paperDetailExp.getUnitCount() + "小题," + scoreString + "共" + totalScore + "分)";
+                detail.setName(type.getName());
             }
-            paperDetailExp.setTitle(title);
-            paperDetailExp.setTitleDetail(titleDetail);
+
+            detail.setTitle(title);
         }
     }
 
-
-}
-
+}