1
0
Quellcode durchsuchen

修复选做题设置后科目总分合分不正确;
修复成绩复核多选做在选做题分组下多题目查询失败问题;
修复精度问题;

ting.yin vor 3 Jahren
Ursprung
Commit
c68e15b013

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -171,10 +171,10 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
     @Query("select s.className from ExamStudent s where s.examId=?1 and s.subjectCode=?2 group by s.className")
     @Query("select s.className from ExamStudent s where s.examId=?1 and s.subjectCode=?2 group by s.className")
     public List<String> findDistinctClassName(Integer examId, String subjectCode);
     public List<String> findDistinctClassName(Integer examId, String subjectCode);
 
 
-    @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.is_upload =true and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score desc limit ?3 ", nativeQuery = true)
+    @Query(value = "select cast(s.objective_score as decimal)+cast(s.subjective_score as decimal) from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.is_upload =true and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score desc limit ?3 ", nativeQuery = true)
     public List<Double> findHighCountTotalSocreByExamIdAndSubjectCode(Integer examId, String subjectCode, int highCount);
     public List<Double> findHighCountTotalSocreByExamIdAndSubjectCode(Integer examId, String subjectCode, int highCount);
 
 
-    @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.is_upload =true and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score asc limit ?3 ", nativeQuery = true)
+    @Query(value = "select cast(s.objective_score as decimal)+cast(s.subjective_score as decimal) from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.is_upload =true and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score asc limit ?3 ", nativeQuery = true)
     public List<Double> findLowCountTotalSocreByExamIdAndSubjectCode(Integer examId, String subjectCode, int lowCount);
     public List<Double> findLowCountTotalSocreByExamIdAndSubjectCode(Integer examId, String subjectCode, int lowCount);
 
 
     @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.class_name=?3 and s.is_upload =true and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score desc limit ?4 ", nativeQuery = true)
     @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.class_name=?3 and s.is_upload =true and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score desc limit ?4 ", nativeQuery = true)

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

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
 
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
@@ -939,14 +940,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         }
         }
         DecimalFormat format = new DecimalFormat("####.###");
         DecimalFormat format = new DecimalFormat("####.###");
         // 从考生主观题得分中拆解出本大题得分
         // 从考生主观题得分中拆解出本大题得分
-        double score = 0;
+        BigDecimal score = BigDecimal.ZERO;
         List<Double> details = new ArrayList<>();
         List<Double> details = new ArrayList<>();
         int i = -1;
         int i = -1;
         for (ExamQuestion question : questions) {
         for (ExamQuestion question : questions) {
             i++;
             i++;
             if (group.getNumber().equals(question.getGroupNumber())) {
             if (group.getNumber().equals(question.getGroupNumber())) {
                 double value = scoreList.size() > i ? scoreList.get(i).getScore() : 0;
                 double value = scoreList.size() > i ? scoreList.get(i).getScore() : 0;
-                score = BigDecimalUtils.add(score, value);
+                score = score.add(BigDecimal.valueOf(value));
                 details.add(value);
                 details.add(value);
             }
             }
         }
         }
@@ -968,7 +969,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         MarkLibrary selected = null;
         MarkLibrary selected = null;
         List<MarkLibrary> libraries = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
         List<MarkLibrary> libraries = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
         for (MarkLibrary library : libraries) {
         for (MarkLibrary library : libraries) {
-            if (checkScore(library, score, details)) {
+            if (checkScore(library, score.doubleValue(), details)) {
                 selected = library;
                 selected = library;
                 break;
                 break;
             }
             }

+ 5 - 5
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/InspectedServiceImpl.java

@@ -85,10 +85,10 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
             whereSql.append(" and s.subjective_status IN ('MARKED','INSPECTED')");
             whereSql.append(" and s.subjective_status IN ('MARKED','INSPECTED')");
         }
         }
         if (query.getStartScore() != null) {
         if (query.getStartScore() != null) {
-            whereSql.append(" and (s.objective_score+s.subjective_score) >= :startScore");
+            whereSql.append(" and (cast(s.objective_score as decimal)+cast(s.subjective_score as decimal)) >= :startScore");
         }
         }
         if (query.getEndScore() != null) {
         if (query.getEndScore() != null) {
-            whereSql.append(" and (s.objective_score+s.subjective_score) <= :endScore");
+            whereSql.append(" and (cast(s.objective_score as decimal)+cast(s.subjective_score as decimal)) <= :endScore");
         }
         }
         if (StringUtils.isNotBlank(query.getSecretNumber())) {
         if (StringUtils.isNotBlank(query.getSecretNumber())) {
             whereSql.append(" and s.secret_number = :secretNumber");
             whereSql.append(" and s.secret_number = :secretNumber");
@@ -121,7 +121,7 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
         // 选做题多选做
         // 选做题多选做
         if (selectiveStatus != null && SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus) && !groups.isEmpty()
         if (selectiveStatus != null && SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus) && !groups.isEmpty()
                 && !selectiveGroups.isEmpty()) {
                 && !selectiveGroups.isEmpty()) {
-            whereSql.append(" and not exists (select e.student_id from eb_subjective_score e where e.student_id = s.id and e.group_number in (:groupNumbers) and e.group_score = -1 limit :skipCount,1) ");
+            whereSql.append(" and (select count(distinct ss.group_number) from eb_subjective_score ss where ss.student_id = s.id and e.group_number in (:groupNumbers) and e.group_score = -1 )< :selectiveCount ");
         }
         }
         dataSql.append(whereSql);
         dataSql.append(whereSql);
         StringBuilder orderSql = new StringBuilder(" order by s.inspect_time desc ");
         StringBuilder orderSql = new StringBuilder(" order by s.inspect_time desc ");
@@ -168,8 +168,8 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
             }
             }
             dataQuery.setParameter("groupNumbers", groupNumbers);
             dataQuery.setParameter("groupNumbers", groupNumbers);
             if (SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus)) {
             if (SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus)) {
-                int skipCount = selectiveGroups.size() - selectiveGroups.get(0).getSelectiveCount() - 1;
-                dataQuery.setParameter("skipCount", skipCount);
+                int selectiveCount = selectiveGroups.get(0).getSelectiveCount() + 1;
+                dataQuery.setParameter("selectiveCount", selectiveCount);
             }
             }
         }
         }
         return dataQuery;
         return dataQuery;

+ 13 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.Date;
 import java.util.Date;
@@ -301,13 +302,14 @@ public class MarkServiceImpl implements MarkService {
             question.setGroupNumber(null);
             question.setGroupNumber(null);
             questionDao.saveAndFlush(question);
             questionDao.saveAndFlush(question);
         }
         }
-        double totalScore = 0d;
+        BigDecimal totalScore = BigDecimal.ZERO;
         for (ExamQuestion question : questionList) {
         for (ExamQuestion question : questionList) {
-            totalScore = BigDecimalUtils.add(totalScore, question.getTotalScore());
+            totalScore = totalScore.add(BigDecimal.valueOf(question.getTotalScore()));
             question.setGroupNumber(group.getNumber());
             question.setGroupNumber(group.getNumber());
             questionDao.saveAndFlush(question);
             questionDao.saveAndFlush(question);
         }
         }
-        groupDao.updateTotalScore(group.getExamId(), group.getSubjectCode(), group.getNumber(), totalScore);
+        groupDao.updateTotalScore(group.getExamId(), group.getSubjectCode(), group.getNumber(),
+                totalScore.doubleValue());
         groupDao.updateScorePolicy(group.getExamId(), group.getSubjectCode(), group.getNumber(), policy);
         groupDao.updateScorePolicy(group.getExamId(), group.getSubjectCode(), group.getNumber(), policy);
         groupDao.updateThirdPolicy(group.getExamId(), group.getSubjectCode(), group.getNumber(), third);
         groupDao.updateThirdPolicy(group.getExamId(), group.getSubjectCode(), group.getNumber(), third);
         groupDao.updateSelective(group.getExamId(), group.getSubjectCode(), group.getNumber(), selective);
         groupDao.updateSelective(group.getExamId(), group.getSubjectCode(), group.getNumber(), selective);
@@ -920,17 +922,17 @@ public class MarkServiceImpl implements MarkService {
         // 计算大题分
         // 计算大题分
         for (Integer mainNumber : mainScoreMap.keySet()) {
         for (Integer mainNumber : mainScoreMap.keySet()) {
             List<SubjectiveScore> mainScoreList = mainScoreMap.get(mainNumber);
             List<SubjectiveScore> mainScoreList = mainScoreMap.get(mainNumber);
-            double mainScore = 0.0;
+            BigDecimal mainScore = BigDecimal.ZERO;
             for (SubjectiveScore subjectiveScore : mainScoreList) {
             for (SubjectiveScore subjectiveScore : mainScoreList) {
                 if (subjectiveScore.getScore() != UN_SELECTIVE_SCORE) {
                 if (subjectiveScore.getScore() != UN_SELECTIVE_SCORE) {
-                    mainScore = BigDecimalUtils.add(mainScore, subjectiveScore.getScore());
+                    mainScore = mainScore.add(BigDecimal.valueOf(subjectiveScore.getScore()));
                 }
                 }
             }
             }
             for (SubjectiveScore subjectiveScore : mainScoreList) {
             for (SubjectiveScore subjectiveScore : mainScoreList) {
-                subjectiveScore.setMainScore(mainScore);
+                subjectiveScore.setMainScore(mainScore.doubleValue());
                 scoreDao.saveAndFlush(subjectiveScore);
                 scoreDao.saveAndFlush(subjectiveScore);
             }
             }
-            scoreMap.put(mainNumber, mainScore);
+            scoreMap.put(mainNumber, mainScore.doubleValue());
         }
         }
         // 计算选做题分数
         // 计算选做题分数
         ExamStudent student = studentService.findById(studentId);
         ExamStudent student = studentService.findById(studentId);
@@ -950,17 +952,17 @@ public class MarkServiceImpl implements MarkService {
         Collections.sort(selectiveList);
         Collections.sort(selectiveList);
         Collections.reverse(selectiveList);
         Collections.reverse(selectiveList);
         // 计算总分
         // 计算总分
-        double totalScore = 0.0;
+        BigDecimal totalScore = BigDecimal.ZERO;
         for (Integer mainNumber : scoreMap.keySet()) {
         for (Integer mainNumber : scoreMap.keySet()) {
-            totalScore = BigDecimalUtils.add(totalScore, scoreMap.get(mainNumber));
+            totalScore = totalScore.add(BigDecimal.valueOf(scoreMap.get(mainNumber)));
         }
         }
         for (int i = 0; i < selectiveList.size(); i++) {
         for (int i = 0; i < selectiveList.size(); i++) {
             if (i < selectiveCount && selectiveList.get(i) != UN_SELECTIVE_SCORE) {
             if (i < selectiveCount && selectiveList.get(i) != UN_SELECTIVE_SCORE) {
-                totalScore = BigDecimalUtils.add(totalScore, selectiveList.get(i));
+                totalScore = totalScore.add(BigDecimal.valueOf(selectiveList.get(i)));
             }
             }
         }
         }
         // 全部评完,更新考生主观题得分
         // 全部评完,更新考生主观题得分
-        studentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.MARKED, totalScore,
+        studentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.MARKED, totalScore.doubleValue(),
                 ExamStudent.buildScoreList(scoreList));
                 ExamStudent.buildScoreList(scoreList));
     }
     }
 
 

+ 5 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/SubjectQuestionDTO.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.admin.dto;
 package cn.com.qmth.stmms.admin.dto;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
@@ -173,13 +174,13 @@ public class SubjectQuestionDTO {
                     totalScore = -1;
                     totalScore = -1;
                     List<ExamQuestion> questions = null;
                     List<ExamQuestion> questions = null;
                     for (Entry<String, List<ExamQuestion>> entry : paperTypeList.entrySet()) {
                     for (Entry<String, List<ExamQuestion>> entry : paperTypeList.entrySet()) {
-                        double score = 0;
+                        BigDecimal score = BigDecimal.ZERO;
                         for (ExamQuestion question : entry.getValue()) {
                         for (ExamQuestion question : entry.getValue()) {
-                            score = BigDecimalUtils.add(score, question.getTotalScore());
+                            score = score.add(BigDecimal.valueOf(question.getTotalScore()));
                         }
                         }
                         if (totalScore == -1) {
                         if (totalScore == -1) {
-                            totalScore = score;
-                        } else if (totalScore != score) {
+                            totalScore = score.doubleValue();
+                        } else if (totalScore != score.doubleValue()) {
                             error.add("[" + subjectCode + "] 多个试卷类型总分不一致");
                             error.add("[" + subjectCode + "] 多个试卷类型总分不一致");
                             return false;
                             return false;
                         }
                         }

+ 5 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.admin.exam;
 package cn.com.qmth.stmms.admin.exam;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
@@ -592,13 +593,13 @@ public class MarkGroupController extends BaseExamController {
                 }
                 }
                 if (questionIds != null && questionIds.length > 0) {
                 if (questionIds != null && questionIds.length > 0) {
                     List<ExamQuestion> list = new ArrayList<ExamQuestion>();
                     List<ExamQuestion> list = new ArrayList<ExamQuestion>();
-                    double totalScore = 0d;
+                    BigDecimal totalScore = BigDecimal.ZERO;
                     boolean selective = false;
                     boolean selective = false;
                     for (Integer questionId : questionIds) {
                     for (Integer questionId : questionIds) {
                         ExamQuestion question = questionService.findById(questionId);
                         ExamQuestion question = questionService.findById(questionId);
                         question.setGroupNumber(number);
                         question.setGroupNumber(number);
                         list.add(question);
                         list.add(question);
-                        totalScore = BigDecimalUtils.add(totalScore, question.getTotalScore());
+                        totalScore = totalScore.add(BigDecimal.valueOf(question.getTotalScore()));
                         if (selective == false
                         if (selective == false
                                 && selectiveGroupService.findOne(examId, subjectCode, question.getMainNumber()) != null) {
                                 && selectiveGroupService.findOne(examId, subjectCode, question.getMainNumber()) != null) {
                             selective = true;
                             selective = true;
@@ -608,8 +609,8 @@ public class MarkGroupController extends BaseExamController {
                         subjectService.updateTrialCount(examId, subjectCode, trialCount);
                         subjectService.updateTrialCount(examId, subjectCode, trialCount);
                     }
                     }
                     ExamSubject subject = subjectService.find(examId, subjectCode);
                     ExamSubject subject = subjectService.find(examId, subjectCode);
-                    group = new MarkGroup(examId, subjectCode, number, picConfigList, totalScore, doubleRate,
-                            arbitrateThreshold, scorePolicy, markMode, subject.getTrialCount(), sheetView,
+                    group = new MarkGroup(examId, subjectCode, number, picConfigList, totalScore.doubleValue(),
+                            doubleRate, arbitrateThreshold, scorePolicy, markMode, subject.getTrialCount(), sheetView,
                             enableAllZero, thirdPolicy, selective);
                             enableAllZero, thirdPolicy, selective);
                     // clear and replace exam_question
                     // clear and replace exam_question
                     questionService.save(list);
                     questionService.save(list);

+ 4 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.admin.exam;
 package cn.com.qmth.stmms.admin.exam;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
@@ -352,11 +353,11 @@ public class PaperController extends BaseExamController {
                                 // 有题目的分组才保存
                                 // 有题目的分组才保存
                                 if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                                 if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                                         group.getSubjectCode(), false, group.getNumber()) != 0) {
                                         group.getSubjectCode(), false, group.getNumber()) != 0) {
-                                    double totalScore = 0d;
+                                    BigDecimal totalScore = BigDecimal.ZERO;
                                     for (ExamQuestion q : questionGroup) {
                                     for (ExamQuestion q : questionGroup) {
-                                        totalScore = BigDecimalUtils.add(totalScore, q.getTotalScore());
+                                        totalScore = totalScore.add(BigDecimal.valueOf(q.getTotalScore()));
                                     }
                                     }
-                                    group.setTotalScore(totalScore);
+                                    group.setTotalScore(totalScore.doubleValue());
                                     groupService.save(group);
                                     groupService.save(group);
                                     studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId,
                                     studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId,
                                             group.getSubjectCode(), SubjectiveStatus.UNMARK, 0, null, null, null);
                                             group.getSubjectCode(), SubjectiveStatus.UNMARK, 0, null, null, null);

+ 7 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -32,6 +32,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
 
 
 @Controller
 @Controller
@@ -137,20 +138,20 @@ public class ScoreController extends BaseExamController {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         ExamStudent student = studentService.findByExamIdAndExamNumber(examId, dto.getExamNumber());
         ExamStudent student = studentService.findByExamIdAndExamNumber(examId, dto.getExamNumber());
         if (student != null) {
         if (student != null) {
-            double oScore = 0d;
+            BigDecimal oScore = BigDecimal.ZERO;
             List<ScoreItem> oList = dto.getObjectiveScoreItems();
             List<ScoreItem> oList = dto.getObjectiveScoreItems();
             for (ScoreItem item : oList) {
             for (ScoreItem item : oList) {
-                oScore = BigDecimalUtils.add(oScore, item.getScore());
+                oScore = oScore.add(BigDecimal.valueOf(item.getScore()));
             }
             }
-            student.setObjectiveScore(oScore);
+            student.setObjectiveScore(oScore.doubleValue());
             student.setScoreList(oList, true);
             student.setScoreList(oList, true);
 
 
-            double sScore = 0d;
+            BigDecimal sScore = BigDecimal.ZERO;
             List<ScoreItem> sList = dto.getSubjectiveScoreItems();
             List<ScoreItem> sList = dto.getSubjectiveScoreItems();
             for (ScoreItem item : sList) {
             for (ScoreItem item : sList) {
-                sScore = BigDecimalUtils.add(sScore, item.getScore());
+                sScore = sScore.add(BigDecimal.valueOf(item.getScore()));
             }
             }
-            student.setSubjectiveScore(sScore);
+            student.setSubjectiveScore(sScore.doubleValue());
             student.setScoreList(sList, false);
             student.setScoreList(sList, false);
 
 
             studentService.save(student);
             studentService.save(student);

+ 5 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SelectiveGroupController.java

@@ -89,8 +89,8 @@ public class SelectiveGroupController extends BaseExamController {
             addMessage(redirectAttributes, "该科目已经存在分组,无法设置");
             addMessage(redirectAttributes, "该科目已经存在分组,无法设置");
             return "redirect:/admin/exam/paper";
             return "redirect:/admin/exam/paper";
         }
         }
-        double questionScore = 0;
-        if (!checkTotalScore(examId, subjectCode, mainNumbers, questionScore)) {
+        Double questionScore = checkTotalScore(examId, subjectCode, mainNumbers);
+        if (questionScore == null) {
             addMessage(redirectAttributes, "选做题分数必须一样");
             addMessage(redirectAttributes, "选做题分数必须一样");
             return "redirect:/admin/exam/paper";
             return "redirect:/admin/exam/paper";
         }
         }
@@ -109,7 +109,7 @@ public class SelectiveGroupController extends BaseExamController {
         return "redirect:/admin/exam/paper";
         return "redirect:/admin/exam/paper";
     }
     }
 
 
-    private boolean checkTotalScore(int examId, String subjectCode, Integer[] mainNumbers, double questionScore) {
+    private Double checkTotalScore(int examId, String subjectCode, Integer[] mainNumbers) {
         List<ExamQuestion> questions = questionService.findMainByExamAndSubjectAndObjective(examId, subjectCode, false);
         List<ExamQuestion> questions = questionService.findMainByExamAndSubjectAndObjective(examId, subjectCode, false);
         Map<Integer, ExamQuestion> map = new HashMap<Integer, ExamQuestion>();
         Map<Integer, ExamQuestion> map = new HashMap<Integer, ExamQuestion>();
         for (ExamQuestion examQuestion : questions) {
         for (ExamQuestion examQuestion : questions) {
@@ -121,11 +121,10 @@ public class SelectiveGroupController extends BaseExamController {
                 totalScore = map.get(mainNumber).getTotalScore();
                 totalScore = map.get(mainNumber).getTotalScore();
             }
             }
             if (totalScore.doubleValue() != map.get(mainNumber).getTotalScore().doubleValue()) {
             if (totalScore.doubleValue() != map.get(mainNumber).getTotalScore().doubleValue()) {
-                return false;
+                return null;
             }
             }
         }
         }
-        questionScore = totalScore;
-        return true;
+        return totalScore;
     }
     }
 
 
     @Logging(menu = "清空选做题设置", type = LogType.ADD)
     @Logging(menu = "清空选做题设置", type = LogType.ADD)

+ 6 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/OnlineExamThread.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.admin.thread;
 package cn.com.qmth.stmms.admin.thread;
 
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayInputStream;
+import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
@@ -239,7 +240,7 @@ public class OnlineExamThread implements Runnable {
         // 保存question
         // 保存question
         JSONObject paperJson = JSONObject.fromObject(paperResult);
         JSONObject paperJson = JSONObject.fromObject(paperResult);
         JSONArray questionArray = JSONArray.fromObject(paperJson.getString("details"));
         JSONArray questionArray = JSONArray.fromObject(paperJson.getString("details"));
-        double totalScore = 0d;
+        BigDecimal totalScore = BigDecimal.ZERO;
         List<ExamQuestion> list = new ArrayList<>();
         List<ExamQuestion> list = new ArrayList<>();
         for (int i = 0; i < questionArray.size(); i++) {
         for (int i = 0; i < questionArray.size(); i++) {
             JSONObject questionJson = questionArray.getJSONObject(i);
             JSONObject questionJson = questionArray.getJSONObject(i);
@@ -265,7 +266,7 @@ public class OnlineExamThread implements Runnable {
                         double score = question.getDouble("score");
                         double score = question.getDouble("score");
                         q.setTotalScore(score);
                         q.setTotalScore(score);
                         q.setIntervalScore(0.5);
                         q.setIntervalScore(0.5);
-                        totalScore = BigDecimalUtils.add(totalScore, score);
+                        totalScore = totalScore.add(BigDecimal.valueOf(score));
                         list.add(q);
                         list.add(q);
                     }
                     }
                 } else {
                 } else {
@@ -282,18 +283,18 @@ public class OnlineExamThread implements Runnable {
                     double score = sub.getDouble("score");
                     double score = sub.getDouble("score");
                     q.setTotalScore(score);
                     q.setTotalScore(score);
                     q.setIntervalScore(0.5);
                     q.setIntervalScore(0.5);
-                    totalScore = BigDecimalUtils.add(totalScore, score);
+                    totalScore = totalScore.add(BigDecimal.valueOf(score));
                     list.add(q);
                     list.add(q);
                 }
                 }
             }
             }
         }
         }
         questionService.save(list);
         questionService.save(list);
         // 保存group
         // 保存group
-        MarkGroup group = new MarkGroup(examId, subjectCode, 1, null, totalScore, 0d, null, null,
+        MarkGroup group = new MarkGroup(examId, subjectCode, 1, null, totalScore.doubleValue(), 0d, null, null,
                 MarkMode.COMMON.toString(), 0, false, false, null, false);
                 MarkMode.COMMON.toString(), 0, false, false, null, false);
         groupService.save(group);
         groupService.save(group);
 
 
-        subjectService.updateScore(examId, subjectCode, false, totalScore);
+        subjectService.updateScore(examId, subjectCode, false, totalScore.doubleValue());
         return subject;
         return subject;
     }
     }
 }
 }