Jelajahi Sumber

知识点周报部分

uncln 5 tahun lalu
induk
melakukan
6906b3e4e1

+ 1 - 1
seec-data-server/pom.xml

@@ -17,7 +17,7 @@
 		<java.version>1.8</java.version>
 		<aspectJVersion>1.7.2</aspectJVersion>
 		<fastjsonVersion>1.2.58</fastjsonVersion>
-		<seecoder.bok.version>0.1.2</seecoder.bok.version>
+		<seecoder.bok.version>0.2.2</seecoder.bok.version>
 		<seecoder.judgement.version>0.2.0</seecoder.judgement.version>
 		<httpclient.version>4.5.6</httpclient.version>
 		<java.jwt.version>3.10.3</java.jwt.version>

+ 7 - 7
seec-data-server/src/main/java/cn/seecoder/data/server/controller/EvaluateController.java

@@ -29,13 +29,13 @@ public class EvaluateController {
 
     @Autowired
     EvaluateService evaluateService;
-
-    @RequestMapping("/user/{id}")
-    public KnowledgePointVO getEvaluate(@PathVariable("id") Integer id){
-        GeneralServiceImpl generalService = new GeneralServiceImpl(generalRecordRepository,knowledgeRepository);
-        KnowledgePointVO root = generalService.getTreeNode(332);
-        return root;
-    }
+//
+//    @RequestMapping("/user/{id}")
+//    public KnowledgePointVO getEvaluate(@PathVariable("id") Integer id){
+//        GeneralServiceImpl generalService = new GeneralServiceImpl(generalRecordRepository,knowledgeRepository);
+//        KnowledgePointVO root = generalService.getTreeNode(332);
+//        return root;
+//    }
 
     @Auth(roles = {UserRole.SYS})
     @RequestMapping("/eval/analysis/{examId}")

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

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 public class KnowledgeController {
@@ -34,4 +35,9 @@ public class KnowledgeController {
         return knowledgeService.getTreeByPositionAndUser(position,332);
     }
 
+    @RequestMapping("/knowledge/week/{userId}")
+    public Map<String, Integer> getKnowledgeWeekCount(@PathVariable("userId") int userId){
+        return knowledgeService.getKnowledgeWeekCount(userId);
+    }
+
 }

+ 3 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/repository/GeneralRecordRepository.java

@@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -19,5 +20,7 @@ public interface GeneralRecordRepository extends JpaRepository<GeneralRecordDao,
                         nativeQuery = true)
         public List getByUserIdMaxScore(Integer userId);
 
+        public List<GeneralRecordDao> getByUserIdAndCreateTimeBetween(Integer userId, LocalDateTime time1,LocalDateTime time2);
+
         public List<GeneralRecordDao> getByQuestionId(String questionId);
 }

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

@@ -1,5 +1,8 @@
 package cn.seecoder.data.server.service;
 
+import org.springframework.stereotype.Service;
+
+@Service
 public interface HelperService {
 
     public double getHelperEventScoreById(int id);

+ 24 - 18
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/EvaluateServiceImpl.java

@@ -10,6 +10,7 @@ import cn.seecoder.data.server.dto.evaluate.Response;
 import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.repository.knowledge.KnowledgeRepository;
 import cn.seecoder.data.server.service.EvaluateService;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.HttpMethod;
@@ -35,25 +36,30 @@ public class EvaluateServiceImpl implements EvaluateService {
 
     @Override
     public double getQuestionScore(int userId,String dataSource) {
-        SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");
-        List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSource(userId,dataSource);
-        ArrayList<String> questionIds = new ArrayList<String>();
-        for(int i=0;i<generalRecordDaoList.size();i++)
-            questionIds.add(generalRecordDaoList.get(i).getQuestionId());
-        double scoreTotal = 0;
-        double score = 0;
-        double[] weight = {1,1,1,1.05,1.1};
-        List<QuestionVO> questionVOS = seecoderBokClient.getQuestionListByIds(questionIds);
-        for(int i=0;i<generalRecordDaoList.size();i++){
-            QuestionVO questionVO = questionVOS.get(i);
-            GeneralRecordDao generalRecordDao = generalRecordDaoList.get(i);
-            scoreTotal = scoreTotal + generalRecordDao.getScoreTotal();
-            if(questionVO.getWeight()==null||questionVO.getWeight()==0)
-                score = score + generalRecordDao.getScore();
-            else
-                score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()];
+        double ans = 0;
+        try {
+            SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");
+            List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSource(userId, dataSource);
+            ArrayList<String> questionIds = new ArrayList<String>();
+            for (int i = 0; i < generalRecordDaoList.size(); i++)
+                questionIds.add(generalRecordDaoList.get(i).getQuestionId());
+            double scoreTotal = 0;
+            double score = 0;
+            double[] weight = {1, 1, 1, 1.05, 1.1};
+            List<QuestionVO> questionVOS = seecoderBokClient.getQuestionListByIds(questionIds);
+            for (int i = 0; i < generalRecordDaoList.size(); i++) {
+                QuestionVO questionVO = questionVOS.get(i);
+                GeneralRecordDao generalRecordDao = generalRecordDaoList.get(i);
+                scoreTotal = scoreTotal + generalRecordDao.getScoreTotal();
+                if (questionVO.getWeight() == null || questionVO.getWeight() == 0)
+                    score = score + generalRecordDao.getScore();
+                else
+                    score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()];
+            }
+            ans = score / scoreTotal;
+        }catch (Exception e){
+            LoggerFactory.getLogger(this.getClass()).error("score: "+dataSource+"得分计算失败" + "  userId: "+userId, e);
         }
-        double ans = score/scoreTotal;
         return ans;
     }
 

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

@@ -81,7 +81,7 @@ public class GeneralServiceImpl implements GeneralService {
             KnowledgePointVO knowledgePointVO = knowledgePointVOS.get(i);
             ArrayList<String> knowledgeIds = new ArrayList<>();
             knowledgeIds.add(knowledgePointVO.getKnowledge());
-            long questionNum = seecoderBokClient.getQuestionList(null,null,knowledgeIds,null).getTotalElements();
+            long questionNum = seecoderBokClient.getQuestionList(null,null,null,null,knowledgeIds,null).getTotalElements();
             knowledgePointVO.setQuestionsNumTotal(questionNum);
         }
         KnowledgePointVO root = new KnowledgePointVO("SE",0,0,0,0,null);

+ 17 - 12
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/HelperServiceImpl.java

@@ -4,6 +4,7 @@ import cn.seecoder.data.server.domain.helper.HelperEventDao;
 import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.repository.helper.HelperEventRepository;
 import cn.seecoder.data.server.service.HelperService;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -20,21 +21,25 @@ public class HelperServiceImpl implements HelperService {
 
     @Override
     public double getHelperEventScoreById(int userId) {
-        List<HelperEventDao> events = helperEventRepository.findByUserId(userId);
         double score = 0;
-        if(events.size()>0){
-            score = score + 60;
-            for(int i=0;i<events.size();i++){
-                HelperEventDao event = events.get(i);
-                if(event.getType().equals("LESSON"))
-                    score = score + 10;
-                else if(event.getType().equals("QUIZ"))
-                    score = score + 5;
-                else if(event.getType().equals("POST")){
-                    String comment = event.getDescription();
-                    score = score + 5 + (comment.length()/10.0>5?5:comment.length()/10.0);
+        List<HelperEventDao> events = helperEventRepository.findByUserId(userId);
+        try {
+            if (events.size() > 0) {
+                score = score + 60;
+                for (int i = 0; i < events.size(); i++) {
+                    HelperEventDao event = events.get(i);
+                    if (event.getType().equals("LESSON"))
+                        score = score + 10;
+                    else if (event.getType().equals("QUIZ"))
+                        score = score + 5;
+                    else if (event.getType().equals("POST")) {
+                        String comment = event.getDescription();
+                        score = score + 5 + (comment.length() / 10.0 > 5 ? 5 : comment.length() / 10.0);
+                    }
                 }
             }
+        }catch (Exception e){
+            LoggerFactory.getLogger(this.getClass()).error("score: helper_event得分计算失败" + "  userId: "+userId, e);
         }
         return score;
     }

+ 29 - 7
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/KnowledgeServiceImpl.java

@@ -2,6 +2,7 @@ package cn.seecoder.data.server.service.Impl;
 
 import cn.seecoder.bok.client.SeecoderBokClient;
 import cn.seecoder.bok.common.vo.QuestionVO;
+import cn.seecoder.data.server.domain.GeneralRecordDao;
 import cn.seecoder.data.server.domain.knowledge.KnowledgeDao;
 import cn.seecoder.data.server.domain.knowledge.KnowledgeOnPositionDao;
 import cn.seecoder.data.server.domain.knowledge.PositionWeightDao;
@@ -12,16 +13,19 @@ import cn.seecoder.data.server.service.KnowledgeService;
 import cn.seecoder.data.server.vo.knowledge.KnowledgePointVO;
 import cn.seecoder.data.server.vo.knowledge.KnowledgeVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class KnowledgeServiceImpl implements KnowledgeService {
 
+    @Value("${sys.bok.url}")
+    private String bokBaseUrl;
+
     @Autowired
     KnowledgeRepository knowledgeRepository;
 
@@ -115,7 +119,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
                     if(j+1==knowledgeLevel.length) {
                         ArrayList<String> knowledgeIds = new ArrayList<>();
                         knowledgeIds.add(tempLevel);
-                        long questionNum = seecoderBokClient.getQuestionList(null, null, knowledgeIds, null).getTotalElements();
+                        long questionNum = seecoderBokClient.getQuestionList(null, null, null, null,knowledgeIds,null).getTotalElements();
                         nodeToAdd.setQuestionsNumTotal(questionNum);
                     }
                     if(knowledgeRepository.findByAbbreviation(tempLevel).getIsleaf()==1)
@@ -173,8 +177,26 @@ public class KnowledgeServiceImpl implements KnowledgeService {
 
     @Override
     public Map<String, Integer> getKnowledgeWeekCount(int userId) {
-
-        return null;
+        LocalDateTime endTime = LocalDateTime.now();
+        LocalDateTime startTime = endTime.minusDays(7);
+        List<GeneralRecordDao> questionRecords = generalRecordRepository.getByUserIdAndCreateTimeBetween(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());
+        List<QuestionVO> questions = seecoderBokClient.getQuestionListByIds(questionIds);
+        questions.stream().map(question->question.getKnowledgeId()).forEach((List<String> knowledges)-> {
+            if(knowledges!=null && knowledges.size()>0)
+                knowledges.stream().forEach((String knowledge)->{
+                    String name = knowledgeRepository.findByAbbreviation(knowledge).getName();
+                    if(ans.containsKey(name))
+                        ans.put(name,ans.get(name)+1);
+                    else
+                        ans.put(name,1);
+                });
+        });
+        HashMap<String,Integer> ans2 = new LinkedHashMap<>();
+        ans.entrySet().stream().sorted((p1,p2)->p2.getValue().compareTo(p1.getValue())).collect(Collectors.toList()).forEach(ele -> ans2.put(ele.getKey(), ele.getValue()));
+        return ans2;
     }
 
     private KnowledgePointVO addScoreToNode(KnowledgePointVO root, Double score, Double scoreTotal, QuestionVO questionInfo,String knowledege,int deep) {

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

@@ -2,11 +2,12 @@ package cn.seecoder.data.server.service;
 
 import cn.seecoder.data.server.vo.knowledge.KnowledgePointVO;
 import cn.seecoder.data.server.vo.knowledge.KnowledgeVO;
-import cn.seecoder.data.server.vo.knowledge.KnowledgeWeekVO;
+import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Map;
 
+@Service
 public interface KnowledgeService {
 
     /**

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

@@ -32,4 +32,10 @@ sys:
   sonarqube:
     url: http://139.196.193.252:9000/
     login: admin
-    password: NJU67sonarqube
+    password: NJU67sonarqube
+  helper:
+    url: http://helper.seecoder.cn/
+  bok:
+    url: http://bok.seec.seecoder.cn
+  eval:
+    url: http://47.111.95.164:8080/

+ 8 - 8
seec-data-server/src/test/java/cn/seecoder/data/server/service/EvaluateServiceTest.java

@@ -77,14 +77,14 @@ class EvaluateServiceTest {
         }
     }
 
-    @Test
-    public void test3() throws Exception {
-        try {
-            throw new Exception();
-        } finally {
-            System.out.println("妙啊");
-        }
-    }
+//    @Test
+//    public void test3() throws Exception {
+//        try {
+//            throw new Exception();
+//        } finally {
+//            System.out.println("妙啊");
+//        }
+//    }
 
     private void test3_inner() {
 

+ 16 - 6
seec-data-server/src/test/java/cn/seecoder/data/server/service/Impl/GeneralServiceImplTest.java

@@ -1,16 +1,21 @@
 package cn.seecoder.data.server.service.Impl;
 
+import cn.seecoder.data.server.domain.GeneralRecordDao;
 import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.repository.knowledge.KnowledgeRepository;
+import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 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.util.List;
+
 
 @RunWith(SpringJUnit4ClassRunner.class)
-@Rollback
+@Rollback(value = false)
 @SpringBootTest
 class GeneralServiceImplTest {
 
@@ -20,9 +25,14 @@ class GeneralServiceImplTest {
     @Autowired
     KnowledgeRepository knowledgeRepository;
 
-//    @Test
-//    void getTreeNode(){
-//        GeneralServiceImpl generalService = new GeneralServiceImpl(generalRecordRepository,knowledgeRepository);
-//        generalService.getTreeNode(332);
-//    }
+    @Test
+    void dataTest(){
+        List<GeneralRecordDao> generalRecordDaos = generalRecordRepository.findAll();
+        for(int i=0;i<generalRecordDaos.size();i=i+100){
+            GeneralRecordDao g1 = generalRecordDaos.get(i);
+            g1.setId(null);
+            g1.setCreateTime(LocalDateTime.now());
+            generalRecordRepository.save(g1);
+        }
+    }
 }

+ 6 - 3
seec-data-server/src/test/java/cn/seecoder/data/server/service/Impl/KnowledgeServiceImplTest.java

@@ -1,6 +1,7 @@
 package cn.seecoder.data.server.service.Impl;
 
 import cn.seecoder.bok.client.SeecoderBokClient;
+import cn.seecoder.data.server.domain.GeneralRecordDao;
 import cn.seecoder.data.server.domain.knowledge.KnowledgeDao;
 import cn.seecoder.data.server.domain.knowledge.PositionWeightDao;
 import cn.seecoder.data.server.repository.knowledge.KnowledgeRepository;
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.test.annotation.Rollback;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
@@ -23,7 +25,7 @@ import java.util.Random;
 import static org.junit.jupiter.api.Assertions.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
-@Rollback(value = false)
+@Rollback(value = true)
 @SpringBootTest
 class KnowledgeServiceImplTest {
 
@@ -35,10 +37,10 @@ class KnowledgeServiceImplTest {
 
     @Test
     void pushDataTest(){
-        String[] position = {"algorithm"};
+        String[] position = {"test"};
         Random random = new Random();
         List<KnowledgeDao> knowledgeDaos = knowledgeRepository.findAll();
-        for(int i=0;i<knowledgeDaos.size();i=i+60){
+        for(int i=0;i<knowledgeDaos.size();i=i+20){
             int knowledgeId = knowledgeDaos.get(i).getId();
             PositionWeightDao positionWeightDao = new PositionWeightDao();
             positionWeightDao.setKnowledgeId(knowledgeId);
@@ -49,6 +51,7 @@ class KnowledgeServiceImplTest {
         }
     }
 
+
 //    @Test
 //    void positionTest(){
 //        SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");