|
|
|
@ -1,13 +1,19 @@
|
|
|
|
|
package com.yf.exam.modules.paper.controller;
|
|
|
|
|
package com.yf.exam.modules.paper.controller; // 定义当前类所在的包路径
|
|
|
|
|
|
|
|
|
|
// 引入分页查询结果的接口
|
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
// 引入统一的API响应封装类
|
|
|
|
|
import com.yf.exam.core.api.ApiRest;
|
|
|
|
|
// 引入基础控制器类,提供通用的API响应方法
|
|
|
|
|
import com.yf.exam.core.api.controller.BaseController;
|
|
|
|
|
// 引入各种DTO类,用于请求和响应数据传输
|
|
|
|
|
import com.yf.exam.core.api.dto.BaseIdReqDTO;
|
|
|
|
|
import com.yf.exam.core.api.dto.BaseIdRespDTO;
|
|
|
|
|
import com.yf.exam.core.api.dto.BaseIdsReqDTO;
|
|
|
|
|
import com.yf.exam.core.api.dto.PagingReqDTO;
|
|
|
|
|
// 引入工具类,用于对象之间的属性拷贝
|
|
|
|
|
import com.yf.exam.core.utils.BeanMapper;
|
|
|
|
|
// 引入试卷相关的DTO类
|
|
|
|
|
import com.yf.exam.modules.paper.dto.PaperDTO;
|
|
|
|
|
import com.yf.exam.modules.paper.dto.ext.PaperQuDetailDTO;
|
|
|
|
|
import com.yf.exam.modules.paper.dto.request.PaperAnswerDTO;
|
|
|
|
@ -17,14 +23,22 @@ import com.yf.exam.modules.paper.dto.request.PaperQuQueryDTO;
|
|
|
|
|
import com.yf.exam.modules.paper.dto.response.ExamDetailRespDTO;
|
|
|
|
|
import com.yf.exam.modules.paper.dto.response.ExamResultRespDTO;
|
|
|
|
|
import com.yf.exam.modules.paper.dto.response.PaperListRespDTO;
|
|
|
|
|
// 引入试卷实体类
|
|
|
|
|
import com.yf.exam.modules.paper.entity.Paper;
|
|
|
|
|
// 引入试卷相关的业务处理服务类
|
|
|
|
|
import com.yf.exam.modules.paper.service.PaperService;
|
|
|
|
|
// 引入用户工具类,获取当前登录用户信息
|
|
|
|
|
import com.yf.exam.modules.user.UserUtils;
|
|
|
|
|
// 引入Swagger注解,用于API文档生成
|
|
|
|
|
import io.swagger.annotations.Api;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
// 引入Shiro注解,用于角色权限管理
|
|
|
|
|
import org.apache.shiro.authz.annotation.RequiresRoles;
|
|
|
|
|
// 引入Spring的Bean工具类,用于属性复制
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
// 引入Spring的自动注入注解,用于自动注入服务
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
// 引入Spring的Web注解,定义HTTP请求的映射方式
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
|
@ -34,123 +48,126 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
* <p>
|
|
|
|
|
* 试卷控制器
|
|
|
|
|
* </p>
|
|
|
|
|
*
|
|
|
|
|
* 提供有关试卷的操作,如分页查询、创建试卷、查看试卷详情等
|
|
|
|
|
* @author 聪明笨狗
|
|
|
|
|
* @since 2020-05-25 16:33
|
|
|
|
|
*/
|
|
|
|
|
@Api(tags={"试卷"})
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/exam/api/paper/paper")
|
|
|
|
|
public class PaperController extends BaseController {
|
|
|
|
|
@Api(tags={"试卷"}) // Swagger API 文档注解,用于描述该接口属于试卷相关操作
|
|
|
|
|
@RestController // 标记为Spring的控制器,处理HTTP请求
|
|
|
|
|
@RequestMapping("/exam/api/paper/paper") // 定义请求路径的基础路径
|
|
|
|
|
public class PaperController extends BaseController { // 继承BaseController类,提供基本的API返回
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
@Autowired // 自动注入PaperService,负责业务逻辑处理
|
|
|
|
|
private PaperService baseService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 分页查找
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* 分页查找试卷列表
|
|
|
|
|
* @param reqDTO 包含分页信息和查询条件的请求数据
|
|
|
|
|
* @return 分页后的试卷列表
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "分页查找")
|
|
|
|
|
@RequestMapping(value = "/paging", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "分页查找") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/paging", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<IPage<PaperListRespDTO>> paging(@RequestBody PagingReqDTO<PaperListReqDTO> reqDTO) {
|
|
|
|
|
//分页查询并转换
|
|
|
|
|
// 调用业务层进行分页查询
|
|
|
|
|
IPage<PaperListRespDTO> page = baseService.paging(reqDTO);
|
|
|
|
|
// 返回成功响应,并附带查询结果
|
|
|
|
|
return super.success(page);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建试卷
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* @param reqDTO 创建试卷所需的请求数据
|
|
|
|
|
* @return 返回创建成功后的试卷ID
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "创建试卷")
|
|
|
|
|
@RequestMapping(value = "/create-paper", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "创建试卷") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/create-paper", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<BaseIdRespDTO> save(@RequestBody PaperCreateReqDTO reqDTO) {
|
|
|
|
|
//复制参数
|
|
|
|
|
// 调用业务层创建试卷,传入当前用户ID和考试ID
|
|
|
|
|
String paperId = baseService.createPaper(UserUtils.getUserId(), reqDTO.getExamId());
|
|
|
|
|
// 返回创建结果,包括试卷ID
|
|
|
|
|
return super.success(new BaseIdRespDTO(paperId));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量删除
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* 获取试卷详情
|
|
|
|
|
* @param reqDTO 请求参数,包含试卷ID
|
|
|
|
|
* @return 返回试卷的详细信息
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "试卷详情")
|
|
|
|
|
@RequestMapping(value = "/paper-detail", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "试卷详情") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/paper-detail", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<ExamDetailRespDTO> paperDetail(@RequestBody BaseIdReqDTO reqDTO) {
|
|
|
|
|
//根据ID删除
|
|
|
|
|
// 调用业务层获取试卷详情
|
|
|
|
|
ExamDetailRespDTO respDTO = baseService.paperDetail(reqDTO.getId());
|
|
|
|
|
// 返回成功响应,并附带试卷详情
|
|
|
|
|
return super.success(respDTO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量删除
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* 获取试题详情
|
|
|
|
|
* @param reqDTO 请求参数,包含试卷ID和试题ID
|
|
|
|
|
* @return 返回试题的详细信息
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "试题详情")
|
|
|
|
|
@RequestMapping(value = "/qu-detail", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "试题详情") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/qu-detail", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<PaperQuDetailDTO> quDetail(@RequestBody PaperQuQueryDTO reqDTO) {
|
|
|
|
|
//根据ID删除
|
|
|
|
|
// 调用业务层获取试题详情
|
|
|
|
|
PaperQuDetailDTO respDTO = baseService.findQuDetail(reqDTO.getPaperId(), reqDTO.getQuId());
|
|
|
|
|
// 返回成功响应,并附带试题详情
|
|
|
|
|
return super.success(respDTO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 填充答案
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* @param reqDTO 请求数据,包含填充的答案
|
|
|
|
|
* @return 返回操作成功的响应
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "填充答案")
|
|
|
|
|
@RequestMapping(value = "/fill-answer", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "填充答案") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/fill-answer", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<PaperQuDetailDTO> fillAnswer(@RequestBody PaperAnswerDTO reqDTO) {
|
|
|
|
|
//根据ID删除
|
|
|
|
|
// 调用业务层填充答案操作
|
|
|
|
|
baseService.fillAnswer(reqDTO);
|
|
|
|
|
// 返回成功响应
|
|
|
|
|
return super.success();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 交卷操作
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* @param reqDTO 请求数据,包含试卷ID
|
|
|
|
|
* @return 返回交卷操作成功的响应
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "交卷操作")
|
|
|
|
|
@RequestMapping(value = "/hand-exam", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "交卷操作") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/hand-exam", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<PaperQuDetailDTO> handleExam(@RequestBody BaseIdReqDTO reqDTO) {
|
|
|
|
|
//根据ID删除
|
|
|
|
|
// 调用业务层进行交卷操作
|
|
|
|
|
baseService.handExam(reqDTO.getId());
|
|
|
|
|
// 返回成功响应
|
|
|
|
|
return super.success();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量删除
|
|
|
|
|
* @param reqDTO
|
|
|
|
|
* @return
|
|
|
|
|
* 获取试卷结果
|
|
|
|
|
* @param reqDTO 请求数据,包含试卷ID
|
|
|
|
|
* @return 返回试卷的考试结果
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "试卷详情")
|
|
|
|
|
@RequestMapping(value = "/paper-result", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "试卷结果") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/paper-result", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<ExamResultRespDTO> paperResult(@RequestBody BaseIdReqDTO reqDTO) {
|
|
|
|
|
//根据ID删除
|
|
|
|
|
// 调用业务层获取试卷的考试结果
|
|
|
|
|
ExamResultRespDTO respDTO = baseService.paperResult(reqDTO.getId());
|
|
|
|
|
// 返回成功响应,并附带试卷结果
|
|
|
|
|
return super.success(respDTO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检测用户有没有中断的考试
|
|
|
|
|
* @return
|
|
|
|
|
* @return 返回用户未完成的考试信息
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "检测进行中的考试")
|
|
|
|
|
@RequestMapping(value = "/check-process", method = { RequestMethod.POST})
|
|
|
|
|
@ApiOperation(value = "检测进行中的考试") // Swagger操作注解,用于描述接口
|
|
|
|
|
@RequestMapping(value = "/check-process", method = { RequestMethod.POST}) // 定义POST请求路径
|
|
|
|
|
public ApiRest<PaperDTO> checkProcess() {
|
|
|
|
|
//复制参数
|
|
|
|
|
// 调用业务层检测用户是否有未完成的考试
|
|
|
|
|
PaperDTO dto = baseService.checkProcess(UserUtils.getUserId());
|
|
|
|
|
// 返回成功响应,并附带考试进程数据
|
|
|
|
|
return super.success(dto);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|