|
|
@ -138,6 +138,7 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
// 如果获取失败,则打印异常信息,并返回ResultVO对象,状态码为-1,提示信息为"获取问题详情失败",数据为null。
|
|
|
|
// 如果获取失败,则打印异常信息,并返回ResultVO对象,状态码为-1,提示信息为"获取问题详情失败",数据为null。
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
// 创建一个表示获取失败的ResultVO对象,状态码设置为 -1,表示获取操作失败,消息设置为"获取问题详情失败",数据部分设置为null
|
|
|
|
resultVO = new ResultVO<>(-1, "获取问题详情失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "获取问题详情失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 返回ResultVO对象。
|
|
|
|
// 返回ResultVO对象。
|
|
|
@ -199,24 +200,22 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
@PostMapping("/create")
|
|
|
|
@PostMapping("/create")
|
|
|
|
@ApiOperation("创建考试")
|
|
|
|
@ApiOperation("创建考试")
|
|
|
|
ResultVO<Exam> createExam(@RequestBody ExamCreateVo examCreateVo, HttpServletRequest request) {
|
|
|
|
ResultVO<Exam> createExam(@RequestBody ExamCreateVo examCreateVo, HttpServletRequest request) {
|
|
|
|
// 从前端传参数过来,在这里完成考试的入库。
|
|
|
|
// 定义一个ResultVO类型的变量,用于存放最终要返回给客户端的结果对象,其泛型参数指定为Exam,表示包含新创建考试相关信息的结果封装
|
|
|
|
ResultVO<Exam> resultVO;
|
|
|
|
ResultVO<Exam> resultVO;
|
|
|
|
// 获取当前用户的id。
|
|
|
|
// 从HttpServletRequest对象中获取用户ID信息,通常这个用户ID是在请求处理的前置环节(比如拦截器中)设置到请求属性中的,用于标识创建这个考试的用户是谁
|
|
|
|
String userId = (String) request.getAttribute("user_id");
|
|
|
|
String userId = (String) request.getAttribute("user_id");
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// 调用examService的create方法,将examCreateVo和userId作为参数传入,创建考试。
|
|
|
|
// 调用ExamService的create方法,将创建考试的视图对象(examCreateVo)和获取到的用户ID传递进去,由服务层实现将考试记录数据保存到数据库等具体的创建逻辑操作,返回创建好的Exam对象代表新创建的考试信息
|
|
|
|
Exam exam = examService.create(examCreateVo, userId);
|
|
|
|
Exam exam = examService.create(examCreateVo, userId);
|
|
|
|
// 创建一个ResultVO对象,将创建成功的考试信息返回。
|
|
|
|
// 如果创建成功,创建一个表示成功的ResultVO对象,状态码设置为0,表示创建操作成功,消息设置为"创建考试成功",并将创建好的考试对象放入ResultVO对象中返回给客户端
|
|
|
|
resultVO = new ResultVO<>(0, "创建考试成功", exam);
|
|
|
|
resultVO = new ResultVO<>(0, "创建考试成功", exam);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
// 捕获异常,打印异常信息,并创建一个ResultVO对象,将创建失败的考试信息返回。
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
// 如果在创建过程中出现异常,创建一个表示创建失败的ResultVO对象,状态码设置为 -1,表示创建操作失败,消息设置为"创建考试失败",数据部分设置为null
|
|
|
|
resultVO = new ResultVO<>(-1, "创建考试失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "创建考试失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 返回ResultVO对象。
|
|
|
|
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description: 使用examService.updateExam()获取数据,并将其包装在ResultVO对象中,用于更新考试
|
|
|
|
* @Description: 使用examService.updateExam()获取数据,并将其包装在ResultVO对象中,用于更新考试
|
|
|
|
* @param examVo 前端传过来的参数
|
|
|
|
* @param examVo 前端传过来的参数
|
|
|
@ -243,7 +242,6 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description: 获取考试列表,适配前端卡片列表
|
|
|
|
* @Description: 获取考试列表,适配前端卡片列表
|
|
|
|
* @return ResultVO<List<ExamCardVo>> 对象,包含考试列表卡片信息
|
|
|
|
* @return ResultVO<List<ExamCardVo>> 对象,包含考试列表卡片信息
|
|
|
@ -256,17 +254,16 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// 调用examService的getExamCardList方法获取考试列表卡片。
|
|
|
|
// 调用examService的getExamCardList方法获取考试列表卡片。
|
|
|
|
List<ExamCardVo> examCardVoList = examService.getExamCardList();
|
|
|
|
List<ExamCardVo> examCardVoList = examService.getExamCardList();
|
|
|
|
// 如果获取成功,则返回成功的结果。
|
|
|
|
// 如果获取数据成功,创建一个表示成功的ResultVO对象,状态码设置为0,表示获取考试列表卡片成功,消息设置为"获取考试列表卡片成功",并将获取到的考试卡片列表数据放入ResultVO对象中,以便返回给客户端进行展示。
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试列表卡片成功", examCardVoList);
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试列表卡片成功", examCardVoList);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
// 如果获取失败,则打印异常信息,并返回失败的结果。
|
|
|
|
// 如果获取失败,则打印异常信息,并返回失败的结果。
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
// 创建一个表示获取失败的ResultVO对象,状态码设置为 -1,表示获取考试列表卡片失败,消息可根据业务实际情况设置为相应的提示语,数据部分设置为null,因为没有成功获取到有效的考试卡片列表数据。
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试列表卡片失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试列表卡片失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 返回结果
|
|
|
|
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description: 根据考试的id,获取考试详情
|
|
|
|
* @Description: 根据考试的id,获取考试详情
|
|
|
|
* @param id 考试id
|
|
|
|
* @param id 考试id
|
|
|
@ -275,17 +272,19 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
@GetMapping("/detail/{id}")
|
|
|
|
@GetMapping("/detail/{id}")
|
|
|
|
@ApiOperation("根据考试的id,获取考试详情")
|
|
|
|
@ApiOperation("根据考试的id,获取考试详情")
|
|
|
|
ResultVO<ExamDetailVo> getExamDetail(@PathVariable String id) {
|
|
|
|
ResultVO<ExamDetailVo> getExamDetail(@PathVariable String id) {
|
|
|
|
// 根据id获取考试详情。
|
|
|
|
// 根据id获取考试详情,先定义一个用于存放最终要返回给客户端的ResultVO<ExamDetailVo>类型的结果对象,后续根据查询数据的情况进行赋值操作。
|
|
|
|
ResultVO<ExamDetailVo> resultVO;
|
|
|
|
ResultVO<ExamDetailVo> resultVO;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
|
|
|
|
// 调用ExamService的getExamDetail方法,将接收到的考卷唯一标识符(id)传递进去,由服务层实现从数据库或者其他数据源根据该ID查询对应考卷详细信息的逻辑,返回一个ExamDetailVo对象代表该考卷的所有详细信息。
|
|
|
|
ExamDetailVo examDetail = examService.getExamDetail(id);
|
|
|
|
ExamDetailVo examDetail = examService.getExamDetail(id);
|
|
|
|
|
|
|
|
// 如果获取详细信息成功,创建一个表示成功的ResultVO对象,状态码设置为0,表示获取考试详情成功,消息设置为"获取考试详情成功",并将获取到的考卷详细信息对象放入ResultVO对象中,以便返回给客户端进行展示。
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试详情成功", examDetail);
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试详情成功", examDetail);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
// 如果在获取考卷详细信息的过程中出现异常,创建一个表示获取失败的ResultVO对象,状态码设置为 -1,表示获取考试详情失败,消息可根据业务实际情况设置为相应的提示语,数据部分设置为null,因为没有成功获取到有效的考卷详细信息。
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试详情失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试详情失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description: 使用examService.finishExam获取数据,并将其包装在ResultVO对象中,用于考试判分
|
|
|
|
* @Description: 使用examService.finishExam获取数据,并将其包装在ResultVO对象中,用于考试判分
|
|
|
|
* @param examId 考试id
|
|
|
|
* @param examId 考试id
|
|
|
@ -295,25 +294,24 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
@PostMapping("/finish/{examId}")
|
|
|
|
@PostMapping("/finish/{examId}")
|
|
|
|
@ApiOperation("根据用户提交的答案对指定id的考试判分")
|
|
|
|
@ApiOperation("根据用户提交的答案对指定id的考试判分")
|
|
|
|
// 完成考试
|
|
|
|
|
|
|
|
ResultVO<ExamRecord> finishExam(@PathVariable String examId, @RequestBody HashMap<String, List<String>> answersMap, HttpServletRequest request) {
|
|
|
|
ResultVO<ExamRecord> finishExam(@PathVariable String examId, @RequestBody HashMap<String, List<String>> answersMap, HttpServletRequest request) {
|
|
|
|
// 定义返回结果。
|
|
|
|
// 定义一个用于存放结果的ResultVO<ExamRecord>类型的数据结构,后续根据评分操作的成功与否以及获取到的相关数据进行赋值,用于最终返回给客户端展示评分结果。
|
|
|
|
ResultVO<ExamRecord> resultVO;
|
|
|
|
ResultVO<ExamRecord> resultVO;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// 拦截器里设置上的用户id。
|
|
|
|
// 拦截器里设置上的用户id,从HttpServletRequest对象中获取用户ID属性值,该用户ID用于标识当前提交答案并进行评分的用户,是后续业务逻辑处理(如记录答题记录归属、判断是否有权限答题等)的重要依据。
|
|
|
|
String userId = (String) request.getAttribute("user_id");
|
|
|
|
String userId = (String) request.getAttribute("user_id");
|
|
|
|
// 下面根据用户提交的信息进行判分,返回用户的得分情况。
|
|
|
|
// 下面根据用户提交的信息进行判分,返回用户的得分情况,调用ExamService的judge方法,传入获取到的用户ID、考试唯一标识符(examId)以及用户提交的答案集合(answersMap),由服务层实现具体的评分逻辑,比如对比答案、计算得分等操作,并返回一个ExamRecord对象,包含了评分后的成绩记录等详细信息。
|
|
|
|
ExamRecord examRecord = examService.judge(userId, examId, answersMap);
|
|
|
|
ExamRecord examRecord = examService.judge(userId, examId, answersMap);
|
|
|
|
// 返回结果。
|
|
|
|
// 封装成绩记录到最终结果中,创建一个表示评分成功的ResultVO对象,状态码设置为0,表示考卷提交(评分)成功,消息设置为"考卷提交成功",并将包含成绩记录的ExamRecord对象放入ResultVO对象中,以便返回给客户端展示评分结果。
|
|
|
|
resultVO = new ResultVO<>(0, "考卷提交成功", examRecord);
|
|
|
|
resultVO = new ResultVO<>(0, "考卷提交成功", examRecord);// 封装成绩记录到最终结果中
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
// 如果在评分过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是答案解析出错还是其他业务逻辑环节出现的错误导致评分失败。
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
// 返回错误结果。
|
|
|
|
// 创建一个表示评分失败的ResultVO对象,状态码设置为 -1,表示考卷提交(评分)失败,消息可根据业务实际情况设置为相应的提示语,数据部分设置为null,因为没有成功获取到有效的评分成绩记录。
|
|
|
|
resultVO = new ResultVO<>(-1, "考卷提交失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "考卷提交失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description: 使用examService.getExamRecordList获取数据,并将其包装在ResultVO对象中,用于获取当前用户的考试记录
|
|
|
|
* @Description: 使用examService.getExamRecordList获取数据,并将其包装在ResultVO对象中,用于获取当前用户的考试记录
|
|
|
|
* @param request 获取用户id
|
|
|
|
* @param request 获取用户id
|
|
|
@ -321,22 +319,24 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
@GetMapping("/record/list")
|
|
|
|
@GetMapping("/record/list")
|
|
|
|
@ApiOperation("获取当前用户的考试记录")
|
|
|
|
@ApiOperation("获取当前用户的考试记录")
|
|
|
|
// 获取考试记录列表。
|
|
|
|
|
|
|
|
ResultVO<List<ExamRecordVo>> getExamRecordList(HttpServletRequest request) {
|
|
|
|
ResultVO<List<ExamRecordVo>> getExamRecordList(HttpServletRequest request) {
|
|
|
|
|
|
|
|
// 定义一个用于存放结果的ResultVO<List<ExamRecordVo>>类型的数据结构,后续根据查询用户考试记录操作的成功与否以及获取到的相关数据进行赋值,用于最终返回给客户端展示查询结果。
|
|
|
|
ResultVO<List<ExamRecordVo>> resultVO;
|
|
|
|
ResultVO<List<ExamRecordVo>> resultVO;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// 拦截器里设置上的用户id。
|
|
|
|
// 拦截器里设置上的用户id,从HttpServletRequest对象中获取用户ID属性值,该用户ID用于明确要查询其考试记录的目标用户,是服务层准确获取对应数据的关键依据。
|
|
|
|
String userId = (String) request.getAttribute("user_id");
|
|
|
|
String userId = (String) request.getAttribute("user_id");
|
|
|
|
// 下面根据用户账号拿到他(她所有的考试信息),注意要用VO封装下。
|
|
|
|
// 下面根据用户账号拿到他(她)所有的考试信息,注意要用VO封装下,调用ExamService的getExamRecordList方法,传入获取到的用户ID,由服务层实现从数据库或者其他数据源获取该用户所有历史考试记录数据的逻辑,并将其整理封装成List<ExamRecordVo>类型的列表返回,每个ExamRecordVo对象包含了如时间、得分等详细信息。
|
|
|
|
List<ExamRecordVo> examRecordVoList = examService.getExamRecordList(userId);
|
|
|
|
List<ExamRecordVo> examRecordVoList = examService.getExamRecordList(userId);
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试记录成功", examRecordVoList);
|
|
|
|
// 封装查询得到的信息到最终结果中,创建一个表示获取成功的ResultVO对象,状态码设置为0,表示获取考试记录成功,消息设置为"获取考试记录成功",并将获取到的用户考试记录列表数据放入ResultVO对象中,以便返回给客户端展示历史考试记录情况。
|
|
|
|
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试记录成功", examRecordVoList);//封装查询得到的信息到最终结果中;
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
// 如果在获取用户考试记录数据的过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是数据源查询出错还是数据封装等环节出现的错误导致获取失败。
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
// 创建一个表示获取失败的ResultVO对象,状态码设置为 -1,表示获取考试记录失败,消息可根据业务实际情况设置为相应的提示语,数据部分设置为null,因为没有成功获取到有效的用户考试记录数据。
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试记录失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试记录失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;//返回封装好的 数据结构
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @Description: 使用examService.getExamRecordDetail获取数据,并将其包装在ResultVO对象中,用于获取指定id的考试记录详情
|
|
|
|
* @Description: 使用examService.getExamRecordDetail获取数据,并将其包装在ResultVO对象中,用于获取指定id的考试记录详情
|
|
|
|
* @param recordId 考试记录id
|
|
|
|
* @param recordId 考试记录id
|
|
|
@ -345,20 +345,24 @@ ResultVO<QuestionSelectionVo> getSelections() {
|
|
|
|
@GetMapping("/record/detail/{recordId}")
|
|
|
|
@GetMapping("/record/detail/{recordId}")
|
|
|
|
@ApiOperation("根据考试记录id获取考试记录详情")
|
|
|
|
@ApiOperation("根据考试记录id获取考试记录详情")
|
|
|
|
ResultVO<RecordDetailVo> getExamRecordDetail(@PathVariable String recordId) {
|
|
|
|
ResultVO<RecordDetailVo> getExamRecordDetail(@PathVariable String recordId) {
|
|
|
|
// 定义返回结果。
|
|
|
|
// 定义一个用于存放结果的ResultVO<RecordDetailVo>类型的数据结构,后续根据查询测验详细情况操作的成功与否以及获取到的相关数据进行赋值,用于最终返回给客户端展示查询结果。
|
|
|
|
ResultVO<RecordDetailVo> resultVO;
|
|
|
|
ResultVO<RecordDetailVo> resultVO;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// 调用examService获取考试记录详情。
|
|
|
|
// 调用ExamService的getRecordDetail方法,将接收到的测验记录唯一标识符(recordId)传递进去,由服务层实现从数据库或者其他数据源根据该ID查询对应测验详细信息的逻辑,返回一个RecordDetailVo对象代表该次测验的所有详细信息。
|
|
|
|
RecordDetailVo recordDetailVo = examService.getRecordDetail(recordId);
|
|
|
|
RecordDetailVo recordDetailVo = examService.getRecordDetail(recordId);
|
|
|
|
// 返回成功结果。
|
|
|
|
// 封装查询得到的信息到最终结果中,创建一个表示获取成功的ResultVO对象,状态码设置为0,表示获取考试记录详情成功,消息设置为"获取考试记录详情成功",并将获取到的测验详细信息对象放入ResultVO对象中,以便返回给客户端展示该次测验的详细情况。
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试记录详情成功", recordDetailVo);
|
|
|
|
resultVO = new ResultVO<>(0, "获取考试记录详情成功", recordDetailVo);//封装查询得到的信息到最终结果中;
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
// 打印异常信息。
|
|
|
|
// 如果在获取测验详细信息的过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是数据源查询出错还是数据解析等环节出现的错误导致获取失败。
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
// 返回失败结果。
|
|
|
|
// 创建一个ResultVO对象,表示操作失败
|
|
|
|
|
|
|
|
// 状态码设置为-1,表示获取考试记录详情失败
|
|
|
|
|
|
|
|
// 消息设置为"获取考试记录详情失败"
|
|
|
|
|
|
|
|
// 由于查询失败,详细信息对象设置为null
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试记录详情失败", null);
|
|
|
|
resultVO = new ResultVO<>(-1, "获取考试记录详情失败", null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 返回结果。
|
|
|
|
// 返回封装好的ResultVO对象给客户端
|
|
|
|
|
|
|
|
// 客户端可以根据状态码和消息判断操作是否成功,并根据详细信息对象获取测验的详细记录信息
|
|
|
|
return resultVO;
|
|
|
|
return resultVO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|