| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- package com.nju.edu.eval.web.controller;
- import com.nju.edu.eval.aspect.auth.Authorized;
- import com.nju.edu.eval.data.entity.Exam;
- import com.nju.edu.eval.data.entity.User;
- import com.nju.edu.eval.model.vo.exam.CreateExamVO;
- import com.nju.edu.eval.model.vo.exam.QuestionScoreMapVO;
- import com.nju.edu.eval.publicdatas.enums.UserRole;
- import com.nju.edu.eval.service.ExamService;
- import com.nju.edu.eval.model.vo.exam.ExamVO;
- import com.nju.edu.eval.service.QuestionService;
- import com.nju.edu.eval.web.Response;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import io.swagger.annotations.ApiParam;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.format.annotation.DateTimeFormat;
- import org.springframework.web.bind.annotation.*;
- import springfox.documentation.annotations.ApiIgnore;
- import java.util.Date;
- import java.util.Optional;
- /**
- * @author mars
- */
- @RestController
- @RequestMapping(path = "/api/exam")
- @Api(tags = {"考试"})
- public class ExamController {
- private final ExamService examService;
- @Autowired
- public ExamController(ExamService examService) {
- this.examService = examService;
- }
- @ApiOperation("创建考试")
- @PostMapping("")
- @Authorized(roles = {UserRole.TEACHER, UserRole.HR, UserRole.ASSISTANT})
- public Response createExam(@ApiIgnore User user, @RequestBody CreateExamVO examVO) {
- return Response.buildSuccess(examService.createExam(examVO, user.getId()));
- }
- @ApiOperation("为创建的考试通过样卷来设置题目")
- @PostMapping("/question/sample/{examId}/")
- @Authorized(roles = {UserRole.TEACHER, UserRole.HR, UserRole.ASSISTANT})
- public Response setExamQuestionsBySampleExamPaper(@PathVariable int examId,
- @RequestParam(value = "sampleExamPaperId") int sampleExamPaperId) {
- examService.setExamQuestionsBySampleExamPaper(examId, sampleExamPaperId);
- return Response.buildSuccess(null);
- }
- @ApiOperation("获得所有考试(默认按时间降序)")
- @GetMapping("/list")
- @Authorized
- public Response getExamList(@ApiIgnore User user,
- @RequestParam(value = "pageSize") int pageSize,
- @RequestParam(value = "pageNum") int pageNum) {
- return Response.buildSuccess(examService.getExamList(user.getId(), pageSize, pageNum));
- }
- @ApiOperation("获得开始时间在某个时间段内的考试")
- @GetMapping("/list/range")
- public Response getExamListOfTimeRange(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date startTime,
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date endTime) {
- return Response.buildSuccess(examService.getExamListOfTimeRange(startTime, endTime));
- }
- @ApiOperation("根据考试id获得对应考试相关信息")
- @GetMapping("/{examId}")
- public Response getExamById(@PathVariable Integer examId) {
- return Response.buildSuccess(examService.getExamById(examId));
- }
- @ApiOperation("根据考试id获得对应考试的题目")
- @GetMapping("/{examId}/questions")
- public Response getExamQuestionAndScoreById(@PathVariable Integer examId) {
- return Response.buildSuccess(examService.getExamQuestionAndScoreById(examId));
- }
- @ApiOperation("根据考试id获得对应考试的代码题目Id")
- @GetMapping("/{examId}/questions/code")
- public Response getCodeQuestionIdsByExamId(@PathVariable Integer examId) {
- return Response.buildSuccess(examService.getCodeQuestionIdsByExamId(examId));
- }
- @ApiOperation("为考试更新题目及对应分值")
- @PutMapping("/{examId}/questions/")
- // @Authorized(roles = {UserRole.ADMIN, UserRole.HR, UserRole.TEACHER, UserRole.ASSISTANT})
- public Response updateQuestionsOfExam(@PathVariable Integer examId,
- @RequestBody QuestionScoreMapVO questionScoreMapVO) {
- examService.updateQuestionsOfExam(examId, questionScoreMapVO);
- return Response.buildSuccess(null);
- }
- @ApiOperation("延长考试时间")
- @PutMapping("/{examId}/time")
- @Authorized(roles = {UserRole.ADMIN, UserRole.HR, UserRole.TEACHER, UserRole.ASSISTANT})
- public Response extendExamTime(@PathVariable Integer examId,
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date endTime) {
- Optional<Exam> examEntityOptional = examService.extendExamTime(examId, endTime);
- return Response.buildSuccess(null);
- // TODO 提醒参加该考试的同学 email?
- }
- @ApiOperation("获得学生参加的考试")
- @ApiParam()
- @GetMapping("/student/exams")
- @Authorized()
- public Response getExamsByCurrentStudent(@ApiIgnore User user,
- @RequestParam(value = "pageSize", required = false) int pageSize,
- @RequestParam(value = "pageNum", required = false) int pageNum,
- @ApiParam(name = "state", value = "0 所有, 1 未开始,2 进行中,3 已结束")
- @RequestParam(value = "state") int state) {
- return Response.buildSuccess(examService.getExamsByCurrentStudent(user.getId(), pageSize, pageNum, state));
- }
- @ApiOperation("获得老师/HR创建的考试")
- @GetMapping("/teacher/exams")
- @Authorized(roles = {UserRole.TEACHER, UserRole.HR, UserRole.ASSISTANT})
- public Response getExamsByCurrentTeacherOrHR(@ApiIgnore User user,
- @RequestParam(value = "pageSize", required = false) int pageSize,
- @RequestParam(value = "pageNum", required = false) int pageNum,
- @ApiParam(name = "state", value = "0 所有, 1 未开始,2 进行中,3 已结束")
- @RequestParam(value = "state") int state) {
- return Response.buildSuccess(examService.getExamsCreatedByCurrentTeacherOrHR(user.getId(), pageSize, pageNum, state));
- }
- @ApiOperation("通过邀请码加入考试")
- @PutMapping("/invite/code")
- @Authorized(roles = {UserRole.STUDENT})
- public Response takeExam(@ApiIgnore User user,
- @RequestParam(value = "inviteCode", required = false) String inviteCode,
- @RequestParam(value = "examId", required = true) Integer examId
- ) {
- return Response.buildSuccess(examService.takeExam(user.getId(), examId, inviteCode));
- }
- @ApiOperation("修改考试名称")
- @PutMapping("/update/name")
- @Authorized(roles = {UserRole.TEACHER, UserRole.ASSISTANT})
- public Response updateExamName(@ApiIgnore User user,
- @RequestParam(value = "examId", required = true) Integer examId,
- @RequestParam(value = "name", required = true) String name
- ) {
- //todo 暂时的接口,后面可扩展为更新考试信息
- return Response.buildSuccess(examService.updateExamName(user.getId(), examId, name));
- }
- @ApiOperation("隐藏考试")
- @PutMapping("/update/hidden")
- @Authorized(roles = {UserRole.TEACHER, UserRole.ASSISTANT})
- public Response setIsHidden(@ApiIgnore User user,
- @RequestParam(value = "examId", required = true) Integer examId,
- @RequestParam(value = "hidden", required = true) boolean hidden
- ) {
- return Response.buildSuccess(examService.setIsHidden(user.getId(), examId, hidden?1:0));
- }
- @ApiOperation("获取考试推荐")
- @GetMapping("/recommend")
- public Response getRecommendExam() {
- return Response.buildSuccess(examService.getRecommendExam());
- }
- }
|