软件编程
位置:首页>> 软件编程>> java编程>> Java Online Exam在线考试系统的实现

Java Online Exam在线考试系统的实现

作者:qq_1334611189  发布时间:2022-01-30 13:49:35 

标签:Java,在线考试系统,Online,Exam

一、项目简述

本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管 理,人工组卷。自动组卷,教师,班级,统计等等管理功能。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: VUE+Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等

Java Online Exam在线考试系统的实现

Java Online Exam在线考试系统的实现

Java Online Exam在线考试系统的实现

Java Online Exam在线考试系统的实现

Java Online Exam在线考试系统的实现

课程信息控制器:



/**
* yy
*/
@RestController
@RequestMapping(value = "/v1/subjects")
public class SubjectController {

private static Logger logger = LoggerFactory.getLogger(SubjectController.class);

@Autowired
   SubjectService subjectService;

@ApiOperation(value = "获取科目列表", notes = "")
   @RequestMapping(value = "", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public PageInfo<Subject> getSubjectList(@RequestParam(required = false) Integer pageIndex,
                                       @RequestParam(required = false) Integer pageSize,
                                       @RequestParam(required = false) Integer limit,
                                       @RequestParam(required = false) Integer offset) {
       if(pageIndex != null && pageSize != null) {
           PageHelper.startPage(pageIndex, pageSize);
       }
       List<Subject> subjects = subjectService.getSubjectList();
       PageInfo pageInfo = new PageInfo(subjects);
       return pageInfo;
   }

@ApiOperation(value = "根据名字获取科目信息", notes = "根据科目名称获取科目详细信息")
   @ApiImplicitParam(name = "name", value = "科目名称", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/{name}/name", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public List<Subject> getSubjectByName(@PathVariable String name) {
       return subjectService.getSubjectFuzzy(name);
   }

@ApiOperation(value = "获取课程信息", notes = "根据课程id获取课程详细信息")
   @ApiImplicitParam(name = "idOrName", value = "课程ID或名称", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/search/{idOrName}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public List<Subject> getSubjectForSearch(@PathVariable String idOrName) {
       List<Subject> subjects = new ArrayList<Subject>();
       Subject subject = subjectService.getSubjectByName(idOrName);
       if (subject == null) {
           try {
               subject = subjectService.getSubjectById(idOrName);
           } catch (Exception e) {

}
       }
       if (subject != null) {
           subjects.add(subject);
       }
       return subjects;
   }

@ApiOperation(value = "创建课程", notes = "创建课程")
   @ApiImplicitParam(name = "subject", value = "课程实体Subject", required = true, dataType = "Subject")
   @RequestMapping(value = "", method = RequestMethod.POST)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> postSubject(@RequestBody Subject subject) {
       if(subjectService.getSubjectByName(subject.getName()) != null) {
           return new ResponseEntity<Object>(new Dto("课程已存在!"), HttpStatus.INTERNAL_SERVER_ERROR);
       }
       subjectService.saveSubject(subject);
       return new ResponseEntity(HttpStatus.CREATED);
   }

@ApiOperation(value = "获取课程信息", notes = "根据课程id获取课程详细信息")
   @ApiImplicitParam(name = "id", value = "课程ID", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/{id}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public Subject getSubject(@PathVariable String id) {
       return subjectService.getSubjectById(id);
   }

@ApiOperation(value = "更新课程信息", notes = "根据课程id更新用户信息")
   @ApiImplicitParam(name = "subject", value = "课程实体", required = true, dataType = "Subject")
   @RequestMapping(value = "", method = RequestMethod.PUT)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> putSubject(@RequestBody Subject subject) {
       subjectService.updateSubject(subject);
       return new ResponseEntity(HttpStatus.OK);
   }

@ApiOperation(value = "删除课程", notes = "根据课程id删除课程")
   @ApiImplicitParam(name = "id", value = "课程ID", required = true, dataType = "Long", paramType = "path")
   @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> deleteSubject(@PathVariable String id) {
       try {
           subjectService.deleteSubject(id);
       }catch (RuntimeException e) {
           return new ResponseEntity(new Dto("该课程包含有考试,不能删除"), HttpStatus.INTERNAL_SERVER_ERROR);
       }
       return new ResponseEntity(HttpStatus.OK);
   }
}

题目信息控制器:


/**
* yy
*/

@RestController
@RequestMapping(value = "/v1/questions")
public class QuestionController {

private static Logger logger = LoggerFactory.getLogger(QuestionController.class);

@Autowired
   QuestionService questionService;

@Autowired
   PaperAnswerPaperService paperAnswerPaperService;

@ApiOperation(value = "获取题目分页列表", notes = "")
   @RequestMapping(value = "", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public PageInfo<Question> getQuestionListByPage(@RequestParam(required = false) Integer pageIndex,
                                                   @RequestParam(required = false) Integer pageSize,
                                                   @RequestParam(required = false) Integer limit,
                                                   @RequestParam(required = false) Integer offset) {
       if(pageIndex != null && pageSize != null) {
           PageHelper.startPage(pageIndex, pageSize);
       }
       List<Question> questions = questionService.getQuestionList();
       PageInfo pageInfo = new PageInfo(questions);
       return pageInfo;
   }

@ApiOperation(value = "获取试卷题目分页列表", notes = "")
   @RequestMapping(value = "/papers/{paperId}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public PageInfo<Question> getQuestionListByPaper(@PathVariable String paperId,
                                                    @RequestParam(required = false) Integer pageIndex,
                                                    @RequestParam(required = false) Integer pageSize,
                                                    @RequestParam(required = false) Integer limit,
                                                    @RequestParam(required = false) Integer offset) {
       if(pageIndex != null && pageSize != null) {
           PageHelper.startPage(pageIndex, pageSize);
       }
       List<Question> questions = questionService.getQuestionListByPaper(paperId);
       PageInfo pageInfo = new PageInfo(questions);
       return pageInfo;
   }

@ApiOperation(value = "获取试卷题目数量", notes = "")
   @RequestMapping(value = "/papers/{paperId}/count", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public ResponseEntity<?> getQuestionCountByPaper(@PathVariable String paperId) {
       Integer count = questionService.countByPaperId(paperId);
       return new ResponseEntity<Object>(count, HttpStatus.OK);
   }

@ApiOperation(value = "创建题目", notes = "创建题目")
   @ApiImplicitParams({
           @ApiImplicitParam(name = "question", value = "题目实体Question", required = true, dataType = "Question"),
           @ApiImplicitParam(name = "id", value = "试卷id", required = true, dataType = "String", paramType = "path")
   })
   @RequestMapping(value = "/{id}", method = RequestMethod.POST)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> postQuestion(@PathVariable("id") String id, @RequestBody Question question) {
       questionService.saveQuestion(id, question);
       return new ResponseEntity(HttpStatus.CREATED);
   }

@ApiOperation(value = "获取题目信息", notes = "根据题目id获取题目详细信息")
   @ApiImplicitParam(name = "id", value = "题目ID", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/{id}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public Question getQuestion(@PathVariable String id) {
       return questionService.getQuestion(id);
   }

@ApiOperation(value = "根据试卷id和题目编号获取题目信息", notes = "根据题目id获取题目详细信息")
   @ApiImplicitParams({
           @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path"),
           @ApiImplicitParam(name = "number", value = "题目编号", required = true, dataType = "String", paramType = "path")
   })
   @RequestMapping(value = "/papers/{paperId}/questions/{number}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public Question getQuestionByPaperIdAndQuestionId(@PathVariable String paperId,
                                                     @PathVariable Integer number,
                                                     @RequestParam(required = false) String answerPaperId) {
       PaperAnswerPaper paperAnswerPaper = null;
       //传入的是答卷Id
       if(answerPaperId != null) {
           // TODO: 2017-04-17
           paperAnswerPaper = paperAnswerPaperService.getByAnswerPaperId(answerPaperId);
           if(paperAnswerPaper != null) {
               return questionService.getQuestionByPaperIdAndQuestionNumber(paperAnswerPaper.getPaperId(), number);
           }else {
               logger.error("根据答卷id获取答卷失败");
           }
       }
       return questionService.getQuestionByPaperIdAndQuestionNumber(paperId, number);
   }

@ApiOperation(value = "获取题目信息", notes = "根据题目name获取题目详细信息")
   @ApiImplicitParam(name = "name", value = "试卷name", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/name/{name}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public List<Question> getQuestionByName(@PathVariable String name) {
       //模糊查询
       return questionService.getQuestionFuzzy(name);
   }

@ApiOperation(value = "获取题目信息", notes = "根据试卷id获取所有题目")
   @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/papers/{paperId}/questions", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public List<Question> getQuestionByPaperId(@PathVariable String paperId) {
       return questionService.getQuestionByPaperId(paperId);
   }

@ApiOperation(value = "获取题目信息", notes = "根据试卷id获取所有题目,但不返回答案")
   @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/papers/{paperId}/ignore", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public List<Question> getQuestionByPaperIdIgnoreAnswer(@PathVariable String paperId) {
       return questionService.getQuestionByPaperIdIgnoreAnswer(paperId);
   }

@ApiOperation(value = "更新题目信息", notes = "根据题目id更新题目信息")
   @ApiImplicitParam(name = "question", value = "题目实体", required = true, dataType = "Question")
   @RequestMapping(value = "", method = RequestMethod.PUT)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> putQuestion(@RequestBody Question question) {
       questionService.updateQuestion(question);
       return new ResponseEntity(HttpStatus.OK);
   }

@ApiOperation(value = "删除题目", notes = "根据题目id删除试卷")
   @ApiImplicitParam(name = "id", value = "题目ID", required = true, dataType = "String", paramType = "path")
   @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> deleteQuestion(@PathVariable String id) {
       questionService.deleteQuestion(id);
       return new ResponseEntity(HttpStatus.OK);
   }
}

考试控制层,负责试卷提交等:


/**
* 考试控制层,负责试卷提交等
*/
@RestController
@RequestMapping("/v1/exam")
public class ExamController {

@Autowired
   ExamService examService;

@Autowired
   AnswerPaperService answerPaperService;

@Autowired
   AnswerQuestionService answerQuestionService;

@Autowired
   AnswerPaperQuestionService answerPaperQuestionService;

@Autowired
   QuestionService questionService;

@Autowired
   PaperService paperService;

@Autowired
   WrongQuestionService wrongQuestionService;

@Autowired
   PaperAnswerPaperService paperAnswerPaperService;

@ApiOperation(value = "根据试卷id和题目编号获取题目信息", notes = "根据题目id获取题目详细信息")
   @ApiImplicitParams({
           @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path"),
           @ApiImplicitParam(name = "number", value = "题目编号", required = true, dataType = "String", paramType = "path")
   })
   @RequestMapping(value = "/questions/{number}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public Question getQuestionByPaperIdAndQuestionId(@RequestParam String paperId,
                                                     @RequestParam String username,
                                                     @RequestParam(required = false) String answerPaperId,
                                                     @PathVariable Integer number) {
       Question question = null;
       AnswerQuestion answerQuestion = null;
       if(answerPaperId == null) {
           Paper paper = paperService.getPaperById(paperId);
           if(paper != null) {
               AnswerPaper answerPaper = answerPaperService.findByAnswerUserAndPaperName(username, paper.getName());
               if(answerPaper != null) {
                   answerQuestion = answerQuestionService.getAnswerQuestionByPaperIdAndQuestionNumber(answerPaper.getId(), number);
               }
           }
       }else {
           answerQuestion = answerQuestionService.getAnswerQuestionByPaperIdAndQuestionNumber(answerPaperId, number);
       }

if(answerQuestion == null) {
           question = questionService.getQuestionByPaperIdAndQuestionNumber(paperId, number);
           if(question != null) {
               //答案不返回
               question.setAnswer("");
           }
       } else {
           question = new Question();
           question.setId(answerQuestion.getId());
           question.setNumber(answerQuestion.getNumber());
           question.setTitle(answerQuestion.getTitle());
           question.setScore(answerQuestion.getScore());
           question.setType(answerQuestion.getType());
           question.setOptionA(answerQuestion.getOptionA());
           question.setOptionB(answerQuestion.getOptionB());
           question.setOptionC(answerQuestion.getOptionC());
           question.setOptionD(answerQuestion.getOptionD());
           question.setAnswer(answerQuestion.getAnswer());
       }
       return question;
   }

@RequestMapping(value = "/submit/{type}/{username}", method = RequestMethod.POST)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public ResponseEntity<?> submit(@RequestBody Paper paper, @PathVariable String type,
                                   @PathVariable String username,
                                   @RequestParam(required = false) String answerPaperId) {
       /**
        * 更改试卷状态,finished:true
        */
       if(type.equals("official")) {
           /**
            * 正式考试
            */
           AnswerPaper answerPaper = new AnswerPaper();
           if(answerPaperId != null) {
               answerPaper.setId(answerPaperId);
           }else {
               return new ResponseEntity<Object>(HttpStatus.INTERNAL_SERVER_ERROR);
           }
           answerPaper.setAnswerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
           answerPaper.setPaperName(paper.getName());
           answerPaper.setAnswerUser(username);
           answerPaper.setChecked("false");
           answerPaper.setFinished("true");
           answerPaper.setType("official");
           examService.updateAnswerPaper(answerPaper);
       } else if(type.equals("simulate")) {
           /**
            * 模拟考试
            */
           AnswerPaper answerPaper = new AnswerPaper();
           if(answerPaperId != null) {
               answerPaper.setId(answerPaperId);
           }else {
               return new ResponseEntity<Object>(HttpStatus.INTERNAL_SERVER_ERROR);
           }
           answerPaper.setAnswerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
           answerPaper.setPaperName(paper.getName());
           answerPaper.setAnswerUser(username);
           answerPaper.setChecked("false");
           answerPaper.setFinished("true");
           answerPaper.setType("simulate");
           examService.updateAnswerPaper(answerPaper);
       }else if(type.equals("practice")) {
           /**
            * 1.接收提交的试卷
            * 2.计算成绩
            * 3.记录考试记录
            * 4.返回计算结果
            */
           int score = 0;

//正确题目数
           double right = 0.0;

//错误题目数
           double wrong = 0.0;

double correctRate = 0.0;

List<Question> questions = questionService.getQuestionByPaperId(paper.getId());

AnswerPaper answerPaper = answerPaperService.findByAnswerUserAndPaperName(username, paper.getName());

List<AnswerQuestion> answerQuestions = answerQuestionService.findByAnswerPaperId(answerPaper.getId());

/*保存题目信息,返回给前端*/
           List<DtoRightAndWrong> results = new ArrayList<DtoRightAndWrong>();

DtoRightAndWrong dtoRightAndWrong = null;

//遍历提交的试卷的题目
           for(AnswerQuestion answerQuestion : answerQuestions) {

//遍历包含正确答案的题目
               for(Question question : questions) {
                   /**
                    * 1.题目序号相同
                    * 2.结果与答案相同
                    */
                   if(answerQuestion.getNumber().equals(question.getNumber())) {
                       if(answerQuestion.getAnswer().equals(question.getAnswer())) {
                           /*累计得分*/
                           score += Integer.parseInt(question.getScore());
                           right ++;
                       }else {
                           wrong ++;
                           //记录错题
                           dtoRightAndWrong = new DtoRightAndWrong();
                           dtoRightAndWrong.setQuestion(question);
                           dtoRightAndWrong.setAnswerQuestion(answerQuestion);
                           results.add(dtoRightAndWrong);

//保存错题
                           WrongQuestion wrongQuestion = new WrongQuestion();
                           try{
                               BeanUtils.copyProperties(wrongQuestion, answerQuestion);
                               wrongQuestion.setUsername(username);
                               wrongQuestion.setRightAnswer(question.getAnswer());
                               wrongQuestion.setAnalysis(question.getAnalysis());
                               if(wrongQuestionService.getWrongQuestion(wrongQuestion.getId()) == null) {
                                   wrongQuestionService.saveQuestion(wrongQuestion);
                               }
                           }catch (Exception e) {
                               System.out.println(wrongQuestion.toString());
                           }

}
                   }
               }
           }
           //计算正确率
           correctRate = (right/(right + wrong)) * 100;

DtoResult result = new DtoResult();
           result.setScore(score);
           result.setRight(right);
           result.setWrong(wrong);
           result.setCorrectRate(correctRate);
           result.setResults(results);

Paper paper1 = paperService.getPaperById(paper.getId());
           //更新参与人数
           paper1.setPeoples(String.valueOf(Integer.parseInt(paper1.getPeoples()) + 1));
           paperService.updatePaper(paper1);

return new ResponseEntity<Object>(result, HttpStatus.OK);
       }
       Paper paper1 = paperService.getPaperById(paper.getId());
       //更新参与人数
       paper1.setPeoples(String.valueOf(Integer.parseInt(paper1.getPeoples() + 1)));
       paperService.updatePaper(paper1);
       return new ResponseEntity<Object>(HttpStatus.OK);
   }

/**
    * 提交题目
    * @param username
    * @param dtoAnswerPaper
    * @return
    */
   @RequestMapping(value = "/submit/one/{username}", method = RequestMethod.POST)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public ResponseEntity<?> submitOne(@PathVariable String username, @RequestBody DtoAnswerPaper dtoAnswerPaper) {
       Paper paper = dtoAnswerPaper.getPaper();
       Question question = dtoAnswerPaper.getQuestion();
       //判断数据库是否保存了这次答卷
       AnswerPaper answerPaper = answerPaperService.getAnswerPaperByNameAndUser(paper.getName(), username);
       AnswerQuestion answerQuestion = null;
       AnswerPaperQuestion answerPaperQuestion = null;
       List<AnswerQuestion> answerQuestions = null;
       //重新生成id
       String answerPaperId = IdGen.uuid();
       String answerQuestionId = IdGen.uuid();
       //答卷为空,则执行保存
       if(answerPaper == null) {
           answerPaper = new AnswerPaper();
           answerPaper.setId(answerPaperId);
           answerPaper.setAnswerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
           answerPaper.setPaperName(paper.getName());
           answerPaper.setType(paper.getType());
           answerPaper.setAnswerUser(username);
           answerPaper.setChecked("false");
           answerPaper.setFinished("false");

//保存答卷
           answerPaperService.saveAnswerPaper(answerPaper);

// TODO: 2017-04-17 保存试卷答卷
           PaperAnswerPaper paperAnswerPaper = new PaperAnswerPaper();
           paperAnswerPaper.setPaperId(paper.getId());
           paperAnswerPaper.setAnswerPaperId(answerPaperId);
           paperAnswerPaperService.save(paperAnswerPaper);

//新记录
           answerQuestion = new AnswerQuestion();
           //初始化信息
           answerQuestion.setId(answerQuestionId);
           answerQuestion.setTitle(question.getTitle());
           answerQuestion.setType(question.getType());
           answerQuestion.setNumber(question.getNumber());
           answerQuestion.setOptionA(question.getOptionA());
           answerQuestion.setOptionB(question.getOptionB());
           answerQuestion.setOptionC(question.getOptionC());
           answerQuestion.setOptionD(question.getOptionD());
           answerQuestion.setContent(question.getContent());
           answerQuestion.setScore(question.getScore());
           answerQuestion.setAnalysis(question.getAnalysis());
           answerQuestion.setAnswer(question.getAnswer());

answerPaperQuestion = new AnswerPaperQuestion();
           answerPaperQuestion.setAnswerPaperId(answerPaper.getId());
           answerPaperQuestion.setAnswerQuestionId(answerQuestionId);

//保存
           answerQuestionService.saveAnswerQuestion(answerQuestion);
           answerPaperQuestionService.saveAnswerPaperQuestion(answerPaperQuestion);

return new ResponseEntity<Object>(answerPaper, HttpStatus.OK);
       } else {
           answerQuestions = answerQuestionService.findByAnswerPaperId(answerPaper.getId());
           if(answerQuestions != null && answerQuestions.size() > 0) {
               int count = 0;
               AnswerQuestion existAnswerQuestion = null;
               for(AnswerQuestion question1 : answerQuestions) {
                   if (question1.getNumber().equals(question.getNumber())) {
                       count++;
                       existAnswerQuestion = question1;//保存当前存在的记录
                   }
               }
               //记录不存在
               if(count == 0) {
                   //新记录
                   answerQuestion = new AnswerQuestion();
                   answerPaperQuestion = new AnswerPaperQuestion();

answerQuestion = new AnswerQuestion();
                   //初始化信息
                   answerQuestion.setId(answerQuestionId);
                   answerQuestion.setTitle(question.getTitle());
                   answerQuestion.setType(question.getType());
                   answerQuestion.setNumber(question.getNumber());
                   answerQuestion.setOptionA(question.getOptionA());
                   answerQuestion.setOptionB(question.getOptionB());
                   answerQuestion.setOptionC(question.getOptionC());
                   answerQuestion.setOptionD(question.getOptionD());
                   answerQuestion.setContent(question.getContent());
                   answerQuestion.setScore(question.getScore());
                   answerQuestion.setAnalysis(question.getAnalysis());
                   answerQuestion.setAnswer(question.getAnswer());

answerPaperQuestion = new AnswerPaperQuestion();
                   answerPaperQuestion.setAnswerPaperId(answerPaper.getId());
                   answerPaperQuestion.setAnswerQuestionId(answerQuestionId);

//保存
                   answerQuestionService.saveAnswerQuestion(answerQuestion);
                   answerPaperQuestionService.saveAnswerPaperQuestion(answerPaperQuestion);
               } else {
                   //记录存在,则执行更新
                   // TODO: 2017/3/30
                   //更新当前存在的记录
                   existAnswerQuestion.setAnswer(question.getAnswer());

answerQuestionService.updateAnswerQuestion(existAnswerQuestion);
               }
           }
       }
       return new ResponseEntity<Object>(answerPaper, HttpStatus.OK);
   }
}

答卷控制层,用于获取已经提交的答卷:


/**
* 答卷控制层,用于获取已经提交的答卷
*/
@RestController
@RequestMapping("/v1/answer-papers")
public class AnswerPaperController {

@Autowired
   AnswerPaperService answerPaperService;

@Autowired
   AnswerQuestionService answerQuestionService;

/**
    * 根据ID查找
    * @param id
    * @return
    */
   @RequestMapping(value = "/{id}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public AnswerPaper getAnswerPaper(@PathVariable String id) {
       return answerPaperService.getAnswerPaperById(id);
   }

/**
    * 根据name查找
    * @param name
    * @return
    */
   @RequestMapping(value = "/name/{name}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public List<AnswerPaper> getAnswerPaperByName(@PathVariable String name) {
       return answerPaperService.getAnswerPaperFuzzy(name);
   }

/**
    * 根据答卷id和题目编号获取题目信息
    * @param paperId
    * @param number
    * @return
    */
   @RequestMapping(value = "/papers/{paperId}/questions/{number}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public AnswerQuestion getQuestionByPaperIdAndQuestionId(@PathVariable String paperId, @PathVariable Integer number) {
       AnswerQuestion answerQuestion = answerQuestionService.getAnswerQuestionByPaperIdAndQuestionNumber(paperId, number);
       return answerQuestion;
   }

/**
    * 已分页方式获取数据
    * @param username
    * @param pageIndex
    * @param pageSize
    * @param limit
    * @param offset
    * @return
    */
   @RequestMapping(value = "/users/{username}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public PageInfo<AnswerPaper> getListByUser(@PathVariable("username") String username,
                                              @RequestParam(required = false) Integer pageIndex,
                                              @RequestParam(required = false) Integer pageSize,
                                              @RequestParam(required = false) Integer limit,
                                              @RequestParam(required = false) Integer offset) {
       if(pageIndex != null && pageSize != null) {
           PageHelper.startPage(pageIndex, pageSize);
       }
       List<AnswerPaper> answerPapers = answerPaperService.getAnswerPaperListByAnswerUser(username);
       PageInfo pageInfo = new PageInfo(answerPapers);
       return pageInfo;
   }

@RequestMapping(value = "/users/{username}/type/{type}", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public PageInfo<AnswerPaper> getListByUserAndType(@PathVariable("username") String username,
                                               @PathVariable("type") String type,
                                               @RequestParam(required = false) Integer pageIndex,
                                               @RequestParam(required = false) Integer pageSize,
                                               @RequestParam(required = false) Integer limit,
                                               @RequestParam(required = false) Integer offset) {
       if(pageIndex != null && pageSize != null) {
           PageHelper.startPage(pageIndex, pageSize);
       }
       List<AnswerPaper> answerPapers = answerPaperService.getAnswerPaperListByAnswerUserAndType(username, type);
       PageInfo pageInfo = new PageInfo(answerPapers);
       return pageInfo;
   }

/**
    * 获取未批改或已批改的答卷数量,
    * @return
    */
   @RequestMapping("/check")
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public DtoTask countUnCheckAnswerPaper() {
       DtoTask dtoTask = new DtoTask();
       Integer checked = answerPaperService.countCheck("true");
       Integer unChecked = answerPaperService.countCheck("false");
       dtoTask.setChecked(checked);
       dtoTask.setUnChecked(unChecked);
       return dtoTask;
   }

/**
    * 以分页方式获取数据
    * @param pageIndex
    * @param pageSize
    * @param limit
    * @param offset
    * @return
    */
   @RequestMapping(value = "", method = RequestMethod.GET)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public PageInfo<AnswerPaper> getListByUser(@RequestParam(required = false) Integer pageIndex,
                                              @RequestParam(required = false) Integer pageSize,
                                              @RequestParam(required = false) Integer limit,
                                              @RequestParam(required = false) Integer offset) {
       if(pageIndex != null && pageSize != null) {
           PageHelper.startPage(pageIndex, pageSize);
       }
       List<AnswerPaper> answerPapers = answerPaperService.getAnswerPaperList();
       PageInfo pageInfo = new PageInfo(answerPapers);
       return pageInfo;
   }

/**
    * 更新
    * @param answerPaper
    * @return
    */
   @RequestMapping(value = "", method = RequestMethod.PUT)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public ResponseEntity<?> putPaper(@RequestBody AnswerPaper answerPaper) {
       answerPaperService.updatePaper(answerPaper);
       return new ResponseEntity(HttpStatus.OK);
   }

/**
    * 计算考试成绩
    * @param id
    * @return
    */
   @RequestMapping(value = "/{id}/calculate", method = RequestMethod.PUT)
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')")
   public ResponseEntity<?> CalculationScore(@PathVariable String id) {
       /**
        * 计算成绩
        */
       List<AnswerQuestion> questions = answerQuestionService.findByAnswerPaperId(id);
       if(questions != null && questions.size() > 0) {

int score = 0;
           try {
               for(AnswerQuestion question : questions) {
                   score += Integer.parseInt(question.getMarkScore());
               }
           } catch (Exception e) {
               // TODO: 2017/4/1
           }

/**
            * 保存成绩
            */

AnswerPaper answerPaper = new AnswerPaper();
           answerPaper.setId(id);
           answerPaper.setScore(Integer.toString(score));
           answerPaper.setChecked("true");
           answerPaperService.updatePaper(answerPaper);
       } else {
           // TODO: 2017/4/1
       }
       return new ResponseEntity<Object>(HttpStatus.OK);
   }

@RequestMapping(value = "/analysis/paper")
   @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')")
   public List<PaperAnalysis> analysisPaper() {
       return answerPaperService.analysisPaper();
   }
}

来源:https://blog.csdn.net/m0_59687645/article/details/121468608

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com