|
|
@@ -1,11 +1,56 @@
|
|
|
package cn.seecoder.data.server.service.Impl;
|
|
|
|
|
|
+import cn.seecoder.data.server.dto.devcloud.DevcloudCommitCoverageDto;
|
|
|
+import cn.seecoder.data.server.dto.devcloud.Response;
|
|
|
import cn.seecoder.data.server.service.DevcloudService;
|
|
|
+import com.nju.edu.gitlab.SeecoderGitlabClient;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.LinkedList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
+
|
|
|
+@Service
|
|
|
public class DevcloudServiceImpl implements DevcloudService {
|
|
|
- @Override
|
|
|
- public Double commitScoreCompute(Integer userId) {
|
|
|
|
|
|
- return null;
|
|
|
+ @Value("${sys.gitlab.url}")
|
|
|
+ private String gitlabUrl;
|
|
|
+
|
|
|
+ @Value("${sys.gitlab.token}")
|
|
|
+ private String gitlabToken;
|
|
|
+
|
|
|
+ @Value("${sys.devcloud.url}")
|
|
|
+ private String devcloudUrl;
|
|
|
+
|
|
|
+ private double[] dividePoint = new double[]{0.875, 0.165, 0.23};
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Double commitScoreCompute(Integer userId) { // TODO
|
|
|
+ // 1. get email from gitlab
|
|
|
+// SeecoderGitlabClient seecoderGitlabClient = new SeecoderGitlabClient(gitlabUrl,gitlabToken);
|
|
|
+// String email = "email from seecoder gitlab";
|
|
|
+ // 2. fetch data from devcloud
|
|
|
+ List<DevcloudCommitCoverageDto> list = new LinkedList<>();
|
|
|
+ list.add(new DevcloudCommitCoverageDto(1,60,100,5));
|
|
|
+ list.add(new DevcloudCommitCoverageDto(2,30,100,5));
|
|
|
+ list.add(new DevcloudCommitCoverageDto(3,10,100,5));
|
|
|
+ list.add(new DevcloudCommitCoverageDto(4,20,100,5));
|
|
|
+ list.add(new DevcloudCommitCoverageDto(5,50,100,5));
|
|
|
+ Response<List<DevcloudCommitCoverageDto>> coverageDtosResponse = Response.buildSuccess(list);
|
|
|
+ // 3. analysis and compute
|
|
|
+ List<DevcloudCommitCoverageDto> coverageDtos = coverageDtosResponse.getData();
|
|
|
+ AtomicInteger count = new AtomicInteger();
|
|
|
+ AtomicReference<Double> biasSum = new AtomicReference<>(0.0);
|
|
|
+ coverageDtos.forEach(data -> {
|
|
|
+ if(data.getAllPeople()>1) {
|
|
|
+ double difference = data.getCommitTimes() - data.getAllCommits() * 1.0 / data.getAllPeople();
|
|
|
+ biasSum.updateAndGet(v -> (double) (v + (difference > 0 ? difference / (data.getAllPeople()-1) : -difference) / data.getAllCommits() * data.getAllPeople()));
|
|
|
+ count.addAndGet(1);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ double biasRate = biasSum.get()/count.get();
|
|
|
+ return 100 * (1 - biasRate);
|
|
|
}
|
|
|
}
|