diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/controller/PaperController.java b/src-源文件/main/java/com/yf/exam/modules/paper/controller/PaperController.java index 5549670..a3ad8ed 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/controller/PaperController.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/controller/PaperController.java @@ -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; *
* 试卷控制器 *
-* +* 提供有关试卷的操作,如分页查询、创建试卷、查看试卷详情等 * @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-* 试卷请求类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷", description="试卷") -public class PaperDTO implements Serializable { - - private static final long serialVersionUID = 1L; + *+ * 试卷请求类 + *
+ * 该类用于传输试卷的基本信息,包含试卷的ID、考试规则、标题、时长、得分等字段。 + * 提供了试卷的详细信息,通常在查询和展示试卷时使用。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷", description="试卷") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class PaperDTO implements Serializable { // 实现Serializable接口,表示该类的对象可以被序列化 + private static final long serialVersionUID = 1L; // 序列化版本ID,用于序列化和反序列化操作 - @ApiModelProperty(value = "试卷ID", required=true) - private String id; + @ApiModelProperty(value = "试卷ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String id; // 试卷ID - @Dict(dictTable = "sys_user", dicText = "real_name", dicCode = "id") - @ApiModelProperty(value = "用户ID", required=true) - private String userId; + @Dict(dictTable = "sys_user", dicText = "real_name", dicCode = "id") // 字典表映射,映射用户表的姓名字段 + @ApiModelProperty(value = "用户ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String userId; // 用户ID - @Dict(dictTable = "sys_depart", dicText = "dept_name", dicCode = "id") - @ApiModelProperty(value = "部门ID", required=true) - private String departId; + @Dict(dictTable = "sys_depart", dicText = "dept_name", dicCode = "id") // 字典表映射,映射部门表的部门名称字段 + @ApiModelProperty(value = "部门ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String departId; // 部门ID - @ApiModelProperty(value = "规则ID", required=true) - private String examId; + @ApiModelProperty(value = "规则ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String examId; // 规则ID,表示该试卷对应的考试规则 - @ApiModelProperty(value = "考试标题", required=true) - private String title; + @ApiModelProperty(value = "考试标题", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String title; // 考试标题,表示试卷的名称 - @ApiModelProperty(value = "考试时长", required=true) - private Integer totalTime; + @ApiModelProperty(value = "考试时长", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer totalTime; // 考试时长(单位:分钟) - @ApiModelProperty(value = "用户时长", required=true) - private Integer userTime; + @ApiModelProperty(value = "用户时长", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer userTime; // 用户已使用的时间(单位:分钟) - @ApiModelProperty(value = "试卷总分", required=true) - private Integer totalScore; + @ApiModelProperty(value = "试卷总分", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer totalScore; // 试卷总分 - @ApiModelProperty(value = "及格分", required=true) - private Integer qualifyScore; + @ApiModelProperty(value = "及格分", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer qualifyScore; // 及格分数 - @ApiModelProperty(value = "客观分", required=true) - private Integer objScore; + @ApiModelProperty(value = "客观分", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer objScore; // 客观题分数 - @ApiModelProperty(value = "主观分", required=true) - private Integer subjScore; + @ApiModelProperty(value = "主观分", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer subjScore; // 主观题分数 - @ApiModelProperty(value = "用户得分", required=true) - private Integer userScore; + @ApiModelProperty(value = "用户得分", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer userScore; // 用户得分 - @ApiModelProperty(value = "是否包含简答题", required=true) - private Boolean hasSaq; + @ApiModelProperty(value = "是否包含简答题", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Boolean hasSaq; // 是否包含简答题,布尔类型,表示该试卷是否有简答题 - @ApiModelProperty(value = "试卷状态", required=true) - private Integer state; + @ApiModelProperty(value = "试卷状态", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer state; // 试卷状态,表示试卷的当前状态,如未开始、进行中、已结束等 - @ApiModelProperty(value = "创建时间", required=true) - private Date createTime; + @ApiModelProperty(value = "创建时间", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Date createTime; // 创建时间,表示试卷的创建时间 - @ApiModelProperty(value = "更新时间", required=true) - private Date updateTime; + @ApiModelProperty(value = "更新时间", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Date updateTime; // 更新时间,表示试卷的最后更新时间 - @ApiModelProperty(value = "截止时间") - private Date limitTime; - + @ApiModelProperty(value = "截止时间") // Swagger注解,描述该字段在API文档中的含义 + private Date limitTime; // 截止时间,表示考试的最后提交时间 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuAnswerDTO.java b/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuAnswerDTO.java index e449e79..48672a7 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuAnswerDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuAnswerDTO.java @@ -1,48 +1,50 @@ -package com.yf.exam.modules.paper.dto; +package com.yf.exam.modules.paper.dto; // 定义当前类所在的包路径 +// 引入Swagger注解,用于API文档生成 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; - +// 引入Serializable接口,用于对象序列化 import java.io.Serializable; /** -*-* 试卷考题备选答案请求类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷考题备选答案", description="试卷考题备选答案") -public class PaperQuAnswerDTO implements Serializable { - - private static final long serialVersionUID = 1L; + *+ * 试卷考题备选答案请求类 + *
+ * 该类用于表示试卷考题的备选答案,包含每个备选答案的ID、题目ID、选项标签、是否选中等信息。 + * 适用于考题答案的请求传输。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷考题备选答案", description="试卷考题备选答案") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class PaperQuAnswerDTO implements Serializable { // 实现Serializable接口,表示该类的对象可以被序列化 + private static final long serialVersionUID = 1L; // 序列化版本ID,用于序列化和反序列化操作 - @ApiModelProperty(value = "自增ID", required=true) - private String id; + @ApiModelProperty(value = "自增ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String id; // 自增ID,表示备选答案的唯一标识符 - @ApiModelProperty(value = "试卷ID", required=true) - private String paperId; + @ApiModelProperty(value = "试卷ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String paperId; // 试卷ID,表示该备选答案所属的试卷 - @ApiModelProperty(value = "回答项ID", required=true) - private String answerId; + @ApiModelProperty(value = "回答项ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String answerId; // 回答项ID,表示该备选答案的唯一标识符 - @ApiModelProperty(value = "题目ID", required=true) - private String quId; + @ApiModelProperty(value = "题目ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String quId; // 题目ID,表示该备选答案所属的题目 - @ApiModelProperty(value = "是否正确项", required=true) - private Boolean isRight; + @ApiModelProperty(value = "是否正确项", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Boolean isRight; // 是否正确项,布尔值,表示该备选答案是否是正确答案 - @ApiModelProperty(value = "是否选中", required=true) - private Boolean checked; + @ApiModelProperty(value = "是否选中", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Boolean checked; // 是否选中,布尔值,表示该备选答案是否已被选中 - @ApiModelProperty(value = "排序", required=true) - private Integer sort; + @ApiModelProperty(value = "排序", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer sort; // 排序,表示该备选答案在题目中的排序位置 - @ApiModelProperty(value = "选项标签", required=true) - private String abc; - + @ApiModelProperty(value = "选项标签", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String abc; // 选项标签,通常为 A、B、C、D 等,表示该备选答案的标识符 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuDTO.java b/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuDTO.java index 349868e..05bf6d7 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/dto/PaperQuDTO.java @@ -1,54 +1,55 @@ -package com.yf.exam.modules.paper.dto; +package com.yf.exam.modules.paper.dto; // 定义当前类所在的包路径 +// 引入Swagger注解,用于API文档生成 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; - +// 引入Serializable接口,用于对象序列化 import java.io.Serializable; /** -*-* 试卷考题请求类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷考题", description="试卷考题") -public class PaperQuDTO implements Serializable { - - private static final long serialVersionUID = 1L; + *+ * 试卷考题请求类 + *
+ * 该类用于表示试卷中的每一道题目,包含题目的基本信息,如题目ID、试卷ID、题目类型、是否答对、得分等。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷考题", description="试卷考题") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class PaperQuDTO implements Serializable { // 实现Serializable接口,表示该类的对象可以被序列化 + private static final long serialVersionUID = 1L; // 序列化版本ID,用于序列化和反序列化操作 - @ApiModelProperty(value = "ID", required=true) - private String id; + @ApiModelProperty(value = "ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String id; // 题目ID,唯一标识符 - @ApiModelProperty(value = "试卷ID", required=true) - private String paperId; + @ApiModelProperty(value = "试卷ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String paperId; // 试卷ID,表示该题目所属的试卷 - @ApiModelProperty(value = "题目ID", required=true) - private String quId; + @ApiModelProperty(value = "题目ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String quId; // 题目ID,唯一标识该题目 - @ApiModelProperty(value = "题目类型", required=true) - private Integer quType; + @ApiModelProperty(value = "题目类型", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer quType; // 题目类型,表示题目的分类,如选择题、判断题、主观题等 - @ApiModelProperty(value = "是否已答", required=true) - private Boolean answered; + @ApiModelProperty(value = "是否已答", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Boolean answered; // 是否已答,布尔值,表示该题目是否已被回答 - @ApiModelProperty(value = "主观答案", required=true) - private String answer; + @ApiModelProperty(value = "主观答案", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String answer; // 主观答案,表示对该题目的回答内容(适用于主观题) - @ApiModelProperty(value = "问题排序", required=true) - private Integer sort; + @ApiModelProperty(value = "问题排序", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer sort; // 问题排序,表示该题目在试卷中的顺序 - @ApiModelProperty(value = "单题分分值", required=true) - private Integer score; + @ApiModelProperty(value = "单题分分值", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer score; // 单题分值,表示该题目的满分 - @ApiModelProperty(value = "实际得分(主观题)", required=true) - private Integer actualScore; + @ApiModelProperty(value = "实际得分(主观题)", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer actualScore; // 实际得分,表示用户在该题目中实际得到的分数(适用于主观题) - @ApiModelProperty(value = "是否答对", required=true) - private Boolean isRight; - + @ApiModelProperty(value = "是否答对", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Boolean isRight; // 是否答对,布尔值,表示用户是否答对了该题目 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuAnswerExtDTO.java b/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuAnswerExtDTO.java index 3124d9e..357808a 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuAnswerExtDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuAnswerExtDTO.java @@ -1,29 +1,30 @@ -package com.yf.exam.modules.paper.dto.ext; +package com.yf.exam.modules.paper.dto.ext; // 定义该类所在的包路径 +// 引入试题答案DTO类,作为当前类的父类 import com.yf.exam.modules.paper.dto.PaperQuAnswerDTO; +// 引入Swagger注解,用于API文档生成 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; /** ** 试卷考题备选答案请求类 *
-* +* 该类用于描述试卷考题的备选答案信息,继承自PaperQuAnswerDTO,扩展了额外的字段,如图片和内容。 * @author 聪明笨狗 * @since 2020-05-25 17:31 */ -@Data -@ApiModel(value="试卷考题备选答案", description="试卷考题备选答案") -public class PaperQuAnswerExtDTO extends PaperQuAnswerDTO { +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷考题备选答案", description="试卷考题备选答案") // Swagger注解,描述模型信息,生成API文档时使用 +public class PaperQuAnswerExtDTO extends PaperQuAnswerDTO { // 继承自PaperQuAnswerDTO类,扩展了额外属性 - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本号,用于序列化和反序列化时的版本控制 - @ApiModelProperty(value = "试题图片", required=true) - private String image; + @ApiModelProperty(value = "试题图片", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String image; // 试题对应的图片内容 - @ApiModelProperty(value = "答案内容", required=true) - private String content; - - + @ApiModelProperty(value = "答案内容", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String content; // 备选答案的具体内容 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuDetailDTO.java b/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuDetailDTO.java index ee1e998..e2d693b 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuDetailDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/dto/ext/PaperQuDetailDTO.java @@ -1,32 +1,35 @@ -package com.yf.exam.modules.paper.dto.ext; +package com.yf.exam.modules.paper.dto.ext; // 定义当前类所在的包路径 +// 引入试题DTO类,作为当前类的父类 import com.yf.exam.modules.paper.dto.PaperQuDTO; +// 引入Swagger注解,用于API文档生成 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; - +// 引入List集合,用于存储多个备选答案 import java.util.List; /** ** 试卷考题请求类 *
-* +* 该类用于描述试卷中每个考题的详细信息,继承自PaperQuDTO,扩展了试题的图片、内容和答案列表等字段。 * @author 聪明笨狗 * @since 2020-05-25 17:31 */ -@Data -@ApiModel(value="试卷题目详情类", description="试卷题目详情类") -public class PaperQuDetailDTO extends PaperQuDTO { +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷题目详情类", description="试卷题目详情类") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class PaperQuDetailDTO extends PaperQuDTO { // 继承自PaperQuDTO类,扩展了额外属性 - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本号,用于序列化和反序列化时的版本控制 - @ApiModelProperty(value = "图片", required=true) - private String image; + @ApiModelProperty(value = "图片", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String image; // 题目的图片内容 - @ApiModelProperty(value = "题目内容", required=true) - private String content; + @ApiModelProperty(value = "题目内容", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String content; // 试题的具体内容 - @ApiModelProperty(value = "答案内容", required=true) - List* 试卷请求类 *
-* +* 该类用于接收请求数据,包含用户ID、部门ID、规则ID、用户昵称和试卷状态等信息, +* 用于查询试卷列表。 * @author 聪明笨狗 * @since 2020-05-25 17:31 */ -@Data -@ApiModel(value="试卷", description="试卷") -public class PaperListReqDTO implements Serializable { - - private static final long serialVersionUID = 1L; +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷", description="试卷") // Swagger注解,描述该类在API文档中的作用和说明 +public class PaperListReqDTO implements Serializable { // 实现Serializable接口,支持对象的序列化 - @ApiModelProperty(value = "用户ID", required=true) - private String userId; + private static final long serialVersionUID = 1L; // 序列化版本号,用于序列化和反序列化时的版本控制 - @ApiModelProperty(value = "部门ID", required=true) - private String departId; + @ApiModelProperty(value = "用户ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String userId; // 存储请求发起者的用户ID,通常用于标识用户 - @ApiModelProperty(value = "规则ID", required=true) - private String examId; + @ApiModelProperty(value = "部门ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String departId; // 存储请求者所在部门的ID,用于查询特定部门的试卷 - @ApiModelProperty(value = "用户昵称", required=true) - private String realName; + @ApiModelProperty(value = "规则ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String examId; // 存储与试卷相关的考试规则ID,用于标识试卷属于哪种考试 - @ApiModelProperty(value = "试卷状态", required=true) - private Integer state; + @ApiModelProperty(value = "用户昵称", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String realName; // 存储用户的真实姓名,用于标识请求者 - + @ApiModelProperty(value = "试卷状态", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private Integer state; // 存储试卷的状态,可能的值如:未开始、进行中、已完成等 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/dto/request/PaperQuQueryDTO.java b/src-源文件/main/java/com/yf/exam/modules/paper/dto/request/PaperQuQueryDTO.java index 48184b6..b91286c 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/dto/request/PaperQuQueryDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/dto/request/PaperQuQueryDTO.java @@ -1,21 +1,25 @@ -package com.yf.exam.modules.paper.dto.request; +package com.yf.exam.modules.paper.dto.request; // 定义当前类所在的包路径 +// 引入父类BaseDTO,用于继承基础字段和功能 import com.yf.exam.core.api.dto.BaseDTO; +// 引入Swagger注解,用于API文档生成 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; /** * @author bool + * 查找试卷题目详情请求类,用于接收试卷和题目详情查询的请求数据。 + * 包含试卷ID和题目ID字段。 */ -@Data -@ApiModel(value="查找试卷题目详情请求类", description="查找试卷题目详情请求类") -public class PaperQuQueryDTO extends BaseDTO { +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="查找试卷题目详情请求类", description="查找试卷题目详情请求类") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class PaperQuQueryDTO extends BaseDTO { // 继承自BaseDTO类,扩展了试卷ID和题目ID字段 - @ApiModelProperty(value = "试卷ID", required=true) - private String paperId; - - @ApiModelProperty(value = "题目ID", required=true) - private String quId; + @ApiModelProperty(value = "试卷ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String paperId; // 存储试卷ID,用于查询特定试卷的题目详情 + @ApiModelProperty(value = "题目ID", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String quId; // 存储题目ID,用于查询指定试卷中的某一道题目 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/dto/response/ExamDetailRespDTO.java b/src-源文件/main/java/com/yf/exam/modules/paper/dto/response/ExamDetailRespDTO.java index c307c84..12aecf2 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/dto/response/ExamDetailRespDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/dto/response/ExamDetailRespDTO.java @@ -1,38 +1,48 @@ -package com.yf.exam.modules.paper.dto.response; +package com.yf.exam.modules.paper.dto.response; // 定义当前类所在的包路径 +// 引入父类PaperDTO,用于继承基础字段和功能 import com.yf.exam.modules.paper.dto.PaperDTO; +// 引入PaperQuDTO类,用于表示试题的DTO import com.yf.exam.modules.paper.dto.PaperQuDTO; +// 引入Swagger注解,用于API文档生成 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; - +// 引入Calendar类,用于时间计算 import java.util.Calendar; +// 引入List集合,用于存储试题列表 import java.util.List; -@Data -@ApiModel(value="考试详情", description="考试详情") -public class ExamDetailRespDTO extends PaperDTO { - +/** + *+ * 考试详情响应类 + *
+ * 该类继承自PaperDTO,扩展了多个属性,包含单选题、多选题、判断题的列表, + * 以及计算剩余时间的方法,用于提供考试的详细信息。 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="考试详情", description="考试详情") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class ExamDetailRespDTO extends PaperDTO { // 继承自PaperDTO,表示考试详情响应DTO - @ApiModelProperty(value = "单选题列表", required=true) - private List+ * 考试结果展示响应类 + *
+ * 该类继承自PaperDTO,扩展了问题列表字段,用于展示考试结果的详细信息。 + * 包含试题的详细信息列表,返回考试时各个问题的答案或状态。 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="考试结果展示响应类", description="考试结果展示响应类") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class ExamResultRespDTO extends PaperDTO { // 继承自PaperDTO,表示考试结果展示响应DTO - @ApiModelProperty(value = "问题列表", required=true) - private List-* 试卷请求类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@ApiModel(value="试卷列表响应类", description="试卷列表响应类") -public class PaperListRespDTO extends PaperDTO { + *+ * 试卷列表响应类 + *
+ * 该类继承自PaperDTO,扩展了人员(realName)字段,用于展示试卷列表响应数据。 + * 包含试卷的基本信息以及相关人员信息。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@ApiModel(value="试卷列表响应类", description="试卷列表响应类") // Swagger注解,用于描述该类在API文档中的作用和说明 +public class PaperListRespDTO extends PaperDTO { // 继承自PaperDTO,表示试卷列表响应DTO - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本ID,用于序列化和反序列化操作 - @ApiModelProperty(value = "人员", required=true) - private String realName; - - + @ApiModelProperty(value = "人员", required=true) // Swagger注解,描述该字段在API文档中的含义,并标注该字段为必填项 + private String realName; // 存储人员姓名,用于表示与该试卷相关的人员信息 } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/entity/Paper.java b/src-源文件/main/java/com/yf/exam/modules/paper/entity/Paper.java index e219471..f6baaac 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/entity/Paper.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/entity/Paper.java @@ -1,125 +1,104 @@ -package com.yf.exam.modules.paper.entity; +package com.yf.exam.modules.paper.entity; // 定义当前类所在的包路径 +// 引入MyBatis Plus的相关注解 import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; +// 引入Lombok注解,用于自动生成getter、setter等方法 import lombok.Data; - +// 引入Date类,用于时间相关的字段 import java.util.Date; /** -*-* 试卷实体类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@TableName("el_paper") -public class Paper extends Model+ * 试卷实体类 + *
+ * 该类对应数据库中的 `el_paper` 表,用于表示试卷的相关信息。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@TableName("el_paper") // MyBatis Plus注解,指定该实体类对应的数据库表名 +public class Paper extends Model-* 试卷考题实体类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@TableName("el_paper_qu") -public class PaperQu extends Model+ * 试卷考题实体类 + *
+ * 该类对应数据库中的 `el_paper_qu` 表,用于表示与试卷相关的考题信息。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@TableName("el_paper_qu") // MyBatis Plus注解,指定该实体类对应的数据库表名 +public class PaperQu extends Model-* 试卷考题备选答案实体类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 17:31 -*/ -@Data -@TableName("el_paper_qu_answer") -public class PaperQuAnswer extends Model+ * 试卷考题备选答案实体类 + *
+ * 该类对应数据库中的 `el_paper_qu_answer` 表,用于表示试卷考题的备选答案。 + * + * @author 聪明笨狗 + * @since 2020-05-25 17:31 + */ +@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode方法 +@TableName("el_paper_qu_answer") // MyBatis Plus注解,指定该实体类对应的数据库表名 +public class PaperQuAnswer extends Model+ * 考试状态枚举接口 + *
+ * 该接口定义了考试的不同状态,作为常量使用,帮助系统在处理考试过程中进行状态标识。 + * + * @author bool * @date 2019-10-30 13:11 */ public interface ExamState { - /** * 考试中 + * 代表考试正在进行中,通常表示考试尚未结束,学生可以继续答题。 */ Integer ENABLE = 0; /** * 待阅卷 + * 代表考试已经结束,但还没有开始批阅试卷,通常表示考试已经提交,等待教师或系统自动阅卷。 */ Integer DISABLED = 1; /** * 已完成 + * 代表考试已经完成,阅卷完成,结果已公布,但没有开始考试。 */ Integer READY_START = 2; /** * 已结束 + * 代表考试已经结束,不再接受任何操作,考试时间已超出,无法继续答题。 */ Integer OVERDUE = 3; - } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/enums/PaperState.java b/src-源文件/main/java/com/yf/exam/modules/paper/enums/PaperState.java index ceed269..27e342c 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/enums/PaperState.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/enums/PaperState.java @@ -1,33 +1,38 @@ -package com.yf.exam.modules.paper.enums; - +package com.yf.exam.modules.paper.enums; // 定义当前类所在的包路径 /** - * 试卷状态 - * @author bool + *+ * 试卷状态枚举接口 + *
+ * 该接口定义了试卷的不同状态,作为常量使用,帮助系统在处理试卷过程中进行状态标识。 + * + * @author bool * @date 2019-10-30 13:11 */ public interface PaperState { - /** * 考试中 + * 代表试卷正在进行中,学生正在参与考试,答题环节尚未结束。 */ Integer ING = 0; /** * 待阅卷 + * 代表考试已经结束,试卷已经提交,正在等待阅卷(人工或系统自动阅卷)。 */ Integer WAIT_OPT = 1; /** * 已完成 + * 代表试卷已完成,包括考试、阅卷等所有环节,成绩已经确定。 */ Integer FINISHED = 2; /** * 弃考 + * 代表学生中途放弃考试,考试未完成,可能是由于学生主动退出或其他原因(如时间到期)导致考试中止。 */ Integer BREAK = 3; - } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/job/BreakExamJob.java b/src-源文件/main/java/com/yf/exam/modules/paper/job/BreakExamJob.java index fb14f53..23a9762 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/job/BreakExamJob.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/job/BreakExamJob.java @@ -1,45 +1,61 @@ -package com.yf.exam.modules.paper.job; - -import com.yf.exam.ability.job.service.JobService; -import com.yf.exam.modules.paper.service.PaperService; -import lombok.extern.log4j.Log4j2; -import org.quartz.Job; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +package com.yf.exam.modules.paper.job; // 定义类所在的包路径 + +import com.yf.exam.ability.job.service.JobService; // 导入 JobService 类,用于获取任务数据 +import com.yf.exam.modules.paper.service.PaperService; // 导入 PaperService 类,用于处理试卷相关的业务逻辑 +import lombok.extern.log4j.Log4j2; // 引入 log4j2 日志工具 +import org.quartz.Job; // 导入 Quartz 作业接口 +import org.quartz.JobDetail; // 导入 Quartz JobDetail 类 +import org.quartz.JobExecutionContext; // 导入 Quartz JobExecutionContext 类 +import org.quartz.JobExecutionException; // 导入 Quartz JobExecutionException 类 +import org.springframework.beans.factory.annotation.Autowired; // 引入 Spring 注解,用于自动注入依赖 +import org.springframework.stereotype.Component; // 引入 Spring 组件注解,标识为 Spring Bean /** * 超时自动交卷任务 + *+ * 该类是一个 Quartz 定时任务,用于在考试时间到期后强制交卷。 + * 它在定时任务触发时调用 PaperService 进行强制交卷操作。 + *
+ * * @author bool */ -@Log4j2 -@Component +@Log4j2 // 启用 log4j2 日志记录 +@Component // 标识该类为一个 Spring 组件,Spring 会自动将其注册为 Bean public class BreakExamJob implements Job { + // 自动注入 PaperService,用于处理与试卷相关的业务逻辑 @Autowired private PaperService paperService; + /** + * 定时任务执行的方法 + * + *+ * Quartz 会在定时任务触发时调用此方法。该方法获取任务的详细信息, + * 并通过 PaperService 强制提交超时的考试。 + *
+ * + * @param jobExecutionContext 包含了 Quartz 定时任务的上下文信息 + * @throws JobExecutionException 如果任务执行过程中出现异常,将抛出该异常 + */ @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - JobDetail detail = jobExecutionContext.getJobDetail(); - String name = detail.getKey().getName(); - String group = detail.getKey().getGroup(); + // 从 jobExecutionContext 中获取任务的详细信息 + JobDetail detail = jobExecutionContext.getJobDetail(); // 获取任务详情 + String name = detail.getKey().getName(); // 获取任务名称 + String group = detail.getKey().getGroup(); // 获取任务分组 + // 获取任务的附加数据,通常是任务触发时的相关参数 String data = String.valueOf(detail.getJobDataMap().get(JobService.TASK_DATA)); + // 打印任务执行日志,便于调试和跟踪 log.info("++++++++++定时任务:处理到期的交卷"); log.info("++++++++++jobName:{}", name); log.info("++++++++++jobGroup:{}", group); log.info("++++++++++taskData:{}", data); - - // 强制交卷 + // 调用 PaperService 进行强制交卷操作 + // data 参数通常是考试 ID 或者某种标识符,用于识别需要交卷的考试 paperService.handExam(data); - } - - - } diff --git a/src-源文件/main/java/com/yf/exam/modules/paper/mapper/PaperMapper.java b/src-源文件/main/java/com/yf/exam/modules/paper/mapper/PaperMapper.java index 1a52de5..833c518 100644 --- a/src-源文件/main/java/com/yf/exam/modules/paper/mapper/PaperMapper.java +++ b/src-源文件/main/java/com/yf/exam/modules/paper/mapper/PaperMapper.java @@ -1,39 +1,46 @@ -package com.yf.exam.modules.paper.mapper; +package com.yf.exam.modules.paper.mapper; // 定义类所在的包路径 -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yf.exam.modules.paper.dto.PaperDTO; -import com.yf.exam.modules.paper.dto.request.PaperListReqDTO; -import com.yf.exam.modules.paper.dto.response.PaperListRespDTO; -import com.yf.exam.modules.paper.entity.Paper; -import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; // 引入 MyBatis-Plus 的 BaseMapper +import com.baomidou.mybatisplus.core.metadata.IPage; // 引入分页结果接口 IPage +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 引入分页插件 Page +import com.yf.exam.modules.paper.dto.PaperDTO; // 引入 DTO 类,表示试卷数据传输对象 +import com.yf.exam.modules.paper.dto.request.PaperListReqDTO; // 引入请求 DTO 类,表示查询试卷时的请求参数 +import com.yf.exam.modules.paper.dto.response.PaperListRespDTO; // 引入响应 DTO 类,表示查询试卷时的响应结果 +import com.yf.exam.modules.paper.entity.Paper; // 引入实体类,表示试卷数据表中的记录 +import org.apache.ibatis.annotations.Param; // 引入 MyBatis 注解,用于指定 SQL 查询中的参数 import java.util.List; /** -*-* 试卷Mapper -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ -public interface PaperMapper extends BaseMapper+ * 试卷Mapper接口,用于操作试卷数据表 + *
+ * + * @author 聪明笨狗 + * @since 2020-05-25 16:33 + */ +public interface PaperMapper extends BaseMapper+ * 根据分页参数 `Page` 和查询条件 `PaperListReqDTO` 返回试卷的分页结果。 + *
+ * + * @param page 分页参数,包含当前页、每页大小等 + * @param query 查询条件,通常包含用户 ID、考试 ID 等信息 + * @return 返回一个分页结果 `IPage+ * 根据查询条件返回试卷的列表数据,通常用于返回所有试卷的列表。 + *
+ * + * @param query 查询条件,通常是试卷的基本信息,如试卷 ID、考试 ID 等 + * @return 返回一个试卷列表 `List-* 试卷考题备选答案Mapper +* 试卷考题备选答案Mapper接口 *
-* +* 该接口用于处理试卷考题备选答案的数据库操作,继承自MyBatis-Plus的BaseMapper,提供通用的CRUD方法。 +* * @author 聪明笨狗 * @since 2020-05-25 16:33 */ -public interface PaperQuAnswerMapper extends BaseMapper-* 试卷考题Mapper +* 试卷考题Mapper接口 *
-* +* 该接口用于处理与试卷考题相关的数据库操作,继承自MyBatis-Plus的BaseMapper,提供通用的CRUD操作。 +* * @author 聪明笨狗 * @since 2020-05-25 16:33 */ -public interface PaperQuMapper extends BaseMapper* 试卷考题备选答案业务类 *
+* 该接口定义了与试卷考题备选答案相关的业务操作 * * @author 聪明笨狗 * @since 2020-05-25 16:33 @@ -21,24 +23,24 @@ public interface PaperQuAnswerService extends IService* 试卷考题业务类 *
+* 该接口定义了与试卷考题相关的业务操作 * * @author 聪明笨狗 * @since 2020-05-25 16:33 @@ -21,50 +23,50 @@ public interface PaperQuService extends IService* 试卷业务类 *
+* 该接口定义了与试卷相关的所有业务操作 * * @author 聪明笨狗 * @since 2020-05-25 16:33 @@ -24,60 +26,57 @@ public interface PaperService extends IService-* 语言设置 服务实现类 +* 试卷考题备选答案 服务实现类 *
-* +* 该类实现了PaperQuAnswerService接口,处理与试卷考题备选答案相关的业务逻辑。 +* * @author 聪明笨狗 * @since 2020-05-25 16:33 */ -@Service -public class PaperQuAnswerServiceImpl extends ServiceImpl-* 语言设置 服务实现类 +* 试卷考题 服务实现类 *
-* +* 该类实现了PaperQuService接口,处理与试卷考题相关的业务逻辑。 +* * @author 聪明笨狗 * @since 2020-05-25 16:33 */ -@Service -public class PaperQuServiceImpl extends ServiceImpl-* 语言设置 服务实现类 -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 16:33 -*/ + *+ * 语言设置 服务实现类 + *
+ * + * @author 聪明笨狗 + * @since 2020-05-25 16:33 + */ @Service public class PaperServiceImpl extends ServiceImpl* 问题题目控制器 *
+* 该控制器类负责管理题目相关的操作,包括添加、修改、删除、查询等 * * @author 聪明笨狗 * @since 2020-05-25 13:25 */ -@Api(tags={"问题题目"}) -@RestController -@RequestMapping("/exam/api/qu/qu") +@Api(tags={"问题题目"}) // Swagger注解,表示该控制器处理"问题题目"相关的请求 +@RestController // Spring注解,表示这是一个RESTful API控制器 +@RequestMapping("/exam/api/qu/qu") // 设置基础路径 public class QuController extends BaseController { @Autowired - private QuService baseService; + private QuService baseService; // 自动注入问题服务类 /** - * 添加或修改 + * 添加或修改问题题目 * - * @param reqDTO - * @return + * @param reqDTO 请求的详细数据,包含问题题目的详细信息 + * @return 返回操作结果 */ - @RequiresRoles("sa") - @ApiOperation(value = "添加或修改") - @RequestMapping(value = "/save", method = {RequestMethod.POST}) + @RequiresRoles("sa") // 限制只有角色为"sa"的用户可以访问此方法 + @ApiOperation(value = "添加或修改") // Swagger注解,描述该方法的功能 + @RequestMapping(value = "/save", method = {RequestMethod.POST}) // POST请求,表示保存操作 public ApiRest* 候选答案请求类 *
* +* 该类用于封装候选答案的请求信息,包含每个答案的具体内容、是否正确、答案分析等信息。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 @ApiModel(value="候选答案", description="候选答案") public class QuAnswerDTO implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本UID + /** + * 答案ID + * 用于唯一标识每个候选答案,通常由数据库自动生成。 + */ + @ApiModelProperty(value = "答案ID", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String id; // 答案ID - @ApiModelProperty(value = "答案ID", required=true) - private String id; + /** + * 题目ID + * 该字段表示该答案对应的题目ID。 + */ + @ApiModelProperty(value = "问题ID", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String quId; // 题目ID - @ApiModelProperty(value = "问题ID", required=true) - private String quId; + /** + * 是否正确 + * 标记该答案是否为正确答案,`true`表示正确,`false`表示错误。 + */ + @ApiModelProperty(value = "是否正确", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Boolean isRight; // 是否正确 - @ApiModelProperty(value = "是否正确", required=true) - private Boolean isRight; + /** + * 选项图片 + * 存储与该答案相关的图片URL,通常用于多媒体题目选项。 + */ + @ApiModelProperty(value = "选项图片", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String image; // 选项图片URL - @ApiModelProperty(value = "选项图片", required=true) - private String image; + /** + * 答案内容 + * 该字段用于存储该答案的文本内容,通常为答案的描述或选项文本。 + */ + @ApiModelProperty(value = "答案内容", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String content; // 答案内容 - @ApiModelProperty(value = "答案内容", required=true) - private String content; - - @ApiModelProperty(value = "答案分析", required=true) - private String analysis; - + /** + * 答案分析 + * 用于对该答案进行详细解析,解释为什么该答案正确或错误。 + */ + @ApiModelProperty(value = "答案分析", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String analysis; // 答案分析 } diff --git a/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuDTO.java b/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuDTO.java index 8f45eec..fe82154 100644 --- a/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuDTO.java @@ -1,53 +1,88 @@ package com.yf.exam.modules.qu.dto; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; +import io.swagger.annotations.ApiModel; // Swagger注解,用于生成API文档 +import io.swagger.annotations.ApiModelProperty; // Swagger注解,用于描述API模型的属性 +import lombok.Data; // Lombok注解,用于自动生成getter、setter等方法 -import java.io.Serializable; -import java.util.Date; +import java.io.Serializable; // 可序列化接口 +import java.util.Date; // 日期类型 /** ** 问题题目请求类 *
* +* 该类用于封装问题题目的基本信息,包括题目的类型、难度、内容、解析等。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 @ApiModel(value="问题题目", description="问题题目") public class QuDTO implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本UID + /** + * 题目ID + * 每个题目都拥有唯一的ID,用于标识题目。 + */ + @ApiModelProperty(value = "题目ID", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String id; // 题目ID - @ApiModelProperty(value = "题目ID", required=true) - private String id; + /** + * 题目类型 + * 该字段用于标识题目的类型,例如选择题、填空题、判断题等。 + */ + @ApiModelProperty(value = "题目类型", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Integer quType; // 题目类型 - @ApiModelProperty(value = "题目类型", required=true) - private Integer quType; + /** + * 题目难度 + * 用于表示题目的难易程度。1表示普通,2表示较难,可能有更多级别。 + */ + @ApiModelProperty(value = "1普通,2较难", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Integer level; // 题目难度 - @ApiModelProperty(value = "1普通,2较难", required=true) - private Integer level; + /** + * 题目图片 + * 该字段存储与题目相关的图片URL,可以是题目内容的辅助说明。 + */ + @ApiModelProperty(value = "题目图片", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String image; // 题目图片URL - @ApiModelProperty(value = "题目图片", required=true) - private String image; + /** + * 题目内容 + * 存储题目的具体内容,描述问题的文本部分。 + */ + @ApiModelProperty(value = "题目内容", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String content; // 题目内容 - @ApiModelProperty(value = "题目内容", required=true) - private String content; + /** + * 创建时间 + * 标识题目创建的时间,通常由系统自动生成。 + */ + @ApiModelProperty(value = "创建时间", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Date createTime; // 创建时间 + /** + * 更新时间 + * 记录题目最后一次更新时间,通常由系统自动更新。 + */ + @ApiModelProperty(value = "更新时间", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Date updateTime; // 更新时间 - @ApiModelProperty(value = "创建时间", required=true) - private Date createTime; + /** + * 题目备注 + * 可选字段,用于记录关于题目的额外备注信息。 + */ + @ApiModelProperty(value = "题目备注", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String remark; // 题目备注 - @ApiModelProperty(value = "更新时间", required=true) - private Date updateTime; - - @ApiModelProperty(value = "题目备注", required=true) - private String remark; - - @ApiModelProperty(value = "整题解析", required=true) - private String analysis; - + /** + * 整题解析 + * 提供该题目的完整解析,帮助用户理解解题思路及过程。 + */ + @ApiModelProperty(value = "整题解析", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String analysis; // 整题解析 } diff --git a/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuRepoDTO.java b/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuRepoDTO.java index 6e689b8..0fa058e 100644 --- a/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuRepoDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/qu/dto/QuRepoDTO.java @@ -1,38 +1,58 @@ package com.yf.exam.modules.qu.dto; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; +import io.swagger.annotations.ApiModel; // Swagger注解,用于生成API文档 +import io.swagger.annotations.ApiModelProperty; // Swagger注解,用于描述API模型的属性 +import lombok.Data; // Lombok注解,用于自动生成getter、setter等方法 -import java.io.Serializable; +import java.io.Serializable; // 可序列化接口 /** ** 试题题库请求类 *
* +* 该类用于封装题库与题目之间的关联信息,包含题目的ID、题库ID、题目类型等信息。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 @ApiModel(value="试题题库", description="试题题库") public class QuRepoDTO implements Serializable { - private static final long serialVersionUID = 1L; - - - private String id; - - @ApiModelProperty(value = "试题", required=true) - private String quId; - - @ApiModelProperty(value = "归属题库", required=true) - private String repoId; - - @ApiModelProperty(value = "题目类型", required=true) - private Integer quType; - - @ApiModelProperty(value = "排序", required=true) - private Integer sort; - -} \ No newline at end of file + private static final long serialVersionUID = 1L; // 序列化版本UID + + /** + * 试题ID + * 唯一标识一道试题。 + */ + private String id; // 试题ID + + /** + * 题目ID + * 与题目ID进行关联,表示该试题属于某个具体题目。 + */ + @ApiModelProperty(value = "试题", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String quId; // 题目ID + + /** + * 题库ID + * 标识该题目所属的题库。 + */ + @ApiModelProperty(value = "归属题库", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private String repoId; // 题库ID + + /** + * 题目类型 + * 表示该题目在题库中的类型,例如选择题、填空题等。 + */ + @ApiModelProperty(value = "题目类型", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Integer quType; // 题目类型 + + /** + * 排序 + * 表示该题目在题库中的显示顺序,数字越小,顺序越靠前。 + */ + @ApiModelProperty(value = "排序", required=true) // Swagger注解,描述字段信息,标明该字段是必填项 + private Integer sort; // 排序 +} diff --git a/src-源文件/main/java/com/yf/exam/modules/qu/dto/export/QuExportDTO.java b/src-源文件/main/java/com/yf/exam/modules/qu/dto/export/QuExportDTO.java index fe94dac..fff01c5 100644 --- a/src-源文件/main/java/com/yf/exam/modules/qu/dto/export/QuExportDTO.java +++ b/src-源文件/main/java/com/yf/exam/modules/qu/dto/export/QuExportDTO.java @@ -1,45 +1,59 @@ package com.yf.exam.modules.qu.dto.export; -import com.yf.exam.core.utils.excel.annotation.ExcelField; -import com.yf.exam.core.utils.excel.fieldtype.ListType; -import lombok.Data; +import com.yf.exam.core.utils.excel.annotation.ExcelField; // Excel导出注解 +import com.yf.exam.core.utils.excel.fieldtype.ListType; // 用于处理List类型字段的特殊注解 +import lombok.Data; // Lombok注解,用于自动生成getter、setter、toString等方法 -import java.util.List; +import java.util.List; // 用于表示列表类型的字段 /** * 用于导出的数据结构 + * + * 该类是导出试题相关数据时所使用的DTO(数据传输对象),包含了题目序号、题目内容、题目解析、选项内容等信息。 + * 主要用于Excel导出时的数据映射。 + * * @author bool */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 public class QuExportDTO { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本UID /** - * + * 题目ID */ - private String qId; - - @ExcelField(title="题目序号", align=2, sort=1) - private String no; - @ExcelField(title="题目类型", align=2, sort=2) - private String quType; - @ExcelField(title="题目内容", align=2, sort=3) - private String qContent; - @ExcelField(title="整体解析", align=2, sort=4) - private String qAnalysis; - @ExcelField(title="题目图片", align=2, sort=5) - private String qImage; - @ExcelField(title="题目视频", align=2, sort=6) - private String qVideo; - @ExcelField(title="所属题库", align=2, sort=7, fieldType = ListType.class) - private List* 问题题目请求类 *
* +* 该类用于表示问题的详细信息,继承自 `QuDTO`,包括题目的详细信息如备选项、题库列表等。 +* 主要用于在前后端交互时,传递包含问题详细信息的请求或响应数据。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 @ApiModel(value="问题题目详情", description="问题题目详情") public class QuDetailDTO extends QuDTO { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; // 序列化版本UID - - @ApiModelProperty(value = "备选项列表", required=true) - private List* 问题题目请求类 *
* +* 该类用于封装前端请求查询题目的参数。通过该请求类,前端可以传递多个查询条件, +* 如题目类型、题库ID、题目内容等,以便进行题目的筛选和查询。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 @ApiModel(value="题目查询请求类", description="题目查询请求类") public class QuQueryReqDTO implements Serializable { - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "题目类型") - private Integer quType; - - @ApiModelProperty(value = "归属题库") - private List-* 问题题目请求类 +* 试题题库批量操作请求类 *
* +* 该类用于封装前端请求批量操作题目和题库关联的参数。 +* 通过该请求类,前端可以执行批量新增或移除题目与题库的关联操作。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data +@Data // Lombok注解,自动生成getter、setter等方法 @ApiModel(value="试题题库批量操作类", description="试题题库批量操作类") public class QuRepoBatchReqDTO implements Serializable { - private static final long serialVersionUID = 1L; - - - @ApiModelProperty(value = "题目ID", required=true) - private List* 问题题目实体类 *
* +* 该类用于映射问题题目的数据结构,通过MyBatis-Plus框架进行数据库操作。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data -@TableName("el_qu") +@Data // Lombok注解,自动生成getter、setter等方法 +@TableName("el_qu") // MyBatis Plus注解,指定与数据库表的映射关系 public class Qu extends Model* 候选答案实体类 *
* +* 该类用于映射候选答案的数据结构,通过MyBatis-Plus框架进行数据库操作。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data -@TableName("el_qu_answer") +@Data // Lombok注解,自动生成getter、setter等方法 +@TableName("el_qu_answer") // MyBatis Plus注解,指定与数据库表的映射关系 public class QuAnswer extends Model* 试题题库实体类 *
* +* 该类用于映射试题和题库之间的关系,表示一道题目属于某个题库,并可能具有排序。 +* * @author 聪明笨狗 * @since 2020-05-25 13:23 */ -@Data -@TableName("el_qu_repo") +@Data // Lombok注解,自动生成getter、setter等方法 +@TableName("el_qu_repo") // MyBatis Plus注解,指定与数据库表的映射关系 public class QuRepo extends Model-* 候选答案Mapper -*
-* -* @author 聪明笨狗 -* @since 2020-05-25 13:23 -*/ + *+ * 候选答案Mapper + *
+ * + * @author 聪明笨狗 + * @since 2020-05-25 13:23 + */ public interface QuAnswerMapper extends BaseMapper
@@ -19,38 +19,34 @@ import java.util.List;
* @author 聪明笨狗
* @since 2020-05-25 13:23
*/
-public interface QuMapper extends BaseMapper
@@ -11,6 +11,5 @@ import com.yf.exam.modules.qu.entity.QuRepo;
* @author 聪明笨狗
* @since 2020-05-25 13:23
*/
-public interface QuRepoMapper extends BaseMapper
-* 候选答案业务类
+* 候选答案业务类接口,定义了与试题答案相关的业务操作
*
-* 试题题库业务类
-*
+ * 试题题库业务接口,定义了题库相关的业务操作
+ *
-* 问题题目业务类
-*
+ * 问题题目业务接口,定义了题目相关的业务操作
+ *
@@ -28,65 +28,77 @@ import java.util.List;
* @author 聪明笨狗
* @since 2020-05-25 13:23
*/
-@Service
+@Service // 表示这是一个服务类,Spring 会自动扫描并管理该类
public class QuAnswerServiceImpl extends ServiceImpl
-* 语言设置 服务实现类
+* 试题题库 服务实现类
*
- * 语言设置 服务实现类
+ * 题目管理服务实现类
*