Explorar o código

fix sortPaperDetailUnits(List<PaperDetailExp> details)

deason %!s(int64=6) %!d(string=hai) anos
pai
achega
f905d56037

+ 0 - 65
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/bean/paper/ExportPaperHandler.java

@@ -7,17 +7,6 @@
 
 package cn.com.qmth.examcloud.core.questions.service.bean.paper;
 
-import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
-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 org.apache.commons.collections.CollectionUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 /**
  * 试卷导出内容处理
  *
@@ -26,58 +15,4 @@ import java.util.Map;
  */
 public class ExportPaperHandler {
 
-    /**
-     * 对相同类型的大题分组,生成不同的集合放入小题,再对小题排序
-     */
-    public static void sortPaperDetailUnits(List<PaperDetailExp> details) {
-        int index = 0;
-        Map<Long, List<PaperDetailUnitExp>> map = new HashMap<>();
-
-        //循环所有大题,将同类型的小题放到同一个集合下面
-        for (PaperDetailExp detail : details) {
-            //单选,多选,判断放在同一集合下排序
-            List<PaperDetailUnitExp> units;
-            Long sortNumber = detail.getSortNumber();
-            if (sortNumber < 4L) {
-                units = map.get(sortNumber);
-                if (units == null) {
-                    units = new ArrayList<>();
-                }
-                units.addAll(detail.getPaperDetailUnits());
-                map.put(sortNumber, units);
-            } else {
-                units = new ArrayList<>();
-                units.addAll(detail.getPaperDetailUnits());
-                map.put(sortNumber + index, units);
-                index++;
-            }
-        }
-
-        //循环所有小题,给小题排序
-        for (Long sortNumber : map.keySet()) {
-            List<PaperDetailUnitExp> utils = map.get(sortNumber);
-            if (CollectionUtils.isEmpty(utils)) {
-                continue;
-            }
-
-            int number = 1;//小题号
-            int nestedNumber = 1;//套题号
-            for (int i = 0; i < utils.size(); i++) {
-                PaperDetailUnitExp unit = utils.get(i);
-                if (unit.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
-                    unit.setNumber(nestedNumber);
-                    List<Question> subQuestions = unit.getQuestion().getSubQuestions();
-                    for (int j = 0; j < subQuestions.size(); j++) {
-                        subQuestions.get(j).setNumber(number + j);
-                    }
-                    number += subQuestions.size();
-                    nestedNumber++;
-                } else {
-                    unit.setNumber(number);
-                    number++;
-                }
-            }
-        }
-    }
-
 }

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

@@ -1,30 +1,21 @@
 package cn.com.qmth.examcloud.core.questions.service.export;
 
-import java.io.File;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.springframework.stereotype.Service;
-
-import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
-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 cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExportStructure;
-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.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
+import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
+import cn.com.qmth.examcloud.core.questions.dao.entity.*;
+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.springframework.stereotype.Service;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * @author chenken
@@ -60,52 +51,53 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
     }
 
     /**
-     * 小题排序
-     *
-     * @param paperDetailExps
-     * @describle 大题排序完成之后,放在一个集合里面。然后对相同类型的大题分组,生成不同的结合,在对小题进行
+     * 对相同类型的大题分组,生成不同的集合放入小题,再对小题排序
      */
-    //@Override
-    public void sortPaperDetailUnitExps(List<PaperDetailExp> paperDetailExps) {
-        Map<Long, List<PaperDetailUnitExp>> map = new HashMap<Long, List<PaperDetailUnitExp>>();
-        //循环所有大题,将同类型的小题放到同一个集合下面
+    @Override
+    public void sortPaperDetailUnits(List<PaperDetailExp> details) {
         int index = 0;
-        for (PaperDetailExp paperDetailExp : paperDetailExps) {
-            List<PaperDetailUnitExp> paperDetailUnitExps = null;
+        Map<Long, List<PaperDetailUnitExp>> map = new HashMap<>();
+
+        //循环所有大题,将同类型的小题放到同一个集合下面
+        for (PaperDetailExp detail : details) {
             //单选,多选,判断放在同一集合下排序
-            if (paperDetailExp.getSortNumber() < 5L) {
-                //通过map的key去取value,如果没有,就添加
-                if (map.get(paperDetailExp.getSortNumber()) == null) {
-                    paperDetailUnitExps = new ArrayList<PaperDetailUnitExp>();
-                } else {
-                    paperDetailUnitExps = map.get(paperDetailExp.getSortNumber());
+            List<PaperDetailUnitExp> units;
+            Long sortNumber = detail.getSortNumber();
+            //前四道大题为客观题区
+            if (sortNumber < 5L) {
+                units = map.get(sortNumber);
+                if (units == null) {
+                    units = new ArrayList<>();
                 }
-                paperDetailUnitExps.addAll(paperDetailExp.getPaperDetailUnits());
-                map.put(paperDetailExp.getSortNumber(), paperDetailUnitExps);
+                units.addAll(detail.getPaperDetailUnits());
+                map.put(sortNumber, units);
             } else {
-                paperDetailUnitExps = new ArrayList<PaperDetailUnitExp>();
-                paperDetailUnitExps.addAll(paperDetailExp.getPaperDetailUnits());
-                map.put(paperDetailExp.getSortNumber() + index, paperDetailUnitExps);
+                units = new ArrayList<>();
+                units.addAll(detail.getPaperDetailUnits());
+                map.put(sortNumber + index, units);
                 index++;
             }
         }
+
         //循环所有小题,给小题排序
         for (Long sortNumber : map.keySet()) {
-            List<PaperDetailUnitExp> paperDetailUnitExps = map.get(sortNumber);
-            int number = 1;
-            if (paperDetailUnitExps != null && paperDetailUnitExps.size() > 0) {
-                for (int i = 0; i < paperDetailUnitExps.size(); i++) {
-                    PaperDetailUnitExp paperDetailUnitExp = paperDetailUnitExps.get(i);
-                    if (paperDetailUnitExp.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
-                        List<Question> subQuestions = paperDetailUnitExp.getQuestion().getSubQuestions();
-                        for (int j = 0; j < subQuestions.size(); j++) {
-                            subQuestions.get(j).setNumber(number + j);
-                        }
-                        number += subQuestions.size();
-                    } else {
-                        paperDetailUnitExp.setNumber(number);
-                        number++;
+            List<PaperDetailUnitExp> utils = map.get(sortNumber);
+            if (CollectionUtils.isEmpty(utils)) {
+                continue;
+            }
+
+            int number = 1;//小题号
+            for (int i = 0; i < utils.size(); i++) {
+                PaperDetailUnitExp unit = utils.get(i);
+                if (unit.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
+                    List<Question> subQuestions = unit.getQuestion().getSubQuestions();
+                    for (int j = 0; j < subQuestions.size(); j++) {
+                        subQuestions.get(j).setNumber(number + j);
                     }
+                    number += subQuestions.size();
+                } else {
+                    unit.setNumber(number);
+                    number++;
                 }
             }
         }

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

@@ -16,11 +16,11 @@ import cn.com.qmth.examcloud.core.questions.service.PaperDetailService;
 import cn.com.qmth.examcloud.core.questions.service.PaperService;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.*;
-import cn.com.qmth.examcloud.core.questions.service.bean.paper.ExportPaperHandler;
 import com.google.gson.Gson;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import main.java.com.UpYun;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.docx4j.XmlUtils;
@@ -1606,7 +1606,7 @@ public abstract class ExportPaperAbstractService {
     public PaperExp initPaperExp(String paperId) throws Exception {
         PaperExp exportPaper = initPaperExpService.initPaperExp(paperId);
         //给新的大题下所有小题排序
-        ExportPaperHandler.sortPaperDetailUnits(exportPaper.getPaperDetails());
+        sortPaperDetailUnits(exportPaper.getPaperDetails());
         //如果每个小题分数不一样,题干后面添加分数
         appendScoreToQuestionBody(exportPaper.getPaperDetails());
         //1.设置题号 2.给小题选项进行排序 3.设置选项号 4.替换题干中的##为____
@@ -1623,7 +1623,7 @@ public abstract class ExportPaperAbstractService {
         PaperExp previewPaper = initPaperExpService.initPaperExp(paper);
 
         //给新的大题下所有小题排序
-        ExportPaperHandler.sortPaperDetailUnits(previewPaper.getPaperDetails());
+        sortPaperDetailUnits(previewPaper.getPaperDetails());
 
         //如果每个小题分数不一样,题干后面添加分数
         appendScoreToQuestionBodyHtml(previewPaper.getPaperDetails());
@@ -1634,4 +1634,58 @@ public abstract class ExportPaperAbstractService {
         return previewPaper;
     }
 
+    /**
+     * 对相同类型的大题分组,生成不同的集合放入小题,再对小题排序
+     */
+    public void sortPaperDetailUnits(List<PaperDetailExp> details) {
+        int index = 0;
+        Map<Long, List<PaperDetailUnitExp>> map = new HashMap<>();
+
+        //循环所有大题,将同类型的小题放到同一个集合下面
+        for (PaperDetailExp detail : details) {
+            //单选,多选,判断放在同一集合下排序
+            List<PaperDetailUnitExp> units;
+            Long sortNumber = detail.getSortNumber();
+            if (sortNumber < 4L) {
+                units = map.get(sortNumber);
+                if (units == null) {
+                    units = new ArrayList<>();
+                }
+                units.addAll(detail.getPaperDetailUnits());
+                map.put(sortNumber, units);
+            } else {
+                units = new ArrayList<>();
+                units.addAll(detail.getPaperDetailUnits());
+                map.put(sortNumber + index, units);
+                index++;
+            }
+        }
+
+        //循环所有小题,给小题排序
+        for (Long sortNumber : map.keySet()) {
+            List<PaperDetailUnitExp> utils = map.get(sortNumber);
+            if (CollectionUtils.isEmpty(utils)) {
+                continue;
+            }
+
+            int number = 1;//小题号
+            int nestedNumber = 1;//套题号
+            for (int i = 0; i < utils.size(); i++) {
+                PaperDetailUnitExp unit = utils.get(i);
+                if (unit.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
+                    unit.setNumber(nestedNumber);
+                    List<Question> subQuestions = unit.getQuestion().getSubQuestions();
+                    for (int j = 0; j < subQuestions.size(); j++) {
+                        subQuestions.get(j).setNumber(number + j);
+                    }
+                    number += subQuestions.size();
+                    nestedNumber++;
+                } else {
+                    unit.setNumber(number);
+                    number++;
+                }
+            }
+        }
+    }
+
 }