ExamController.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package com.nju.edu.eval.web.controller;
  2. import com.nju.edu.eval.aspect.auth.Authorized;
  3. import com.nju.edu.eval.data.entity.Exam;
  4. import com.nju.edu.eval.data.entity.User;
  5. import com.nju.edu.eval.model.vo.exam.CreateExamVO;
  6. import com.nju.edu.eval.model.vo.exam.QuestionScoreMapVO;
  7. import com.nju.edu.eval.publicdatas.enums.UserRole;
  8. import com.nju.edu.eval.service.ExamService;
  9. import com.nju.edu.eval.model.vo.exam.ExamVO;
  10. import com.nju.edu.eval.service.QuestionService;
  11. import com.nju.edu.eval.web.Response;
  12. import io.swagger.annotations.Api;
  13. import io.swagger.annotations.ApiOperation;
  14. import io.swagger.annotations.ApiParam;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.format.annotation.DateTimeFormat;
  17. import org.springframework.web.bind.annotation.*;
  18. import springfox.documentation.annotations.ApiIgnore;
  19. import java.util.Date;
  20. import java.util.Optional;
  21. /**
  22. * @author mars
  23. */
  24. @RestController
  25. @RequestMapping(path = "/api/exam")
  26. @Api(tags = {"考试"})
  27. public class ExamController {
  28. private final ExamService examService;
  29. @Autowired
  30. public ExamController(ExamService examService) {
  31. this.examService = examService;
  32. }
  33. @ApiOperation("创建考试")
  34. @PostMapping("")
  35. @Authorized(roles = {UserRole.TEACHER, UserRole.HR})
  36. public Response createExam(@ApiIgnore User user, @RequestBody CreateExamVO examVO) {
  37. return Response.buildSuccess(examService.createExam(examVO, user.getId()));
  38. }
  39. @ApiOperation("为创建的考试通过样卷来设置题目")
  40. @PostMapping("/question/sample/{examId}/")
  41. @Authorized(roles = {UserRole.TEACHER, UserRole.HR})
  42. public Response setExamQuestionsBySampleExamPaper(@PathVariable int examId,
  43. @RequestParam(value = "sampleExamPaperId") int sampleExamPaperId) {
  44. examService.setExamQuestionsBySampleExamPaper(examId, sampleExamPaperId);
  45. return Response.buildSuccess(null);
  46. }
  47. @ApiOperation("获得所有考试(默认按时间降序)")
  48. @GetMapping("/list")
  49. @Authorized
  50. public Response getExamList(@ApiIgnore User user,
  51. @RequestParam(value = "pageSize") int pageSize,
  52. @RequestParam(value = "pageNum") int pageNum) {
  53. return Response.buildSuccess(examService.getExamList(user.getId(), pageSize, pageNum));
  54. }
  55. @ApiOperation("获得开始时间在某个时间段内的考试")
  56. @GetMapping("/list/range")
  57. public Response getExamListOfTimeRange(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date startTime,
  58. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date endTime) {
  59. return Response.buildSuccess(examService.getExamListOfTimeRange(startTime, endTime));
  60. }
  61. @ApiOperation("根据考试id获得对应考试相关信息")
  62. @GetMapping("/{examId}")
  63. public Response getExamById(@PathVariable Integer examId) {
  64. return Response.buildSuccess(examService.getExamById(examId));
  65. }
  66. @ApiOperation("根据考试id获得对应考试的题目")
  67. @GetMapping("/{examId}/questions")
  68. public Response getExamQuestionAndScoreById(@PathVariable Integer examId) {
  69. return Response.buildSuccess(examService.getExamQuestionAndScoreById(examId));
  70. }
  71. @ApiOperation("根据考试id获得对应考试的代码题目Id")
  72. @GetMapping("/{examId}/questions/code")
  73. public Response getCodeQuestionIdsByExamId(@PathVariable Integer examId) {
  74. return Response.buildSuccess(examService.getCodeQuestionIdsByExamId(examId));
  75. }
  76. @ApiOperation("为考试更新题目及对应分值")
  77. @PutMapping("/{examId}/questions/")
  78. // @Authorized(roles = {UserRole.ADMIN, UserRole.HR, UserRole.TEACHER})
  79. public Response updateQuestionsOfExam(@PathVariable Integer examId,
  80. @RequestBody QuestionScoreMapVO questionScoreMapVO) {
  81. examService.updateQuestionsOfExam(examId, questionScoreMapVO);
  82. return Response.buildSuccess(null);
  83. }
  84. @ApiOperation("延长考试时间")
  85. @PutMapping("/{examId}/time")
  86. @Authorized(roles = {UserRole.ADMIN, UserRole.HR, UserRole.TEACHER})
  87. public Response extendExamTime(@PathVariable Integer examId,
  88. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date endTime) {
  89. Optional<Exam> examEntityOptional = examService.extendExamTime(examId, endTime);
  90. return Response.buildSuccess(null);
  91. // TODO 提醒参加该考试的同学 email?
  92. }
  93. @ApiOperation("获得学生参加的考试")
  94. @ApiParam()
  95. @GetMapping("/student/exams")
  96. @Authorized()
  97. public Response getExamsByCurrentStudent(@ApiIgnore User user,
  98. @RequestParam(value = "pageSize", required = false) int pageSize,
  99. @RequestParam(value = "pageNum", required = false) int pageNum,
  100. @ApiParam(name = "state", value = "0 所有, 1 未开始,2 进行中,3 已结束")
  101. @RequestParam(value = "state") int state) {
  102. return Response.buildSuccess(examService.getExamsByCurrentStudent(user.getId(), pageSize, pageNum, state));
  103. }
  104. @ApiOperation("获得学生参加的考试列表")
  105. @ApiParam()
  106. @GetMapping("/student/examList")
  107. @Authorized()
  108. public Response getExamListByCurrentStudent(@ApiIgnore User user){
  109. return Response.buildSuccess(examService.getExamLIstByCurrentStudent(user.getId()));
  110. }
  111. @ApiOperation("获得老师/HR创建的考试")
  112. @GetMapping("/teacher/exams")
  113. @Authorized(roles = {UserRole.TEACHER, UserRole.HR})
  114. public Response getExamsByCurrentTeacherOrHR(@ApiIgnore User user,
  115. @RequestParam(value = "pageSize", required = false) int pageSize,
  116. @RequestParam(value = "pageNum", required = false) int pageNum,
  117. @ApiParam(name = "state", value = "0 所有, 1 未开始,2 进行中,3 已结束")
  118. @RequestParam(value = "state") int state) {
  119. return Response.buildSuccess(examService.getExamsCreatedByCurrentTeacherOrHR(user.getId(), pageSize, pageNum, state));
  120. }
  121. @ApiOperation("通过邀请码加入考试")
  122. @PutMapping("/invite/code")
  123. @Authorized(roles = {UserRole.STUDENT, UserRole.STAFF, UserRole.ASSISTANT, UserRole.SEEC, UserRole.SEECX})
  124. public Response takeExam(@ApiIgnore User user,
  125. @RequestParam(value = "inviteCode", required = false) String inviteCode,
  126. @RequestParam(value = "examId", required = true) Integer examId
  127. ) {
  128. return Response.buildSuccess(examService.takeExam(user.getId(), examId, inviteCode));
  129. }
  130. @ApiOperation("修改考试名称")
  131. @PutMapping("/update/name")
  132. @Authorized(roles = {UserRole.TEACHER, UserRole.HR})
  133. public Response updateExamName(@ApiIgnore User user,
  134. @RequestParam(value = "examId", required = true) Integer examId,
  135. @RequestParam(value = "name", required = true) String name
  136. ) {
  137. //todo 暂时的接口,后面可扩展为更新考试信息
  138. return Response.buildSuccess(examService.updateExamName(user.getId(), examId, name));
  139. }
  140. @ApiOperation("隐藏考试")
  141. @PutMapping("/update/hidden")
  142. @Authorized(roles = {UserRole.TEACHER, UserRole.HR})
  143. public Response setIsHidden(@ApiIgnore User user,
  144. @RequestParam(value = "examId", required = true) Integer examId,
  145. @RequestParam(value = "hidden", required = true) boolean hidden
  146. ) {
  147. return Response.buildSuccess(examService.setIsHidden(user.getId(), examId, hidden?1:0));
  148. }
  149. @ApiOperation("获取考试推荐")
  150. @GetMapping("/recommend")
  151. public Response getRecommendExam() {
  152. return Response.buildSuccess(examService.getRecommendExam());
  153. }
  154. @ApiOperation("获取考试推荐")
  155. @GetMapping("/recommend/{courseId}")
  156. public Response getRecommendExam(@PathVariable Integer courseId) {
  157. return Response.buildSuccess(examService.getRecommendExam(courseId));
  158. }
  159. @ApiOperation("教师根据课程获取考试列表")
  160. @GetMapping("/teacher/course/{courseId}")
  161. @Authorized(roles = {UserRole.TEACHER, UserRole.HR})
  162. public Response getExamByCourseId(@PathVariable Integer courseId) {
  163. return Response.buildSuccess(examService.getExamByCourseId(courseId));
  164. }
  165. @ApiOperation("学生根据课程获取考试列表")
  166. @GetMapping("/course/{courseId}")
  167. @Authorized(roles = {UserRole.STUDENT, UserRole.STAFF, UserRole.ASSISTANT, UserRole.SEEC, UserRole.SEECX})
  168. public Response getExamByCourseIdAndIsHiddenFalse(@ApiIgnore User user, @PathVariable Integer courseId) {
  169. return Response.buildSuccess(examService.getExamByCourseIdAndIsHiddenFalse(courseId, user.getId()));
  170. }
  171. }