Browse Source

feature:周报相关

uncln 5 years ago
parent
commit
571b8f7054

+ 20 - 13
seec-data-server/src/main/java/cn/seecoder/data/server/controller/AnalysisController.java

@@ -1,9 +1,7 @@
 package cn.seecoder.data.server.controller;
 
 
-import cn.seecoder.data.server.repository.GeneralRecordRepository;
-import cn.seecoder.data.server.service.EvaluateService;
-import org.springframework.beans.factory.annotation.Autowired;
+import cn.seecoder.data.server.service.AnalysisService;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -14,21 +12,30 @@ import java.util.Map;
 @RestController
 public class AnalysisController {
 
-    @Autowired
-    GeneralRecordRepository generalRecordRepository;
+    final AnalysisService analysisService;
 
-    @Autowired
-    EvaluateService evaluateService;
+    public AnalysisController(AnalysisService analysisService) {
+        this.analysisService = analysisService;
+    }
 
-    @RequestMapping("/score/{id}")
-    public Map<String,Double> getEvaluation(@PathVariable("id") Integer id){
-        HashMap<String,Double> ans = new HashMap<>();
 
-        return ans;
+    @RequestMapping("/score/{id}")
+    public Map<String,Double> getScoreOnSystem(@PathVariable("id") Integer id){
+        return analysisService.getSystemScoreByUserId(id);
     }
 
     @RequestMapping("/score-week/{id}")
-    public Map<String,Double> getEvaluationByWeek(@PathVariable("id") Integer id){
-        return null;
+    public Map<String,Double> getScoreOnSystemByWeek(@PathVariable("id") Integer id){
+        return analysisService.getSystemWeekScoreByUserId(id);
+    }
+
+    @RequestMapping("/deposition/{id}")
+    public Map<String,Double> getDepositionScore(@PathVariable("id") Integer id){
+        return analysisService.getDepositionScoreByUserId(id);
+    }
+
+    @RequestMapping("/deposition-week/{id}")
+    public Map<String,Double> getDepositonScoreByWeek(@PathVariable("id") Integer id){
+        return analysisService.getDepositionWeekScoreByUserId(id);
     }
 }

+ 4 - 4
seec-data-server/src/main/java/cn/seecoder/data/server/controller/KnowledgeController.java

@@ -75,9 +75,9 @@ public class KnowledgeController {
         return knowledgeService.getTreeByPositionAndUser(position,userId);
     }
 
-//    @RequestMapping("/knowledge/week/{userId}")
-//    public Map<String, Integer> getKnowledgeWeekCount(@PathVariable("userId") int userId){
-//        return knowledgeService.getKnowledgeWeekCount(userId);
-//    }
+    @RequestMapping("/knowledge-week/{userId}")
+    public Map<String, Integer> getKnowledgeWeekCount(@PathVariable("userId") int userId){
+        return knowledgeService.getKnowledgeWeekCount(userId);
+    }
 
 }

+ 2 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/domain/knowledge/PositionWeightDao.java

@@ -2,11 +2,13 @@ package cn.seecoder.data.server.domain.knowledge;
 
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.*;
 
+@Builder
 @Data
 @Entity
 @IdClass(KnowledgePositionKeys.class)

+ 4 - 1
seec-data-server/src/main/java/cn/seecoder/data/server/repository/GeneralRecordRepository.java

@@ -1,6 +1,7 @@
 package cn.seecoder.data.server.repository;
 
 import cn.seecoder.data.server.domain.GeneralRecordDao;
+import org.omg.CORBA.PUBLIC_MEMBER;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -22,7 +23,9 @@ public interface GeneralRecordRepository extends JpaRepository<GeneralRecordDao,
 
         public List<GeneralRecordDao> getByUserIdAndCreateTimeBetween(Integer userId, LocalDateTime time1,LocalDateTime time2);
 
-        public List<GeneralRecordDao> getByUserIdAndDataSourceAndCreateTimeBetween(Integer userId, String datasource, LocalDateTime time1,LocalDateTime time2);
+        public List<GeneralRecordDao> getByUserIdAndDataSourceAndSubmitTimeBetween(Integer userId, String datasource, LocalDateTime time1,LocalDateTime time2);
 
         public List<GeneralRecordDao> getByQuestionId(String questionId);
+
+        public List<GeneralRecordDao> getByUserIdAndSubmitTimeBetween(Integer userId, LocalDateTime time1,LocalDateTime time2);
 }

+ 14 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/AnalysisService.java

@@ -20,4 +20,18 @@ public interface AnalysisService {
      * @return
      */
     public Map<String,Double> getSystemWeekScoreByUserId(Integer userId);
+
+    /**
+     * 获取用户的行为数据得分
+     * @param userId
+     * @return
+     */
+    public Map<String,Double> getDepositionScoreByUserId(Integer userId);
+
+    /**
+     * 以周为单位获取用户在子系统评分
+     * @param userId
+     * @return
+     */
+    public Map<String,Double> getDepositionWeekScoreByUserId(Integer userId);
 }

+ 31 - 6
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/AnalysisServiceImpl.java

@@ -22,12 +22,18 @@ public class AnalysisServiceImpl implements AnalysisService {
 
     final PlaygroundService playgroundService;
 
-    public AnalysisServiceImpl(HelperService helperService, EvaluateService evaluateService, CoderService coderService, DevcloudService devcloudService, PlaygroundService playgroundService) {
+    final KnowledgeService knowledgeService;
+
+    final SonarqubeService sonarqubeService;
+
+    public AnalysisServiceImpl(HelperService helperService, EvaluateService evaluateService, CoderService coderService, DevcloudService devcloudService, PlaygroundService playgroundService, KnowledgeService knowledgeService, SonarqubeService sonarqubeService) {
         this.helperService = helperService;
         this.evaluateService = evaluateService;
         this.coderService = coderService;
         this.devcloudService = devcloudService;
         this.playgroundService = playgroundService;
+        this.knowledgeService = knowledgeService;
+        this.sonarqubeService = sonarqubeService;
     }
 
     @Override
@@ -48,14 +54,33 @@ public class AnalysisServiceImpl implements AnalysisService {
         HashMap<String,Double> ans = new HashMap<>();
         LocalDateTime end = LocalDateTime.now();
         LocalDateTime start = end.minusDays(7);
-        ans.put("evaluate",evaluateService.getEvaluationScoreByWeek(userId));
-        ans.put("helper",helperService.getHelperQuestionScoreByIdByWeek(userId)*0.5+helperService.getHelperEventScoreByIdByWeek(userId)*0.5);
-        ans.put("coder",coderService.getCoderGrade(userId,start,end));
-        ans.put("devcloud", devcloudService.commitScoreCompute(userId,start,end));
-        ans.put("playground", playgroundService.getQuestionScore(userId,start,end));
+        ans.put("Evaluate",evaluateService.getEvaluationScoreByWeek(userId));
+        ans.put("Helper",helperService.getHelperQuestionScoreByIdByWeek(userId)*0.5+helperService.getHelperEventScoreByIdByWeek(userId)*0.5);
+        ans.put("Coder",coderService.getCoderGrade(userId,start,end));
+        ans.put("Devcloud", devcloudService.commitScoreCompute(userId,start,end));
+        ans.put("Playground", playgroundService.getQuestionScore(userId,start,end));
+        return ans;
+    }
+
+    @Override
+    public Map<String, Double> getDepositionScoreByUserId(Integer userId) {
+        HashMap<String,Double> ans = new HashMap<>();
+        ans.put("Activity", knowledgeService.getBokInteractionScore(userId)*0.5+helperService.getHelperEventScoreById(userId));
+        ans.put("Cooperation", devcloudService.commitScoreCompute(userId));
+        ans.put("Quality", sonarqubeService.getSonarScoreOfUser(userId));
         return ans;
     }
 
+    @Override
+    public Map<String, Double> getDepositionWeekScoreByUserId(Integer userId) {
+        HashMap<String,Double> ans = new HashMap<>();
+        LocalDateTime end = LocalDateTime.now();
+        LocalDateTime start = end.minusDays(7);
+        ans.put("Activity", helperService.getHelperEventScoreByIdByWeek(userId));
+        ans.put("Cooperation", devcloudService.commitScoreCompute(userId,start,end));
+        ans.put("Quality", sonarqubeService.getSonarScoreOfUser(userId,start,end));
+        return ans;
+    }
 
 
 

+ 1 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/CoderServiceImpl.java

@@ -55,6 +55,7 @@ public class CoderServiceImpl implements CoderService {
                 sumGrade.updateAndGet(v -> v + MAX_SCORE);
             });
 
+            if(sumGrade.get() == 0.0) return 0.0;
             double result = grade.get() / sumGrade.get();
             return Math.min(result, 1.0) * 100;
         } catch (Exception e) {

+ 1 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/DevcloudServiceImpl.java

@@ -76,6 +76,7 @@ public class DevcloudServiceImpl implements DevcloudService {
                     count.addAndGet(1);
                 }
             });
+            if(count.get() == 0) return 0.0;
             double biasRate = biasSum.get()/count.get();
             return 100 * (1 - biasRate);
         } catch (Exception e) {

+ 7 - 4
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/EvaluateServiceImpl.java

@@ -61,7 +61,8 @@ public class EvaluateServiceImpl implements EvaluateService {
         try {
             LocalDateTime end = LocalDateTime.now();
             LocalDateTime start = end.minusDays(7);
-            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndCreateTimeBetween(userId,"evaluate",start,end);
+            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndSubmitTimeBetween(userId,"evaluate",start,end);
+            System.out.println(generalRecordDaoList);
             ans = getScoreOnList(generalRecordDaoList);
         }catch (Exception e){
             LoggerFactory.getLogger(this.getClass()).error("score: evaluate"+"得分计算失败" + "  userId: "+userId, e);
@@ -177,8 +178,8 @@ public class EvaluateServiceImpl implements EvaluateService {
         for(int i=0;i<questionIds.size();i=i+10)
             questionVOS.addAll(seecoderBokClient.getQuestionListByIds(questionIds.subList(i,i+10>questionIds.size()?questionIds.size():i+10)));
         for (int i = 0; i < generalRecordDaoList.size(); i++) {
-            Integer diffWeight = evaluateRepository.findByGeneralId(generalRecordDaoList.get(i).getId()).getDifficuty();
-            diffWeight = diffWeight==null?0:diffWeight;
+            Integer diffWeight = evaluateRepository.findByGeneralId(generalRecordDaoList.get(i).getId())==null?0:
+                    evaluateRepository.findByGeneralId(generalRecordDaoList.get(i).getId()).getDifficuty();
             QuestionVO questionVO = questionVOS.get(i);
             GeneralRecordDao generalRecordDao = generalRecordDaoList.get(i);
             scoreTotal = scoreTotal + generalRecordDao.getScoreTotal();
@@ -188,7 +189,9 @@ public class EvaluateServiceImpl implements EvaluateService {
                 score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()] * difficulty[diffWeight];
         }
         if(scoreTotal!=0)
-            ans = score / scoreTotal;
+            ans = score / scoreTotal * 100;
+        System.out.println(score);
+        System.out.println(scoreTotal);
         ans = ans>100?100:ans;
         return ans;
     }

+ 4 - 3
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/HelperServiceImpl.java

@@ -37,6 +37,7 @@ public class HelperServiceImpl implements HelperService {
         double score = 0;
         try {
             List<HelperEventDao> events = helperEventRepository.findByUserId(userId);
+            System.out.println(events);
             score = getEventScoreOnList(events);
         }catch (Exception e){
             LoggerFactory.getLogger(this.getClass()).error("score: helper_event得分计算失败" + "  userId: "+userId, e);
@@ -76,7 +77,7 @@ public class HelperServiceImpl implements HelperService {
         try {
             LocalDateTime end = LocalDateTime.now();
             LocalDateTime start = end.minusDays(7);
-            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndCreateTimeBetween(userId,"helper",start,end);
+            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndSubmitTimeBetween(userId,"helper",start,end);
             ans = getQuestionScoreOnList(generalRecordDaoList);
         }catch (Exception e){
             LoggerFactory.getLogger(this.getClass()).error("score: helper"+"得分计算失败" + "  userId: "+userId, e);
@@ -100,7 +101,7 @@ public class HelperServiceImpl implements HelperService {
                 }
             }
         }
-        return 0;
+        return score;
     }
 
     private double getQuestionScoreOnList(List<GeneralRecordDao> generalRecordDaoList){
@@ -125,7 +126,7 @@ public class HelperServiceImpl implements HelperService {
                 score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()];
         }
         if(scoreTotal!=0)
-            ans = score / scoreTotal;
+            ans = score / scoreTotal*100;
         ans = ans>100?100:ans;
         return ans;
     }

+ 15 - 2
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/KnowledgeServiceImpl.java

@@ -104,7 +104,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
     public KnowledgePointVO getTreeByPosition(String position) {
         List<PositionWeightDao> positionWeightDaos;
         if(position.equals("all")) {
-            positionWeightDaos = positionWeightRepository.findAll();
+            positionWeightDaos = objectToPositonDao(knowledgeRepository.findAllInfo());
         }
         else
             positionWeightDaos = positionWeightRepository.findByPosition(position);
@@ -155,6 +155,19 @@ public class KnowledgeServiceImpl implements KnowledgeService {
         return root;
     }
 
+    private List<PositionWeightDao> objectToPositonDao(List<Object> knowledgeOnPositionList) {
+        ArrayList<PositionWeightDao> ans = new ArrayList<>();
+        for(int i=0;i<knowledgeOnPositionList.size();i++){
+            Object[] tempDaos = (Object[]) knowledgeOnPositionList.get(i);
+            PositionWeightDao positionWeightDao = PositionWeightDao.builder()
+                    .knowledgeId(Integer.valueOf(tempDaos[0].toString()))
+                    .position(tempDaos[9].toString())
+                    .weight(Double.valueOf(tempDaos[10].toString())).build();
+            ans.add(positionWeightDao);
+        }
+        return ans;
+    }
+
     @Override
     public KnowledgePointVO getTreeByPositionAndUser(String position, int userId) {
         KnowledgePointVO root = getTreeByPosition(position);
@@ -188,7 +201,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
     public Map<String, Integer> getKnowledgeWeekCount(int userId) {
         LocalDateTime endTime = LocalDateTime.now();
         LocalDateTime startTime = endTime.minusDays(7);
-        List<GeneralRecordDao> questionRecords = generalRecordRepository.getByUserIdAndCreateTimeBetween(userId,startTime,endTime);
+        List<GeneralRecordDao> questionRecords = generalRecordRepository.getByUserIdAndSubmitTimeBetween(userId,startTime,endTime);
         SeecoderBokClient seecoderBokClient = new SeecoderBokClient(bokBaseUrl);
         HashMap<String, Integer> ans = new HashMap<>();
         List<String> questionIds = questionRecords.stream().map(record->record.getQuestionId()).collect(Collectors.toList());

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

@@ -30,7 +30,7 @@ public class PlaygroundServiceImpl implements PlaygroundService {
     public Double getQuestionScore(Integer userId, LocalDateTime start, LocalDateTime end) {
         double ans = 0;
         try {
-            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndCreateTimeBetween(userId,"playground",start,end);
+            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndSubmitTimeBetween(userId,"playground",start,end);
             SeecoderBokClient seecoderBokClient = new SeecoderBokClient(bokBaseUrl);
             ArrayList<String> questionIds = new ArrayList<String>();
             for (int i = 0; i < generalRecordDaoList.size(); i++)
@@ -51,7 +51,7 @@ public class PlaygroundServiceImpl implements PlaygroundService {
                     score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()];
             }
             if(scoreTotal!=0)
-                ans = score / scoreTotal;
+                ans = score / scoreTotal*100;
             ans = ans>100?100:ans;
             return ans;
         }catch (Exception e){

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

@@ -48,6 +48,7 @@ public class SonarqubeServiceImpl implements SonarqubeService {
         try {
             List<ComponentTreeDto> componentTreeDtos = getSonarDataOfUser(userId, start, end);
             double sum = componentTreeDtos.stream().mapToDouble(componentTreeDto -> handleMeasures(componentTreeDto.getBaseComponent().getMeasures())).sum();
+            if(componentTreeDtos.size() == 0)return 0.0;
             return sum / componentTreeDtos.size();
         } catch (Exception e) {
             LoggerFactory.getLogger(this.getClass()).error("score: sonar得分计算失败" + "  userId: "+userId, e);