Sfoglia il codice sorgente

feat: 完善推荐功能和RecommendController

181250114 4 anni fa
parent
commit
9cdc124580

+ 3 - 3
src/main/java/com/seecoder/dataanalysis/analysis/RecommandService.java → src/main/java/com/seecoder/dataanalysis/analysis/RecommendService.java

@@ -8,13 +8,13 @@ import java.util.List;
  * @author Peng Yiyan
  * @since 2022/04/15
  */
-public interface RecommandService {
+public interface RecommendService {
 
     /**
      * 根据学生id分析学生信息,返回推荐给学生的试题集(默认30题)
      * 从三个角度推荐:1.学生没做过的题目 2.学生能力树缺少/低分的部分 3.学生做错的题目
      * @param userId 学生id
-     * @return List<QuestionVO> questions 返回学生获得的推荐题目
+     * @return List<String> questionIds 返回学生获得的推荐题目的ID
      */
-    List<QuestionVO> getRecommandById(int userId);
+    List<String> getRecommendById(int userId);
 }

+ 8 - 10
src/main/java/com/seecoder/dataanalysis/analysis/impl/RecommandServiceImpl.java → src/main/java/com/seecoder/dataanalysis/analysis/impl/RecommendServiceImpl.java

@@ -2,7 +2,7 @@ package com.seecoder.dataanalysis.analysis.impl;
 
 import cn.seecoder.bok.common.vo.QuestionVO;
 import com.seecoder.dataanalysis.analysis.EvalDataAnalysisService;
-import com.seecoder.dataanalysis.analysis.RecommandService;
+import com.seecoder.dataanalysis.analysis.RecommendService;
 import com.seecoder.dataanalysis.data.dao.competency.CompetencyTreeDao;
 import com.seecoder.dataanalysis.data.entity.competency.CompetencyTree;
 import com.seecoder.dataanalysis.data.entity.competency.KSDScore;
@@ -13,7 +13,7 @@ import org.springframework.stereotype.Service;
 import java.util.*;
 
 @Service
-public class RecommandServiceImpl implements RecommandService {
+public class RecommendServiceImpl implements RecommendService {
     //默认推荐的题目数量
     public static final int QUESTION_NUM = 30;
 
@@ -25,7 +25,7 @@ public class RecommandServiceImpl implements RecommandService {
     private CompetencyTreeDao competencyTreeDao;
 
     @Override
-    public List<QuestionVO> getRecommandById(int userId){
+    public List<String> getRecommendById(int userId){
         Random random = new Random();
         //获取学生的做题情况
         Map<String,Double> errorQuestions = evalDataAnalysisService.getStudentErrorQuestions(userId);
@@ -167,13 +167,11 @@ public class RecommandServiceImpl implements RecommandService {
             undos.remove(undos.get(r));
         }
 
-        for(String s : total){
-            System.out.println(s);
-        }
-        System.out.println(total.size());
-
-        List<QuestionVO> res = new ArrayList<>();
+//        for(String s : total){
+//            System.out.println(s);
+//        }
+//        System.out.println(total.size());
 
-        return res;
+        return total;
     }
 }

+ 30 - 0
src/main/java/com/seecoder/dataanalysis/controller/RecommendController.java

@@ -0,0 +1,30 @@
+package com.seecoder.dataanalysis.controller;
+
+import com.seecoder.dataanalysis.analysis.RecommendService;
+import com.seecoder.dataanalysis.vo.ResponseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Peng Yiyan
+ * @since 2022/04/19
+ */
+@RestController
+@RequestMapping("/recommend")
+public class RecommendController {
+    private final RecommendService recommendService;
+
+    @Autowired
+    public RecommendController(RecommendService recommendService){
+        this.recommendService = recommendService;
+    }
+
+    @GetMapping("/getRecommendById")
+    public ResponseVO getRecommendById(@RequestParam(value = "userId") int userId){
+        return ResponseVO.buildSuccess(recommendService.getRecommendById(userId));
+    }
+
+}

+ 0 - 18
src/test/java/com/seecoder/dataanalysis/eval/impl/RecommandServiceImplTest.java

@@ -1,18 +0,0 @@
-package com.seecoder.dataanalysis.eval.impl;
-
-import com.seecoder.dataanalysis.analysis.RecommandService;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-public class RecommandServiceImplTest {
-
-    @Autowired
-    private RecommandService recommandService;
-
-    @Test
-    void testRecommand(){
-        recommandService.getRecommandById(2);
-    }
-}

+ 37 - 0
src/test/java/com/seecoder/dataanalysis/eval/impl/RecommendServiceImplTest.java

@@ -0,0 +1,37 @@
+package com.seecoder.dataanalysis.eval.impl;
+
+import com.seecoder.dataanalysis.analysis.RecommendService;
+import com.seecoder.dataanalysis.controller.RecommendController;
+import com.seecoder.dataanalysis.logic.question.QuestionService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.List;
+
+@SpringBootTest
+public class RecommendServiceImplTest {
+
+    @Autowired
+    private RecommendController recommendController;
+    @Autowired
+    private RecommendService recommendService;
+    @Autowired
+    private QuestionService questionService;
+
+    @Test
+    void testRecommend(){
+//        List<String> total = recommendService.getRecommendById(2);
+        List<String> total = (List<String>)recommendController.getRecommendById(2).getContent();
+        for(String s : total){
+            System.out.println(s);
+            List<String> knows = questionService.getKnowledgesById(s);
+            for(int i=0;i<knows.size();i++){
+                System.out.print(knows.get(i)+" ");
+            }
+            System.out.println();
+
+        }
+        System.out.println(total.size());
+    }
+}