ting.yin hai 1 ano
pai
achega
86543f91bc

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SelectiveGroupService.java

@@ -28,4 +28,6 @@ public interface SelectiveGroupService {
 
     void updateScorePolicy(int examId, String subjectCode, Integer selectiveIndex, ScorePolicy scorePolicy);
 
+    double sumScoreByExamIdAndSubjectCode(int examId, String subjectCode);
+
 }

+ 4 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java

@@ -302,21 +302,14 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
                 }
                 List<ExamQuestion> questions = this.findByExamAndSubjectAndObjective(examId, subjectCode, false);
                 for (ExamQuestion examQuestion : questions) {
-                    if (map.containsKey(examQuestion.getMainNumber())) {
-                        examQuestion.setSelective(true);
-                        examQuestion.setSelectiveIndex(map.get(examQuestion.getMainNumber()).getSelectiveIndex());
-                    } else {
+                    if (!map.containsKey(examQuestion.getMainNumber())) {
                         // 非选做题总分
                         totalScore = BigDecimalUtils.add(totalScore, examQuestion.getTotalScore());
                     }
                 }
-                List<SelectiveGroup> indexGroup = selectiveGroupService.findIndexByExamIdAndSubjectCode(examId,
-                        subjectCode);
-                for (SelectiveGroup selectiveGroup : indexGroup) {
-                    // 选做题分组总分
-                    totalScore = BigDecimalUtils.add(totalScore,
-                            selectiveGroup.getPartScore() * selectiveGroup.getSelectiveCount());
-                }
+                double selectiveScore = selectiveGroupService.sumScoreByExamIdAndSubjectCode(examId, subjectCode);
+                // 选做题分组总分
+                totalScore = BigDecimalUtils.add(totalScore, selectiveScore);
                 return totalScore;
             } else {
                 Double score = questionDao.sumTotalScore(examId, subjectCode, objective);

+ 23 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/SelectiveGroupServiceImpl.java

@@ -20,6 +20,7 @@ import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.SelectiveGroupService;
 import cn.com.qmth.stmms.common.enums.ScorePolicy;
+import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
 
 @Service("selectiveGroupService")
 public class SelectiveGroupServiceImpl extends BaseQueryService<SelectiveGroup> implements SelectiveGroupService {
@@ -143,4 +144,26 @@ public class SelectiveGroupServiceImpl extends BaseQueryService<SelectiveGroup>
     public void updateScorePolicy(int examId, String subjectCode, Integer selectiveIndex, ScorePolicy scorePolicy) {
         selectiveGroupDao.updateScorePolicy(examId, subjectCode, selectiveIndex, scorePolicy);
     }
+
+    @Override
+    public double sumScoreByExamIdAndSubjectCode(int examId, String subjectCode) {
+        List<SelectiveGroup> list = selectiveGroupDao.findByExamIdAndSubjectCode(examId, subjectCode);
+        Map<Integer, SelectiveGroup> map = new HashMap<>();
+        for (SelectiveGroup selectiveGroup : list) {
+            map.put(selectiveGroup.getSelectiveIndex(), selectiveGroup);
+        }
+        List<ExamQuestion> questionList = questionService.findMainByExamAndSubjectAndObjective(examId, subjectCode,
+                false);
+        Map<Integer, Double> mainScoreMap = new HashMap<Integer, Double>();
+        for (ExamQuestion question : questionList) {
+            mainScoreMap.put(question.getMainNumber(), question.getTotalScore());
+        }
+        double totalScore = 0d;
+        for (SelectiveGroup selectiveGroup : map.values()) {
+            Double mainScore = mainScoreMap.get(selectiveGroup.getMainNumber());
+            totalScore = BigDecimalUtils.add(totalScore,
+                    BigDecimalUtils.mul(mainScore, selectiveGroup.getSelectiveCount()));
+        }
+        return totalScore;
+    }
 }