QuestionController.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package cn.seecoder.seecoderbokserver.web.rest;
  2. import cn.seecoder.bok.common.QuestionState;
  3. import cn.seecoder.bok.common.QuestionType;
  4. import cn.seecoder.bok.common.UserRole;
  5. import cn.seecoder.bok.common.api.SeecoderBokQuestionApi;
  6. import cn.seecoder.bok.common.api.SeecoderBokQuestionQueryApi;
  7. import cn.seecoder.bok.common.vo.GraspVO;
  8. import cn.seecoder.bok.common.vo.QuestionVO;
  9. import cn.seecoder.seecoderbokserver.aspect.auth.Authorized;
  10. import cn.seecoder.seecoderbokserver.domain.Question;
  11. import cn.seecoder.seecoderbokserver.mapper.QuestionConvertor;
  12. import cn.seecoder.seecoderbokserver.mapper.QuestionMapper;
  13. import cn.seecoder.seecoderbokserver.service.GraspService;
  14. import cn.seecoder.seecoderbokserver.service.QuestionService;
  15. import org.springframework.data.domain.Page;
  16. import org.springframework.data.domain.PageRequest;
  17. import org.springframework.data.domain.Pageable;
  18. import org.springframework.data.domain.Sort;
  19. import org.springframework.web.bind.annotation.*;
  20. import javax.validation.constraints.NotBlank;
  21. import javax.validation.constraints.NotNull;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. import java.util.Optional;
  25. import java.util.stream.Collector;
  26. import java.util.stream.Collectors;
  27. import java.util.stream.StreamSupport;
  28. /**
  29. * @author Kunduin
  30. */
  31. @RestController
  32. @RequestMapping("/api")
  33. public class QuestionController implements SeecoderBokQuestionApi, SeecoderBokQuestionQueryApi {
  34. private final QuestionService questionService;
  35. private final QuestionMapper questionMapper;
  36. private final GraspService graspService;
  37. public QuestionController(QuestionService questionService, QuestionMapper questionMapper, GraspService graspService) {
  38. this.questionService = questionService;
  39. this.questionMapper = questionMapper;
  40. this.graspService = graspService;
  41. }
  42. @Override
  43. @GetMapping("/question")
  44. public Page<QuestionVO> getQuestionList(
  45. @RequestParam(name = "stem", required = false) String stem,
  46. @RequestParam(name = "tag", required = false) List<String> tags,
  47. @RequestParam(name = "type", required = false) List<QuestionType> questionTypes,
  48. @RequestParam(name = "weight", required = false) List<Integer> weights,
  49. @RequestParam(name = "knowledgeId", required = false) List<String> knowledgeIds,
  50. Pageable pageable) {
  51. return questionService.find(stem, tags, questionTypes, weights, knowledgeIds, pageable)
  52. .map(questionMapper::questionToQuestionVO);
  53. }
  54. @GetMapping("/searchQuestion")
  55. public Response getSearchQuestionList(
  56. @RequestParam(name = "stem", required = false) String stem,
  57. @RequestParam(name = "tag", required = false) List<String> tags,
  58. @RequestParam(name = "type", required = false) List<QuestionType> questionTypes,
  59. @RequestParam(name = "weight", required = false) List<Integer> weights,
  60. @RequestParam(name = "knowledgeId", required = false) List<String> knowledgeIds,
  61. @RequestParam(name = "offset", required = false) int offset,
  62. @RequestParam(name = "pageSize", required = false) int pageSize) {
  63. Pageable pageable = PageRequest.of(offset, pageSize);
  64. return Response.buildSuccess(questionService.find(stem, tags, questionTypes, weights, knowledgeIds, pageable)
  65. .map(questionMapper::questionToQuestionVO));
  66. }
  67. @GetMapping("/pageQuestion")
  68. public Response getTargetQuestionList(
  69. @RequestParam(name = "offset", required = false) int offset,
  70. @RequestParam(name = "pageSize", required = false) int pageSize) {
  71. Sort sort = Sort.by("_id"); //添加sort排序,按照es中的id排序
  72. Pageable pageable = PageRequest.of(offset, pageSize, sort);
  73. return Response.buildSuccess(questionService.find(null, null, null, null, null, pageable)
  74. .map(questionMapper::questionToQuestionVO));
  75. }
  76. @PostMapping("/question")
  77. public Response createQuestion(@NotNull @RequestBody QuestionVO question) {
  78. Question rawQuestion = QuestionConvertor.convertToEntity(question);
  79. return Response.buildSuccess(QuestionConvertor.convertToVO(
  80. questionService.save(rawQuestion)));
  81. }
  82. @Override
  83. @PostMapping("/questions")
  84. public List<QuestionVO> createQuestions(@NotNull @RequestBody List<QuestionVO> questionVOS) {
  85. List<Question> questions = questionVOS.stream().map(questionMapper::questionVOTOQuestion)
  86. .collect(Collectors.toList());
  87. return StreamSupport.stream(questionService.saveAll(questions).spliterator(), false)
  88. .map(questionMapper::questionToQuestionVO).collect(Collectors.toList());
  89. }
  90. @Override
  91. @GetMapping("/question/{id}")
  92. public Optional<QuestionVO> getQuestionById(
  93. @NotBlank @PathVariable(name = "id") String questionId) {
  94. return questionService.findById(questionId)
  95. .map(questionMapper::questionToQuestionVO);
  96. }
  97. @GetMapping("/getQuestion/{id}")
  98. public Response getQuestionById1(
  99. @NotBlank @PathVariable(name = "id") String questionId) {
  100. return Response.buildSuccess(questionService.findById(questionId)
  101. .map(questionMapper::questionToQuestionVO));
  102. }
  103. @PutMapping("/question/{id}")
  104. public Response updateQuestion(
  105. @NotNull @RequestBody QuestionVO question) {
  106. Question rawQuestion = QuestionConvertor.convertToEntity(question);
  107. return Response.buildSuccess(
  108. QuestionConvertor.convertToVO(questionService.save(rawQuestion)));
  109. }
  110. @DeleteMapping("/question/{id}")
  111. public Response deleteQuestionById(
  112. @NotBlank @PathVariable(name = "id") String questionId) {
  113. questionService.delete(questionId);
  114. return Response.buildSuccess("Delete Successfully");
  115. }
  116. @Override
  117. @GetMapping("/question-query/id")
  118. public List<QuestionVO> getQuestionListByIds(@NotNull @RequestParam("id") List<String> ids) {
  119. return StreamSupport.stream(questionService.findAllById(ids).spliterator(), false)
  120. .map(questionMapper::questionToQuestionVO).collect(Collectors.toList());
  121. }
  122. @GetMapping("/state")
  123. @Authorized(roles = {UserRole.ADMIN, UserRole.HR, UserRole.TEACHER, UserRole.SEEC, UserRole.SEECX})
  124. public Response findUncheckedQuestion(
  125. @RequestParam(name = "state") QuestionState questionState,
  126. @RequestParam(name = "offset", required = false) int offset,
  127. @RequestParam(name = "pageSize", required = false) int pageSize) {
  128. Pageable pageable = PageRequest.of(offset, pageSize);
  129. return Response.buildSuccess(questionService.findUncheckedQuestion(questionState, pageable));
  130. }
  131. @GetMapping("/grasp")
  132. public Response getAllGrasp() {
  133. return Response.buildSuccess(graspService.getAll());
  134. }
  135. @GetMapping("/grasp/{question}")
  136. public Response getAllGraspByQuestion(@PathVariable Integer question) {
  137. return Response.buildSuccess(graspService.getAllByQuestion(question));
  138. }
  139. @PostMapping("/grasp")
  140. public Response updateGrasp(@RequestBody GraspVO graspVO) {
  141. return Response.buildSuccess(graspService.save(graspVO));
  142. }
  143. }