Default Changelist

feature/qzw
秦泽旺 1 month ago
parent 1735a3d5d2
commit f3a8d9490b

@ -5,139 +5,181 @@
* @email : liangshanguang2@gmail.com
***********************************************************/
package lsgwr.exam.controller;
// 导入考试相关的实体类,用于在控制器中处理和传递对应的业务数据,比如考试信息、考试记录信息等
import lsgwr.exam.entity.Exam;
import lsgwr.exam.entity.ExamRecord;
import lsgwr.exam.service.ExamService;//导入考试的一些包
// 导入考试业务逻辑层的服务类,通过它可以调用具体的业务方法来实现诸如获取考试数据、更新考试等操作
import lsgwr.exam.service.ExamService;
// 导入Swagger相关注解用于生成API文档Api注解用于给一组API接口定义一个标签方便文档中分类展示
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;//Swagger注解
import lsgwr.exam.vo.*;// 引入所有视图对象VO
import org.springframework.beans.BeanUtils;// Bean 属性拷贝工具类
// ApiOperation注解用于描述单个API接口的具体功能在API文档中展示接口的详细说明
import io.swagger.annotations.ApiOperation;
// 导入所有视图对象VO视图对象通常是用于在不同层之间传递数据的载体会根据前端展示需求对实体数据进行适当封装和整理
import lsgwr.exam.vo.*;
// 导入Spring框架提供的Bean属性拷贝工具类方便在不同的Java对象之间进行属性值的复制操作
import org.springframework.beans.BeanUtils;
// 导入Spring框架的依赖注入注解用于自动装配相关的Bean实例到类的成员变量中
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;//添加注解
import javax.servlet.http.HttpServletRequest;// HTTP 请求对象
// 导入Spring Web中用于处理HTTP请求的各种注解例如定义请求方法、请求路径、路径变量、请求体等相关的注解
import org.springframework.web.bind.annotation.*;
// 导入Java中处理HTTP请求的类在这个控制器中可以通过它获取请求相关的信息比如请求头中的用户标识等信息
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
// 控制器注解,表示这是一个 RESTful 控制器
// @RestController注解表明这个类是一个Spring RESTful风格的Web控制器它结合了@Controller和@ResponseBody注解的功能意味着该类中处理请求的方法默认会将返回值直接转换为JSON等格式响应给客户端
@RestController
@Api(tags = "Exam APIs")// 为 Swagger 文档定义标签用于分组API接口
@RequestMapping("/api/exam")// 定义基础路径为 /api/exam 的请求映射
// @Api注解为Swagger文档定义标签这里将这个控制器下的所有API接口归为"Exam APIs"这一组便于在Swagger生成的API文档里进行分类查看和管理
@Api(tags = "Exam APIs")
// @RequestMapping注解用于定义该控制器中所有接口的基础请求路径即这个控制器下所有接口的请求URL都将以 "/api/exam" 开头
@RequestMapping("/api/exam")
public class ExamController {
// 使用@Autowired注解进行依赖注入让Spring容器自动将ExamService的实例注入到这个成员变量中方便后续在控制器的方法里调用其业务方法
@Autowired
private ExamService examService;// 自动注入 ExamService 服务
/**
*
*
* HTTPGET访 "/api/exam/question/all"
*/
@GetMapping("/question/all")
@ApiOperation("获取所有问题的列表")
ResultVO<List<QuestionVo>> getQuestionAll() {
// 定义一个ResultVO类型的变量用于存放最终要返回给客户端的结果对象其泛型参数指定为List<QuestionVo>,表示包含问题列表数据的结果封装
ResultVO<List<QuestionVo>> resultVO;
try {
List<QuestionVo> questionAll = examService.getQuestionAll();// 调用服务层获取所有问题
resultVO = new ResultVO<>(0, "获取全部问题列表成功", questionAll);// 返回成功结果
// 调用ExamService的getQuestionAll方法该方法应该在服务层实现从数据库或者其他数据源获取所有问题数据的逻辑返回一个QuestionVo类型的列表代表所有问题信息
List<QuestionVo> questionAll = examService.getQuestionAll();
// 如果获取数据成功创建一个表示成功的ResultVO对象其中状态码设置为0表示操作成功消息设置为"获取全部问题列表成功"并将获取到的问题列表数据放入ResultVO对象中
resultVO = new ResultVO<>(0, "获取全部问题列表成功", questionAll);
} catch (Exception e) {
// 如果在获取数据过程中出现异常,打印异常堆栈信息,方便后续排查问题,通常在开发和调试阶段查看具体出错原因
e.printStackTrace();
// 创建一个表示失败的ResultVO对象状态码设置为 -1表示操作失败消息设置为"获取全部问题列表失败"数据部分设置为null因为没有成功获取到问题列表数据
resultVO = new ResultVO<>(-1, "获取全部问题列表失败", null);// 返回失败结果
}
return resultVO;
}
/**
*
*
* HTTPPOST "/api/exam/question/update"QuestionVo
*/
@PostMapping("/question/update")
@ApiOperation("更新问题")
ResultVO<QuestionVo> questionUpdate(@RequestBody QuestionVo questionVo) {
// 完成问题的更新
// 打印接收到的要更新的问题对象信息,在开发调试阶段可以通过查看控制台输出来确认前端传递过来的数据是否符合预期,方便排查问题
System.out.println(questionVo);// 打印接收到的问题信息以供调试
try {
QuestionVo questionVoResult = examService.updateQuestion(questionVo);// 调用服务层更新问题
return new ResultVO<>(0, "更新问题成功", questionVoResult);// 返回成功结果
// 调用ExamService的updateQuestion方法将接收到的要更新的问题对象questionVo传递进去由服务层实现具体的更新逻辑比如更新数据库中对应的问题记录等操作返回更新后的问题对象
QuestionVo questionVoResult = examService.updateQuestion(questionVo);
// 如果更新成功创建一个表示成功的ResultVO对象状态码设置为0表示更新操作成功消息设置为"更新问题成功"并将更新后的问题对象放入ResultVO对象中返回给客户端
return new ResultVO<>(0, "更新问题成功", questionVoResult);
} catch (Exception e) {
// 如果在更新过程中出现异常,打印异常堆栈信息,便于查找问题所在
e.printStackTrace();
return new ResultVO<>(-1, "更新问题失败", null);// 返回失败结果
// 创建一个表示更新失败的ResultVO对象状态码设置为 -1表示更新操作失败消息设置为"更新问题失败"数据部分设置为null因为没有成功完成更新操作
return new ResultVO<>(-1, "更新问题失败", null);
}
}
/**
*
*
* HTTPPOST "/api/exam/question/create"QuestionCreateSimplifyVoHttpServletRequest
*/
@PostMapping("/question/create")
@ApiOperation("创建问题")
ResultVO<String> questionCreate(@RequestBody QuestionCreateSimplifyVo questionCreateSimplifyVo, HttpServletRequest request) {
// 创建一个QuestionCreateVo对象用于组装完整的创建问题所需的数据可能QuestionCreateSimplifyVo只是包含了部分必要信息需要进一步完善才能用于创建操作
QuestionCreateVo questionCreateVo = new QuestionCreateVo();
// 把能拷贝过来的属性都拷贝过来
// 使用Spring的BeanUtils工具类将questionCreateSimplifyVo对象中的属性值拷贝到questionCreateVo对象中这样可以方便地复用已有的部分数据避免重复设置属性
BeanUtils.copyProperties(questionCreateSimplifyVo, questionCreateVo);// 拷贝属性到新的对象
// 设置创建者信息
// 从HttpServletRequest对象中获取用户ID信息通常这个用户ID是在请求处理的前置环节比如拦截器中设置到请求属性中的用于标识创建这个问题的用户是谁
String userId = (String) request.getAttribute("user_id");// 从请求中获取用户ID
questionCreateVo.setQuestionCreatorId(userId);// 设置创建者ID
// 将获取到的用户ID设置到questionCreateVo对象中作为问题创建者的标识以便在后续保存问题数据到数据库等操作中记录创建者信息
questionCreateVo.setQuestionCreatorId(userId);
System.out.println(questionCreateVo);
try {
examService.questionCreate(questionCreateVo);// 调用服务层创建新问题
// 调用ExamService的questionCreate方法将组装好的questionCreateVo对象传递进去由服务层实现将新问题数据保存到数据库等具体的创建逻辑操作
examService.questionCreate(questionCreateVo);
// 如果创建成功创建一个表示成功的ResultVO对象状态码设置为0表示创建操作成功消息设置为"问题创建成功"这里数据部分设置为null具体根据业务需求而定可能创建成功不需要返回具体的数据内容
return new ResultVO<>(0, "问题创建成功", null);// 返回成功结果
} catch (Exception e) {
// 如果在创建过程中出现异常,打印异常堆栈信息,方便排查问题原因
e.printStackTrace();
return new ResultVO<>(-1, "创建问题失败", null);// 返回失败结果
// 创建一个表示创建失败的ResultVO对象状态码设置为 -1表示创建操作失败消息设置为"创建问题失败"数据部分设置为null
return new ResultVO<>(-1, "创建问题失败", null);
}
}
/**
*
*
* HTTPGET访 "/api/exam/question/selection"
*/
@GetMapping("/question/selection")
@ApiOperation("获取问题分类的相关选项")
ResultVO<QuestionSelectionVo> getSelections() {
// 调用ExamService的getSelections方法该方法在服务层应该实现从数据库或者其他数据源获取问题分类相关选项数据的逻辑返回一个QuestionSelectionVo对象代表分类选项信息
QuestionSelectionVo questionSelectionVo = examService.getSelections();
if (questionSelectionVo != null) {
return new ResultVO<>(0, "获取问题分类选项成功", questionSelectionVo);// 成功返回分类选项
// 如果获取到的问题分类选项对象不为空说明获取操作成功创建一个表示成功的ResultVO对象状态码设置为0表示获取成功消息设置为"获取问题分类选项成功"并将获取到的分类选项对象放入ResultVO对象中返回给客户端
return new ResultVO<>(0, "获取问题分类选项成功", questionSelectionVo);
} else {
// 如果获取到的问题分类选项对象为空说明获取操作失败创建一个表示失败的ResultVO对象状态码设置为 -1表示获取失败消息设置为"获取问题分类选项失败"数据部分设置为null
return new ResultVO<>(-1, "获取问题分类选项失败", null);// 分类选项为空时返回失败信息
}
}
/**
* ID
* ID
* HTTPGETID "/api/exam/question/detail/{id}"{id}ID
*/
@GetMapping("/question/detail/{id}")
@ApiOperation("根据问题的id获取问题的详细信息")
ResultVO<QuestionDetailVo> getQuestionDetail(@PathVariable String id) {
// 根据问题id获取问题的详细信息
System.out.println(id);// 打印出请求的问题ID便于调试和日志记录
// 打印出请求的问题ID信息在开发调试阶段可以通过查看控制台输出来确认请求的参数是否正确传递过来方便排查问题以及记录请求日志
System.out.println(id);
ResultVO<QuestionDetailVo> resultVO;
try {
// 调用ExamService的getQuestionDetail方法将接收到的问题ID传递进去由服务层实现从数据库或者其他数据源根据ID查询对应问题详细信息的逻辑返回一个QuestionDetailVo对象代表问题详细信息
QuestionDetailVo questionDetailVo = examService.getQuestionDetail(id);
resultVO = new ResultVO<>(0, "获取问题详情成功", questionDetailVo);// 构造成功响应对象状态码为0表示成功
// 如果获取详细信息成功创建一个表示成功的ResultVO对象状态码设置为0表示获取操作成功消息设置为"获取问题详情成功"并将获取到的问题详细信息对象放入ResultVO对象中
resultVO = new ResultVO<>(0, "获取问题详情成功", questionDetailVo);
} catch (Exception e) {
e.printStackTrace();// 打印异常堆栈以供调试
resultVO = new ResultVO<>(-1, "获取问题详情失败", null);// 构造失败响应对象,状态码为-1表示失败
// 如果在获取详细信息过程中出现异常,打印异常堆栈信息,便于查找问题原因
e.printStackTrace();
// 创建一个表示获取失败的ResultVO对象状态码设置为 -1表示获取操作失败消息设置为"获取问题详情失败"数据部分设置为null
resultVO = new ResultVO<>(-1, "获取问题详情失败", null);
}
return resultVO;// 返回结果对象
}
/**
*
*
* HTTPGET访 "/api/exam/all"
*/
@GetMapping("/all")
@ApiOperation("获取全部考试的列表")
ResultVO<List<ExamVo>> getExamAll() {
// 需要拼接前端需要的考试列表对象s
// 定义一个ResultVO类型的变量用于存放最终要返回给客户端的结果对象其泛型参数指定为List<ExamVo>,表示包含考试列表数据的结果封装
ResultVO<List<ExamVo>> resultVO;
try {
List<ExamVo> examVos = examService.getExamAll(); // 调用服务层获取所有考试信息
resultVO = new ResultVO<>(0, "获取全部考试的列表成功", examVos);// 构造成功响应对象状态码为0表示成功
// 调用ExamService的getExamAll方法该方法应该在服务层实现从数据库或者其他数据源获取所有考试数据的逻辑返回一个ExamVo类型的列表代表所有考试信息
List<ExamVo> examVos = examService.getExamAll();
// 如果获取数据成功创建一个表示成功的ResultVO对象状态码设置为0表示操作成功消息设置为"获取全部考试的列表成功"并将获取到的考试列表数据放入ResultVO对象中
resultVO = new ResultVO<>(0, "获取全部考试的列表成功", examVos);
} catch (Exception e) {
e.printStackTrace();// 打印异常堆栈以供调试
resultVO = new ResultVO<>(-1, "获取全部考试的列表失败", null);// 构造失败响应对象,状态码为-1表示失败
// 如果在获取数据过程中出现异常,打印异常堆栈信息,方便后续排查问题
e.printStackTrace();
// 创建一个表示失败的ResultVO对象状态码设置为 -1表示操作失败消息设置为"获取全部考试的列表失败"数据部分设置为null因为没有成功获取到考试列表数据
resultVO = new ResultVO<>(-1, "获取全部考试的列表失败", null);
}
return resultVO;// 返回结果对象
}
/**
*
*
* @return ResultVO
*
* HTTPGET访 "/api/exam/question/type/list"
*/
@GetMapping("/question/type/list")
@ApiOperation("获取问题列表,按照单选、多选和判断题分类返回")
ResultVO<ExamQuestionTypeVo> getExamQuestionTypeList() {
// 获取问题的分类列表
// 定义一个ResultVO类型的变量用于存放最终要返回给客户端的结果对象其泛型参数指定为ExamQuestionTypeVo用于封装按照特定分类方式整理后的问题列表相关信息
ResultVO<ExamQuestionTypeVo> resultVO;
try {
// 调用ExamService的getExamQuestionType方法该方法在服务层应该实现从数据库或者其他数据源获取并整理按照单选、多选和判断题分类后的问题列表数据的逻辑返回一个ExamQuestionTypeVo对象
ExamQuestionTypeVo examQuestionTypeVo = examService.getExamQuestionType();
resultVO = new ResultVO<>(0, "获取问题列表成功", examQuestionTypeVo);
} catch (Exception e) {
@ -147,152 +189,193 @@ public class ExamController {
return resultVO;
}
/**
*
*
* @param examCreateVo
* @param request HTTP ID
* @return Result VO
*
* HTTPPOST "/api/exam/create"ExamCreateVoHttpServletRequestID
*/
@PostMapping("/create")
@ApiOperation("创建考试")
ResultVO<Exam> createExam(@RequestBody ExamCreateVo examCreateVo, HttpServletRequest request) {
// 从前端传参数过来,在这里完成考试的入库
// 定义一个ResultVO类型的变量用于存放最终要返回给客户端的结果对象其泛型参数指定为Exam表示包含新创建考试相关信息的结果封装
ResultVO<Exam> resultVO;
// 从HttpServletRequest对象中获取用户ID信息通常这个用户ID是在请求处理的前置环节比如拦截器中设置到请求属性中的用于标识创建这个考试的用户是谁
String userId = (String) request.getAttribute("user_id");
try {
// 调用ExamService的create方法将创建考试的视图对象examCreateVo和获取到的用户ID传递进去由服务层实现将考试记录数据保存到数据库等具体的创建逻辑操作返回创建好的Exam对象代表新创建的考试信息
Exam exam = examService.create(examCreateVo, userId);
// 如果创建成功创建一个表示成功的ResultVO对象状态码设置为0表示创建操作成功消息设置为"创建考试成功"并将创建好的考试对象放入ResultVO对象中返回给客户端
resultVO = new ResultVO<>(0, "创建考试成功", exam);
} catch (Exception e) {
e.printStackTrace();
// 如果在创建过程中出现异常创建一个表示创建失败的ResultVO对象状态码设置为 -1表示创建操作失败消息设置为"创建考试失败"数据部分设置为null
resultVO = new ResultVO<>(-1, "创建考试失败", null);
}
return resultVO;
}
/**
*
* HTTP
* ResultVO
*
* @param examVo
* @param request HTTP ID
* @return
* @param examVo
* @param request HTTPID
* @return ResultVO<Exam>ResultVOExam
*/
@PostMapping("/update")
@ApiOperation("更新考试")
ResultVO<Exam> updateExam(@RequestBody ExamVo examVo, HttpServletRequest request) {
// 从前端传参数过来,在这里完成考试的入库
// 从前端传参数过来,在这里完成考试的入库此处先定义一个用于存放最终要返回给客户端的ResultVO<Exam>类型的结果对象,后续根据操作成功与否进行赋值。
ResultVO<Exam> resultVO;
// 从HttpServletRequest对象中获取用户ID属性值该用户ID用于标识当前执行更新考试操作的用户是后续业务逻辑判断如权限校验、操作记录等的重要依据。
String userId = (String) request.getAttribute("user_id");
try {
// 调用ExamService的update方法传入包含更新数据的examVo视图对象以及获取到的用户ID由服务层去实现具体更新数据库中对应考试记录的逻辑比如根据传入数据修改相应字段等操作并返回更新后的Exam对象包含最新的考试信息
Exam exam = examService.update(examVo, userId);
// 如果更新操作成功创建一个表示成功的ResultVO对象状态码设置为0表示更新考试成功消息设置为"更新考试成功"并将更新后的考试对象放入ResultVO对象中用于返回给客户端展示最新的考试信息。
resultVO = new ResultVO<>(0, "更新考试成功", exam);
} catch (Exception e) {
// 如果在更新考试信息的过程中出现异常,打印异常堆栈信息,方便开发人员后续排查问题,定位是哪里出现的错误导致更新失败。
e.printStackTrace();
// 创建一个表示更新失败的ResultVO对象状态码设置为 -1表示更新考试失败消息可根据业务实际情况默认为"更新考试失败"之类的提示信息数据部分设置为null因为没有成功获取到更新后的有效考试信息。
resultVO = new ResultVO<>(-1, "更新考试失败", null);
}
return resultVO;
}
/**
*
*
* HTTPGETResultVO<List<ExamCardVo>>
* ResultVO
*
* @return Resultsvo
* @returnResultVOResultVOList<ExamCardVo>ExamCardVo
*/
@GetMapping("/card/list")
@ApiOperation("获取考试列表,适配前端卡片列表")
ResultVO<List<ExamCardVo>> getExamCardList() {
// 获取考试列表卡片
// 获取考试列表卡片先定义一个用于存放最终要返回给客户端的ResultVO<List<ExamCardVo>>类型的结果对象,后续根据获取数据的情况进行赋值操作。
ResultVO<List<ExamCardVo>> resultVO;
try {
// 调用ExamService的getExamCardList方法由服务层实现从数据库或者其他数据源获取并整理适合前端以卡片形式展示的考试列表数据的逻辑返回一个List<ExamCardVo>类型的列表,代表所有考试的卡片信息。
List<ExamCardVo> examCardVoList = examService.getExamCardList();
// 如果获取数据成功创建一个表示成功的ResultVO对象状态码设置为0表示获取考试列表卡片成功消息设置为"获取考试列表卡片成功"并将获取到的考试卡片列表数据放入ResultVO对象中以便返回给客户端进行展示。
resultVO = new ResultVO<>(0, "获取考试列表卡片成功", examCardVoList);
} catch (Exception e) {
// 如果在获取考试卡片列表数据的过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是数据源连接问题还是数据查询等环节出现的错误导致获取失败。
e.printStackTrace();
// 创建一个表示获取失败的ResultVO对象状态码设置为 -1表示获取考试列表卡片失败消息可根据业务实际情况设置为相应的提示语数据部分设置为null因为没有成功获取到有效的考试卡片列表数据。
resultVO = new ResultVO<>(-1, "获取考试列表卡片失败", null);
}
return resultVO;
}
/**
* ID
* HTTPGETResultVO<ExamDetailVo>
* ResultVO
*
* @param id
* @return Resultsvo
* @param id
* @return ResultVOResultVOExamDetailVo
*/
@GetMapping("/detail/{id}")
@ApiOperation("根据考试的id获取考试详情")
ResultVO<ExamDetailVo> getExamDetail(@PathVariable String id) {
// 根据id获取考试详情
// 根据id获取考试详情先定义一个用于存放最终要返回给客户端的ResultVO<ExamDetailVo>类型的结果对象,后续根据查询数据的情况进行赋值操作。
ResultVO<ExamDetailVo> resultVO;
try {
// 调用ExamService的getExamDetail方法将接收到的考卷唯一标识符id传递进去由服务层实现从数据库或者其他数据源根据该ID查询对应考卷详细信息的逻辑返回一个ExamDetailVo对象代表该考卷的所有详细信息。
ExamDetailVo examDetail = examService.getExamDetail(id);
// 如果获取详细信息成功创建一个表示成功的ResultVO对象状态码设置为0表示获取考试详情成功消息设置为"获取考试详情成功"并将获取到的考卷详细信息对象放入ResultVO对象中以便返回给客户端进行展示。
resultVO = new ResultVO<>(0, "获取考试详情成功", examDetail);
} catch (Exception e) {
// 如果在获取考卷详细信息的过程中出现异常创建一个表示获取失败的ResultVO对象状态码设置为 -1表示获取考试详情失败消息可根据业务实际情况设置为相应的提示语数据部分设置为null因为没有成功获取到有效的考卷详细信息。
resultVO = new ResultVO<>(-1, "获取考试详情失败", null);
}
return resultVO;
}
/**
* &nbsp;&nbsp;*
*&nbsp;@param&nbsp;examId&nbsp; &nbsp;&nbsp;*
*&nbsp;@param&nbsp;answersMap &nbsp;&nbsp;*
*&nbsp;@param request ID HTTP &nbsp;&nbsp;&nbsp; *
*&nbsp;@return &nbsp;&nbsp;&nbsp; *
*
* HTTP
* ResultVO<ExamRecord>ResultVO
*
* @param examId
* @param answersMap HashMap<String, List<String>>
* @param request IDHTTP便
* @return ResultVO<ExamRecord>ExamRecord
*/
@PostMapping("/finish/{examId}")
@ApiOperation("根据用户提交的答案对指定id的考试判分")
ResultVO<ExamRecord> finishExam(@PathVariable String examId, @RequestBody HashMap<String, List<String>> answersMap, HttpServletRequest request) {
ResultVO<ExamRecord> resultVO;// 定义一个用于存放结果的数据结构
// 定义一个用于存放结果的ResultVO<ExamRecord>类型的数据结构,后续根据评分操作的成功与否以及获取到的相关数据进行赋值,用于最终返回给客户端展示评分结果。
ResultVO<ExamRecord> resultVO;
try {
// 拦截器里设置上的用户id
// 拦截器里设置上的用户id从HttpServletRequest对象中获取用户ID属性值该用户ID用于标识当前提交答案并进行评分的用户是后续业务逻辑处理如记录答题记录归属、判断是否有权限答题等的重要依据。
String userId = (String) request.getAttribute("user_id");
// 下面根据用户提交的信息进行判分,返回用户的得分情况
// 下面根据用户提交的信息进行判分返回用户的得分情况调用ExamService的judge方法传入获取到的用户ID、考试唯一标识符examId以及用户提交的答案集合answersMap由服务层实现具体的评分逻辑比如对比答案、计算得分等操作并返回一个ExamRecord对象包含了评分后的成绩记录等详细信息。
ExamRecord examRecord = examService.judge(userId, examId, answersMap);
// 封装成绩记录到最终结果中创建一个表示评分成功的ResultVO对象状态码设置为0表示考卷提交评分成功消息设置为"考卷提交成功"并将包含成绩记录的ExamRecord对象放入ResultVO对象中以便返回给客户端展示评分结果。
resultVO = new ResultVO<>(0, "考卷提交成功", examRecord);// 封装成绩记录到最终结果中
} catch (Exception e) {
// 如果在评分过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是答案解析出错还是其他业务逻辑环节出现的错误导致评分失败。
e.printStackTrace();
// 创建一个表示评分失败的ResultVO对象状态码设置为 -1表示考卷提交评分失败消息可根据业务实际情况设置为相应的提示语数据部分设置为null因为没有成功获取到有效的评分成绩记录。
resultVO = new ResultVO<>(-1, "考卷提交失败", null);
}
return resultVO;
}
/**
* &nbsp;&nbsp;&nbsp; *
*&nbsp; &nbsp; *@ param request ID &nbsp;&nbsp;&nbsp; *
*&nbsp; &nbsp; *@ return Resultsvo &nbsp;&nbsp;&nbsp;&nbsp; *
*
* HTTPGETResultVO<List<ExamRecordVo>>
* ResultVO
*
* @param request ID便
* @return ResultVOResultVOList<ExamRecordVo>ExamRecordVo
*/
@GetMapping("/record/list")
@ApiOperation("获取当前用户的考试记录")
ResultVO<List<ExamRecordVo>> getExamRecordList(HttpServletRequest request) {
ResultVO<List<ExamRecordVo>> resultVO;//定义一个用于存放结果的数据结构
// 定义一个用于存放结果的ResultVO<List<ExamRecordVo>>类型的数据结构,后续根据查询用户考试记录操作的成功与否以及获取到的相关数据进行赋值,用于最终返回给客户端展示查询结果。
ResultVO<List<ExamRecordVo>> resultVO;
try {
// 拦截器里设置上的用户id
// 拦截器里设置上的用户id从HttpServletRequest对象中获取用户ID属性值该用户ID用于明确要查询其考试记录的目标用户是服务层准确获取对应数据的关键依据。
String userId = (String) request.getAttribute("user_id");
// 下面根据用户账号拿到他(她所有的考试信息)注意要用VO封装下
// 下面根据用户账号拿到他所有的考试信息注意要用VO封装下调用ExamService的getExamRecordList方法传入获取到的用户ID由服务层实现从数据库或者其他数据源获取该用户所有历史考试记录数据的逻辑并将其整理封装成List<ExamRecordVo>类型的列表返回每个ExamRecordVo对象包含了如时间、得分等详细信息。
List<ExamRecordVo> examRecordVoList = examService.getExamRecordList(userId);
// 封装查询得到的信息到最终结果中创建一个表示获取成功的ResultVO对象状态码设置为0表示获取考试记录成功消息设置为"获取考试记录成功"并将获取到的用户考试记录列表数据放入ResultVO对象中以便返回给客户端展示历史考试记录情况。
resultVO = new ResultVO<>(0, "获取考试记录成功", examRecordVoList);//封装查询得到的信息到最终结果中;
} catch (Exception e) {
// 如果在获取用户考试记录数据的过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是数据源查询出错还是数据封装等环节出现的错误导致获取失败。
e.printStackTrace();
// 创建一个表示获取失败的ResultVO对象状态码设置为 -1表示获取考试记录失败消息可根据业务实际情况设置为相应的提示语数据部分设置为null因为没有成功获取到有效的用户考试记录数据。
resultVO = new ResultVO<>(-1, "获取考试记录失败", null);
}
return resultVO;//返回封装好的 数据结构
}
/**
recordId
*@ param recordId
*@ return Resulsvolumne
* recordId
* HTTPGETResultVO<RecordDetailVo>
* ResultVO
*
* @param recordId
* @return ResultVOResultVORecordDetailVo
*/
@GetMapping("/record/detail/{recordId}")
@ApiOperation("根据考试记录id获取考试记录详情")
ResultVO<RecordDetailVo> getExamRecordDetail(@PathVariable String recordId) {
ResultVO<RecordDetailVo> resultVO;//定义一个用于存放结果的数据结构;
// 定义一个用于存放结果的ResultVO<RecordDetailVo>类型的数据结构,后续根据查询测验详细情况操作的成功与否以及获取到的相关数据进行赋值,用于最终返回给客户端展示查询结果。
ResultVO<RecordDetailVo> resultVO;
try {
// 调用ExamService的getRecordDetail方法将接收到的测验记录唯一标识符recordId传递进去由服务层实现从数据库或者其他数据源根据该ID查询对应测验详细信息的逻辑返回一个RecordDetailVo对象代表该次测验的所有详细信息。
RecordDetailVo recordDetailVo = examService.getRecordDetail(recordId);
// 封装查询得到的信息到最终结果中创建一个表示获取成功的ResultVO对象状态码设置为0表示获取考试记录详情成功消息设置为"获取考试记录详情成功"并将获取到的测验详细信息对象放入ResultVO对象中以便返回给客户端展示该次测验的详细情况。
resultVO = new ResultVO<>(0, "获取考试记录详情成功", recordDetailVo);//封装查询得到的信息到最终结果中;
} catch (Exception e) {
// 如果在获取测验详细信息的过程中出现异常,打印异常堆栈信息,方便开发人员排查问题,查看是数据源查询出错还是数据解析等环节出现的错误导致获取失败。
e.printStackTrace();
// 创建一个ResultVO对象表示操作失败
// 状态码设置为-1表示获取考试记录详情失败
// 消息设置为"获取考试记录详情失败"
// 由于查询失败详细信息对象设置为null
resultVO = new ResultVO<>(-1, "获取考试记录详情失败", null);
}
return resultVO;//返回封装好的 数据结构
// 返回封装好的ResultVO对象给客户端
// 客户端可以根据状态码和消息判断操作是否成功,并根据详细信息对象获取测验的详细记录信息
return resultVO;
}
}

Loading…
Cancel
Save