XuShengTao пре 6 година
родитељ
комит
550e563b47

+ 23 - 0
src/main/java/com/seec/bok/back/entity/InteractiveCollect.java

@@ -0,0 +1,23 @@
+package com.seec.bok.back.entity;
+
+import com.seec.bok.back.utils.InteractiveMultiKeys;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * @author sheen
+ */
+@Data
+@Entity
+@IdClass(InteractiveMultiKeys.class)
+public class InteractiveCollect implements Serializable {
+    @Id
+    @Column(name = "uid", nullable = false)
+    String userId;
+    @Id
+    @Column(name = "qid", nullable = false)
+    String questionId;
+    Boolean collection;
+}

+ 23 - 0
src/main/java/com/seec/bok/back/entity/InteractiveRate.java

@@ -0,0 +1,23 @@
+package com.seec.bok.back.entity;
+
+import com.seec.bok.back.utils.InteractiveMultiKeys;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * @author sheen
+ */
+@Data
+@Entity
+@IdClass(InteractiveMultiKeys.class)
+public class InteractiveRate implements Serializable {
+    @Id
+    @Column(name = "uid", nullable = false)
+    String userId;
+    @Id
+    @Column(name = "qid", nullable = false)
+    String questionId;
+    Integer rate;
+}

+ 13 - 0
src/main/java/com/seec/bok/back/repository/InteractiveCollectRepository.java

@@ -0,0 +1,13 @@
+package com.seec.bok.back.repository;
+
+import com.seec.bok.back.entity.InteractiveCollect;
+import com.seec.bok.back.utils.InteractiveMultiKeys;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+
+import java.util.List;
+
+public interface InteractiveCollectRepository extends JpaRepository<InteractiveCollect, InteractiveMultiKeys>, JpaSpecificationExecutor<InteractiveCollect>,QueryByExampleExecutor<InteractiveCollect> {
+    List<InteractiveCollect> findAllByUserId(String userId);
+}

+ 13 - 0
src/main/java/com/seec/bok/back/repository/InteractiveRateRepository.java

@@ -0,0 +1,13 @@
+package com.seec.bok.back.repository;
+
+import com.seec.bok.back.entity.InteractiveRate;
+import com.seec.bok.back.utils.InteractiveMultiKeys;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+
+import java.util.List;
+
+public interface InteractiveRateRepository extends JpaRepository<InteractiveRate, InteractiveMultiKeys>, JpaSpecificationExecutor<InteractiveRate>,QueryByExampleExecutor<InteractiveRate> {
+    List<InteractiveRate> findAllByUserId(String userId);
+}

+ 4 - 0
src/main/java/com/seec/bok/back/repository/QuestionRepository.java

@@ -11,6 +11,7 @@ import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 import org.springframework.stereotype.Repository;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -20,6 +21,9 @@ public interface QuestionRepository extends ElasticsearchRepository<Question,Str
     @Override
     Page<Question> findAll(Pageable pageable);
     Page<Question> findByIdIn(@Param("id")Collection<String> id, Pageable pageable);
+
+    List<Question> findAllByIdIn(Collection<String> id);
+
     @Query("{\"multi_match\": {\"query\": \"?0\", \"fields\": [\"stem\", \"analysis\"], \"fuzziness\": \"AUTO\"}}")
     Page<Question> findByStemLike(String content,Pageable pageable);
     @Override

+ 6 - 4
src/main/java/com/seec/bok/back/repository/QuestionRepositoryImp.java

@@ -11,10 +11,7 @@ import org.springframework.data.elasticsearch.core.query.SearchQuery;
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 import org.springframework.stereotype.Repository;
 
-import java.util.Collection;
-import java.util.Date;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 
 @Repository("QuestionRepositoryImp")
 public class QuestionRepositoryImp implements QuestionRepository{
@@ -42,6 +39,11 @@ public class QuestionRepositoryImp implements QuestionRepository{
         return questionRepository.findByIdIn(id, pageable);
     }
 
+    @Override
+    public List<Question> findAllByIdIn(Collection<String> id) {
+        return questionRepository.findAllByIdIn(id);
+    }
+
     @Override
     public Page<Question> findByStemLike(String content, Pageable pageable) {
         return questionRepository.findByStemLike(content, pageable);

+ 14 - 0
src/main/java/com/seec/bok/back/utils/InteractiveMultiKeys.java

@@ -0,0 +1,14 @@
+package com.seec.bok.back.utils;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InteractiveMultiKeys implements Serializable {
+    public String userId;
+    public String questionId;
+}

+ 65 - 0
src/main/java/com/seec/bok/service/InteractiveService.java

@@ -0,0 +1,65 @@
+package com.seec.bok.service;
+
+import com.seec.bok.back.entity.InteractiveCollect;
+import com.seec.bok.back.entity.InteractiveRate;
+import com.seec.bok.back.repository.InteractiveCollectRepository;
+import com.seec.bok.back.repository.InteractiveRateRepository;
+import com.seec.bok.back.utils.InteractiveMultiKeys;
+import com.seec.bok.web.vo.QuestionVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class InteractiveService {
+    @Autowired
+    private InteractiveCollectRepository collectRepository;
+    @Autowired
+    private InteractiveRateRepository rateRepository;
+    @Autowired
+    private QuestionService questionService;
+    public InteractiveRate addRate(String userId,String questionId,Integer rate){
+        InteractiveRate ir=new InteractiveRate();
+        ir.setQuestionId(questionId);
+        ir.setRate(rate);
+        ir.setUserId(userId);
+        final InteractiveRate save = rateRepository.save(ir);
+        return save;
+    }
+    public InteractiveCollect addCollect(String userId,String questionId,boolean collect){
+        InteractiveCollect ic=new InteractiveCollect();
+        ic.setQuestionId(questionId);
+        ic.setCollection(collect);
+        ic.setUserId(userId);
+        final InteractiveCollect save = collectRepository.save(ic);
+        return save;
+    }
+
+    public List<QuestionVO> findInteractiveQuestions(String userId, Boolean collection, Boolean rate) {
+        List<String> questionIdList=new ArrayList<>();
+        if(collection){
+            final List<InteractiveCollect> allByUserId = collectRepository.findAllByUserId(userId);
+            allByUserId.forEach(i->{
+                if(i.getCollection()!=null&&i.getCollection()){
+                    questionIdList.add(i.getQuestionId());
+                }
+            });
+        }
+        if(rate){
+            final List<InteractiveRate> allByUserId = rateRepository.findAllByUserId(userId);
+            allByUserId.forEach(i->{
+                questionIdList.add(i.getQuestionId());
+            });
+        }
+
+        return questionService.findAllByIdIn(questionIdList)
+                .stream()
+                .map(QuestionVO::of)
+                .collect(Collectors.toList());
+    }
+}

+ 4 - 1
src/main/java/com/seec/bok/service/QuestionService.java

@@ -34,7 +34,10 @@ public class QuestionService {
         PageableQuestionListVO vos=PageableQuestionListVO.of(questionPage);
         return vos;
     }
-
+    public List<Question> findAllByIdIn(Collection<String> id) {
+        final List<Question> questions = questionRepository.findAllByIdIn(id);
+        return questions;
+    }
     public QuestionVO findOne(String id) {
         final Question question = questionRepository.findById(id).orElseThrow(EntityNotFoundException::new);
         return QuestionVO.of(question);

+ 2 - 2
src/main/java/com/seec/bok/web/controller/QuestionQueryController.java

@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /** @author Kunduin */
 @RestController
@@ -27,7 +28,6 @@ public class QuestionQueryController {
     @Operation(description = "根据id批量获取题目")
     public List<QuestionVO> getQuestionListById(
             @RequestParam("id") @Parameter(description = "批量获取") List<String> id) {
-        Pageable pageable = PageRequest.of(0, Integer.MAX_VALUE);
-        return questionService.findByIdIn(id,pageable).getQuestions();
+        return questionService.findAllByIdIn(id).stream().map(QuestionVO::of).collect(Collectors.toList());
     }
 }

+ 7 - 4
src/main/java/com/seec/bok/web/controller/UserInteractiveController.java

@@ -1,12 +1,14 @@
 package com.seec.bok.web.controller;
 
 
+import com.seec.bok.service.InteractiveService;
 import com.seec.bok.web.dto.CollectDTO;
 import com.seec.bok.web.dto.RateDTO;
 import com.seec.bok.web.util.FakeQuestionData;
 import com.seec.bok.web.vo.QuestionVO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -15,14 +17,15 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/user")
 public class UserInteractiveController {
-
+    @Autowired
+    private InteractiveService interactiveService;
     @PostMapping("/{userId}/question/{questionId}/rate")
     @Operation(description = "记录用户对题目的评分信息")
     public Object userRateQuestion(
             @PathVariable String userId,
             @PathVariable String questionId,
             @RequestBody RateDTO rateDTO) {
-        return new Object();
+        return interactiveService.addRate(userId,questionId,rateDTO.getRate());
     }
 
     @PostMapping("/{userId}/question/{questionId}/collection")
@@ -31,7 +34,7 @@ public class UserInteractiveController {
             @PathVariable String userId,
             @PathVariable String questionId,
             @RequestBody CollectDTO collectDTO) {
-        return new Object();
+        return interactiveService.addCollect(userId,questionId,collectDTO.getCollect());
     }
 
     @GetMapping("/{userId}/question")
@@ -43,6 +46,6 @@ public class UserInteractiveController {
                     Boolean collection,
             @Parameter(description = "是否是用户打分的题目") @RequestParam(value = "rate", required = false)
                     Boolean rate) {
-        return FakeQuestionData.buildList();
+        return interactiveService.findInteractiveQuestions(userId,collection,rate);
     }
 }