Просмотр исходного кода

得分四舍五入保留一位小数

yangfeng 1 год назад
Родитель
Сommit
8ac0f7b3d4

+ 13 - 8
web/src/main/java/com/ynfy/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -46,7 +46,6 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.modules.quartz.entity.QuartzJob;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
-import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.service.ISysDepartService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -831,6 +830,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
                     if (answerNum > 0) {
                         root.setAnswered(true);
                     }
+                    //组合题得分:从所有子题目得分求和
                     root.setActualScore(root.getSubQuestionList().stream().filter(o ->
                             !Objects.isNull(o.getActualScore())).mapToDouble(UserExamQuestion::getActualScore).sum());
                     resultList.add(root);
@@ -919,7 +919,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
                 break;
             case MULTI: //多选题
                 if (!Objects.isNull(userExamQuestion.getCanMissOption()) && userExamQuestion.getCanMissOption()) {
-                    compareMultiToScore(userExamQuestion, answers, question);
+                    compareMultiToScore(userExamQuestion, answers, question);//漏选给分
                 } else {
                     compareToScore(userExamQuestion, answers, question);
                 }
@@ -940,13 +940,16 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     @Override
     public UserExamQuestion getUserExamQuestionByIndex(String index, Map<Integer, UserExamQuestion> userExamQuestionMap) {
         UserExamQuestion userExamQuestion = null;
-        if (index.indexOf(".") != -1) {
-            //获取子题目
+        if (index.indexOf(".") != -1) {//题目序号中有点好,则为组合题
             String[] indexArray = index.split("\\.");
-            UserExamQuestion userExamRootQuestion = userExamQuestionMap.get(Integer.parseInt(indexArray[0]));
-            if (!Objects.isNull(userExamRootQuestion)) {
-                userExamQuestion = userExamRootQuestion.getSubQuestionList().stream().filter(item -> item.getQuestionIndex()
-                        .equals(Integer.parseInt(indexArray[1]))).findFirst().orElse(null);
+            if (!Objects.isNull(indexArray) && indexArray.length > 1) {
+                //获取组合题
+                UserExamQuestion userExamRootQuestion = userExamQuestionMap.get(Integer.parseInt(indexArray[0]));
+                if (!Objects.isNull(userExamRootQuestion)) {
+                    //获取子题目
+                    userExamQuestion = userExamRootQuestion.getSubQuestionList().stream().filter(item -> item.getQuestionIndex()
+                            .equals(Integer.parseInt(indexArray[1]))).findFirst().orElse(null);
+                }
             }
         } else {
             userExamQuestion = userExamQuestionMap.get(Integer.parseInt(index));
@@ -1241,6 +1244,8 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
      * @param score
      */
     public void updateUserExamAndResult(double score, UserExam userExam) {
+        //四舍五入保留一位小数
+        score = NumberUtil.round(score, 1).doubleValue();
         userExam.setUserScore(score);//最终得分
         userExam.setObjectiveScore(score);//客观题得分
         userExam.setCommitTime(new Date());

+ 2 - 1
web/src/main/java/com/ynfy/buss/exam/examreview/controller/ExamReviewController.java

@@ -78,7 +78,8 @@ public class ExamReviewController extends JeecgController<ExamReview, IExamRevie
     @ApiOperation(value = "阅卷-提交阅卷", notes = "阅卷-提交阅卷")
     @PostMapping(value = "/submitPreview")
     public Result<?> submitPreview(@RequestBody PreviewSubmitDTO dto) {
-        examReviewService.submitPreview(dto);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        examReviewService.submitPreview(dto, user);
         return Result.OK("提交阅卷成功!");
     }
 }

+ 1 - 1
web/src/main/java/com/ynfy/buss/exam/examreview/service/IExamReviewService.java

@@ -31,7 +31,7 @@ public interface IExamReviewService extends IService<ExamReview> {
     void save(List<ExamReview> examReviews);
 
 
-    void submitPreview(PreviewSubmitDTO dto);
+    void submitPreview(PreviewSubmitDTO dto, LoginUser user);
 
 
     IPage<ExamReview> selectPageList(IPage<ExamReview> page, ExamReview examReview, LoginUser user);

+ 8 - 5
web/src/main/java/com/ynfy/buss/exam/examreview/service/impl/ExamReviewServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ynfy.buss.exam.examreview.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -81,7 +82,7 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void submitPreview(PreviewSubmitDTO dto) {
+    public void submitPreview(PreviewSubmitDTO dto, LoginUser user) {
         if (StringUtils.isEmpty(dto.getUserExamId())) {
             throw new JeecgBootException("考试ID不能为空");
         }
@@ -111,7 +112,6 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
 
         if (!CollectionUtils.isEmpty(examPreviews)) {
             List<UserExamQuestion> resultList = new ArrayList<>();
-            double subjectiveScore = 0;
             for (ExamPreviewDTO o : examPreviews) {
                 //根据题目序号中获取考题
                 UserExamQuestion userExamQuestion = examService.getUserExamQuestionByIndex(o.getIndex(), userExamQuestionMap);
@@ -121,8 +121,9 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
                 userExamQuestion.setActualScore(o.getActualScore());
                 userExamQuestion.setIsRight(o.getIsRight());
                 resultList.add(userExamQuestion);
-                subjectiveScore += o.getActualScore();
             }
+            //主观题得分
+            double subjectiveScore = resultList.stream().mapToDouble(UserExamQuestion::getActualScore).sum();
             //组合题
             List<UserExamQuestion> combinationQuestionList = rootQuestionList.stream().filter(q ->
                     QuestionType.COMBINATION.getCode().equals(q.getQuestionType())).collect(Collectors.toList());
@@ -132,6 +133,7 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
                     long simpleCount = question.getSubQuestionList().stream().filter(q -> QuestionType.SIMPLE.getCode()
                             .equals(q.getQuestionType())).count();
                     if (simpleCount > 0) {
+                        //更新组合题得分
                         question.setActualScore(question.getSubQuestionList().stream().filter(o ->
                                 !Objects.isNull(o.getActualScore())).mapToDouble(UserExamQuestion::getActualScore).sum());
                         if (question.getActualScore() > 0) {
@@ -151,9 +153,10 @@ public class ExamReviewServiceImpl extends ServiceImpl<ExamReviewMapper, ExamRev
 
             //用户得分,主观题得分,更新阅卷人,阅卷时间,考试状态
             userExam.setSubjectiveScore(subjectiveScore);//主观题得分
-            userExam.setUserScore(userExam.getUserScore() + subjectiveScore);//用户最终得分
+            userExam.setUserScore(NumberUtil.round(NumberUtil.add(userExam.getUserScore().doubleValue(), subjectiveScore),
+                    1).doubleValue());//用户最终得分
             userExam.setPreviewTime(new Date());
-            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            //阅卷人
             userExam.setPreviewUser(user.getRealname());
             userExam.setState(PaperState.FINISHED);
             int pass = userExam.getUserScore() >= userExam.getQualifyScore() ? 1 : 0;