浏览代码

修改unit对象自动设置子题分数的逻辑bug

luoshi@qmth.com.cn 8 年之前
父节点
当前提交
8cc62d559b

+ 39 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/model/PaperDetailUnit.java

@@ -70,7 +70,21 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
 
     public void setScore(Double score) {
         this.score = score;
-        if (question != null && question.getSubQuestions() != null) {
+        //非套题或试题未设置时,不做额外处理
+        if (questionType != QuesStructType.NESTED_ANSWER_QUESTION || question == null) {
+            return;
+        }
+        //当前分数设置为空时,同时设置子题分数为空
+        if (score == null) {
+            subScoreList = null;
+            return;
+        }
+        //总分与子题分数之和相同,则不做额外处理
+        if (subScoreList != null && subScoreList.size() > 0 && getSubScoreSum() == score) {
+            return;
+        }
+        //根据试题与总分设置情况重置子题分数
+        if (question.getSubQuestions() != null) {
             initSubScoreList(score, question.getSubQuestions());
         }
     }
@@ -97,9 +111,21 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
 
     public void setQuestion(Question question) {
         this.question = question;
-        if (score != null && question != null && question.getSubQuestions() != null) {
-            initSubScoreList(score, question.getSubQuestions());
+        //非套题或总分未设置时,不做额外处理
+        if (questionType != QuesStructType.NESTED_ANSWER_QUESTION || score == null) {
+            return;
         }
+        //当前试题或子题列表为空时,同时设置子题分数为空
+        if (question == null || question.getSubQuestions() == null) {
+            subScoreList = null;
+            return;
+        }
+        //当前试题子题数量与子题分数数量相同,不做额外处理
+        if (subScoreList != null && subScoreList.size() == question.getSubQuestions().size()) {
+            return;
+        }
+        //根据试题与总分设置情况重置子题分数
+        initSubScoreList(score, question.getSubQuestions());
     }
 
     public String getCreator() {
@@ -171,4 +197,14 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
             this.subScoreList = scoreList;
         }
     }
+
+    private double getSubScoreSum() {
+        double totalScore = 0;
+        if (subScoreList != null) {
+            for (Double score : subScoreList) {
+                totalScore += score;
+            }
+        }
+        return totalScore;
+    }
 }

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

@@ -55,11 +55,11 @@ public class PaperDetailUnitService {
     public PaperDetailUnit savePaperDetailUnit(PaperDetailUnitExp pduExp) {
         PaperDetailUnit oldPdu = paperDetailUnitRepo.findOne(pduExp.getId());
         if (oldPdu.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
-            List<Double> subScoreList = oldPdu.getSubScoreList();
             if (pduExp.getQuestion().getId().equals(oldPdu.getQuestion().getId())) {
                 //更新对象为套题本身
                 oldPdu.setQuestion(quesService.saveQues(pduExp.getQuestion()));
             } else {
+                List<Double> subScoreList = oldPdu.getSubScoreList();
                 int size = oldPdu.getQuestion().getSubQuestions().size();
                 boolean match = false;
                 // 判断更新的对象是哪个子题
@@ -79,9 +79,9 @@ public class PaperDetailUnitService {
                 if (match) {
                     oldPdu.setQuestion(quesService.saveQues(oldPdu.getQuestion()));
                 }
+                //更新套题unit当前总分与子题分数
+                oldPdu.setSubScoreList(subScoreList);
             }
-            //更新套题unit当前总分与子题分数
-            oldPdu.setSubScoreList(subScoreList);
         } else {
             oldPdu.setQuestion(quesService.saveQues(pduExp.getQuestion()));
             oldPdu.setScore(pduExp.getScore());