|
|
@@ -1,17 +1,25 @@
|
|
|
package cn.seecoder.data.server.service.Impl;
|
|
|
|
|
|
+import cn.seecoder.data.server.domain.DevcloudCommitDao;
|
|
|
import cn.seecoder.data.server.dto.devcloud.DevcloudCommitCoverageDto;
|
|
|
import cn.seecoder.data.server.dto.devcloud.Response;
|
|
|
+import cn.seecoder.data.server.repository.DevcloudCommitRepository;
|
|
|
import cn.seecoder.data.server.service.DevcloudService;
|
|
|
+import cn.seecoder.data.server.utils.Utils;
|
|
|
import com.nju.edu.gitlab.SeecoderGitlabClient;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class DevcloudServiceImpl implements DevcloudService {
|
|
|
@@ -22,25 +30,46 @@ public class DevcloudServiceImpl implements DevcloudService {
|
|
|
@Value("${sys.gitlab.token}")
|
|
|
private String gitlabToken;
|
|
|
|
|
|
- @Value("${sys.devcloud.url}")
|
|
|
- private String devcloudUrl;
|
|
|
+ @Autowired
|
|
|
+ DevcloudCommitRepository devcloudCommitRepository;
|
|
|
|
|
|
@Override
|
|
|
- public Double commitScoreCompute(Integer userId) { // TODO
|
|
|
+ public Double commitScoreCompute(Integer userId) {
|
|
|
+ return commitScoreCompute(userId, Utils.getSmallStartTime(),LocalDateTime.now());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Double commitScoreCompute(Integer userId, LocalDateTime start,LocalDateTime end) { // TODO
|
|
|
try {
|
|
|
// 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);
|
|
|
+ String email = "aaa";
|
|
|
+ // 2. fetch data from devcloudRepo
|
|
|
+
|
|
|
+ //list [{ projectId: 1, commitTimes: 10, allCommits: 30, allPeople: 3 }, ... ]
|
|
|
+
|
|
|
+ List<DevcloudCommitDao> personalCommitDaos = devcloudCommitRepository.findByEmailAndSubmitTimeBetween(email, start, end);
|
|
|
+ Map<Integer,DevcloudCommitCoverageDto> devcloudCommitCoverageMap = new HashMap<>();
|
|
|
+
|
|
|
+ personalCommitDaos.forEach(personalCommitDao -> {
|
|
|
+ Integer projectId = personalCommitDao.getProjectId();
|
|
|
+ if(devcloudCommitCoverageMap.containsKey(projectId)) {
|
|
|
+ DevcloudCommitCoverageDto devcloudCommitCoverageDto = devcloudCommitCoverageMap.get(projectId);
|
|
|
+ devcloudCommitCoverageDto.setCommitTimes(devcloudCommitCoverageDto.getCommitTimes() + 1);
|
|
|
+ } else {
|
|
|
+ devcloudCommitCoverageMap.put(projectId,new DevcloudCommitCoverageDto(projectId,1,0,0));
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<DevcloudCommitCoverageDto> coverageDtos = devcloudCommitCoverageMap.values().stream().peek(devcloudCommitCoverageDto -> {
|
|
|
+ Integer projectId = devcloudCommitCoverageDto.getProjectId();
|
|
|
+ Integer allCommitCount = devcloudCommitRepository.findCountByProjectIdAndSubmitTimeBetween(projectId, start, end);
|
|
|
+ Integer allCommitter = devcloudCommitRepository.findCommitterCountByProjectIdAndSubmitTimeBetween(projectId, start, end);
|
|
|
+ devcloudCommitCoverageDto.setAllCommits(allCommitCount);
|
|
|
+ devcloudCommitCoverageDto.setAllPeople(allCommitter);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
// 3. analysis and compute
|
|
|
- List<DevcloudCommitCoverageDto> coverageDtos = coverageDtosResponse.getData();
|
|
|
AtomicInteger count = new AtomicInteger();
|
|
|
AtomicReference<Double> biasSum = new AtomicReference<>(0.0);
|
|
|
coverageDtos.forEach(data -> {
|