瀏覽代碼

fix: coder 得分改为按时间计算

sky 5 年之前
父節點
當前提交
04caeb6dc0

+ 2 - 2
seec-data-server/src/main/java/cn/seecoder/data/server/repository/CoderRepository.java

@@ -11,9 +11,9 @@ import java.util.List;
 @Repository
 public interface CoderRepository extends JpaRepository<CoderDao,Integer> {
 
-    List<CoderDao> findByUserId(Integer userId);
+    List<CoderDao> findByUserIdAndLastCommitAtBetween(Integer userId, LocalDateTime lastCommitAt, LocalDateTime lastCommitAt2);
 
-    List<CoderDao> findByExamIdAndProblemIdOrderByLastCommitAt(Integer examId, Integer problemId);
+    List<CoderDao> findByExamIdAndProblemIdAndLastCommitAtBetweenOrderByLastCommitAt(Integer examId, Integer problemId, LocalDateTime lastCommitAt, LocalDateTime lastCommitAt2);
 
     List<CoderDao> findAllByUserIdAndLastCommitAtBetween(Integer userId, LocalDateTime lastCommitAt, LocalDateTime lastCommitAt2);
 

+ 3 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/CoderService.java

@@ -1,5 +1,8 @@
 package cn.seecoder.data.server.service;
 
+import java.time.LocalDateTime;
+
 public interface CoderService {
     public double getCoderGrade(Integer userId);
+    public double getCoderGrade(Integer userId, LocalDateTime start, LocalDateTime end);
 }

+ 9 - 3
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/CoderServiceImpl.java

@@ -3,6 +3,7 @@ package cn.seecoder.data.server.service.Impl;
 import cn.seecoder.data.server.domain.CoderDao;
 import cn.seecoder.data.server.repository.CoderRepository;
 import cn.seecoder.data.server.service.CoderService;
+import cn.seecoder.data.server.utils.Utils;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,18 +28,18 @@ public class CoderServiceImpl implements CoderService {
     final double MAX_SCORE = 100;
 
     @Override
-    public double getCoderGrade(Integer userId) {
+    public double getCoderGrade(Integer userId, LocalDateTime start, LocalDateTime end) {
         try {
             AtomicReference<Double> grade = new AtomicReference<>(0.0);
             AtomicReference<Double> sumGrade = new AtomicReference<>(0.0);
-            List<CoderDao> coderInfoByUser = coderRepository.findByUserId(userId);
+            List<CoderDao> coderInfoByUser = coderRepository.findByUserIdAndLastCommitAtBetween(userId,start,end);
             coderInfoByUser.forEach(info -> {
                 double weight = 1.0;
                 Integer score = info.getScore();
                 Integer problemId = info.getProblemId();
                 Integer examId = info.getExamId();
                 LocalDateTime lastCommitAt = info.getSubmitAt();
-                List<CoderDao> coderDaoList = coderRepository.findByExamIdAndProblemIdOrderByLastCommitAt(examId, problemId);
+                List<CoderDao> coderDaoList = coderRepository.findByExamIdAndProblemIdAndLastCommitAtBetweenOrderByLastCommitAt(examId, problemId,start,end);
 
                 ArrayList<LocalDateTime> commitTimeQuartiles = new ArrayList<>(3);
                 commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()/4).getSubmitAt());
@@ -61,4 +62,9 @@ public class CoderServiceImpl implements CoderService {
             return 0.0;
         }
     }
+
+    @Override
+    public double getCoderGrade(Integer userId) {
+        return getCoderGrade(userId, Utils.getSmallStartTime(),LocalDateTime.now());
+    }
 }

+ 2 - 1
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/SonarqubeServiceImpl.java

@@ -6,6 +6,7 @@ import cn.seecoder.data.server.dto.sonarqube.ComponentTreeDto;
 import cn.seecoder.data.server.repository.CoderRepository;
 import cn.seecoder.data.server.repository.SonarCoderRepository;
 import cn.seecoder.data.server.service.SonarqubeService;
+import cn.seecoder.data.server.utils.Utils;
 import cn.seecoder.data.server.utils.enums.ErrorCodeEnum;
 import cn.seecoder.data.server.utils.exception.GlobalException;
 import org.slf4j.LoggerFactory;
@@ -39,7 +40,7 @@ public class SonarqubeServiceImpl implements SonarqubeService {
 
     @Override
     public double getSonarScoreOfUser(int userId) {
-        return getSonarScoreOfUser(userId, LocalDateTime.MIN, LocalDateTime.MAX);
+        return getSonarScoreOfUser(userId, Utils.getSmallStartTime(), LocalDateTime.now());
     }
 
     @Override

+ 9 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/utils/Utils.java

@@ -0,0 +1,9 @@
+package cn.seecoder.data.server.utils;
+
+import java.time.LocalDateTime;
+
+public class Utils {
+    public static LocalDateTime getSmallStartTime() {
+        return LocalDateTime.of(2000,1,1,0,0);
+    }
+}

+ 12 - 6
seec-data-server/src/test/java/cn/seecoder/data/server/service/Impl/CoderServiceImplTest.java

@@ -8,6 +8,9 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.annotation.Rollback;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @Rollback
@@ -18,12 +21,15 @@ public class CoderServiceImplTest {
 
     @Test
     public void testCoderGetGrade() {
-        System.out.println(coderService.getCoderGrade(999));
-        System.out.println(coderService.getCoderGrade(1000));
-        System.out.println(coderService.getCoderGrade(1001));
-        System.out.println(coderService.getCoderGrade(1002));
-        System.out.println(coderService.getCoderGrade(1003));
-        System.out.println(coderService.getCoderGrade(1004));
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime start = LocalDateTime.parse("2020-11-01 00:00:00",df);
+        LocalDateTime end = LocalDateTime.parse("2020-12-01 00:00:00",df);
+        System.out.println(coderService.getCoderGrade(999 ,start,end));
+        System.out.println(coderService.getCoderGrade(1000,start,end));
+        System.out.println(coderService.getCoderGrade(1001,start,end));
+        System.out.println(coderService.getCoderGrade(1002,start,end));
+        System.out.println(coderService.getCoderGrade(1003,start,end));
+        System.out.println(coderService.getCoderGrade(1004,start,end));
     }
 }
 /**