Bladeren bron

unit增加套题情况下的子题分数
修改unit接口区分套题、套题子题、普通试题等三种情况

luoshi@qmth.com.cn 8 jaren geleden
bovenliggende
commit
ac5ba76f9b

+ 12 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/dto/PaperDetailUnitExp.java

@@ -1,10 +1,9 @@
 package com.qmth.cqb.paper.dto;
 
-import java.io.Serializable;
-
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import com.qmth.cqb.question.model.Question;
 
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import java.io.Serializable;
 
 /**
  * 试卷小题导出dto Created by songyue on 17/3/15.
@@ -19,6 +18,8 @@ public class PaperDetailUnitExp implements Serializable {
 
     private Double score;// 小题分数
 
+    private String subScores;//套题情况下所有子题分数,用英文逗号分割
+
     private QuesStructType questionType;// 小题类型
 
     private Question question;// 关联试题
@@ -76,4 +77,12 @@ public class PaperDetailUnitExp implements Serializable {
     public void setQuesId(String quesId) {
         this.quesId = quesId;
     }
+
+    public String getSubScores() {
+        return subScores;
+    }
+
+    public void setSubScores(String subScores) {
+        this.subScores = subScores;
+    }
 }

+ 48 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/model/PaperDetailUnit.java

@@ -1,18 +1,23 @@
 package com.qmth.cqb.paper.model;
 
-import java.io.Serializable;
-
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import com.qmth.cqb.question.model.Question;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.DBRef;
 
-import com.qmth.cqb.question.model.Question;
-
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import java.io.Serializable;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
 
 public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit> {
 
     private static final long serialVersionUID = -8854150484922002075L;
 
+    public static DecimalFormat SCORE_FORMATER = new DecimalFormat("####.#");
+
     @Id
     private String id;
 
@@ -23,6 +28,8 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
 
     private Double score;// 小题分数
 
+    private String subScores;//对应套题的情况下,各子题的分数分布
+
     @DBRef
     private PaperDetail paperDetail;// 关联的大题
 
@@ -107,6 +114,14 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
         this.createTime = createTime;
     }
 
+    public String getSubScores() {
+        return subScores;
+    }
+
+    public void setSubScores(String subScores) {
+        this.subScores = subScores;
+    }
+
     public PaperDetailUnit() {
     }
 
@@ -121,4 +136,32 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
         }
         return -1;
     }
+
+    public List<Double> getSubScoreList() {
+        List<Double> list = new ArrayList<>();
+        String[] values = StringUtils.split(StringUtils.trimToEmpty(subScores), ",");
+        for (String value : values) {
+            try {
+                list.add(Double.valueOf(value));
+            } catch (Exception e) {
+
+            }
+        }
+        return list;
+    }
+
+    public void updateSubScore(List<Double> list) {
+        double totalScore = 0;
+        if (list != null) {
+            List<String> values = new LinkedList<>();
+            for (Double value : list) {
+                values.add(SCORE_FORMATER.format(value));
+                totalScore += value;
+            }
+            setSubScores(StringUtils.join(values, ","));
+        } else {
+            setSubScores(null);
+        }
+        setScore(totalScore);
+    }
 }

+ 22 - 24
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -1,23 +1,6 @@
 package com.qmth.cqb.paper.service;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
-import org.docx4j.wml.P;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
-
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import com.google.gson.Gson;
 import com.qmth.cqb.base.dao.CourseRepo;
 import com.qmth.cqb.paper.dao.PaperDetailRepo;
@@ -36,8 +19,21 @@ import com.qmth.cqb.utils.enums.PaperStatus;
 import com.qmth.cqb.utils.enums.PaperType;
 import com.qmth.cqb.utils.enums.QuesUnit;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.wml.P;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
 
 @Service
 public class ImportPaperService {
@@ -174,7 +170,7 @@ public class ImportPaperService {
 
             paper.setCourseNo(courseNo);
 
-            paper.setCourseNo(courseRepo.findByCourseNo(courseNo).getCourseNo());
+            paper.setCourseName(courseRepo.findByCourseNo(courseNo).getCourseName());
 
             // 设置试卷
             initPaper(paper, paperName);
@@ -218,8 +214,8 @@ public class ImportPaperService {
                     // 设置大题类
                     initQuesHeader(paper, paperDetail, paperDetails, ++mainQuesNum, importPaperCheck);
 
-                } else if (pText.matches("^\\d{1,}\\.[\\s\\S]*")
-                        || (isNested(importPaperCheck) && !pText.startsWith("["))) {
+                } else if (pText.matches("^\\d{1,}\\.[\\s\\S]*") || (isNested(importPaperCheck) && !pText
+                        .startsWith("["))) {
                     // 处理试题
 
                     // 创建小题类和试题类
@@ -255,9 +251,11 @@ public class ImportPaperService {
                     }
                     // 设置WordMlPackage二进制数据
                     setPkgByte(question, writePkg);
-                    Map<String, String> quesParams = new HashMap<String, String>();
-                    quesParams.put("courseName", paper.getCourseName());
+                    //Map<String, String> quesParams = new HashMap<String, String>();
+                    //quesParams.put("courseName", paper.getCourseName());
                     // 设置question与Unit集合数据
+                    question.setCourseNo(paper.getCourseNo());
+                    question.setCourseName(paper.getCourseName());
                     questions.add(question);
                     paperDetailUnits.add(paperDetailUnit);
 

+ 54 - 17
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperDetailUnitService.java

@@ -1,11 +1,6 @@
 package com.qmth.cqb.paper.service;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
 import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
 import com.qmth.cqb.paper.model.Paper;
@@ -14,6 +9,11 @@ import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.question.dao.QuesRepo;
 import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.question.service.QuesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 @Service
 public class PaperDetailUnitService {
@@ -32,7 +32,7 @@ public class PaperDetailUnitService {
 
     /**
      * 根据Id获得对应的试题对象
-     * 
+     *
      * @param id
      * @return
      */
@@ -42,7 +42,7 @@ public class PaperDetailUnitService {
 
     /**
      * 按ID查询小题
-     * 
+     *
      * @param id
      * @return
      */
@@ -52,22 +52,59 @@ public class PaperDetailUnitService {
 
     /**
      * 保存小题
-     * 
-     * @param pdu
+     *
+     * @param pduExp
      * @return
      */
     public PaperDetailUnit savePaperDetailUnit(PaperDetailUnitExp pduExp) {
         PaperDetailUnit oldPdu = paperDetailUnitRepo.findOne(pduExp.getId());
-        oldPdu.setScore(pduExp.getScore());
-        oldPdu.setQuestion(pduExp.getQuestion());
-        Question ques = pduExp.getQuestion();
-        quesRepo.save(ques);// 同时要跟新小题里面的Qustion对象
+        if (oldPdu.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
+            Question updateQuestion = null;
+            if (pduExp.getQuestion().getId().equals(oldPdu.getQuestion().getId())) {
+                updateQuestion = oldPdu.getQuestion();
+            }
+            List<Double> subScoreList = oldPdu.getSubScoreList();
+            //套题需要判断更新的对象是套题本身还是子题
+            int index = 0;
+            for (Question sub : oldPdu.getQuestion().getSubQuestions()) {
+                index++;
+                //检查子题分数,确保没有错误数据
+                if (subScoreList.size() < index) {
+                    subScoreList.add(0d);
+                }
+                if (sub.getId().equals(pduExp.getQuestion().getId())) {
+                    //匹配到子题
+                    updateQuestion = sub;
+                    subScoreList.set(index - 1, pduExp.getScore());
+                }
+            }
+            if (updateQuestion == null) {
+                //匹配试题失败,参数错误直接返回
+                return oldPdu;
+            }
+            //更新套题unit当前总分
+            oldPdu.updateSubScore(subScoreList);
+            if (updateQuestion.getId().equals(oldPdu.getQuestion().getId())) {
+                //更新的是套题大题
+                //oldPdu.setQuestion(updateQuestion);
+            } else {
+                //更新的是套题下的子题
+            }
+            //quesRepo.save(updateQuestion);// 暂时不支持修改套题内容
+
+        } else {
+            oldPdu.setScore(pduExp.getScore());
+            oldPdu.setQuestion(pduExp.getQuestion());
+            Question ques = pduExp.getQuestion();
+            quesRepo.save(ques);// 同时要跟新小题里面的Qustion对象
+        }
+        paperService.formatPaper(oldPdu.getPaper());
         return paperDetailUnitRepo.save(oldPdu);
     }
 
     /**
      * 删除小题
-     * 
+     *
      * @param id
      * @return
      */
@@ -79,7 +116,7 @@ public class PaperDetailUnitService {
 
     /**
      * 根据大题查小题
-     * 
+     *
      * @param paperDetail
      * @return
      */
@@ -89,7 +126,7 @@ public class PaperDetailUnitService {
 
     /**
      * 根据大题集合删除小题
-     * 
+     *
      * @param paperDetails
      */
     public void deleteUnitsByPaperDetails(List<PaperDetail> paperDetails) {