Browse Source

fix:修改coder分数算法

sky 5 years ago
parent
commit
53d5b8def9

+ 10 - 20
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/CoderServiceImpl.java

@@ -18,8 +18,8 @@ public class CoderServiceImpl implements CoderService {
     @Autowired
     CoderRepository coderRepository;
 
-    final double HEIGH = 1.05;
-    final double HEIGH_MIDDLE = 1.0;
+    final double HIGH = 1.05;
+    final double HIGH_MIDDLE = 1.0;
     final double MIDDLE_LOW = 0.95;
     final double LOW = 0.85;
 
@@ -31,7 +31,7 @@ public class CoderServiceImpl implements CoderService {
         AtomicReference<Double> sumGrade = new AtomicReference<>(0.0);
         List<CoderDao> coderInfoByUser = coderRepository.findByUserId(userId);
         coderInfoByUser.forEach(info -> {
-            double[] weight = new double[]{1.0, 1.0};
+            double weight = 1.0;
             Integer score = info.getScore();
             Integer problemId = info.getProblemId();
             Integer examId = info.getExamId();
@@ -42,27 +42,17 @@ public class CoderServiceImpl implements CoderService {
             commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()/4).getSubmitAt());
             commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()*2/4).getSubmitAt());
             commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()*3/4).getSubmitAt());
-            if(lastCommitAt.compareTo(commitTimeQuartiles.get(0))<=0) weight[0] = HEIGH;
-            else if(lastCommitAt.compareTo(commitTimeQuartiles.get(1))<=0) weight[0] = HEIGH_MIDDLE;
-            else if(lastCommitAt.compareTo(commitTimeQuartiles.get(2))<=0) weight[0] = MIDDLE_LOW;
-            else weight[0] = LOW;
+            if(lastCommitAt.compareTo(commitTimeQuartiles.get(0))<=0) weight = HIGH;
+            else if(lastCommitAt.compareTo(commitTimeQuartiles.get(1))<=0) weight = HIGH_MIDDLE;
+            else if(lastCommitAt.compareTo(commitTimeQuartiles.get(2))<=0) weight = MIDDLE_LOW;
+            else weight = LOW;
 
-            Comparator<? super CoderDao> comparator = (Comparator<CoderDao>) (coderDao, t1) -> coderDao.getScore() - t1.getScore();
-            coderDaoList.sort(comparator);
-            ArrayList<Integer> scoreQuartiles = new ArrayList<>(3);
-            scoreQuartiles.add(coderDaoList.get(coderDaoList.size()/4).getScore());
-            scoreQuartiles.add(coderDaoList.get(coderDaoList.size()*2/4).getScore());
-            scoreQuartiles.add(coderDaoList.get(coderDaoList.size()*3/4).getScore());
-            if(score.compareTo(scoreQuartiles.get(0))<=0) weight[1] = HEIGH;
-            else if(score.compareTo(scoreQuartiles.get(1))<=0) weight[1] = HEIGH_MIDDLE;
-            else if(score.compareTo(scoreQuartiles.get(2))<=0) weight[1] = MIDDLE_LOW;
-            else weight[1] = LOW;
-
-            grade.updateAndGet(v -> v + weight[0] * weight[1] * score);
+            double finalWeight = weight;
+            grade.updateAndGet(v -> v + finalWeight * score);
             sumGrade.updateAndGet(v -> v + MAX_SCORE);
         });
 
         double result = grade.get() / sumGrade.get();
-        return Math.min(result, 1.0);
+        return Math.min(result, 1.0) * 100;
     }
 }

+ 1 - 1
seec-data-server/src/main/resources/application.yml

@@ -7,7 +7,7 @@ spring:
   jpa:
     hibernate:
       ddl-auto: update
-    show-sql: true
+    show-sql: false
 
 logging:
   config: classpath:logback-spring.xml