梅杰 %!s(int64=7) %!d(string=hai) anos
pai
achega
6b3117dceb

+ 5 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CalculateScoreLogicImpl.java

@@ -231,14 +231,15 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
                                 + nodeName + " 而caughtNode没有");
                     try {
                         double coverRatio = caughtNodeDTO.getCatchNum() / caughtNodeDTO.getTotalNum();
-                        if (coverRatio >= 1.0D) coverRatio = 0.9999D;
-                        else if (coverRatio <= 0.0D) coverRatio = 0.0001D;
+                        if (coverRatio >= 1.0D) coverRatio = 0.999999D;
+                        else if (coverRatio <= 0.0D) coverRatio = 0.000001D;
                         return normalDistribution.inverseCumulativeProbability(1 - coverRatio);
                     } catch (MathException e) {
                         e.printStackTrace();
                         return 0;
                     }
                 }).sum();
+                score = (score * 100 ) / (double) caughtNodeDTOMap.size() ;
                 CompeteAnalysisResultDTO competeAnalysisResultDTO =
                         getOrGenerateCompeteAnalysisDTO(userCatchDTO.getUserId(), examId, caseId);
                 competeAnalysisResultDTO.setDifficultScore(score);
@@ -263,6 +264,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
             Task exam = taskService.getTask(examId);
             long totalTime = exam.getEndTime().getTime() - exam.getBeginTime().getTime();
 
+            Map<String, CaughtNodeDTO> caughtNodeDTOMap = caseGraphService.getNodeCatchMapWithExamId(caseId, examId);
             Comparator<String> uploadTimeComparator = (t1, t2) -> Long.parseLong(t1) < Long.parseLong(t2) ? -1 : 1;
             userCatchDTOS.forEach(userCatchDTO -> {
                 double score = userCatchDTO.getCatchDTOs().stream()
@@ -275,7 +277,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
                 }).sum();
                 CompeteAnalysisResultDTO competeAnalysisResultDTO =
                         getOrGenerateCompeteAnalysisDTO(userCatchDTO.getUserId(), examId, caseId);
-
+                score = (score * 100) / (double) caughtNodeDTOMap.size();
                 competeAnalysisResultDTO.setTimeScore(score);
                 competeAnalysisService.saveCompeteAnalysisResult(competeAnalysisResultDTO);
             });