Kaynağa Gözat

Merge remote-tracking branch 'origin/dev0410' into dev0410

宋悦 8 yıl önce
ebeveyn
işleme
2b9d13111e

+ 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());

+ 49 - 43
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java

@@ -1,6 +1,20 @@
 package com.qmth.cqb.paper.service;
 
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
+
 import com.google.gson.Gson;
 import com.qmth.cqb.paper.dao.ExamPaperRepo;
 import com.qmth.cqb.paper.dao.PaperDetailRepo;
@@ -9,7 +23,11 @@ import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.PaperDetailExp;
 import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
 import com.qmth.cqb.paper.dto.PaperExp;
-import com.qmth.cqb.paper.model.*;
+import com.qmth.cqb.paper.model.ExamPaper;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.model.PaperDetail;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
+import com.qmth.cqb.paper.model.PaperSearchInfo;
 import com.qmth.cqb.question.dao.QuesBakRepo;
 import com.qmth.cqb.question.dao.QuesRepo;
 import com.qmth.cqb.question.model.Question;
@@ -19,14 +37,8 @@ import com.qmth.cqb.utils.BeanCopierUtil;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.enums.PaperStatus;
 import com.qmth.cqb.utils.enums.PaperType;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Service;
 
-import java.util.*;
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 
 /**
  * Created by songyue on 16/12/28.
@@ -268,8 +280,8 @@ public class PaperService {
         for (int i = 0; i < paperDetailExps.size(); i++) {
             List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
             if (paperDetailUnits != null && paperDetailUnits.size() > 0) {
-                List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil
-                        .copyPropertiesOfList(paperDetailUnits, PaperDetailUnitExp.class);
+                List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
+                        PaperDetailUnitExp.class);
                 paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
             } else {
                 paperDetailExps.get(i).setUnitCount(0);
@@ -365,21 +377,18 @@ public class PaperService {
             if (paperDetailUnits.size() > 0) {
                 int count = 0;
                 double score = 0;
-                PaperDetailUnit firstUnit = paperDetailUnits.get(0);
-                QuesStructType questionType = firstUnit.getQuestionType();
-                if (!questionType.equals(QuesStructType.NESTED_ANSWER_QUESTION)) {
-                    for (PaperDetailUnit unit : paperDetailUnits) {
-                        if (unit.getScore() != null) {
-                            score += unit.getScore();
-                        }
+                int nestQusNum = 0;
+                for (PaperDetailUnit unit : paperDetailUnits) {
+                    if (unit.getScore() != null) {
+                        score += unit.getScore();
                     }
-                    count = paperDetailUnits.size();
-                } else {
-                    Question question = firstUnit.getQuestion();
-                    List<Question> subQuestions = question.getSubQuestions();
-                    score = subQuestions.stream().mapToDouble(Question::getScore).sum();
-                    count = subQuestions.size();
+                    if (unit.getQuestion().getSubQuestions() != null
+                            && unit.getQuestion().getSubQuestions().size() > 0) {
+                        nestQusNum += unit.getQuestion().getSubQuestions().size() - 1;
+                    }
+
                 }
+                count = paperDetailUnits.size() + nestQusNum;
                 paperDetail.setScore(score);
                 paperDetail.setUnitCount(count);
             } else {
@@ -475,24 +484,25 @@ public class PaperService {
     public Page<Question> listQuestionforSelect(String paperId, int curPage, int pageSize, QuesStructType quesType) {
         Set<String> selectedIds = new HashSet<>();
         Paper paper = paperRepo.findOne(paperId);
-        //QuestionSearchCondition ques = new QuestionSearchCondition();
-        //if (quesType != null) {
-        //    ques.setQuestionType(quesType);
-        //}
-        //Map<String, String> quesParams = new HashMap<String, String>();
-        //quesParams.put("courseName", paper.getCourseName());
-        //ques.setQuesParams(quesParams);
+        // QuestionSearchCondition ques = new QuestionSearchCondition();
+        // if (quesType != null) {
+        // ques.setQuestionType(quesType);
+        // }
+        // Map<String, String> quesParams = new HashMap<String, String>();
+        // quesParams.put("courseName", paper.getCourseName());
+        // ques.setQuesParams(quesParams);
         List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaper(paper);
         for (PaperDetailUnit pdu : pdus) {
             selectedIds.add(pdu.getQuestion().getId());
         }
-        //Page<Question> allQuestions = quesService.findAll(ques, curPage, pageSize);
-        //Iterator<Question> que = allQuestions.iterator();
-        //while (que.hasNext()) {
-        //    if (selectedIds.contains(que.next().getId())) {
-        //        que.remove();
-        //    }
-        //}
+        // Page<Question> allQuestions = quesService.findAll(ques, curPage,
+        // pageSize);
+        // Iterator<Question> que = allQuestions.iterator();
+        // while (que.hasNext()) {
+        // if (selectedIds.contains(que.next().getId())) {
+        // que.remove();
+        // }
+        // }
         return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize);
     }
 
@@ -508,12 +518,8 @@ public class PaperService {
             pdu.setQuestion(ques);
             pdu.setCreateTime(CommonUtils.getCurDateTime());
             pdu.setPaperDetail(pd);
+            pdu.setScore(0d);
             pdus.add(pdu);
-            if (ques.getScore() == null || ques.getScore() == 0d) {
-                pdu.setScore(0d);
-            } else {
-                pdu.setScore(ques.getScore());
-            }
             saveUnits.add(pdu);
         }
         Collections.sort(pdus);