XuShengTao 6 gadi atpakaļ
vecāks
revīzija
f2e53f7d73

+ 6 - 1
src/main/java/com/seec/bok/back/repository/RecordRepository.java

@@ -1,10 +1,15 @@
 package com.seec.bok.back.repository;
 
 import com.seec.bok.back.entity.Record;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 
-public interface RecordRepository extends JpaRepository<Record, Long> , JpaSpecificationExecutor<Record>,QueryByExampleExecutor<Record> {
+import java.util.List;
 
+public interface RecordRepository extends JpaRepository<Record, Long> , JpaSpecificationExecutor<Record>,QueryByExampleExecutor<Record> {
+    List<Record> findAllByUserId(String userId);
+    Page<Record> findAllByUserId(String userId, Pageable pageable);
 }

+ 19 - 5
src/main/java/com/seec/bok/service/InteractiveService.java

@@ -5,6 +5,8 @@ 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.InteractiveVO;
+import com.seec.bok.web.vo.PageableQuestionListVO;
 import com.seec.bok.web.vo.QuestionVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
@@ -13,6 +15,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Service
@@ -40,7 +43,7 @@ public class InteractiveService {
         return save;
     }
 
-    public List<QuestionVO> findInteractiveQuestions(String userId, Boolean collection, Boolean rate) {
+    public PageableQuestionListVO findInteractiveQuestions(String userId, Boolean collection, Boolean rate, Pageable pageable) {
         List<String> questionIdList=new ArrayList<>();
         if(collection){
             final List<InteractiveCollect> allByUserId = collectRepository.findAllByUserId(userId);
@@ -56,10 +59,21 @@ public class InteractiveService {
                 questionIdList.add(i.getQuestionId());
             });
         }
+        return questionService.findByIdIn(questionIdList,pageable);
+    }
+
+    public InteractiveVO findInteractiveQuestion(String userId, String questionId) {
+        InteractiveMultiKeys interactiveMultiKeys =new InteractiveMultiKeys();
+        interactiveMultiKeys.setUserId(userId);
+        interactiveMultiKeys.setQuestionId(questionId);
+        InteractiveCollect interactiveCollect = collectRepository.findById(interactiveMultiKeys).orElse(new InteractiveCollect());
+        InteractiveRate interactiveRate = rateRepository.findById(interactiveMultiKeys).orElse(new InteractiveRate());
+        InteractiveVO interactiveVO=new InteractiveVO();
 
-        return questionService.findAllByIdIn(questionIdList)
-                .stream()
-                .map(QuestionVO::of)
-                .collect(Collectors.toList());
+        interactiveVO.setUserId(userId);
+        interactiveVO.setQuestionId(questionId);
+        interactiveVO.setRate(interactiveRate.getRate());
+        interactiveVO.setCollection(interactiveCollect.getCollection());
+        return interactiveVO;
     }
 }

+ 10 - 3
src/main/java/com/seec/bok/service/RecordService.java

@@ -3,10 +3,13 @@ package com.seec.bok.service;
 import com.seec.bok.back.entity.Record;
 import com.seec.bok.back.repository.RecordRepository;
 import com.seec.bok.web.dto.RecordDTO;
+import com.seec.bok.web.vo.QuestionVO;
 import com.seec.bok.web.vo.RecordVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.domain.ExampleMatcher;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
@@ -35,10 +38,10 @@ public class RecordService {
         return recordRepository.saveAll(collect);
     }
 
-    public List<Record> findRecordByUidAndQidAndRidIn(List<String> userIdList, List<String> questionIdList, List<String> recordIdList) {
+    public Page<Record> findRecordByUidAndQidAndRidIn(List<String> userIdList, List<String> questionIdList, List<String> recordIdList, Pageable of) {
 
         if(isEmpty(userIdList)&&isEmpty(questionIdList)&&isEmpty(recordIdList)){
-            return recordRepository.findAll();
+            return recordRepository.findAll(of);
         }else{
             Specification<Record> spec = new Specification<Record>() {
                 @Override
@@ -64,7 +67,7 @@ public class RecordService {
                     return and;
                 }
             };
-            List<Record> all = recordRepository.findAll(spec);
+            Page<Record> all = recordRepository.findAll(spec,of);
             return all;
         }
 
@@ -72,5 +75,9 @@ public class RecordService {
     private boolean isEmpty(List list){
         return list==null||list.size()==0;
     }
+
+    public Page<Record> getUserRecordQuestions(String userId, Pageable of) {
+        return recordRepository.findAllByUserId(userId,of);
+    }
 }
 

+ 46 - 4
src/main/java/com/seec/bok/web/controller/RecordController.java

@@ -1,16 +1,26 @@
 package com.seec.bok.web.controller;
 
 
+import com.seec.bok.back.entity.Question;
 import com.seec.bok.back.entity.Record;
+import com.seec.bok.service.QuestionService;
 import com.seec.bok.service.RecordService;
+import com.seec.bok.web.dto.PageDTO;
 import com.seec.bok.web.dto.RecordDTO;
 import com.seec.bok.web.util.FakeRecordData;
+import com.seec.bok.web.vo.PageVO;
+import com.seec.bok.web.vo.PageableQuestionListVO;
+import com.seec.bok.web.vo.QuestionVO;
 import com.seec.bok.web.vo.RecordVO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -24,6 +34,8 @@ import java.util.stream.Collectors;
 public class RecordController {
     @Autowired
     private RecordService recordService;
+    @Autowired
+    private QuestionService questionService;
     @PostMapping("")
     @Operation(description = "新增用户的做题记录")
     public List<RecordVO> createUserRecord(@RequestBody List<RecordDTO> records) {
@@ -33,14 +45,44 @@ public class RecordController {
 
     @GetMapping("")
     @Operation(description = "获得用户做题记录")
-    public List<RecordVO> getUserRecord(
+    public Page<RecordVO> getUserRecord(
             @RequestParam(value = "userId", required = false) @Parameter(description = "用户id")
                     List<String> userIdList,
             @RequestParam(value = "questionId", required = false) @Parameter(description = "题目id")
                     List<String> questionIdList,
             @RequestParam(value = "recordId", required = false) @Parameter(description = "记录id")
-                    List<String> recordIdList) {
-        final List<Record> records1 =recordService.findRecordByUidAndQidAndRidIn(userIdList,questionIdList,recordIdList);
-        return records1.stream().map(RecordVO::fromEntity).collect(Collectors.toList());
+                    List<String> recordIdList,
+            PageDTO pageDTO) {
+        final Page<Record> records1 =recordService.findRecordByUidAndQidAndRidIn(userIdList,questionIdList,recordIdList,PageDTO.of(pageDTO));
+        return records1.map(RecordVO::fromEntity);
+    }
+    @GetMapping("/{userId}/question")
+    @Operation(description = "获得某用户做的题目以及数据")
+    public HashMap getUserRecordQuestions(
+            @PathVariable String userId,
+            PageDTO pageDTO
+            ) {
+        HashMap<String,Object> body=new HashMap<>();
+
+        Page<Record> recordPage=recordService.getUserRecordQuestions(userId,PageDTO.of(pageDTO));
+        List<String> ids = recordPage.getContent().stream()
+                                                .map(Record::getQuestionId)
+                                                .collect(Collectors.toList());
+        final List<QuestionVO> questionVOS = questionService.findAllByIdIn(ids).stream()
+                                                .map(QuestionVO::of)
+                                                .collect(Collectors.toList());
+        final List<RecordVO> recordVOS=recordPage.getContent().stream()
+                                                .map(RecordVO::fromEntity)
+                                                .collect(Collectors.toList());
+        final PageVO page=PageVO.builder()
+                .size(recordPage.getSize())
+                .totalPages(recordPage.getTotalPages())
+                .totalElements(recordPage.getTotalElements())
+                .number(recordPage.getNumber())
+                .build();
+        body.put("page",page);
+        body.put("questions",questionVOS);
+        body.put("records",recordVOS);
+        return body;
     }
 }

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

@@ -3,8 +3,11 @@ 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.PageDTO;
 import com.seec.bok.web.dto.RateDTO;
 import com.seec.bok.web.util.FakeQuestionData;
+import com.seec.bok.web.vo.InteractiveVO;
+import com.seec.bok.web.vo.PageableQuestionListVO;
 import com.seec.bok.web.vo.QuestionVO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -39,13 +42,20 @@ public class UserInteractiveController {
 
     @GetMapping("/{userId}/question")
     @Operation(description = "获得某用户交互的题目列表")
-    public List<QuestionVO> getUserInteractiveQuestions(
+    public PageableQuestionListVO getUserInteractiveQuestions(
             @PathVariable String userId,
             @Parameter(description = "是否是用户收藏的题目")
-                    @RequestParam(value = "collection", required = false)
+            @RequestParam(value = "collection", required = false)
                     Boolean collection,
             @Parameter(description = "是否是用户打分的题目") @RequestParam(value = "rate", required = false)
-                    Boolean rate) {
-        return interactiveService.findInteractiveQuestions(userId,collection,rate);
+                    Boolean rate,
+            PageDTO pageDTO) {
+        return interactiveService.findInteractiveQuestions(userId,collection,rate,PageDTO.of(pageDTO));
+    }
+    @GetMapping("/{userId}/question/{questionId}")
+    @Operation(description = "获得某用户交互的题目")
+    public InteractiveVO getUserInteractiveQuestion(@PathVariable String userId,
+                                                    @PathVariable String questionId) {
+        return interactiveService.findInteractiveQuestion(userId,questionId);
     }
 }

+ 9 - 0
src/main/java/com/seec/bok/web/dto/PageDTO.java

@@ -1,6 +1,8 @@
 package com.seec.bok.web.dto;
 
 import lombok.Data;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 
 import java.util.ArrayList;
@@ -48,4 +50,11 @@ public class PageDTO {
         }
         return Sort.by(orders);
     }
+    public static Pageable of(PageDTO pageDTO){
+        if(pageDTO==null||pageDTO.getPage()==null||pageDTO.getSize()==null){
+            return PageRequest.of(0,1000);
+        }
+        Pageable pageable = PageRequest.of(pageDTO.getPage() - 1, pageDTO.getSize(),pageDTO.toSort());
+        return pageable;
+    }
 }

+ 11 - 0
src/main/java/com/seec/bok/web/vo/InteractiveVO.java

@@ -0,0 +1,11 @@
+package com.seec.bok.web.vo;
+
+import lombok.Data;
+
+@Data
+public class InteractiveVO {
+    String userId;
+    String questionId;
+    Boolean collection;
+    Integer rate;
+}