package com.sztzjy.linkCommerce.controller.stu; import com.sztzjy.linkCommerce.config.security.JwtUser; import com.sztzjy.linkCommerce.config.security.TokenProvider; import com.sztzjy.linkCommerce.service.ExamService; import com.sztzjy.linkCommerce.util.ResultEntity; import io.swagger.annotations.Api; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; @Api(tags = "考试考核") @RestController @RequestMapping("api/exams") public class ExamController { private final ExamService examService; public ExamController(ExamService examService) { this.examService = examService; } @GetMapping("/teacher/classes") public ResultEntity>> classes(HttpServletRequest request) { return ok(examService.teacherClasses(user(request))); } @GetMapping("/teacher/questions") public ResultEntity>> questions(@RequestParam(required = false) String type, @RequestParam(required = false) String taskKey, @RequestParam(required = false) String keyword, HttpServletRequest request) { return ok(examService.questions(user(request), type, taskKey, keyword)); } @GetMapping("/teacher/question-projects") public ResultEntity>> questionProjects(HttpServletRequest request) { return ok(examService.questionProjects(user(request))); } @PostMapping("/teacher/questions") public ResultEntity> createQuestion(@RequestBody Map payload, HttpServletRequest request) { return new ResultEntity<>(HttpStatus.OK, "新增成功", examService.createQuestion(user(request), payload)); } @PutMapping("/teacher/questions/{id}") public ResultEntity> updateQuestion(@PathVariable long id, @RequestBody Map payload, HttpServletRequest request) { return ok(examService.updateQuestion(user(request), id, payload)); } @DeleteMapping("/teacher/questions/{id}") public ResultEntity deleteQuestion(@PathVariable long id, HttpServletRequest request) { examService.deleteQuestion(user(request), id); return new ResultEntity<>(HttpStatus.OK, "删除成功"); } @PostMapping("/teacher/questions/attachment") public ResultEntity> questionAttachment(@RequestPart("file") MultipartFile file, HttpServletRequest request) { return ok(examService.uploadQuestionAttachment(user(request), file)); } @PostMapping("/teacher/questions/import") public ResultEntity>> importQuestions(@RequestPart("file") MultipartFile file, HttpServletRequest request) { return new ResultEntity<>(HttpStatus.OK, "导入成功", examService.importQuestions(user(request), file)); } @GetMapping("/teacher/questions/template") public void questionTemplate(@RequestParam(required = false, defaultValue = "word") String format, HttpServletRequest request, HttpServletResponse response) throws IOException { examService.teacherClasses(user(request)); examService.questionTemplate(format, response); } @GetMapping("/teacher") public ResultEntity>> exams(@RequestParam(required = false) String keyword, HttpServletRequest request) { return ok(examService.teacherExams(user(request), keyword)); } @GetMapping("/teacher/{id}") public ResultEntity> exam(@PathVariable long id, HttpServletRequest request) { return ok(examService.teacherExam(user(request), id)); } @PostMapping("/teacher") public ResultEntity> createExam(@RequestBody Map payload, HttpServletRequest request) { return new ResultEntity<>(HttpStatus.OK, "保存成功", examService.saveExam(user(request), null, payload)); } @PutMapping("/teacher/{id}") public ResultEntity> updateExam(@PathVariable long id, @RequestBody Map payload, HttpServletRequest request) { return ok(examService.saveExam(user(request), id, payload)); } @PostMapping("/teacher/{id}/publish") public ResultEntity publish(@PathVariable long id, HttpServletRequest request) { examService.publish(user(request), id); return new ResultEntity<>(HttpStatus.OK, "发布成功"); } @PostMapping("/teacher/{id}/withdraw") public ResultEntity withdraw(@PathVariable long id, HttpServletRequest request) { examService.withdraw(user(request), id); return new ResultEntity<>(HttpStatus.OK, "撤回成功"); } @DeleteMapping("/teacher/{id}") public ResultEntity deleteExam(@PathVariable long id, HttpServletRequest request) { examService.deleteExam(user(request), id); return new ResultEntity<>(HttpStatus.OK, "删除成功"); } @GetMapping("/teacher/{id}/paper") public void exportPaper(@PathVariable long id, HttpServletRequest request, HttpServletResponse response) throws IOException { examService.exportPaper(user(request), id, response); } @GetMapping("/teacher/{id}/review") public ResultEntity>> reviewStudents(@PathVariable long id, HttpServletRequest request) { return ok(examService.reviewStudents(user(request), id)); } @GetMapping("/teacher/{id}/review/{attemptId}") public ResultEntity> reviewDetail(@PathVariable long id, @PathVariable long attemptId, HttpServletRequest request) { return ok(examService.reviewDetail(user(request), id, attemptId)); } @PutMapping("/teacher/{id}/review/{attemptId}") public ResultEntity> score(@PathVariable long id, @PathVariable long attemptId, @RequestBody Map scores, HttpServletRequest request) { return ok(examService.scoreSubjective(user(request), id, attemptId, scores)); } @PostMapping("/teacher/{id}/review/{attemptId}/rollback") public ResultEntity rollback(@PathVariable long id, @PathVariable long attemptId, HttpServletRequest request) { examService.rollback(user(request), id, attemptId); return new ResultEntity<>(HttpStatus.OK, "回退成功"); } @GetMapping("/teacher/{id}/scores") public void exportScores(@PathVariable long id, HttpServletRequest request, HttpServletResponse response) throws IOException { examService.exportScores(user(request), id, response); } @GetMapping("/teacher/{id}/analysis") public ResultEntity> analysis(@PathVariable long id, @RequestParam(required = false) String classId, HttpServletRequest request) { return ok(examService.analysis(user(request), id, classId)); } @GetMapping("/teacher/{id}/submissions") public void exportSubmissions(@PathVariable long id, HttpServletRequest request, HttpServletResponse response) throws IOException { examService.exportSubmissions(user(request), id, response); } @GetMapping("/student") public ResultEntity>> studentExams(HttpServletRequest request) { return ok(examService.studentExams(user(request))); } @PostMapping("/student/{id}/enter") public ResultEntity> enter(@PathVariable long id, @RequestBody Map payload, HttpServletRequest request) { return ok(examService.enterExam(user(request), id, payload.get("deviceToken"))); } @GetMapping("/student/{id}/paper") public ResultEntity> paper(@PathVariable long id, @RequestParam String deviceToken, HttpServletRequest request) { return ok(examService.activePaper(user(request), id, deviceToken)); } @PutMapping("/student/{id}/answers/{questionId}") public ResultEntity saveAnswer(@PathVariable long id, @PathVariable long questionId, @RequestBody Map payload, HttpServletRequest request) { examService.saveAnswer(user(request), id, questionId, String.valueOf(payload.get("deviceToken")), payload.get("answer")); return new ResultEntity<>(HttpStatus.OK, "保存成功"); } @PostMapping("/student/{id}/answers/{questionId}/file") public ResultEntity> answerFile(@PathVariable long id, @PathVariable long questionId, @RequestParam String deviceToken, @RequestPart("file") MultipartFile file, HttpServletRequest request) { return ok(examService.uploadAnswerFile(user(request), id, questionId, deviceToken, file)); } @PostMapping("/student/{id}/submit") public ResultEntity> submit(@PathVariable long id, @RequestBody Map payload, HttpServletRequest request) { return new ResultEntity<>(HttpStatus.OK, "交卷成功", examService.submit(user(request), id, payload.get("deviceToken"))); } @GetMapping("/student/{id}/result") public ResultEntity> result(@PathVariable long id, HttpServletRequest request) { return ok(examService.studentResult(user(request), id)); } private JwtUser user(HttpServletRequest request) { return TokenProvider.getJWTUser(request); } private ResultEntity ok(T data) { return new ResultEntity<>(HttpStatus.OK, "查询成功", data); } }