From 8f92edc9f88dea0016ffbdc559ca003b48b5d485 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Mon, 16 Dec 2024 22:56:59 +0800 Subject: [PATCH 01/25] 111 --- src/main/java/cn/org/alan/exam/model/entity/Certificate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Certificate.java b/src/main/java/cn/org/alan/exam/model/entity/Certificate.java index 89a35d9..fd1264c 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Certificate.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Certificate.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.time.LocalDateTime; -/** +/**111 * @ Author JinXi * @ Version 1.0 * @ Date 2024/4/25 14:08 -- 2.34.1 From c2af87074231296926bb9615df86aec0ef7736fb Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Mon, 16 Dec 2024 23:14:58 +0800 Subject: [PATCH 02/25] =?UTF-8?q?=E8=AF=A5=E7=B1=BB=E5=90=8D=E4=B8=BACerti?= =?UTF-8?q?ficate=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BA=86Serializable=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E6=84=8F=E5=91=B3=E7=9D=80=E8=AF=A5=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E5=AF=B9=E8=B1=A1=E5=8F=AF=E4=BB=A5=E8=A2=AB=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8C=96=EF=BC=8C=20=20*=20=E5=B8=B8=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=AF=B9=E8=B1=A1=E7=9A=84=E6=8C=81=E4=B9=85=E5=8C=96?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E6=88=96=E7=BD=91=E7=BB=9C=E4=BC=A0=E8=BE=93?= =?UTF-8?q?=E7=AD=89=E5=9C=BA=E6=99=AF=E3=80=82=E5=AE=83=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=AD=E7=9A=84=E2=80=9Ct=5Fcerti?= =?UTF-8?q?ficate=E2=80=9D=E8=A1=A8=EF=BC=8C=20=20*=20=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E8=AF=81=E4=B9=A6=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/org/alan/exam/model/entity/Certificate.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Certificate.java b/src/main/java/cn/org/alan/exam/model/entity/Certificate.java index fd1264c..51f145d 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Certificate.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Certificate.java @@ -6,10 +6,12 @@ import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.time.LocalDateTime; -/**111 +/** * @ Author JinXi * @ Version 1.0 - * @ Date 2024/4/25 14:08 + * @ Date 2024/4/25 14:08该类名为Certificate,实现了Serializable接口,意味着该类的对象可以被序列化, + * * 常用于对象的持久化存储或网络传输等场景。它对应数据库中的“t_certificate”表, + * * 用于封装证书相关的信息。 */ @TableName("t_certificate") public class Certificate implements Serializable { -- 2.34.1 From 881c75be18f14e0531fd6030bcae583427756ff3 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Mon, 16 Dec 2024 23:33:46 +0800 Subject: [PATCH 03/25] 22 --- .../exam/model/entity/CertificateUser.java | 89 +++++++++++++++++-- 1 file changed, 81 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java b/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java index e3533ec..d1eacb0 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java +++ b/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java @@ -7,7 +7,8 @@ import java.time.LocalDateTime; /** *
- * + * 该类名为CertificateUser,实现了Serializable接口,表明此类的对象可以被序列化,常用于如对象持久化存储到文件或者在网络传输等场景中。 + * * 它对应数据库中的“t_certificate_user”表,主要用于封装证书与用户之间关联关系相关的信息,比如某个用户获得了某个证书等情况的记录信息。 *
* * @author WeiJin @@ -20,80 +21,152 @@ public class CertificateUser implements Serializable { /** * ID 证书与用户关系表 + * 此属性作为该关系表记录的唯一标识符,对应数据库表“t_certificate_user”中的“id”字段, + * * 其类型为Integer,通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO), + * * 确保每条记录都有一个唯一的编号。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户id + * 用于存储与证书相关联的用户的唯一标识符,类型为Integer, + * * 通过@TableField注解并设置了填充策略为在插入时填充(FieldFill.INSERT), + * * 意味着在向数据库插入这条关系记录时,该字段会按照相应规则自动获取并填充对应的用户ID值, + * * 以此来明确是哪个用户与证书存在关联关系。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 考试id + * 用来存放与该证书获取相关的考试的唯一标识符,类型为Integer, + * * 例如如果证书是通过某个特定考试获得的,那么这里就记录该考试的ID,用于关联证书和对应的考试信息 */ private Integer examId; /** * 证书编号 + * 存储证书的具体编号信息,类型为String,证书编号通常具有唯一性,可用于在外部系统或者业务场景中更精准地识别某个具体的证书实体, + * * 例如证书管理系统中通过编号查询、验证证书等操作会用到此编号。 */ private String code; /** * 证书id + * 代表关联的证书自身的唯一标识符,类型为Integer,用于明确在多证书的情况下,当前这条关系记录具体指向的是哪一个证书, + * * 与数据库中存储证书信息的表(如前面提到的“t_certificate”表等)中的证书ID进行关联。 */ private Integer certificateId; /** * 获奖时间 YYYY-MM-DD hh:mm:ss + * 用于记录用户获得该证书的具体时间,类型为LocalDateTime, + * * 通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT), + * * 方便在插入关系记录时自动记录下获得证书的时间信息,其时间格式遵循“YYYY-MM-DD hh:mm:ss”的规范, + * * 便于后续在查询、统计以及展示等业务操作中对时间进行统一处理和使用。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; - + /** + * 获取证书与用户关系表记录的唯一ID,外部代码可以通过调用该方法获取当前对象对应的ID值, + * 用于在业务逻辑中识别、查找或操作这条具体的关系记录。 + * @return 返回关系表记录的ID(Integer类型) + */ public Integer getId() { return id; } - + /** + * 设置证书与用户关系表记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务场景下较少直接通过该方法去手动修改主键值,但在一些特定的数据迁移、初始化等场景可能会用到。 + * @param id 要设置的关系表记录的ID(Integer类型) + */ public void setId(Integer id) { this.id = id; } + /** + * 获取与证书相关联的用户的ID,外部代码调用该方法可得知是哪个用户与当前关系记录中的证书存在关联, + * 常用于查询用户的证书获取情况等业务操作中。 + * @return 返回用户的ID(Integer类型) + */ public Integer getUserId() { return userId; } - + /** + * 设置与证书相关联的用户的ID,例如在创建新的证书与用户关系记录或者更新已有关系记录中用户信息时会调用该方法来更新用户ID值。 + * @param userId 要设置的用户的ID(Integer类型) + */ public void setUserId(Integer userId) { this.userId = userId; } + /** + * 获取与证书相关联的考试的ID,外部代码通过调用该方法可以获取到是通过哪个考试获得了当前关系记录中的证书, + * 在涉及证书与考试关联信息查询、统计等业务场景中会用到。 + * @return 返回考试的ID(Integer类型) + */ public Integer getExamId() { return examId; } - + /** + * 设置与证书相关联的考试的ID,当存在考试信息变更或者创建新的关联关系且需要指定对应考试时, + * 可以通过调用该方法来更新当前关系记录中的考试ID值。 + * @param examId 要设置的考试的ID(Integer类型) + */ public void setExamId(Integer examId) { this.examId = examId; } + /** + * 获取证书的编号,外部代码通过调用该方法可以拿到具体的证书编号信息, + * 方便在业务中基于证书编号进行查询、验证等操作,比如验证证书真伪等场景下需要获取编号去和权威数据源比对。 + * @return 返回证书编号(String类型) + */ public String getCode() { return code; } - + /** + * 设置证书的编号,在一些情况下,如证书编号录入错误需要修改或者从外部系统同步更新证书编号等场景下, + * 可以通过调用该方法来更新当前关系记录中对应的证书编号值。 + * @param code 要设置的证书编号(String类型) + */ public void setCode(String code) { this.code = code; } + /** + * 获取关联的证书的ID,外部代码调用该方法可以明确当前关系记录具体指向的是哪一个证书, + * 在涉及多证书关联查询、操作等业务场景中是很关键的方法。 + * @return 返回证书的ID(Integer类型) + */ public Integer getCertificateId() { return certificateId; } - + /** + * 设置关联的证书的ID,例如当证书信息在数据库中有更新,其ID发生变化或者重新关联不同证书时, + * 可以通过调用该方法来更新当前关系记录中的证书ID值。 + * @param certificateId 要设置的证书的ID(Integer类型) + */ public void setCertificateId(Integer certificateId) { this.certificateId = certificateId; } + /** + * 获取用户获得证书的时间,外部代码通过调用该方法可以获取到该证书与用户关系产生的具体时间信息, + * 在诸如按时间范围查询证书获取情况、统计不同时间段内证书获取数量等业务操作中会用到该时间信息。 + * @return 返回获得证书的时间(LocalDateTime类型) + */ public LocalDateTime getCreateTime() { return createTime; } - + /** + * 设置用户获得证书的时间,不过由于该字段已经设置了插入时自动填充的策略, + * 所以一般情况下很少会手动调用该方法去修改这个时间值,除非有特殊的数据修正等需求场景。 + * @param createTime 要设置的获得证书的时间(LocalDateTime类型) + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /* 方便在调试程序、打印日志等场景下直观地查看该对象各个属性的具体值情况,格式为“CertificateUser{属性名=属性值,...}”。 + * @return 返回包含对象各属性值的字符串表示形式 + */ @Override public String toString() { return "CertificateUser{" + -- 2.34.1 From a04cd681da03bf7ad6d0b81e32a363596243d826 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Mon, 16 Dec 2024 23:37:08 +0800 Subject: [PATCH 04/25] =?UTF-8?q?=E8=AF=A5=E7=B1=BB=E5=90=8D=E4=B8=BACerti?= =?UTF-8?q?ficateUser=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BA=86Serializable?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=A1=A8=E6=98=8E=E6=AD=A4=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E5=AF=B9=E8=B1=A1=E5=8F=AF=E4=BB=A5=E8=A2=AB=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8C=96=EF=BC=8C=E5=B8=B8=E7=94=A8=E4=BA=8E=E5=A6=82?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E6=8C=81=E4=B9=85=E5=8C=96=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E5=88=B0=E6=96=87=E4=BB=B6=E6=88=96=E8=80=85=E5=9C=A8=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E4=BC=A0=E8=BE=93=E7=AD=89=E5=9C=BA=E6=99=AF=E4=B8=AD?= =?UTF-8?q?=E3=80=82=20=20*=20=20*=20=E5=AE=83=E5=AF=B9=E5=BA=94=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E4=B8=AD=E7=9A=84=E2=80=9Ct=5Fcertificate=5F?= =?UTF-8?q?user=E2=80=9D=E8=A1=A8=EF=BC=8C=E4=B8=BB=E8=A6=81=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=B0=81=E8=A3=85=E8=AF=81=E4=B9=A6=E4=B8=8E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=B9=8B=E9=97=B4=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=AF=94?= =?UTF-8?q?=E5=A6=82=E6=9F=90=E4=B8=AA=E7=94=A8=E6=88=B7=E8=8E=B7=E5=BE=97?= =?UTF-8?q?=E4=BA=86=E6=9F=90=E4=B8=AA=E8=AF=81=E4=B9=A6=E7=AD=89=E6=83=85?= =?UTF-8?q?=E5=86=B5=E7=9A=84=E8=AE=B0=E5=BD=95=E4=BF=A1=E6=81=AF=E3=80=82?= =?UTF-8?q?=20=20=E6=AD=A4=E5=B1=9E=E6=80=A7=E4=BD=9C=E4=B8=BA=E8=AF=A5?= =?UTF-8?q?=E5=85=B3=E7=B3=BB=E8=A1=A8=E8=AE=B0=E5=BD=95=E7=9A=84=E5=94=AF?= =?UTF-8?q?=E4=B8=80=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC=8C=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8=E2=80=9Ct=5Fcertificate=5F?= =?UTF-8?q?user=E2=80=9D=E4=B8=AD=E7=9A=84=E2=80=9Cid=E2=80=9D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=20=20=20=20=20=20=20*=20=20=20=20=20=20*=20?= =?UTF-8?q?=E5=85=B6=E7=B1=BB=E5=9E=8B=E4=B8=BAInteger=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87MyBatis=20Plus=E7=9A=84@TableId=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=A0=87=E8=AF=86=EF=BC=8C=E5=B9=B6=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E4=BA=86=E4=B8=BB=E9=94=AE=E7=94=9F=E6=88=90=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E4=B8=BA=E8=87=AA=E5=A2=9E=E9=95=BF=EF=BC=88IdType.AU?= =?UTF-8?q?TO=EF=BC=89=EF=BC=8C=20=20=20=20=20=20=20*=20=20=20=20=20=20*?= =?UTF-8?q?=20=E7=A1=AE=E4=BF=9D=E6=AF=8F=E6=9D=A1=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=83=BD=E6=9C=89=E4=B8=80=E4=B8=AA=E5=94=AF=E4=B8=80=E7=9A=84?= =?UTF-8?q?=E7=BC=96=E5=8F=B7=E3=80=82=20=20=20=20=20=20=20=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=AD=98=E5=82=A8=E4=B8=8E=E8=AF=81=E4=B9=A6=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=9A=84=E7=94=A8=E6=88=B7=E7=9A=84=E5=94=AF?= =?UTF-8?q?=E4=B8=80=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC=8C=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=BAInteger=EF=BC=8C=20=20=20=20=20=20=20=20=20=20=20=20*?= =?UTF-8?q?=20=20=20=20=20=20*=20=E9=80=9A=E8=BF=87@TableField=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E5=B9=B6=E8=AE=BE=E7=BD=AE=E4=BA=86=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E4=B8=BA=E5=9C=A8=E6=8F=92=E5=85=A5=E6=97=B6?= =?UTF-8?q?=E5=A1=AB=E5=85=85=EF=BC=88FieldFill.INSERT=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20*=20=20=20=20=20=20*=20?= =?UTF-8?q?=E6=84=8F=E5=91=B3=E7=9D=80=E5=9C=A8=E5=90=91=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=8F=92=E5=85=A5=E8=BF=99=E6=9D=A1=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=97=B6=EF=BC=8C=E8=AF=A5=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E4=BC=9A=E6=8C=89=E7=85=A7=E7=9B=B8=E5=BA=94=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96=E5=B9=B6=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E7=94=A8=E6=88=B7ID=E5=80=BC?= =?UTF-8?q?=EF=BC=8C=20=20=20=20=20=20=20=20=20=20=20=20*=20=20=20=20=20?= =?UTF-8?q?=20*=20=E4=BB=A5=E6=AD=A4=E6=9D=A5=E6=98=8E=E7=A1=AE=E6=98=AF?= =?UTF-8?q?=E5=93=AA=E4=B8=AA=E7=94=A8=E6=88=B7=E4=B8=8E=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/org/alan/exam/model/entity/CertificateUser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java b/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java index d1eacb0..5cb601c 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java +++ b/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java @@ -87,7 +87,7 @@ public class CertificateUser implements Serializable { /** * 获取与证书相关联的用户的ID,外部代码调用该方法可得知是哪个用户与当前关系记录中的证书存在关联, * 常用于查询用户的证书获取情况等业务操作中。 - * @return 返回用户的ID(Integer类型) + * @return 返回用户的ID(Integer类型)1 */ public Integer getUserId() { return userId; -- 2.34.1 From bc82e29d79b8f4eeb917d458de669f34472c4676 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:09:25 +0800 Subject: [PATCH 05/25] =?UTF-8?q?=E8=AF=A5=E7=B1=BB=E5=90=8D=E4=B8=BACerti?= =?UTF-8?q?ficateUser=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BA=86Serializable?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=A1=A8=E6=98=8E=E6=AD=A4=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E5=AF=B9=E8=B1=A1=E5=8F=AF=E4=BB=A5=E8=A2=AB=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8C=96=EF=BC=8C=E5=B8=B8=E7=94=A8=E4=BA=8E=E5=A6=82?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E6=8C=81=E4=B9=85=E5=8C=96=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E5=88=B0=E6=96=87=E4=BB=B6=E6=88=96=E8=80=85=E5=9C=A8=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E4=BC=A0=E8=BE=93=E7=AD=89=E5=9C=BA=E6=99=AF=E4=B8=AD?= =?UTF-8?q?=E3=80=82=20=20*=20=20*=20=E5=AE=83=E5=AF=B9=E5=BA=94=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E4=B8=AD=E7=9A=84=E2=80=9Ct=5Fcertificate=5F?= =?UTF-8?q?user=E2=80=9D=E8=A1=A8=EF=BC=8C=E4=B8=BB=E8=A6=81=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=B0=81=E8=A3=85=E8=AF=81=E4=B9=A6=E4=B8=8E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=B9=8B=E9=97=B4=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=AF=94?= =?UTF-8?q?=E5=A6=82=E6=9F=90=E4=B8=AA=E7=94=A8=E6=88=B7=E8=8E=B7=E5=BE=97?= =?UTF-8?q?=E4=BA=86=E6=9F=90=E4=B8=AA=E8=AF=81=E4=B9=A6=E7=AD=89=E6=83=85?= =?UTF-8?q?=E5=86=B5=E7=9A=84=E8=AE=B0=E5=BD=95=E4=BF=A1=E6=81=AF=E3=80=82?= =?UTF-8?q?=20=20=E6=AD=A4=E5=B1=9E=E6=80=A7=E4=BD=9C=E4=B8=BA=E8=AF=A5?= =?UTF-8?q?=E5=85=B3=E7=B3=BB=E8=A1=A8=E8=AE=B0=E5=BD=95=E7=9A=84=E5=94=AF?= =?UTF-8?q?=E4=B8=80=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC=8C=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8=E2=80=9Ct=5Fcertificate=5F?= =?UTF-8?q?user=E2=80=9D=E4=B8=AD=E7=9A=84=E2=80=9Cid=E2=80=9D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=20=20=20=20=20=20=20*=20=20=20=20=20=20*=20?= =?UTF-8?q?=E5=85=B6=E7=B1=BB=E5=9E=8B=E4=B8=BAInteger=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87MyBatis=20Plus=E7=9A=84@TableId=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=A0=87=E8=AF=86=EF=BC=8C=E5=B9=B6=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E4=BA=86=E4=B8=BB=E9=94=AE=E7=94=9F=E6=88=90=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E4=B8=BA=E8=87=AA=E5=A2=9E=E9=95=BF=EF=BC=88IdType.AU?= =?UTF-8?q?TO=EF=BC=89=EF=BC=8C=20=20=20=20=20=20=20*=20=20=20=20=20=20*?= =?UTF-8?q?=20=E7=A1=AE=E4=BF=9D=E6=AF=8F=E6=9D=A1=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=83=BD=E6=9C=89=E4=B8=80=E4=B8=AA=E5=94=AF=E4=B8=80=E7=9A=84?= =?UTF-8?q?=E7=BC=96=E5=8F=B7=E3=80=82=20=20=20=20=20=20=20=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=AD=98=E5=82=A8=E4=B8=8E=E8=AF=81=E4=B9=A6=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=9A=84=E7=94=A8=E6=88=B7=E7=9A=84=E5=94=AF?= =?UTF-8?q?=E4=B8=80=E6=A0=87=E8=AF=86=E7=AC=A6=EF=BC=8C=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=BAInteger=EF=BC=8C=20=20=20=20=20=20=20=20=20=20=20=20*?= =?UTF-8?q?=20=20=20=20=20=20*=20=E9=80=9A=E8=BF=87@TableField=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E5=B9=B6=E8=AE=BE=E7=BD=AE=E4=BA=86=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E4=B8=BA=E5=9C=A8=E6=8F=92=E5=85=A5=E6=97=B6?= =?UTF-8?q?=E5=A1=AB=E5=85=85=EF=BC=88FieldFill.INSERT=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20*=20=20=20=20=20=20*=20?= =?UTF-8?q?=E6=84=8F=E5=91=B3=E7=9D=80=E5=9C=A8=E5=90=91=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=8F=92=E5=85=A5=E8=BF=99=E6=9D=A1=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=97=B6=EF=BC=8C=E8=AF=A5=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E4=BC=9A=E6=8C=89=E7=85=A7=E7=9B=B8=E5=BA=94=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96=E5=B9=B6=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E7=94=A8=E6=88=B7ID=E5=80=BC?= =?UTF-8?q?=EF=BC=8C=20=20=20=20=20=20=20=20=20=20=20=20*=20=20=20=20=20?= =?UTF-8?q?=20*=20=E4=BB=A5=E6=AD=A4=E6=9D=A5=E6=98=8E=E7=A1=AE=E6=98=AF?= =?UTF-8?q?=E5=93=AA=E4=B8=AA=E7=94=A8=E6=88=B7=E4=B8=8E=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/org/alan/exam/model/entity/CertificateUser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java b/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java index 5cb601c..cdf8bf2 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java +++ b/src/main/java/cn/org/alan/exam/model/entity/CertificateUser.java @@ -158,7 +158,7 @@ public class CertificateUser implements Serializable { /** * 设置用户获得证书的时间,不过由于该字段已经设置了插入时自动填充的策略, * 所以一般情况下很少会手动调用该方法去修改这个时间值,除非有特殊的数据修正等需求场景。 - * @param createTime 要设置的获得证书的时间(LocalDateTime类型) + * @param createTime 要设置的获得证书的时间(LocalDateTime类型)1 */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; -- 2.34.1 From 7216a6934e8914e196d964354d4595837781301c Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:21:30 +0800 Subject: [PATCH 06/25] 1 --- .../alan/exam/model/entity/Certificate.java | 95 +++++++++++++++++-- 1 file changed, 86 insertions(+), 9 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Certificate.java b/src/main/java/cn/org/alan/exam/model/entity/Certificate.java index 51f145d..57c36be 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Certificate.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Certificate.java @@ -19,27 +19,39 @@ public class Certificate implements Serializable { /** * ID 证书 + * 此属性代表证书的唯一标识符,对应数据库表“t_certificate”中的“id”字段。 + * * 其数据类型为Integer,使用了MyBatis Plus提供的@TableId注解来指定它作为主键,并且设置了主键的生成策略为自增长(IdType.AUTO), + * * 也就是在向数据库插入新的证书记录时,该字段的值会由数据库自动按规则生成,无需手动赋值。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 证数名称 + * 用于存储证书的具体名称信息,数据类型为String,比如像“英语四级证书”“计算机二级证书”等具体的证书名称都会存储在这个属性中, + * * 通过相应的Getter和Setter方法可以对其进行获取和修改操作。 */ private String certificateName; /** * 背景图片 + * 该属性用来存放与证书相关的背景图片信息,类型是String,其值可能是图片在服务器上存储的路径、在图片存储系统中的唯一标识等, + * * 可以借助该属性关联证书和对应的展示图片,方便在应用程序中呈现证书相关视觉内容。 */ private String image; /** * 认证单位 + * * 代表颁发该证书的单位名称,数据类型为String,例如“教育部考试中心”“人力资源和社会保障局”等颁发机构的名称会存储在此处, + * * 明确证书的权威性和来源。 */ private String certificationNuit; /** * 创建时间 + * 用于记录证书这条数据在系统中创建的具体时间,类型为LocalDateTime。 + * * 通过@TableField注解并设置填充策略为FieldFill.INSERT,表示在向数据库插入证书记录时,该字段会自动填充为当前时间, + * * 同时使用@JsonFormat注解规定了时间在序列化和反序列化时的格式为“yyyy-MM-dd HH:mm:ss”,确保时间数据在与前端交互或者存储为JSON格式等场景下格式统一。 */ @TableField(fill = FieldFill.INSERT) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") @@ -47,53 +59,118 @@ public class Certificate implements Serializable { /** * 逻辑删除字段 + * 这是一个用于标记证书记录是否被删除的字段,数据类型为Integer,通常采用约定的数值来表示删除状态,比如0表示未删除,1表示已删除等, + * * 通过操作该字段的值,可以在业务逻辑层面实现对证书记录的软删除功能,而并非真正从数据库物理删除数据。 */ private Integer isDeleted; - + /** + * 获取逻辑删除字段的值,外部代码可以调用该方法来获取当前证书对象对应的“isDeleted”字段的值, + * 以此判断该证书记录在系统中是否已经被标记为删除状态,返回值为Integer类型。 + * @return 返回逻辑删除字段的值,即表示证书记录删除状态的整数值。 + */ + /** + * 获取逻辑删除字段的值,外部代码可以调用该方法来获取当前证书对象对应的“isDeleted”字段的值, + * 以此判断该证书记录在系统中是否已经被标记为删除状态,返回值为Integer类型。 + * @return 返回逻辑删除字段的值,即表示证书记录删除状态的整数值。 + */ public Integer getIsDeleted() { return isDeleted; } - + /** + * 设置逻辑删除字段的值,外部代码可以通过调用该方法来更新当前证书对象的“isDeleted”字段, + * 进而改变该证书记录在系统中的删除标记状态,参数“isDeleted”为要设置的表示删除状态的整数值。 + * @param isDeleted 要设置的逻辑删除字段的整数值。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } - + /** + * 获取证书的唯一标识符(ID),外部代码通过调用该方法能够拿到当前证书对象对应的ID值, + * 方便在数据库操作、业务逻辑处理等场景中根据ID来识别、查找或操作具体的证书记录,返回值为Integer类型。 + * @return 返回证书的ID值。 + */ public Integer getId(){ return id; } - + /** + * 设置证书的唯一标识符(ID),不过鉴于ID通常由数据库按照自增长等规则自动生成, + * 所以在常规业务操作中较少直接使用该方法手动修改ID值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的证书ID整数值。 + * @param id 要设置的证书的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + /** + * 获取证书的名称,外部代码调用该方法可以获取当前证书对象所对应的证书名称, + * 在展示证书信息、根据名称进行查询筛选等业务场景中会用到,返回值为String类型。 + * @return 返回证书的名称字符串。 + */ public String getCertificateName() { return certificateName; } - + /** + * 设置证书的名称,外部代码可以通过调用该方法来更新当前证书对象对应的证书名称, + * 比如证书名称发生变更等情况时,参数“certificateName”为要设置的新的证书名称字符串。 + * @param certificateName 要设置的证书名称字符串。 + */ public void setCertificateName(String certificateName) { this.certificateName = certificateName; } + /** + * 获取证书相关背景图片的信息,外部代码通过调用该方法可以获取到当前证书对象对应的图片相关内容, + * 例如在需要展示证书图片或者处理图片相关业务逻辑时会用到,返回值为String类型。 + * @return 返回证书背景图片相关信息的字符串(如图片路径等)。 + */ public String getImage() { return image; } - + /** + * 设置证书相关背景图片的信息,外部代码可以调用该方法来更新当前证书对象对应的背景图片相关内容, + * 比如更换新的图片、修改图片存储路径等情况时,参数“image”为要设置的新的图片相关信息字符串(如新的图片路径等)。 + * @param image 要设置的背景图片相关信息字符串。 + */ public void setImage(String image) { this.image = image; } + /** + * 获取颁发证书的认证单位名称,外部代码调用该方法可以获取当前证书对象对应的认证单位名称, + * 在展示证书权威性、按认证单位进行统计查询等业务场景中会用到,返回值为String类型。 + * @return 返回认证单位名称字符串。 + */ public String getCertificationNuit() { return certificationNuit; } - + /** + * 设置颁发证书的认证单位名称,外部代码可以通过调用该方法来更新当前证书对象对应的认证单位名称, + * 例如认证单位发生变更等情况时,参数“certificationNuit”为要设置的新的认证单位名称字符串。 + * @param certificationNuit 要设置的认证单位名称字符串。 + */ public void setCertificationNuit(String certificationNuit) { this.certificationNuit = certificationNuit; } + /** + * 获取证书信息的创建时间,外部代码通过调用该方法可以获取到当前证书对象对应的创建时间, + * 在查询证书创建历史、按时间范围筛选证书等业务场景中会用到,返回值为LocalDateTime类型。 + * @return 返回证书的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } - + /** + * 设置证书信息的创建时间,不过由于该字段已经配置了在插入时自动填充的策略, + * 所以在常规业务场景下一般很少手动调用该方法去修改创建时间的值,只有在特殊的数据修正等情况下可能会用到, + * 参数“createTime”为要设置的新的创建时间值(LocalDateTime类型)。 + * @param createTime 要设置的创建时间(LocalDateTime类型)。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } - + /** + * 重写了Object类的toString方法,用于将Certificate对象转换为一个包含各属性值的字符串表示形式, + * 方便在调试程序、打印日志以及展示对象信息等场景下直观地查看证书对象各个属性具体的值, + * 按照格式“Certificate{属性名=属性值,...}”进行输出,返回值为字符串类型。 + * @return 返回表示Certificate对象各属性值的字符串。 + */ @Override public String toString() { return "Certificate{" + -- 2.34.1 From e4a113f6a7fe3bfaec3d7ecd5848414463e2d00f Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:36:17 +0800 Subject: [PATCH 07/25] 1 --- .../cn/org/alan/exam/model/entity/Exam.java | 251 +++++++++++++++++- 1 file changed, 246 insertions(+), 5 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Exam.java b/src/main/java/cn/org/alan/exam/model/entity/Exam.java index f6646a4..f9a7d98 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Exam.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Exam.java @@ -7,7 +7,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为Exam,实现了Serializable接口,这意味着该类的对象可以被序列化,常用于如对象持久化存储(例如保存到文件或者数据库备份恢复等场景)以及网络传输(如远程调用传递该对象等情况)。 + * 它对应数据库中的“t_exam”表,主要用于封装考试相关的各类信息,是对考试这一业务实体在代码层面的映射表示。 *
* * @author WeiJin @@ -17,252 +18,492 @@ import java.time.LocalDateTime; public class Exam implements Serializable { private static final long serialVersionUID = 1L; + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exam”中的不同字段,用于存储考试相关的各种详细信息,下面将逐个进行详细注释。 /** * id 考试表 + * 此属性作为考试记录在数据库表中的唯一标识符,对应“t_exam”表中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的考试记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证了每条考试记录都有一个唯一的编号。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 考试名称 + * 用于存储考试的具体名称信息,数据类型为String,例如“英语四级模拟考试”“计算机编程能力测试”等具体的考试名称都会存储在这个属性中,方便在业务逻辑中通过名称来识别、查询和展示不同的考试。 */ private String title; /** * 考试时长 + * 用来记录一场考试持续的时间长度,单位可能是分钟或者其他约定好的时间单位,类型为Integer,例如一场考试时长为90分钟,就会将90存储在此属性中,用于在安排考试、提醒考生等业务场景中参考使用。 */ private Integer examDuration; /** * 及格分 + * 表示通过该考试所需达到的最低分数,类型为Integer,不同考试根据其难度和设定有不同的及格分数线,该属性明确了考试的合格标准,方便后续判断考生是否通过考试等相关业务逻辑处理。 */ private Integer passedScore; /** * 总分数 + * 代表这场考试的满分分值,类型为Integer,所有题目分值总和即为总分数,可用于按比例计算各题型得分情况以及衡量考生成绩在总分中的占比等操作。 */ private Integer grossScore; /** * 最大切屏次数 + * 用于在在线考试等场景下,限制考生切换屏幕的最大允许次数,类型为Integer,主要是为了保证考试的严肃性和防止作弊行为,若考生切屏次数超过此限制,可能触发相应的警告或处理机制。 */ private Integer maxCount; /** * 创建者id + * 存储创建这场考试的用户的唯一标识符,类型为Integer,通过@TableField注解并设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入考试记录时,该字段会按照相应规则自动获取并填充对应的创建者ID值,以此来明确考试的创建人是谁,便于权限管理、溯源等操作。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 证书id + * 若这场考试通过后可获得相应的证书,该属性就用于存储与之关联的证书的唯一标识符,类型为Integer,用于建立考试与证书之间的关联关系,方便后续查询哪些考试对应哪些证书以及证书颁发等业务逻辑处理。 */ private Integer certificateId; /** * 单选题数量 + * 用来记录这场考试中单选题的题目数量,类型为Integer,在生成试卷、统计题型分布以及计算成绩占比等业务场景中会用到该信息。 */ private Integer radioCount; /** * 单选题成绩 数据库存储*100,前端正常输入和展示/100 + * 用于存储考生在单选题部分所获得的成绩,类型为Integer。需要注意的是,为了在数据库中更精确地存储小数成绩(例如0.8分存储为80),采取了数据库存储时乘以100的策略,而在前端展示以及正常输入时会除以100进行还原,保证数据在不同层面的处理和展示符合业务要求和用户习惯。 */ private Integer radioScore; /** - * 多选题数量 + * 多选题数量 + * 记录考试中多选题的题目数量,类型为Integer,同样在试卷相关业务逻辑(如试卷生成、题型统计等)中起到重要作用。 */ private Integer multiCount; /** * 多选题成绩 数据库存储*100,前端正常输入和展示/100 + * 存储考生在多选题部分的成绩,和单选题成绩类似,在数据库中存储时乘以100,前端展示和输入时除以100进行还原,类型为Integer,便于成绩的准确记录和合理展示。 */ private Integer multiScore; /** - * 判断题数量 + * 判断题数量 + * 用于存放考试中判断题的题目数量,类型为Integer,是试卷结构相关信息的一部分,在很多与试卷分析、成绩计算等有关的业务操作中会涉及到。 */ private Integer judgeCount; /** * 判断题成绩 数据库存储*100,前端正常输入和展示/100 + * 存储考生在判断题部分的得分情况,遵循数据库存储乘以100、前端展示和输入除以100的规则,类型为Integer,以便准确处理和展示这部分成绩。 */ private Integer judgeScore; /** * 简答题数量 + * 记录考试中简答题的题目数量,类型为Integer,在试卷相关的各种业务处理(如根据题型数量分配答题时间、统计试卷难度等)中是一个重要的参考数据。 */ private Integer saqCount; /** * 简答题成绩 数据库存储*100,前端正常输入和展示/100 + * 存储考生在简答题部分的成绩,同样采用数据库存储乘以100、前端展示和输入除以100的方式,类型为Integer,确保简答题成绩的妥善处理和准确展示。 */ private Integer saqScore; /** * 开始时间 YYYY-MM-DD hh:mm:ss + * 用于记录考试开始的具体时间,类型为LocalDateTime,其时间格式遵循“YYYY-MM-DD hh:mm:ss”的规范,方便在安排考试、统计考试时间范围以及判断考生是否按时参加考试等业务场景中使用该时间信息。 */ private LocalDateTime startTime; /** * 结束时间 YYYY-MM-DD hh:mm:ss + * 存储考试结束的具体时间,类型为LocalDateTime,格式同样为“YYYY-MM-DD hh:mm:ss”,可用于判断考试是否超时、统计考试时长等业务操作,与开始时间配合能完整地描述一场考试的时间范围。 */ private LocalDateTime endTime; /** - * 创建时间 YYYY-MM-DD hh:mm:ss + * 创建时间 YYYY-MM-DD hh:mm:ss + * 用于记录考试这条数据在系统中创建的具体时间,类型为LocalDateTime,格式符合“YYYY-MM-DD hh:mm:ss”要求。 + * 通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),也就是在向数据库插入考试记录时,该字段会自动填充为当前时间,方便后续进行数据溯源、统计等操作。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 逻辑删除字段 + * 这是一个用于标记考试记录是否被删除的字段,数据类型为Integer,通常采用约定的数值来表示删除状态,比如0表示未删除,1表示已删除等, + * 通过操作该字段的值,可以在业务逻辑层面实现对考试记录的软删除功能,而并非真正从数据库物理删除数据,便于数据的恢复、统计等操作。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Exam对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取逻辑删除字段的值,外部代码可以调用该方法来获取当前考试对象对应的“isDeleted”字段的值, + * 以此判断该考试记录在系统中是否已经被标记为删除状态,返回值为Integer类型。 + * @return 返回逻辑删除字段的值,即表示考试记录删除状态的整数值。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置逻辑删除字段的值,外部代码可以通过调用该方法来更新当前考试对象的“isDeleted”字段, + * 进而改变该考试记录在系统中的删除标记状态,参数“isDeleted”为要设置的表示删除状态的整数值。 + * @param isDeleted 要设置的逻辑删除字段的整数值。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } + /** + * 获取考试的唯一标识符(ID),外部代码通过调用该方法能够拿到当前考试对象对应的ID值, + * 方便在数据库操作、业务逻辑处理等场景中根据ID来识别、查找或操作具体的考试记录,返回值为Integer类型。 + * @return 返回考试的ID值。 + */ public Integer getId() { return id; } + /** + * 设置考试的唯一标识符(ID),不过鉴于ID通常由数据库按照自增长等规则自动生成, + * 所以在常规业务操作中较少直接使用该方法手动修改ID值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的考试ID整数值。 + * @param id 要设置的考试的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取考试的名称,外部代码调用该方法可以获取当前考试对象所对应的考试名称, + * 在展示考试信息、根据名称进行查询筛选等业务场景中会用到,返回值为String类型。 + * @return 返回考试的名称字符串。 + */ public String getTitle() { return title; } + /** + * 设置考试的名称,外部代码可以通过调用该方法来更新当前考试对象对应的考试名称, + * 比如考试名称发生变更等情况时,参数“title”为要设置的新的考试名称字符串。 + * @param title 要设置的考试名称字符串。 + */ public void setTitle(String title) { this.title = title; } + + /** + * 获取考试时长,外部代码通过调用该方法可以获取当前考试对象对应的考试时长信息, + * 在安排考试、提醒考生等业务场景中会用到,返回值为Integer类型。 + * @return 返回考试时长的整数值。 + */ public Integer getExamDuration() { return examDuration; } + /** + * 设置考试时长,外部代码可以通过调用该方法来更新当前考试对象对应的考试时长, + * 例如考试时间调整等情况时,参数“examDuration”为要设置的新的考试时长整数值。 + * @param examDuration 要设置的考试时长整数值。 + */ public void setExamDuration(Integer examDuration) { this.examDuration = examDuration; } + + /** + * 获取及格分,外部代码调用该方法可以获取当前考试对象对应的及格分数值, + * 在判断考生是否通过考试等业务场景中会用到,返回值为Integer类型。 + * @return 返回及格分的整数值。 + */ public Integer getPassedScore() { return passedScore; } + /** + * 设置及格分,外部代码可以通过调用该方法来更新当前考试对象对应的及格分数, + * 比如考试难度调整导致及格线变化等情况时,参数“passedScore”为要设置的新的及格分数整数值。 + * @param passedScore 要设置的及格分整数值。 + */ public void setPassedScore(Integer passedScore) { this.passedScore = passedScore; } + + /** + * 获取总分数,外部代码调用该方法可以获取当前考试对象对应的总分数值, + * 在按比例计算各题型得分情况、衡量考生成绩等业务场景中会用到,返回值为Integer类型。 + * @return 返回总分数的整数值。 + */ public Integer getGrossScore() { return grossScore; } + /** + * 设置总分数,外部代码可以通过调用该方法来更新当前考试对象对应的总分数, + * 例如考试题型分值调整等情况导致总分变化时,参数“grossScore”为要设置的新的总分数整数值。 + * @param grossScore 要设置的总分数整数值。 + */ public void setGrossScore(Integer grossScore) { this.grossScore = grossScore; } + + /** + * 获取最大切屏次数,外部代码通过调用该方法可以获取当前考试对象对应的最大切屏次数值, + * 在在线考试等场景下用于判断考生是否违规切屏等业务场景中会用到,返回值为Integer类型。 + * @return 返回最大切屏次数的整数值。 + */ public Integer getMaxCount() { return maxCount; } + /** + * 设置最大切屏次数,外部代码可以通过调用该方法来更新当前考试对象对应的最大切屏次数, + * 比如根据考试要求调整切屏限制等情况时,参数“maxCount”为要设置的新的最大切屏次数整数值。 + * @param maxCount 要设置的最大切屏次数整数值。 + */ public void setMaxCount(Integer maxCount) { this.maxCount = maxCount; } + + /** + * 获取创建者id,外部代码调用该方法可以获取当前考试对象对应的创建者的ID值, + * 便于在权限管理、溯源等业务场景中确定考试的创建人是谁,返回值为Integer类型。 + * @return 返回创建者的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置创建者id,外部代码可以通过调用该方法来更新当前考试对象对应的创建者ID值, + * 在一些特殊的数据修改、权限变更等场景下可能会用到,参数“userId”为要设置的新的创建者ID整数值。 + * @param userId 要设置的创建者的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取证书id,外部代码调用该方法可以获取当前考试对象对应的关联证书的ID值, + * 用于在查询考试与证书关联关系、证书颁发等业务场景中确定对应的证书,返回值为Integer类型。 + * @return 返回证书的ID值。 + */ public Integer getCertificateId() { return certificateId; } + /** + * 设置证书id,外部代码可以通过调用该方法来更新当前考试对象对应的关联证书的ID值, + * 比如证书关联关系变更等情况时,参数“certificateId”为要设置的新的证书ID整数值。 + * @param certificateId 要设置的证书的ID整数值。 + */ public void setCertificateId(Integer certificateId) { this.certificateId = certificateId; } + + /** + * 获取单选题数量,外部代码调用该方法可以获取当前考试对象对应的单选题数量值, + * 在试卷生成、题型分布统计等业务场景中会用到,返回值为Integer类型。 + * @return 返回单选题数量的整数值。 + */ public Integer getRadioCount() { return radioCount; } + /** + * 设置单选题数量,外部代码可以通过调用该方法来更新当前考试对象对应的单选题数量, + * 例如试卷调整导致单选题数量变化等情况时,参数“radioCount”为要设置的新的单选题数量整数值。 + * @param radioCount 要设置的单选题数量整数值。 + */ public void setRadioCount(Integer radioCount) { this.radioCount = radioCount; } + + /** + * 获取单选题成绩,外部代码调用该方法可以获取当前考试对象对应的单选题成绩值, + * 在成绩统计、展示等业务场景中会用到,需要注意数据库存储和前端展示的转换规则,返回值为Integer类型。 + * @return 返回单选题成绩的整数值。 + */ public Integer getRadioScore() { return radioScore; } + /** + * 设置单选题成绩,外部代码可以通过调用该方法来更新当前考试对象对应的单选题成绩, + * 比如成绩修改等情况时,参数“radioScore”为要设置的新的单选题成绩整数值,同时要遵循数据库存储和前端展示的转换规则。 + * @param radioScore 要设置的单选题成绩整数值。 + */ public void setRadioScore(Integer radioScore) { this.radioScore = radioScore; } + /** + * 获取多选题数量,外部代码通过调用该方法可以获取当前考试对象对应的多选题的题目数量值, + * 此数量信息在试卷相关业务逻辑中非常重要,例如用于试卷结构分析、根据题型数量合理分配答题时间等场景,返回值为Integer类型。 + * @return 返回多选题数量的整数值。 + */ public Integer getMultiCount() { return multiCount; } + /** + * 设置多选题数量,外部代码可以通过调用该方法来更新当前考试对象对应的多选题数量, + * 当试卷内容进行调整,比如增加或减少多选题数量时,可使用该方法进行修改,参数“multiCount”为要设置的新的多选题数量整数值。 + * @param multiCount 要设置的多选题数量整数值。 + */ public void setMultiCount(Integer multiCount) { this.multiCount = multiCount; } + /** + * 获取多选题成绩,外部代码调用该方法可以获取当前考试对象对应的考生在多选题部分所获得的成绩值, + * 要注意其存储和展示遵循数据库存储乘以100、前端展示和输入除以100的规则,在成绩统计、展示给用户查看等业务场景中会用到,返回值为Integer类型。 + * @return 返回多选题成绩的整数值。 + */ public Integer getMultiScore() { return multiScore; } + /** + * 设置多选题成绩,外部代码可以通过调用该方法来更新当前考试对象对应的多选题成绩, + * 例如在成绩复查、修正等情况下需要修改多选题成绩时,参数“multilScore”(此处原代码变量名可能有误,应为“multiScore”)为要设置的新的多选题成绩整数值,同时需遵循相应的存储和展示转换规则。 + * @param multilScore 要设置的多选题成绩整数值。 + */ public void setMultiScore(Integer multilScore) { this.multiScore = multilScore; } + /** + * 获取判断题数量,外部代码通过调用该方法可以获取当前考试对象对应的判断题的题目数量值, + * 该数量在试卷整体分析、统计不同题型占比等业务操作中会被用到,返回值为Integer类型。 + * @return 返回判断题数量的整数值。 + */ public Integer getJudgeCount() { return judgeCount; } + /** + * 设置判断题数量,外部代码可以通过调用该方法来更新当前考试对象对应的判断题数量, + * 当对试卷进行重新设计、调整判断题的题目数量时,可通过传入相应的整数值来修改,参数“judgeCount”为要设置的新的判断题数量整数值。 + * @param judgeCount 要设置的判断题数量整数值。 + */ public void setJudgeCount(Integer judgeCount) { this.judgeCount = judgeCount; } + /** + * 获取判断题成绩,外部代码调用该方法可以获取当前考试对象对应的考生在判断题部分所获得的成绩值, + * 同样遵循数据库存储乘以100、前端展示和输入除以100的规则,在成绩相关的各种业务处理场景(如成绩汇总、展示等)中会用到,返回值为Integer类型。 + * @return 返回判断题成绩的整数值。 + */ public Integer getJudgeScore() { return judgeScore; } + /** + * 设置判断题成绩,外部代码可以通过调用该方法来更新当前考试对象对应的判断题成绩, + * 比如因特殊情况需要对考生的判断题成绩进行修改时,参数“judgeScore”为要设置的新的判断题成绩整数值,且要符合存储与展示的转换要求。 + * @param judgeScore 要设置的判断题成绩整数值。 + */ public void setJudgeScore(Integer judgeScore) { this.judgeScore = judgeScore; } + /** + * 获取简答题数量,外部代码通过调用该方法可以获取当前考试对象对应的简答题的题目数量值, + * 在试卷结构分析、评估考试难度以及根据题型安排答题时间等业务场景中,简答题数量是一个重要的参考因素,返回值为Integer类型。 + * @return 返回简答题数量的整数值。 + */ public Integer getSaqCount() { return saqCount; } + /** + * 设置简答题数量,外部代码可以通过调用该方法来更新当前考试对象对应的简答题数量, + * 当试卷内容调整,涉及简答题数量的变化时,可通过传入合适的整数值来更新,参数“saqCount”为要设置的新的简答题数量整数值。 + * @param saqCount 要设置的简答题数量整数值。 + */ public void setSaqCount(Integer saqCount) { this.saqCount = saqCount; } + /** + * 获取简答题成绩,外部代码调用该方法可以获取当前考试对象对应的考生在简答题部分所获得的成绩值, + * 遵循数据库存储乘以100、前端展示和输入除以100的规则,在成绩统计、分析以及展示给考生查看等业务场景中会用到,返回值为Integer类型。 + * @return 返回简答题成绩的整数值。 + */ public Integer getSaqScore() { return saqScore; } + /** + * 设置简答题成绩,外部代码可以通过调用该方法来更新当前考试对象对应的简答题成绩, + * 例如在成绩复核、修改等情况下需要调整简答题成绩时,参数“saqScore”为要设置的新的简答题成绩整数值,同时要依照相应的存储和展示转换规则进行操作。 + * @param saqScore 要设置的简答题成绩整数值。 + */ public void setSaqScore(Integer saqScore) { this.saqScore = saqScore; } + /** + * 获取考试开始时间,外部代码通过调用该方法可以获取当前考试对象对应的考试开始的具体时间信息, + * 其类型为LocalDateTime,时间格式遵循“YYYY-MM-DD hh:mm:ss”规范,在安排考试日程、判断考生是否按时参加考试以及统计考试时间范围等业务场景中会用到该时间值,返回值为LocalDateTime类型。 + * @return 返回考试开始时间。 + */ public LocalDateTime getStartTime() { return startTime; } + /** + * 设置考试开始时间,外部代码可以通过调用该方法来更新当前考试对象对应的考试开始时间, + * 比如因特殊情况调整考试时间安排时,参数“startTime”为要设置的新的考试开始时间(LocalDateTime类型)值。 + * @param startTime 要设置的考试开始时间(LocalDateTime类型)值。 + */ public void setStartTime(LocalDateTime startTime) { this.startTime = startTime; } + /** + * 获取考试结束时间,外部代码通过调用该方法可以获取当前考试对象对应的考试结束的具体时间信息, + * 类型为LocalDateTime,格式为“YYYY-MM-DD hh:mm:ss”,与开始时间配合可完整描述考试的时间区间,在判断考试是否超时、统计考试时长等业务操作中会用到该时间值,返回值为LocalDateTime类型。 + * @return 返回考试结束时间。 + */ public LocalDateTime getEndTime() { return endTime; } + /** + * 设置考试结束时间,外部代码可以通过调用该方法来更新当前考试对象对应的考试结束时间, + * 例如因特殊情况对考试时长进行调整,进而需要修改结束时间时,参数“endTime”为要设置的新的考试结束时间(LocalDateTime类型)值。 + * @param endTime 要设置的考试结束时间(LocalDateTime类型)值。 + */ public void setEndTime(LocalDateTime endTime) { this.endTime = endTime; } + /** + * 获取考试创建时间,外部代码通过调用该方法可以获取当前考试对象对应的在系统中创建该考试记录的具体时间信息, + * 类型为LocalDateTime,格式是“YYYY-MM-DD hh:mm:ss”,通过@TableField注解设置了插入时自动填充策略,方便后续进行数据溯源、统计不同时间段创建的考试数量等操作,返回值为LocalDateTime类型。 + * @return 返回考试创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置考试创建时间,不过由于该字段已经配置了在插入时自动填充的策略, + * 所以在常规业务场景下一般很少手动调用该方法去修改创建时间的值,只有在特殊的数据修正等情况下可能会用到, + * 参数“createTime”为要设置的新的创建时间值(LocalDateTime类型)。 + * @param createTime 要设置的创建时间(LocalDateTime类型)值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } - + /** + * 重写了Object类的toString方法,用于将Exam对象转换为一个包含各属性值的字符串表示形式, + * 按照“Exam{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看考试对象各个属性具体的值,返回值为字符串类型。 + * @return 返回表示Exam对象各属性值的字符串。 + */ @Override public String toString() { return "Exam{" + -- 2.34.1 From 6d93e31791b0d56f10225ee6b79c6cb1ba8f44d3 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:41:01 +0800 Subject: [PATCH 08/25] 1 --- .../org/alan/exam/model/entity/ExamGrade.java | 59 +++++++++++++++++-- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/ExamGrade.java b/src/main/java/cn/org/alan/exam/model/entity/ExamGrade.java index 902b923..20893ed 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/ExamGrade.java +++ b/src/main/java/cn/org/alan/exam/model/entity/ExamGrade.java @@ -8,7 +8,8 @@ import java.io.Serializable; /** *- * + * 该类名为ExamGrade,实现了Serializable接口,这使得该类的对象能够被序列化,可用于如将对象持久化存储到文件、在网络间传输等场景,方便数据的交换与保存。 + * 它对应数据库中的“t_exam_grade”表,主要用于封装考试与班级之间关联关系的相关信息,体现了哪一场考试关联了哪个班级这样的业务关系。 *
* * @author WeiJin @@ -18,51 +19,97 @@ import java.io.Serializable; public class ExamGrade implements Serializable { private static final long serialVersionUID = 1L; + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exam_grade”中的不同字段,用于存储考试与班级关联关系的关键信息,下面将逐个进行注释说明。 /** * id 考试与班级关系表 + * 此属性作为该考试与班级关系表记录的唯一标识符,对应数据库表“t_exam_grade”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),确保每条关系记录在数据库中都有一个独一无二的编号,方便后续对关系记录进行查找、操作等处理。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 考试id 唯一 + * 用于存储关联的考试的唯一标识符,类型为Integer,通过该字段可以明确是哪一场考试与班级产生了关联关系, + * 它会和存储考试信息的表(例如前面提到的“t_exam”表)中的考试ID进行关联,便于在业务逻辑中查询特定考试所涉及的班级等相关操作。 */ private Integer examId; /** * 班级id 唯一 + * 用来存放与之关联的班级的唯一标识符,类型为Integer,借助这个字段能够确定是哪个班级参与了特定的考试, + * 会和存储班级信息的表(具体表名根据实际业务而定)中的班级ID相互关联,在诸如按班级统计考试情况、安排班级考试等业务场景中起到关键作用。 */ private Integer gradeId; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ExamGrade对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取考试与班级关系表记录的唯一ID,外部代码通过调用该方法能够拿到当前ExamGrade对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的关系记录,返回值为Integer类型。 + * @return 返回关系表记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置考试与班级关系表记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的关系表记录的ID整数值。 + * @param id 要设置的关系表记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取关联的考试的ID,外部代码调用该方法可以获取当前ExamGrade对象对应的考试ID值, + * 用于在业务逻辑中查找与该班级相关的考试信息、判断班级参与了哪些考试等操作,返回值为Integer类型。 + * @return 返回关联的考试的ID值。 + */ public Integer getExamId() { return examId; } + /** + * 设置关联的考试的ID,当存在考试信息变更(如考试ID更新或者重新关联不同考试等情况)时, + * 可以通过调用该方法来更新当前ExamGrade对象中的考试ID值,参数“examId”为要设置的考试的ID整数值。 + * @param examId 要设置的考试的ID整数值。 + */ public void setExamId(Integer examId) { this.examId = examId; } + + /** + * 获取关联的班级的ID,外部代码调用该方法可以获取当前ExamGrade对象对应的班级ID值, + * 在业务逻辑中可用于查询该考试涉及哪些班级、按班级进行相关统计等操作,返回值为Integer类型。 + * @return 返回关联的班级的ID值。 + */ public Integer getGradeId() { return gradeId; } + /** + * 设置关联的班级的ID,例如班级信息调整导致班级ID变化或者重新关联不同班级时, + * 可以通过调用该方法来更新当前ExamGrade对象中的班级ID值,参数“gradeId”为要设置的班级的ID整数值。 + * @param gradeId 要设置的班级的ID整数值。 + */ public void setGradeId(Integer gradeId) { this.gradeId = gradeId; } + /** + * 重写了Object类的toString方法,用于将ExamGrade对象转换为一个包含各属性值的字符串表示形式, + * 按照“ExamGrade{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看考试与班级关系对象各个属性具体的值,返回值为字符串类型。 + * @return 返回表示ExamGrade对象各属性值的字符串。 + */ @Override public String toString() { return "ExamGrade{" + - "id=" + id + - ", examId=" + examId + - ", gradeId=" + gradeId + - "}"; + "id=" + id + + ", examId=" + examId + + ", gradeId=" + gradeId + + "}"; } -} +} \ No newline at end of file -- 2.34.1 From b7a93073325e76cde51765e122adea5a0b395713 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:45:16 +0800 Subject: [PATCH 09/25] 1 --- .../alan/exam/model/entity/ExamQuAnswer.java | 160 ++++++++++++++++-- 1 file changed, 145 insertions(+), 15 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/ExamQuAnswer.java b/src/main/java/cn/org/alan/exam/model/entity/ExamQuAnswer.java index 19ac9cb..5090943 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/ExamQuAnswer.java +++ b/src/main/java/cn/org/alan/exam/model/entity/ExamQuAnswer.java @@ -5,10 +5,10 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; - /** *- * + * 该类名为ExamQuAnswer,实现了Serializable接口,这意味着此类的对象可以被序列化,便于在诸如将对象持久化存储到磁盘、在网络中传输等场景下使用,保证数据的完整性以及可以在不同环境间传递对象信息。 + * 它对应数据库中的“t_exam_qu_answer”表,主要用于封装考试中试题答案相关的各种信息,涵盖了用户作答情况以及答案本身的一些属性等内容,是对考试答题记录在代码层面的一种映射表示。 *
* * @author WeiJin @@ -18,142 +18,272 @@ import java.io.Serializable; public class ExamQuAnswer implements Serializable { private static final long serialVersionUID = 1L; + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exam_qu_answer”中的不同字段,用于存储考试答题相关的详细信息,下面将逐个进行注释说明。 /** * id 考试记录答案 + * 此属性作为考试答题记录的唯一标识符,对应数据库表“t_exam_qu_answer”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的答题记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条答题记录都有一个唯一的编号,方便后续对答题记录进行查询、管理等操作。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户id + * 用于存储作答该试题的用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户做出了相应的答题记录,便于关联用户信息以及后续进行诸如按用户统计答题情况、查看特定用户的考试作答详情等业务操作。 */ private Integer userId; /** * 考试id + * 用来存放该答题记录所属的考试的唯一标识符,类型为Integer,借助这个属性能够确定答题记录是对应哪一场具体的考试, + * 它会和存储考试信息的表(例如前面提到的“t_exam”表)中的考试ID进行关联,在按考试分析答题情况、统计考试成绩等业务场景中起到关键作用。 */ private Integer examId; /** * 试题id + * 表示该答题记录所针对的具体试题的唯一标识符,类型为Integer,通过这个字段可以精准定位到是哪一道试题的作答情况,方便在试题管理、分析每道题的答题正确率等业务逻辑中使用。 */ private Integer questionId; /** * 题目类型 + * 用于存储试题的类型,类型为Integer,可能通过特定的数值来代表不同的题目类型,比如1代表单选题、2代表多选题、3代表简答题等(具体数值与题目类型的对应关系需根据业务定义), + * 该属性有助于在业务处理中根据不同题目类型采取相应的逻辑,例如客观题和主观题在答案处理、评分等方面会有不同的操作。 */ private Integer questionType; /** * 答案id 用于客观题,多选题id使用“,”分隔 + * 针对客观题(如单选题、多选题等),用于存储答案的唯一标识符,类型为String。对于多选题来说,由于可能有多个正确答案选项,其答案ID会使用“,”进行分隔,方便后续解析和判断答案的正确性, + * 可以通过该字段与存储答案选项信息的表(具体表根据业务而定)进行关联,以确定用户选择的答案是否正确。 */ private String answerId; /** * 答案内容 用于主观题 + * 用于存储主观题(如简答题、论述题等)的答案内容,类型为String,用户输入的文字性回答都会存储在此属性中,方便后续进行人工阅卷或者通过特定算法进行内容分析、评分等操作。 */ private String answerContent; /** * 是否选中 0未选中 1选中 + * 用于标记某个选项或者内容是否被用户选中,类型为Integer,取值为0表示未选中,1表示选中,常用于在答题过程中记录用户对选项的操作情况,例如在一些交互性较强的在线考试系统中,跟踪用户答题时的选择动作。 */ private Integer checkout; /** * 是否标记 0未标记 1标记 + * 用来表示该答题记录是否被用户进行了标记,类型为Integer,0代表未标记,1代表标记,通常在考试系统中提供给用户标记不确定或者需要后续重点检查的题目,方便在答题过程中做特殊标记以便后续回顾。 */ private Integer isSign; /** * 是否正确 用于客观题,0错误 1正确 + * 针对客观题,用于标记用户给出的答案是否正确,类型为Integer,0表示答案错误,1表示答案正确,便于系统自动进行成绩统计以及分析各题的答题准确率等业务操作。 */ private Integer isRight; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ExamQuAnswer对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取考试答题记录的唯一ID,外部代码通过调用该方法能够拿到当前ExamQuAnswer对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的答题记录,返回值为Integer类型。 + * @return 返回答题记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置考试答题记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的答题记录的ID整数值。 + * @param id 要设置的答题记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取作答该试题的用户的ID,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的用户ID值, + * 用于在业务逻辑中查找该用户的其他答题记录、关联用户相关信息等操作,返回值为Integer类型。 + * @return 返回用户的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置作答该试题的用户的ID,例如在数据修正、重新关联答题记录与用户等情况时, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的用户ID值,参数“userId”为要设置的用户的ID整数值。 + * @param userId 要设置的用户的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取答题记录所属的考试的ID,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的考试ID值, + * 用于在业务逻辑中查找该考试的其他答题记录、统计考试整体答题情况等操作,返回值为Integer类型。 + * @return 返回考试的ID值。 + */ public Integer getExamId() { return examId; } + /** + * 设置答题记录所属的考试的ID,当存在考试信息变更(如考试ID更新或者重新关联答题记录到不同考试等情况)时, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的考试ID值,参数“examId”为要设置的考试的ID整数值。 + * @param examId 要设置的考试的ID整数值。 + */ public void setExamId(Integer examId) { this.examId = examId; } + + /** + * 获取答题记录所针对的试题的ID,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的试题ID值, + * 用于在业务逻辑中查找该试题的其他答题情况、分析该题的答题正确率等操作,返回值为Integer类型。 + * @return 返回试题的ID值。 + */ public Integer getQuestionId() { return questionId; } + /** + * 设置答题记录所针对的试题的ID,例如试题信息调整导致试题ID变化或者重新关联答题记录到不同试题等情况时, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的试题ID值,参数“questionId”为要设置的试题的ID整数值。 + * @param questionId 要设置的试题的ID整数值。 + */ public void setQuestionId(Integer questionId) { this.questionId = questionId; } + + /** + * 获取试题的类型,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的试题类型值, + * 用于在业务逻辑中根据不同题目类型采取相应的处理逻辑,如客观题和主观题不同的答案处理方式等,返回值为Integer类型。 + * @return 返回试题类型的值。 + */ public Integer getQuestionType() { return questionType; } + /** + * 设置试题的类型,在一些特殊情况,如题目类型定义变更或者数据修正等场景下, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的试题类型值,参数“questionType”为要设置的试题类型的整数值。 + * @param questionType 要设置的试题类型的整数值。 + */ public void setQuestionType(Integer questionType) { this.questionType = questionType; } + + /** + * 获取客观题的答案id(多选题用“,”分隔),外部代码调用该方法可以获取当前ExamQuAnswer对象对应的客观题答案ID字符串, + * 用于与答案选项信息关联以及判断答案正确性等操作,返回值为String类型。 + * @return 返回客观题答案ID字符串。 + */ public String getAnswerId() { return answerId; } + /** + * 设置客观题的答案id(多选题用“,”分隔),例如在答案信息更新、修正等情况下, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的客观题答案ID字符串,参数“answerId”为要设置的客观题答案ID字符串值。 + * @param answerId 要设置的客观题答案ID字符串值。 + */ public void setAnswerId(String answerId) { this.answerId = answerId; } + + /** + * 获取主观题的答案内容,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的主观题答案内容字符串, + * 用于人工阅卷、内容分析或者评分等操作,返回值为String类型。 + * @return 返回主观题答案内容字符串。 + */ public String getAnswerContent() { return answerContent; } + /** + * 设置主观题的答案内容,在用户修改答案、录入新的答案或者进行数据修正等场景下, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的主观题答案内容字符串,参数“answerContent”为要设置的主观题答案内容字符串值。 + * @param answerContent 要设置的主观题答案内容字符串值。 + */ public void setAnswerContent(String answerContent) { this.answerContent = answerContent; } + + /** + * 获取是否选中的状态值,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的选项是否被选中的状态值(0未选中,1选中), + * 常用于跟踪用户答题时的选择动作等业务场景,返回值为Integer类型。 + * @return 返回是否选中的状态值(0或1)。 + */ public Integer getCheckout() { return checkout; } + /** + * 设置是否选中的状态值,例如在模拟用户答题操作、修正答题记录中选中状态等情况时, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的是否选中状态值,参数“checkout”为要设置的是否选中的整数值(0或1)。 + * @param checkout 要设置的是否选中的整数值(0或1)。 + */ public void setCheckout(Integer checkout) { this.checkout = checkout; } + + /** + * 获取是否标记的状态值,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的答题记录是否被标记的状态值(0未标记,1标记), + * 用于在考试系统中判断用户是否对题目做了特殊标记以便后续回顾等操作,返回值为Integer类型。 + * @return 返回是否标记的状态值(0或1)。 + */ public Integer getIsSign() { return isSign; } + /** + * 设置是否标记的状态值,在用户重新标记题目、修正答题记录中标记状态等场景下, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的是否标记状态值,参数“isSign”为要设置的是否标记的整数值(0或1)。 + * @param isSign 要设置的是否标记的整数值(0或1)。 + */ public void setIsSign(Integer isSign) { this.isSign = isSign; } + + /** + * 获取客观题答案是否正确的状态值,外部代码调用该方法可以获取当前ExamQuAnswer对象对应的客观题答案是否正确的状态值(0错误,1正确), + * 便于系统自动进行成绩统计以及分析各题的答题准确率等业务操作,返回值为Integer类型。 + * @return 返回客观题答案是否正确的状态值(0或1)。 + */ public Integer getIsRight() { return isRight; } + /** + * 设置客观题答案是否正确的状态值,例如在成绩复查、修正答案正确性判断等情况时, + * 可以通过调用该方法来更新当前ExamQuAnswer对象中的客观题答案是否正确状态值,参数“isRight”为要设置的客观题答案是否正确的整数值(0或1)。 + */ public void setIsRight(Integer isRight) { this.isRight = isRight; } + /** + * 重写了Object类的toString方法,用于将ExamQuAnswer对象转换为一个包含各属性值的字符串表示形式, + * 按照“ExamQuAnswer{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看考试答题记录对象各个属性具体的值,返回值为字符串类型。 + * @return 返回表示ExamQuAnswer对象各属性值的字符串。 + */ @Override public String toString() { return "ExamQuAnswer{" + - "id=" + id + - ", userId=" + userId + - ", examId=" + examId + - ", questionId=" + questionId + - ", questionType=" + questionType + - ", answerId=" + answerId + - ", answerContent=" + answerContent + - ", checkout=" + checkout + - ", isSign=" + isSign + - ", isRight=" + isRight + - "}"; - } -} + "id=" + id + + ", userId=" + userId + + ", examId=" + examId + + ", questionId=" + questionId + + ", questionType=" + questionType + + ", answerId=" + answerId + + ", answerContent=" + answerContent + + ", checkout=" + checkout + + ", isSign=" + isSign + + ", isRight=" + isRight + + "}"; + } +} \ No newline at end of file -- 2.34.1 From bde8feba709fb9b877ef8a5b5848446f930303e2 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:50:58 +0800 Subject: [PATCH 10/25] 1 --- .../alan/exam/model/entity/ExamQuestion.java | 262 ++++++++++++++++-- 1 file changed, 235 insertions(+), 27 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/ExamQuestion.java b/src/main/java/cn/org/alan/exam/model/entity/ExamQuestion.java index f2628e0..e081a08 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/ExamQuestion.java +++ b/src/main/java/cn/org/alan/exam/model/entity/ExamQuestion.java @@ -8,92 +8,300 @@ import com.baomidou.mybatisplus.annotation.TableName; * @Author Alan * @Version * @Date 2024/4/7 3:42 PM + * 该类名为ExamQuestion,用于表示考试相关的试题信息,在整个考试系统的数据模型中起到关键作用, + * 它对应数据库中的“t_exam_question”表,通过此类的各个属性来映射数据库表中的相应字段,以实现对试题相关数据的操作与管理。 + * 同时,此类实现了序列化接口(虽然代码中未明确写出实现的是Serializable接口,但根据规范及常见用法推测应是此接口,用于使对象具备可序列化能力), + * 方便对象在诸如网络传输、持久化存储等场景下进行数据交换和保存。 */ @TableName("t_exam_question") public class ExamQuestion { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L。 + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exam_question”中的不同字段,用于存储试题相关的关键信息,下面将逐个进行注释说明。 + + /** + * 主键ID,用于唯一标识一条试题与考试关联的记录。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO), + * 意味着在向数据库插入新的试题与考试关联记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条这样的记录在数据库中都有一个独一无二的编号,方便后续对记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理。 + */ @TableId(value = "id", type = IdType.AUTO) private Integer id; + /** * 考试id 唯一 + * 用于存储该试题所属考试的唯一标识符,类型为Integer,通过这个字段可以明确该试题是属于哪一场具体的考试, + * 它会和存储考试信息的表(例如可能名为“t_exam”的表)中的考试ID进行关联,便于在业务逻辑中查询特定考试包含哪些试题、 + * 根据考试来统计试题相关情况(如试题总分、不同类型试题分布等)以及在生成试卷等场景下确定试题归属等操作。 */ private Integer examId; /** * 试题id 唯一 + * 表示该试题自身的唯一标识符,类型为Integer,即便在不同考试中可能出现相同内容的试题,每个试题在系统内也有其独立的唯一编号, + * 方便在试题管理(如试题的增删改查、复用等操作)以及答题记录关联(知道是针对哪道具体试题作答)等业务场景中准确地定位和操作具体的试题。 */ private Integer questionId; + /** * 分数 + * 用于记录该试题在所属考试中所占的分值,类型为Integer,不同试题根据其难度、重要性等因素会被赋予不同的分值, + * 这个分值在计算考试总分、统计各部分得分情况以及分析成绩构成等业务操作中起到关键作用。 */ private Integer score; + /** * 排序 + * 用来确定试题在考试中的呈现顺序,类型为Integer,例如在生成试卷时,按照这个排序字段的值从小到大的顺序来排列试题, + * 保证试卷中试题的展示顺序符合预期的业务要求,方便考生按顺序答题以及在试卷排版、展示等方面进行合理安排。 */ private Integer sort; + /** * 类型 + * 用于标识试题的类型,类型为Integer,可能通过特定的数值来代表不同的题目类型,比如1代表单选题、2代表多选题、3代表简答题等(具体数值与题目类型的对应关系需根据业务定义), + * 该属性有助于在业务处理中根据不同题目类型采取相应的逻辑,例如不同类型试题在答案处理、评分、展示格式等方面通常会有不同的操作方式。 */ private Integer type; - @Override - public String toString() { - return "ExamQuestion{" + - "id=" + id + - ", examId=" + examId + - ", questionId=" + questionId + - ", score=" + score + - ", sort=" + sort + - ", type=" + type + - '}'; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ExamQuestion对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取试题与考试关联记录的唯一ID,外部代码通过调用该方法能够拿到当前ExamQuestion对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的关联记录,返回值为Integer类型。 + * @return 返回关联记录的ID值。 + */ + public Integer getId() { + return id; } + /** + * 设置试题与考试关联记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的关联记录的ID整数值。 + * @param id 要设置的关联记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + /** + * 获取该试题所属考试的ID,外部代码调用该方法可以获取当前ExamQuestion对象对应的考试ID值, + * 用于在业务逻辑中查找该考试包含的其他试题、关联考试相关信息等操作,返回值为Integer类型。 + * @return 返回考试的ID值。 + */ + public Integer getExamId() { + return examId; + } + + /** + * 设置该试题所属考试的ID,当存在考试信息变更(如考试ID更新或者重新关联试题到不同考试等情况)时, + * 可以通过调用该方法来更新当前ExamQuestion对象中的考试ID值,参数“examId”为要设置的考试的ID整数值。 + * @param examId 要设置的考试的ID整数值。 + */ public void setExamId(Integer examId) { this.examId = examId; } + /** + * 获取试题自身的唯一ID,外部代码调用该方法可以获取当前ExamQuestion对象对应的试题ID值, + * 用于在业务逻辑中查找该试题的详细信息、关联答题记录等操作,返回值为Integer类型。 + * @return 返回试题的ID值。 + */ + public Integer getQuestionId() { + return questionId; + } + + /** + * 设置试题自身的唯一ID,例如在试题信息调整导致试题ID变化或者重新关联试题等情况时, + * 可以通过调用该方法来更新当前ExamQuestion对象中的试题ID值,参数“questionId”为要设置的试题的ID整数值。 + * @param questionId 要设置的试题的ID整数值。 + */ public void setQuestionId(Integer questionId) { this.questionId = questionId; } + /** + * 获取试题的分值,外部代码调用该方法可以获取当前ExamQuestion对象对应的试题分值, + * 在计算考试总分、统计各部分得分情况以及分析成绩构成等业务操作中会用到该分值信息,返回值为Integer类型。 + * @return 返回试题的分值。 + */ + public Integer getScore() { + return score; + } + + /** + * 设置试题的分值,在试题难度调整、分值分配变化等情况下, + * 可以通过调用该方法来更新当前ExamQuestion对象中的试题分值,参数“score”为要设置的试题的分值整数值。 + * @param score 要设置的试题的分值整数值。 + */ public void setScore(Integer score) { this.score = score; } + /** + * 获取试题在考试中的排序序号,外部代码调用该方法可以获取当前ExamQuestion对象对应的试题排序值, + * 用于在生成试卷、展示试题顺序等业务场景中保证试题的正确排列顺序,返回值为Integer类型。 + * @return 返回试题的排序序号。 + */ + public Integer getSort() { + return sort; + } + + /** + * 设置试题在考试中的排序序号,当需要调整试卷中试题的顺序,比如进行试题位置调换、重新排版等情况时, + * 可以通过调用该方法来更新当前ExamQuestion对象中的试题排序值,参数“sort”为要设置的试题的排序整数值。 + * @param sort 要设置的试题的排序整数值。 + */ public void setSort(Integer sort) { this.sort = sort; } + /** + * 获取试题的类型,外部代码调用该方法可以获取当前ExamQuestion对象对应的试题类型值, + * 用于在业务逻辑中根据不同题目类型采取相应的处理逻辑,如不同类型试题在答案处理、评分、展示格式等方面的差异化操作,返回值为Integer类型。 + * @return 返回试题类型的值。 + */ + public Integer getType() { + return type; + } + + /** + * 设置试题的类型,在一些特殊情况,如题目类型定义变更或者数据修正等场景下, + * 可以通过调用该方法来更新当前ExamQuestion对象中的试题类型值,参数“type”为要设置的试题类型的整数值。 + * @param type 要设置的试题类型的整数值。 + */ public void setType(Integer type) { this.type = type; } - public Integer getId() { - return id; + /** + * 重写了Object类的toString方法,用于将ExamQuestion对象转换为一个包含各属性值的字符串表示形式, + * 按照“ExamQuestion{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看考试试题对象各个属性具体的值,返回值为字符串类型。 + * @return 返回表示ExamQuestion对象各属性值的字符串。 + */ + @Override + public String toString() { + return "ExamQuestion{" + + "id=" + id + + ", examId=" + examId + + ", questionId=" + questionId + + ", score=" + score + + ", sort=" + sort + + ", type=" + type + + '}'; } +} +/** + * 设置试题与考试关联记录的唯一ID,不过通常主键ID(此处为`id`)是由数据库按照自增长(通过`@TableId(value = "id", type = IdType.AUTO)`配置)等规则自动生成的。 + * 在常规的业务操作流程里,直接手动调用这个方法去修改主键值的情况比较少见。但在一些特殊场景下,例如进行数据的初始化导入、数据库迁移或者对特定记录进行特殊调整时可能会用到。 + * 参数`id`就是要设置的关联记录的ID整数值,它将更新当前`ExamQuestion`对象的`id`属性值。 + * @param id 要设置的关联记录的ID整数值。 + */ +public void setId(Integer id) { + this.id = id; +} - public Integer getExamId() { - return examId; - } +/** + * 设置该试题所属考试的ID,此方法用于更新当前`ExamQuestion`对象中表示所属考试的`examId`属性值。 + * 当出现考试相关信息发生变更的情况时会用到,比如考试的ID由于系统重构、数据整合等原因进行了更新,或者需要将某道试题重新关联到不同的考试时, + * 就可以通过调用该方法,并传入新的考试ID整数值(参数`examId`)来完成关联关系的更新操作。 + * @param examId 要设置的考试的ID整数值。 + */ +public void setExamId(Integer examId) { + this.examId = examId; +} - public Integer getQuestionId() { - return questionId; - } +/** + * 设置试题自身的唯一ID,用于改变当前`ExamQuestion`对象中代表试题自身编号的`questionId`属性值。 + * 例如在试题管理过程中,如果试题信息进行了调整,导致其原有的试题ID发生变化,或者需要将当前试题对象重新关联到另外一个已经存在的试题(更换试题主体)等情况时, + * 可借助调用这个方法,传入合适的试题ID整数值(参数`questionId`)来实现对试题编号的更新,以确保数据的准确性和关联性。 + * @param questionId 要设置的试题的ID整数值。 + */ +public void setQuestionId(Integer questionId) { + this.questionId = questionId; +} - public Integer getScore() { - return score; - } +/** + * 设置试题的分值,通过此方法能够对当前`ExamQuestion`对象中存储试题分值的`score`属性进行更新操作。 + * 在实际业务场景里,当考试的整体分值分布出现调整,比如根据教学大纲变更、难度系数调整等原因需要改变某道试题的分值时, + * 可以调用该方法,并传入新设定的试题分值整数值(参数`score`)来完成对试题分值的修改,进而影响后续基于分值的成绩计算、统计等相关业务逻辑。 + * @param score 要设置的试题的分值整数值。 + */ +public void setScore(Integer score) { + this.score = score; +} - public Integer getSort() { - return sort; - } +/** + * 设置试题在考试中的排序序号,用于更新当前`ExamQuestion`对象里表示试题排序位置的`sort`属性值。 + * 像是在生成试卷的环节中,若需要对试卷中试题的先后顺序进行重新安排,例如调整题目顺序以符合新的难度梯度、教学顺序或者排版美观等要求时, + * 就可以调用这个方法,传入期望的试题排序整数值(参数`sort`)来改变试题在考试中的呈现顺序,确保试卷的布局符合业务预期。 + * @param sort 要设置的试题的排序整数值。 + */ +public void setSort(Integer sort) { + this.sort = sort; +} - public Integer getType() { - return type; - } +/** + * 设置试题的类型,用于修改当前`ExamQuestion`对象中用于标识试题类型的`type`属性值。 + * 在一些特定情况下,比如整个考试系统对题目类型的定义进行了统一变更(例如重新划分题型分类、调整题型代码等),或者发现数据中试题类型记录有误需要修正时, + * 可以通过调用此方法,传入符合新定义或修正后的试题类型整数值(参数`type`)来更新试题类型信息,以便后续根据正确的类型进行相应的答案处理、评分、展示等差异化操作。 + * @param type 要设置的试题类型的整数值。 + */ +public void setType(Integer type) { + this.type = type; +} + +/** + * 获取试题与考试关联记录的唯一ID,外部代码通过调用该方法,能够获取到当前`ExamQuestion`对象对应的ID值。 + * 这个ID在业务逻辑处理中十分关键,可用于在众多关联记录里准确地识别、查找或者操作这条特定的试题与考试关联记录,例如在数据库查询、更新或删除相关记录时作为关键标识使用,返回值类型为Integer。 + * @return 返回关联记录的ID值。 + */ +public Integer getId() { + return id; } + +/** + * 获取该试题所属考试的ID,外部代码调用该方法后,能够拿到当前`ExamQuestion`对象对应的考试ID值。 + * 利用这个返回值,在业务逻辑里可以进一步查找该考试所包含的其他试题、关联该考试的相关详细信息(如考试名称、考试时间等)等操作,便于对考试及试题进行整体管理和分析,返回值类型为Integer。 + * @return 返回考试的ID值。 + */ +public Integer getExamId() { + return examId; +} + +/** + * 获取试题自身的唯一ID,外部代码调用该方法时,会返回当前`ExamQuestion`对象对应的试题ID值。 + * 借助这个返回值,在业务操作中可以查找该试题的详细内容、关联针对该试题的答题记录等,有助于实现对具体试题的精准操作和管理,返回值类型为Integer。 + * @return 返回试题的ID值。 + */ +public Integer getQuestionId() { + return questionId; +} + +/** + * 获取试题的分值,外部代码调用该方法后,将得到当前`ExamQuestion`对象对应的试题分值信息。 + * 这个分值数据在诸多业务场景中都会用到,比如在计算考试总分时将各试题分值累加、统计不同部分试题的得分情况以分析成绩构成、根据分值占比评估试题重要性等,返回值类型为Integer。 + * @return 返回试题的分值。 + */ +public Integer getScore() { + return score; +} + +/** + * 获取试题在考试中的排序序号,外部代码调用该方法时,会返回当前`ExamQuestion`对象对应的试题排序值。 + * 在生成试卷、展示试卷内容等业务环节中,依据这个排序值可以确保试题按照正确的顺序呈现给考生,保证考试流程的合理性和规范性,返回值类型为Integer。 + * @return 返回试题的排序序号。 + */ +public Integer getSort() { + return sort; +} + +/** + * 获取试题的类型,外部代码调用该方法后,能够获取到当前`ExamQuestion`对象对应的试题类型值。 + * 根据这个返回的试题类型值,在业务逻辑处理中可以针对不同类型的试题采取相应的处理方式,例如不同类型试题在答案的格式校验、评分标准、展示格式等方面通常会有不同的操作逻辑,返回值类型为Integer。 + * @return 返回试题类型的值。 + */ +public Integer getType() { + return type; +} \ No newline at end of file -- 2.34.1 From e5f1c75ffe9a6912d030cf5337920723bc055ee3 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 16:53:46 +0800 Subject: [PATCH 11/25] 1 --- .../org/alan/exam/model/entity/ExamRepo.java | 60 +++++++++++++++++-- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/ExamRepo.java b/src/main/java/cn/org/alan/exam/model/entity/ExamRepo.java index 36d4b45..a804f86 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/ExamRepo.java +++ b/src/main/java/cn/org/alan/exam/model/entity/ExamRepo.java @@ -8,7 +8,8 @@ import java.io.Serializable; /** *- * + * 该类名为ExamRepo,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如对象持久化存储(例如保存到文件或者数据库备份等场景)以及网络传输(比如在分布式系统不同节点间传递该对象)等操作中使用,确保数据可以完整且有效地进行流转和保存。 + * 它对应数据库中的“t_exam_repo”表,主要用于封装考试与题库之间关联关系的相关信息,通过这个类可以清晰地体现出哪一场考试关联了哪一个题库,是考试系统中关联考试资源与题库数据的重要映射实体。 *
* * @author WeiJin @@ -18,51 +19,98 @@ import java.io.Serializable; public class ExamRepo implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exam_repo”中的不同字段,用于存储考试与题库关联关系的关键信息,下面将逐个进行注释说明。 /** * id 考试与题库 + * 此属性作为该考试与题库关联关系记录的唯一标识符,对应数据库表“t_exam_repo”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的关联记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条关联记录都有一个唯一的编号,方便后续对这些记录进行查找、操作等业务处理。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 考试id 唯一 + * 用于存储关联的考试的唯一标识符,类型为Integer,通过这个字段可以明确是哪一场考试与题库产生了关联关系, + * 它会和存储考试信息的表(例如前面提到的“t_exam”表)中的考试ID进行关联,便于在业务逻辑中查询特定考试所使用的题库、根据考试来管理对应的题库资源等操作。 */ private Integer examId; /** * 题库id 唯一 + * 用来存放与之关联的题库的唯一标识符,类型为Integer,借助这个字段能够确定是哪个题库为特定的考试提供试题资源, + * 会和存储题库信息的表(具体表名根据实际业务而定)中的题库ID相互关联,在诸如按题库统计被使用情况、根据考试需求从对应题库抽取试题等业务场景中起到关键作用。 */ private Integer repoId; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ExamRepo对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取考试与题库关联关系记录的唯一ID,外部代码通过调用该方法能够拿到当前ExamRepo对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的关联记录,返回值为Integer类型。 + * @return 返回关联记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置考试与题库关联关系记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的关联记录的ID整数值。 + * @param id 要设置的关联记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取关联的考试的ID,外部代码调用该方法可以获取当前ExamRepo对象对应的考试ID值, + * 用于在业务逻辑中查找与该题库相关的考试信息、判断题库被哪些考试使用等操作,返回值为Integer类型。 + * @return 返回关联的考试的ID值。 + */ public Integer getExamId() { return examId; } + /** + * 设置关联的考试的ID,当存在考试信息变更(如考试ID更新或者重新关联不同考试等情况)时, + * 可以通过调用该方法来更新当前ExamRepo对象中的考试ID值,参数“examId”为要设置的考试的ID整数值。 + * @param examId 要设置的考试的ID整数值。 + */ public void setExamId(Integer examId) { this.examId = examId; } + + /** + * 获取关联的题库的ID,外部代码调用该方法可以获取当前ExamRepo对象对应的题库ID值, + * 在业务逻辑中可用于查询该考试涉及的题库信息、按题库进行相关统计等操作,返回值为Integer类型。 + * @return 返回关联的题库的ID值。 + */ public Integer getRepoId() { return repoId; } + /** + * 设置关联的题库的ID,例如题库信息调整导致题库ID变化或者重新关联不同题库时, + * 可以通过调用该方法来更新当前ExamRepo对象中的题库ID值,参数“repoId”为要设置的题库的ID整数值。 + */ public void setRepoId(Integer repoId) { this.repoId = repoId; } + /** + * 重写了Object类的toString方法,用于将ExamRepo对象转换为一个包含各属性值的字符串表示形式, + * 按照“ExamRepo{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看考试与题库关系对象各个属性具体的值,返回值为字符串类型。 + * @return 返回表示ExamRepo对象各属性值的字符串。 + */ @Override public String toString() { return "ExamRepo{" + - "id=" + id + - ", examId=" + examId + - ", repoId=" + repoId + - "}"; + "id=" + id + + ", examId=" + examId + + ", repoId=" + repoId + + "}"; } -} +} \ No newline at end of file -- 2.34.1 From 3ee0ba368c3f14f2c1a886816619ae8880500e1a Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 17:00:25 +0800 Subject: [PATCH 12/25] 1 --- .../exam/model/entity/ExerciseRecord.java | 409 ++++++++++++++++-- 1 file changed, 376 insertions(+), 33 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/ExerciseRecord.java b/src/main/java/cn/org/alan/exam/model/entity/ExerciseRecord.java index 23b13c0..d5af40b 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/ExerciseRecord.java +++ b/src/main/java/cn/org/alan/exam/model/entity/ExerciseRecord.java @@ -3,10 +3,10 @@ package cn.org.alan.exam.model.entity; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; - /** *- * + * 该类名为ExerciseRecord,实现了Serializable接口,使其具备可序列化的能力,便于在如将对象持久化存储到文件、在网络间传输对象等场景下进行数据交换与保存,确保数据的完整性以及可以跨不同的环境使用对象信息。 + * 它对应数据库中的“t_exercise_record”表,主要用于封装用户练习相关的答题记录信息,涵盖了从题库选题、具体试题、用户作答情况以及答案正误判断等多方面内容,是对练习答题这一业务行为在代码层面的映射表示。 *
* * @author WeiJin @@ -16,114 +16,457 @@ import java.io.Serializable; public class ExerciseRecord implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exercise_record”中的不同字段,用于存储练习答题记录相关的详细信息,下面将逐个进行注释说明。 + /** + * 主键ID,作为练习答题记录在数据库中的唯一标识符,对应“t_exercise_record”表中的“id”字段,类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的练习答题记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条记录都有一个独一无二的编号,方便后续对这些答题记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如按ID查询特定答题记录来分析用户练习情况等。 + */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 题库id + * 用于存储该练习答题记录所涉及的题库的唯一标识符,类型为Integer,通过这个字段可以明确题目是从哪个题库中抽取出来供用户练习的, + * 它会和存储题库信息的表(具体表名根据实际业务而定)中的题库ID进行关联,便于在业务逻辑中统计不同题库的使用频率、分析特定题库的题目练习情况等操作。 */ private Integer repoId; /** * 试题id + * 表示该答题记录所针对的具体试题的唯一标识符,类型为Integer,借助这个字段可以精准定位到是哪一道试题的作答情况,方便在试题管理、分析每道题的答题正确率等业务逻辑中使用, + * 同时它也能与存储试题详细信息的表(例如有试题内容、分值等信息的表)中的试题ID进行关联,以获取更全面的试题相关数据。 */ private Integer questionId; /** * 用户id + * 用来存放作答该试题的用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户做出了相应的答题记录,便于关联用户信息以及后续进行诸如按用户统计答题情况、查看特定用户的练习作答详情等业务操作, + * 并且可以与用户信息表(包含用户基本资料、学习进度等内容的表)中的用户ID进行关联,实现更丰富的业务功能整合。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入练习答题记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的准确性和完整性。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 主观题答案 + * 用于存储用户针对主观题(如简答题、论述题等)所填写的答案内容,类型为String,用户输入的文字性回答都会存储在此属性中,方便后续进行人工阅卷、通过特定算法进行内容分析或者作为学习参考等操作, + * 例如教师可以查看学生对主观题的回答来评估学习效果、系统可以基于答案内容进行一些智能分析辅助教学等。 */ private String answer; /** * 题目类型 + * 用于标识试题的类型,类型为Integer,可能通过特定的数值来代表不同的题目类型,比如1代表单选题、2代表多选题、3代表简答题等(具体数值与题目类型的对应关系需根据业务定义), + * 该属性有助于在业务处理中根据不同题目类型采取相应的逻辑,例如客观题和主观题在答案处理、判断是否正确、展示格式等方面会有不同的操作,也方便后续进行答题情况的分类统计和分析。 */ private Integer questionType; /** * 客观题答案集合 用于客观题,多选题id使用","分隔 + * 针对客观题(如单选题、多选题等),用于存储答案的相关信息,类型为String。对于多选题来说,由于可能有多个正确答案选项,其答案ID会使用“,”进行分隔,方便后续解析和判断答案的正确性, + * 可以通过该字段与存储答案选项信息的表(具体表根据业务而定)进行关联,以确定用户选择的答案是否正确,同时在统计客观题答题情况、分析易错选项等业务场景中起到关键作用。 */ private String options; /** * 客观题是否正确 + * 用于标记用户针对客观题给出的答案是否正确,类型为Integer,取值通常为0表示答案错误,1表示答案正确,便于系统自动进行练习成绩统计、分析各客观题的答题准确率等业务操作, + * 也有助于用户直观了解自己对客观题的掌握情况,进而有针对性地进行学习和练习巩固。 */ private Integer isRight; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ExerciseRecord对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取练习答题记录的唯一ID,外部代码通过调用该方法能够拿到当前ExerciseRecord对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的答题记录,返回值为Integer类型。 + * @return 返回答题记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置练习答题记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的答题记录的ID整数值。 + * @param id 要设置的答题记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取答题记录所涉及的题库的ID,外部代码调用该方法可以获取当前ExerciseRecord对象对应的题库ID值, + * 用于在业务逻辑中查找该题库的其他答题记录、统计该题库的使用情况等操作,返回值为Integer类型。 + * @return 返回题库的ID值。 + */ public Integer getRepoId() { return repoId; } + /** + * 设置答题记录所涉及的题库的ID,当存在题库信息变更(如题库ID更新或者重新关联答题记录到不同题库等情况)时, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的题库ID值,参数“repoId”为要设置的题库的ID整数值。 + * @param repoId 要设置的题库的ID整数值。 + */ public void setRepoId(Integer repoId) { this.repoId = repoId; } + + /** + * 获取答题记录所针对的试题的ID,外部代码调用该方法可以获取当前ExerciseRecord对象对应的试题ID值, + * 用于在业务逻辑中查找该试题的其他答题情况、分析该题的答题正确率等操作,返回值为Integer类型。 + * @return 返回试题的ID值。 + */ public Integer getQuestionId() { return questionId; } + /** + * 设置答题记录所针对的试题的ID,例如试题信息调整导致试题ID变化或者重新关联答题记录到不同试题等情况时, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的试题ID值,参数“questionId”为要设置的试题的ID整数值。 + * @param questionId 要设置的试题的ID整数值。 + */ public void setQuestionId(Integer questionId) { this.questionId = questionId; } + + /** + * 获取作答该试题的用户的ID,外部代码调用该方法可以获取当前ExerciseRecord对象对应的用户ID值, + * 用于在业务逻辑中查找该用户的其他答题记录、关联用户相关信息等操作,返回值为Integer类型。 + * @return 返回用户的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置作答该试题的用户的ID,例如在数据修正、重新关联答题记录与用户等情况时, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的用户ID值,参数“userId”为要设置的用户的ID整数值。 + * @param userId 要设置的用户的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取主观题的答案内容,外部代码调用该方法可以获取当前ExerciseRecord对象对应的主观题答案内容字符串, + * 用于人工阅卷、内容分析或者作为学习参考等操作,返回值为String类型。 + * @return 返回主观题答案内容字符串。 + */ public String getAnswer() { return answer; } + /** + * 设置主观题的答案内容,在用户修改答案、录入新的答案或者进行数据修正等场景下, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的主观题答案内容字符串,参数“answer”为要设置的主观题答案内容字符串值。 + * @param answer 要设置的主观题答案内容字符串值。 + */ public void setAnswer(String answer) { this.answer = answer; } + + /** + * 获取试题的类型,外部代码调用该方法可以获取当前ExerciseRecord对象对应的试题类型值, + * 用于在业务逻辑中根据不同题目类型采取相应的处理逻辑,如客观题和主观题不同的答案处理方式等,返回值为Integer类型。 + * @return 返回试题类型的值。 + */ public Integer getQuestionType() { - return questionType; - } + 快照测试在软件开发中是一种重要的测试策略,以下是它的一些常见用途: - public void setQuestionType(Integer questionType) { - this.questionType = questionType; - } - public String getOptions() { - return options; - } +### 1. 验证软件状态的一致性 + 在软件开发过程中,不同的功能模块之间可能存在复杂的交互和依赖关系。快照测试通过记录软件在某个特定时刻的状态(例如对象的属性值、组件的渲染结果等),可以在后续的开发、修改或维护过程中,验证软件是否仍然保持与之前记录的状态一致。 - public void setOptions(String options) { - this.options = options; - } - public Integer getIsRight() { - return isRight; - } + 例如,在一个电商应用中,当用户添加商品到购物车后,购物车组件的渲染状态(包括商品列表、总价等信息)可以被记录为一个快照。后续如果对购物车相关的业务逻辑进行修改,如优化计算总价的算法、添加新的商品展示字段等,就可以再次生成快照并与之前的进行对比,确保购物车的整体呈现状态没有因为代码变更而出现异常,保证了用户看到的界面效果和数据的准确性始终符合预期。 - public void setIsRight(Integer isRight) { - this.isRight = isRight; - } +### 2. 快速检测回归问题 + 随着软件的迭代更新,新功能的添加或者代码的重构可能会无意中引入一些回归问题,也就是导致之前已经正常工作的功能出现故障。快照测试可以针对软件的各个关键状态进行“拍照”记录,在每次代码更新后,快速重新生成快照并与之前保存的进行比较。 - @Override - public String toString() { - return "ExerciseRecord{" + - "id=" + id + - ", repoId=" + repoId + - ", questionId=" + questionId + - ", userId=" + userId + - ", answer=" + answer + - ", questionType=" + questionType + - ", options=" + options + - ", isRight=" + isRight + - "}"; - } -} + 比如,在一个图形编辑软件中,已经存在绘制各种图形(圆形、矩形等)并正确显示其属性(如颜色、大小等)的功能。当开发人员对图形渲染的底层代码进行优化后,通过快照测试可以快速对比优化前后图形的显示状态是否一致,若发现不一致就能及时定位到可能是优化过程中影响了之前正常的渲染逻辑,尽早发现并解决这些回归问题,避免问题在后续发布后被用户发现而影响用户体验。 + +### 3. 辅助多人协作开发 + 在团队多人协作开发项目时,不同开发人员可能会同时对不同的模块进行修改,而这些修改可能会相互影响。快照测试可以为各个模块定义明确的状态基准,使得每个开发人员在提交自己的代码前,能够通过运行快照测试来确保自己负责的模块状态没有因为其他人的代码变更而受到破坏。 + + 例如,在一个大型的企业资源管理系统中,有负责员工模块、财务模块、项目模块等不同开发人员。员工模块的开发人员修改了员工信息展示的部分代码后,通过快照测试对比之前记录的员工信息页面状态,确保没有影响到与之相关联的财务模块(例如涉及员工薪资显示部分)和项目模块(例如员工参与项目的展示部分)中对员工信息的引用和展示,保证整个系统的不同模块之间协作正常,数据交互无误。 + +### 4. 用于文档和规范验证 + 快照测试生成的快照可以作为一种可视化的文档,直观地展示软件在不同场景下应该呈现的状态。这对于新加入团队的成员理解软件功能、验证代码是否符合既定的设计规范等都非常有帮助。 + + 以一个网页应用的表单验证功能为例,表单在不同输入条件下(如正确输入、错误输入等)应该呈现不同的提示信息和样式状态,这些状态可以通过快照记录下来。新成员可以通过查看这些快照快速了解表单验证的具体要求,同时也可以通过对比快照和实际代码运行效果来验证开发是否严格遵循了表单设计的规范,保证代码实现与预期设计相符。 + + 总之,快照测试在确保软件质量、提高开发效率、促进团队协作以及规范验证等多个方面都发挥着重要作用,是现代软件开发中不可或缺的一种测试手段。 + +**缺点:** + +### 1. 对状态变化敏感 + 快照测试是基于记录软件特定时刻的状态来进行验证的,这就意味着如果软件本身的业务逻辑导致状态会经常发生合理变化(比如根据不同用户输入动态生成不同界面、实时更新的数据展示等),那么快照测试可能会频繁出现误报,即把正常的状态变化当作异常来提示。 + + 例如,在一个天气预报应用中,根据用户选择的不同城市,界面上显示的天气信息(温度、湿度、天气状况等)会实时更新,每次更新都相当于状态改变。如果进行快照测试并严格按照之前记录的某个城市的天气状态来对比,那么每次切换城市或者数据自动更新时都会触发测试失败,即使软件功能是正常运行的,也会给开发人员带来困扰,需要不断去调整快照或者忽略一些预期内的变化情况。 + +### 2. 维护成本较高 + 随着软件功能的不断扩展和迭代,软件的状态也会变得越来越复杂,对应的快照数量会不断增多,而且每个快照都需要随着业务逻辑的变化而适时更新维护,否则就可能出现误报或者失去测试意义。 + + 比如,在一个社交媒体应用中,随着不断添加新的功能,如新增不同类型的动态发布格式、更多的社交互动方式等,页面的渲染状态变得多种多样。为了保证快照测试的有效性,开发人员需要花费大量时间去更新之前记录的各个快照,确保它们与最新的业务逻辑和界面效果相匹配,这无疑增加了测试的维护工作量和成本。 + +### 3. 测试覆盖范围有限 + 快照测试主要侧重于验证软件的可见状态或者可序列化的对象状态,对于一些隐藏在代码背后的深层次逻辑,如复杂的算法实现、异步操作的中间过程等往往无法进行有效测试。 + + 以一个数据加密算法模块为例,快照测试只能验证加密后的数据结果(如果这个结果作为一种可展示的状态)是否符合预期,但对于加密算法内部具体的运算过程、密钥生成机制等深层次的逻辑,无法通过快照测试来判断其正确性,需要借助其他专门的单元测试、集成测试等手段来进行全面的质量保证,所以它在测试覆盖范围上存在一定的局限性。 + +### 4. 依赖特定环境和工具 + 快照测试通常需要依赖特定的测试框架以及配套的工具来实现快照的生成、比较等操作,而且不同的编程语言、开发平台可能有不同的适用工具和方法,这就限制了其通用性和灵活性。 + + 例如,在JavaScript开发中,常用的快照测试工具如Jest等,开发人员需要熟悉并按照其特定的语法和配置要求来编写快照测试用例。如果要将项目迁移到其他语言或者平台,可能无法直接复用现有的快照测试代码,需要重新寻找适配的工具并进行代码重写,增加了项目的迁移成本和技术难度。 + + 综上所述,虽然快照测试有诸多优点,在软件开发中有着重要的应用价值,但也存在一些不可忽视的缺点,在实际使用中需要根据项目的具体情况合理权衡运用,以达到最佳的测试效果。/** + *+ * 该类名为ExerciseRecord,实现了Serializable接口,使其具备可序列化的能力,便于在如将对象持久化存储到文件、在网络间传输对象等场景下进行数据交换与保存,确保数据的完整性以及可以跨不同的环境使用对象信息。 + * 它对应数据库中的“t_exercise_record”表,主要用于封装用户练习相关的答题记录信息,涵盖了从题库选题、具体试题、用户作答情况以及答案正误判断等多方面内容,是对练习答题这一业务行为在代码层面的映射表示。 + *
+ * + * @author WeiJin + * @since 2024-03-21 + */ + @TableName("t_exercise_record") + public class ExerciseRecord implements Serializable { + + private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_exercise_record”中的不同字段,用于存储练习答题记录相关的详细信息,下面将逐个进行注释说明。 + + /** + * 主键ID,作为练习答题记录在数据库中的唯一标识符,对应“t_exercise_record”表中的“id”字段,类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的练习答题记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条记录都有一个独一无二的编号,方便后续对这些答题记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如按ID查询特定答题记录来分析用户练习情况等。 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 题库id + * 用于存储该练习答题记录所涉及的题库的唯一标识符,类型为Integer,通过这个字段可以明确题目是从哪个题库中抽取出来供用户练习的, + * 它会和存储题库信息的表(具体表名根据实际业务而定)中的题库ID进行关联,便于在业务逻辑中统计不同题库的使用频率、分析特定题库的题目练习情况等操作。 + */ + private Integer repoId; + + /** + * 试题id + * 表示该答题记录所针对的具体试题的唯一标识符,类型为Integer,借助这个字段可以精准定位到是哪一道试题的作答情况,方便在试题管理、分析每道题的答题正确率等业务逻辑中使用, + * 同时它也能与存储试题详细信息的表(例如有试题内容、分值等信息的表)中的试题ID进行关联,以获取更全面的试题相关数据。 + */ + private Integer questionId; + + /** + * 用户id + * 用来存放作答该试题的用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户做出了相应的答题记录,便于关联用户信息以及后续进行诸如按用户统计答题情况、查看特定用户的练习作答详情等业务操作, + * 并且可以与用户信息表(包含用户基本资料、学习进度等内容的表)中的用户ID进行关联,实现更丰富的业务功能整合。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入练习答题记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的准确性和完整性。 + */ + @TableField(fill = FieldFill.INSERT) + private Integer userId; + + /** + * 主观题答案 + * 用于存储用户针对主观题(如简答题、论述题等)所填写的答案内容,类型为String,用户输入的文字性回答都会存储在此属性中,方便后续进行人工阅卷、通过特定算法进行内容分析或者作为学习参考等操作, + * 例如教师可以查看学生对主观题的回答来评估学习效果、系统可以基于答案内容进行一些智能分析辅助教学等。 + */ + private String answer; + + /** + * 题目类型 + * 用于标识试题的类型,类型为Integer,可能通过特定的数值来代表不同的题目类型,比如1代表单选题、2代表多选题、3代表简答题等(具体数值与题目类型的对应关系需根据业务定义), + * 该属性有助于在业务处理中根据不同题目类型采取相应的逻辑,例如客观题和主观题在答案处理、判断是否正确、展示格式等方面会有不同的操作,也方便后续进行答题情况的分类统计和分析。 + */ + private Integer questionType; + + /** + * 客观题答案集合 用于客观题,多选题id使用","分隔 + * 针对客观题(如单选题、多选题等),用于存储答案的相关信息,类型为String。对于多选题来说,由于可能有多个正确答案选项,其答案ID会使用“,”进行分隔,方便后续解析和判断答案的正确性, + * 可以通过该字段与存储答案选项信息的表(具体表根据业务而定)进行关联,以确定用户选择的答案是否正确,同时在统计客观题答题情况、分析易错选项等业务场景中起到关键作用。 + */ + private String options; + + /** + * 客观题是否正确 + * 用于标记用户针对客观题给出的答案是否正确,类型为Integer,取值通常为0表示答案错误,1表示答案正确,便于系统自动进行练习成绩统计、分析各客观题的答题准确率等业务操作, + * 也有助于用户直观了解自己对客观题的掌握情况,进而有针对性地进行学习和练习巩固。 + */ + private Integer isRight; + + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ExerciseRecord对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取练习答题记录的唯一ID,外部代码通过调用该方法能够拿到当前ExerciseRecord对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的答题记录,返回值为Integer类型。 + * @return 返回答题记录的ID值。 + */ + public Integer getId() { + return id; + } + + /** + * 设置练习答题记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的答题记录的ID整数值。 + * @param id 要设置的答题记录的ID整数值。 + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * 获取答题记录所涉及的题库的ID,外部代码调用该方法可以获取当前ExerciseRecord对象对应的题库ID值, + * 用于在业务逻辑中查找该题库的其他答题记录、统计该题库的使用情况等操作,返回值为Integer类型。 + * @return 返回题库的ID值。 + */ + public Integer getRepoId() { + return repoId; + } + + /** + * 设置答题记录所涉及的题库的ID,当存在题库信息变更(如题库ID更新或者重新关联答题记录到不同题库等情况)时, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的题库ID值,参数“repoId”为要设置的题库的ID整数值。 + * @param repoId 要设置的题库的ID整数值。 + */ + public void setRepoId(Integer repoId) { + this.repoId = repoId; + } + + /** + * 获取答题记录所针对的试题的ID,外部代码调用该方法可以获取当前ExerciseRecord对象对应的试题ID值, + * 用于在业务逻辑中查找该试题的其他答题情况、分析该题的答题正确率等操作,返回值为Integer类型。 + * @return 返回试题的ID值。 + */ + public Integer getQuestionId() { + return questionId; + } + + /** + * 设置答题记录所针对的试题的ID,例如试题信息调整导致试题ID变化或者重新关联答题记录到不同试题等情况时, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的试题ID值,参数“questionId”为要设置的试题的ID整数值。 + * @param questionId 要设置的试题的ID整数值。 + */ + public void setQuestionId(Integer questionId) { + this.questionId = questionId; + } + + /** + * 获取作答该试题的用户的ID,外部代码调用该方法可以获取当前ExerciseRecord对象对应的用户ID值, + * 用于在业务逻辑中查找该用户的其他答题记录、关联用户相关信息等操作,返回值为Integer类型。 + * @return 返回用户的ID值。 + */ + public Integer getUserId() { + return userId; + } + + /** + * 设置作答该试题的用户的ID,例如在数据修正、重新关联答题记录与用户等情况时, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的用户ID值,参数“userId”为要设置的用户的ID整数值。 + * @param userId 要设置的用户的ID整数值。 + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 获取主观题的答案内容,外部代码调用该方法可以获取当前ExerciseRecord对象对应的主观题答案内容字符串, + * 用于人工阅卷、内容分析或者作为学习参考等操作,返回值为String类型。 + * @return 返回主观题答案内容字符串。 + */ + public String getAnswer() { + return answer; + } + + /** + * 设置主观题的答案内容,在用户修改答案、录入新的答案或者进行数据修正等场景下, + * 可以通过调用该方法来更新当前ExerciseRecord对象中的主观题答案内容字符串,参数“answer”为要设置的主观题答案内容字符串值。 + * @param answer 要设置的主观题答案内容字符串值。 + */ + public void setAnswer(String answer) { + this.answer = answer; + } + + /** + * 获取试题的类型,外部代码调用该方法可以获取当前ExerciseRecord对象对应的试题类型值, + * 用于在业务逻辑中根据不同题目类型采取相应的处理逻辑,如客观题和主观题不同的答案处理方式等,返回值为Integer类型。 + * @return 返回试题类型的值。 + */ + public Integer getQuestionType() { + return questionType; + } + /** + * 设置试题的类型,用于更新当前`ExerciseRecord`对象中表示试题类型的`questionType`属性值。 + * 在实际业务场景中,若出现题目类型定义变更(比如整个系统重新规划了题型分类,调整了各题型对应的代码值), + * 或者发现已有答题记录中试题类型记录有误需要修正等情况时,可通过调用该方法,并传入符合新定义或正确的试题类型整数值(参数`questionType`)来完成对试题类型信息的更新操作, + * 以便后续依据正确的类型进行相应的答案处理、正误判断以及答题情况统计分析等差异化业务逻辑。 + * @param questionType 要设置的试题类型的整数值。 + */ + public void setQuestionType(Integer questionType) { + this.questionType = questionType; + } + + /** + * 获取客观题答案集合,外部代码调用该方法可以获取当前`ExerciseRecord`对象对应的客观题答案相关信息字符串。 + * 对于客观题(如单选题、多选题等),其答案信息存储在此属性中,对于多选题还会按照约定使用“,”分隔多个答案选项的ID等相关标识,方便后续与答案选项数据表进行关联以及判断答案的正确性, + * 在统计客观题答题情况、分析用户答题偏好及易错选项等业务场景中会用到该信息,返回值类型为`String`。 + * @return 返回客观题答案集合的字符串表示。 + */ + public String getOptions() { + return options; + } + + /** + * 设置客观题答案集合,通过此方法能够对当前`ExerciseRecord`对象中存储客观题答案信息的`options`属性进行更新操作。 + * 例如在用户修改答案、进行答案信息纠错或者重新关联答题记录与正确答案等情况下, + * 可以调用该方法,并传入新的客观题答案相关信息字符串(参数`options`)来完成对客观题答案内容的修改,进而确保后续基于答案进行的正确性判断、答题统计等业务操作能基于准确的数据, + * 该字符串应遵循相应的格式约定(如多选题答案使用“,”分隔等)。 + * @param options 要设置的客观题答案集合的字符串值。 + */ + public void setOptions(String options) { + this.options = options; + } + + /** + * 获取客观题是否正确的标记值,外部代码调用该方法后,将得到当前`ExerciseRecord`对象中用于表示客观题答案是否正确的整数值。 + * 该值通常用于标记用户针对客观题给出的答案是否准确,取值一般为0表示答案错误,1表示答案正确,方便系统自动开展练习成绩统计、分析各客观题的答题准确率等业务操作, + * 同时也有助于用户直观知晓自己对客观题的掌握情况,返回值类型为`Integer`。 + * @return 返回客观题是否正确的标记值(0或1)。 + */ + public Integer getIsRight() { + return isRight; + } + + /** + * 设置客观题是否正确的标记值,用于改变当前`ExerciseRecord`对象里表示客观题答案正误情况的`isRight`属性值。 + * 在诸如成绩复查、答案正确性判断规则调整(例如更改了正确答案标准)或者修正之前误判的答题结果等场景下, + * 可以通过调用此方法,并传入符合实际情况的表示客观题答案是否正确的整数值(参数`isRight`,取值应为0或1)来更新客观题答案的正误标记,确保数据的准确性, + * 进而保证后续基于此标记进行的相关业务逻辑(如成绩统计、学习情况分析等)的正确性。 + * @param isRight 要设置的客观题是否正确的整数值(0或1)。 + */ + public void setIsRight(Integer isRight) { + this.isRight = isRight; + } + + /** + * 重写了`Object`类的`toString`方法,用于将`ExerciseRecord`对象转换为一个包含各属性值的字符串表示形式。 + * 按照“ExerciseRecord{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看练习答题记录对象各个属性具体的值,返回值类型为`String`。 + * @return 返回表示`ExerciseRecord`对象各属性值的字符串。 + */ + @Override + public String toString() { + return "ExerciseRecord{" + + "id=" + id + + ", repoId=" + repoId + + ", questionId=" + questionId + + ", userId=" + userId + + ", answer=" + answer + + ", questionType=" + questionType + + ", options=" + options + + ", isRight=" + isRight + + "}"; + } \ No newline at end of file -- 2.34.1 From cbece9c9dc81379e264f9855c074b906fa8f39bd Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 17:03:34 +0800 Subject: [PATCH 13/25] 1 --- .../cn/org/alan/exam/model/entity/Grade.java | 74 ++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Grade.java b/src/main/java/cn/org/alan/exam/model/entity/Grade.java index 2a27d0f..abf5677 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Grade.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Grade.java @@ -6,7 +6,8 @@ import java.io.Serializable; /** *- * + * 该类名为Grade,实现了Serializable接口,这使得该类的对象能够被序列化,可用于如将班级相关信息持久化存储到文件、在网络间传输班级数据等场景,方便数据的交换与保存,保障数据在不同环境下的可用性。 + * 它对应数据库中的“t_grade”表,主要用于封装班级信息,是对学校班级这一实体在代码层面的映射表示,包含了班级的基本属性以及与创建等相关的一些关键信息,在学校相关业务系统(如教学管理系统等)中起着重要作用。 *
* * @author WeiJin @@ -16,72 +17,141 @@ import java.io.Serializable; public class Grade implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + // 以下是类中定义的各个成员变量,分别对应数据库表“t_grade”中的不同字段,用于存储班级相关的关键信息,下面将逐个进行注释说明。 /** * id 班级表 + * 此属性作为班级表记录的唯一标识符,对应数据库表“t_grade”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的班级记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条班级记录都有一个唯一的编号,方便后续对班级记录进行查找、操作等业务处理,例如根据ID查询特定班级信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 班级名称 + * 用于存储班级的具体名称,类型为String,是班级的一个重要标识属性,方便在业务逻辑中直观地区分不同的班级,例如在展示班级列表、教师选择授课班级等场景下会用到该名称信息,同时也便于用户(如师生等)识别和记忆。 */ private String gradeName; /** * 创建人id + * 用来存放创建该班级的用户(通常可能是教师或者管理员等)的唯一标识符,类型为Integer,通过这个字段可以明确班级的创建者是谁,便于关联用户信息以及后续进行诸如权限管理(创建者可能有特定的班级管理权限)、统计不同用户创建的班级数量等业务操作。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入班级记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到班级的创建源头。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 班级口令 + * 用于存储班级的访问口令,类型为String,在一些需要对班级访问进行限制或者验证的场景下会用到,例如线上教学平台中,只有知道班级口令的学生才能加入该班级参与学习,起到一定的安全防护和准入控制作用,保障班级内教学活动的相对私密性。 */ private String code; /** * 逻辑删除字段 + * 用于标记班级记录是否被逻辑删除,类型为Integer,通常取值为0表示未删除(正常状态),1表示已删除(逻辑上的删除,实际数据可能还在数据库中,只是在业务逻辑层面视为不可见、不可操作了),方便在数据管理中实现软删除功能,避免直接物理删除数据带来的一些潜在风险(如误删无法恢复等),同时也便于后续可能的恢复操作或者数据统计(如统计已删除班级数量等)。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Grade对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取班级记录的逻辑删除标记值,外部代码通过调用该方法能够拿到当前Grade对象对应的逻辑删除状态值, + * 用于在业务逻辑中判断班级记录是否已被删除,进而决定是否对其进行相关操作(如查询、更新等操作对于已删除记录通常是受限的),返回值为Integer类型。 + * @return 返回班级记录的逻辑删除状态值(0或1)。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置班级记录的逻辑删除标记值,在执行班级删除操作(逻辑删除)或者进行数据恢复(将逻辑删除标记改回未删除状态)等场景下, + * 可以通过调用该方法来更新当前Grade对象中的逻辑删除状态值,参数“isDeleted”为要设置的逻辑删除的整数值(0或1),确保数据的删除状态能准确反映业务需求。 + * @param isDeleted 要设置的逻辑删除的整数值(0或1)。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } + /** + * 获取班级记录的唯一ID,外部代码通过调用该方法能够拿到当前Grade对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的班级记录,例如根据ID查询班级详细信息、更新班级相关属性等,返回值为Integer类型。 + * @return 返回班级记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置班级记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的班级记录的ID整数值。 + * @param id 要设置的班级记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取班级的名称,外部代码调用该方法可以获取当前Grade对象对应的班级名称字符串, + * 在展示班级信息、供用户识别班级等业务场景中会用到该名称,返回值为String类型。 + * @return 返回班级的名称字符串。 + */ public String getGradeName() { return gradeName; } + /** + * 设置班级的名称,在班级名称发生变更(如因教学安排调整、班级重新命名等原因)时, + * 可以通过调用该方法来更新当前Grade对象中的班级名称字符串,参数“gradeName”为要设置的新的班级名称字符串值。 + * @param gradeName 要设置的新的班级名称字符串值。 + */ public void setGradeName(String gradeName) { this.gradeName = gradeName; } + + /** + * 获取班级创建人的ID,外部代码调用该方法可以获取当前Grade对象对应的班级创建人ID值, + * 用于在业务逻辑中关联创建人相关信息、进行权限管理以及统计创建人创建的班级情况等操作,返回值为Integer类型。 + * @return 返回班级创建人的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置班级创建人的ID,例如在数据修正(发现创建人记录错误)、重新指定班级创建人(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前Grade对象中的班级创建人ID值,参数“userId”为要设置的班级创建人的ID整数值。 + * @param userId 要设置的班级创建人的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取班级的口令,外部代码调用该方法可以获取当前Grade对象对应的班级口令字符串, + * 在验证班级访问权限、需要知晓班级准入口令等业务场景中会用到该口令信息,返回值为String类型。 + * @return 返回班级的口令字符串。 + */ public String getCode() { return code; } + /** + * 设置班级的口令,当班级口令需要更新(如定期更换口令以保障安全、因安全原因重置口令等情况)时, + * 可以通过调用该方法来更新当前Grade对象中的班级口令字符串,参数“code”为要设置的新的班级口令字符串值。 + * @param code 要设置的新的班级口令字符串值。 + */ public void setCode(String code) { this.code = code; } + /** + * 重写了Object类的toString方法,用于将Grade对象转换为一个包含各属性值的字符串表示形式, + * 按照“Grade{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看班级对象各个属性具体的值,返回值为字符串类型。 + * @return 返回表示Grade对象各属性值的字符串。 + */ @Override public String toString() { return "Grade{" + @@ -92,4 +162,4 @@ public class Grade implements Serializable { ", isDeleted=" + isDeleted + '}'; } -} +} \ No newline at end of file -- 2.34.1 From c644af20d378c90d6aa76e317d280d001afe91ba Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 17:11:41 +0800 Subject: [PATCH 14/25] 1 --- .../alan/exam/model/entity/GradeExercise.java | 116 ++++++++++++++++-- 1 file changed, 106 insertions(+), 10 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/GradeExercise.java b/src/main/java/cn/org/alan/exam/model/entity/GradeExercise.java index e0c2a93..7aa0622 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/GradeExercise.java +++ b/src/main/java/cn/org/alan/exam/model/entity/GradeExercise.java @@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDateTime; - /** *- * + * 该类名为GradeExercise,实现了Serializable接口,这使得该类的对象能够被序列化,方便在如将刷题相关的数据持久化存储到文件、在网络间传输刷题记录等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于教学管理等相关系统中对班级刷题活动信息的管理需求。 + * 它对应数据库中的“t_grade_exercise”表,主要用于封装班级刷题活动相关的关键信息,通过此类可以清晰地知晓某个班级针对哪个题库进行了刷题练习以及相关的创建人、创建时间等信息,是关联班级、题库与刷题活动的重要实体类。 *
* * @author WeiJin @@ -17,79 +17,175 @@ import java.time.LocalDateTime; public class GradeExercise implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,使得在不同阶段或环境下对对象操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_grade_exercise”中的不同字段,用于存储班级刷题活动相关的详细信息,下面将逐个进行注释说明。 /** * id 刷题表 + * 此属性作为班级刷题活动记录在数据库中的唯一标识符,对应数据库表“t_grade_exercise”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的班级刷题活动记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条刷题记录都有一个独一无二的编号,方便后续对这些记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如根据ID查询特定的班级刷题活动详情等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 题库id + * 用于存储该班级刷题活动所涉及的题库的唯一标识符,类型为Integer,通过这个字段可以明确班级是针对哪个题库开展刷题练习的, + * 它会和存储题库信息的表(具体表名根据实际业务而定)中的题库ID进行关联,便于在业务逻辑中统计不同题库在各个班级中的使用频率、分析特定题库针对不同班级的练习效果等操作。 */ private Integer repoId; /** * 班级id + * 用来存放进行刷题活动的班级的唯一标识符,类型为Integer,借助这个字段能够确定是哪个班级参与了此次刷题活动, + * 会和存储班级信息的表(例如前面提到的“t_grade”表)中的班级ID相互关联,在诸如按班级统计刷题情况、查看特定班级的练习资源分配等业务场景中起到关键作用。 */ private Integer gradeId; /** * 创建人id + * 用于记录创建该班级刷题活动的用户(可能是教师、管理员等角色)的唯一标识符,类型为Integer,通过这个字段可以明确是谁发起了此次刷题活动,便于关联用户信息以及后续进行诸如权限管理(创建者可能有特定的操作权限)、统计不同用户创建的刷题活动数量等业务操作。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入班级刷题活动记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到活动的创建源头。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 创建时间 + * 用于存储班级刷题活动创建的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD HH:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录刷题活动的发起顺序、分析不同时间段班级刷题的活跃度等,方便后续进行数据统计和活动管理。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对GradeExercise对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取班级刷题活动记录的唯一ID,外部代码通过调用该方法能够拿到当前GradeExercise对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的刷题活动记录,返回值为Integer类型。 + * @return 返回刷题活动记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置班级刷题活动记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的刷题活动记录的ID整数值。 + * @param id 要设置的刷题活动记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取刷题活动所涉及的题库的ID,外部代码调用该方法可以获取当前GradeExercise对象对应的题库ID值, + * 用于在业务逻辑中查找该题库的其他刷题记录、统计该题库在班级中的使用情况等操作,返回值为Integer类型。 + * @return 返回题库的ID值。 + */ public Integer getRepoId() { return repoId; } + /** + * 设置刷题活动所涉及的题库的ID,当存在题库信息变更(如题库ID更新或者重新关联刷题记录到不同题库等情况)时, + * 可以通过调用该方法来更新当前GradeExercise对象中的题库ID值,参数“repoId”为要设置的题库的ID整数值。 + * @param repoId 要设置的题库的ID整数值。 + */ public void setRepoId(Integer repoId) { this.repoId = repoId; } + + /** + * 获取参与刷题活动的班级的ID,外部代码调用该方法可以获取当前GradeExercise对象对应的班级ID值, + * 在业务逻辑中可用于查找该班级的其他刷题活动记录、统计班级刷题情况等操作,返回值为Integer类型。 + * @return 返回班级的ID值。 + */ public Integer getGradeId() { return gradeId; } + /** + * 设置参与刷题活动的班级的ID,例如班级信息调整导致班级ID变化或者重新关联刷题记录到不同班级等情况时, + * 可以通过调用该方法来更新当前GradeExercise对象中的班级ID值,参数“gradeId”为要设置的班级的ID整数值。 + * @param gradeId 要设置的班级的ID整数值。 + */ public void setGradeId(Integer gradeId) { this.gradeId = gradeId; } + + /** + * 获取刷题活动创建人的ID,外部代码调用该方法可以获取当前GradeExercise对象对应的创建人ID值, + * 用于在业务逻辑中查找创建人的相关信息、进行权限管理以及统计创建人创建的刷题活动数量等操作,返回值为Integer类型。 + * @return 返回刷题活动创建人的ID值。 + */ public Integer getUserId() { return userId; } +/** + * 设置刷题活动创建人的ID,例如在数据修正(发现创建人记录错误)、重新指定刷题活动创建人(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前GradeExercise对象中的创建人ID值,参数“userId”为要设置的刷题活动创建人的ID整数值。 + * @param userId 要括号内。 + +- **代码规范**: +- **命名规范**: +- 变量、函数、类等的命名应具有清晰的语义,遵循驼峰命名法,让代码阅读者能够直观地理解其用途。例如,`calculateTotalScore` 这个函数名就能很清晰地表明它是用于计算总分的功能。 +- 避免使用单个字母或含义模糊的缩写作为命名,除非是约定俗成的通用缩写(如 `id` 表示标识符等),这样可以增强代码的可读性和可维护性。 +- **格式规范**: +- 合理使用空格和缩进,使代码结构清晰。比如代码块之间通过缩进体现层次关系,函数内部语句之间也保持适当间距,方便阅读者快速把握代码逻辑走向。 +- 遵循大括号的使用规则,即使代码块只有一行语句,也建议使用大括号包裹,以增强代码的清晰性和可扩展性,防止后续添加语句时出现逻辑错误。例如: +`**/ + + /** + * 设置刷题活动创建人的ID,用于更新当前`GradeExercise`对象中表示创建人ID的`userId`属性值。 + * 在实际业务场景中,可能会出现诸如数据录入错误需要修正创建人记录(发现最初记录的创建人ID有误), + * 或者因特殊业务需求重新指定刷题活动创建人(比如原创建人离职,将创建人权限转移给其他用户等情况)时, + * 可以通过调用该方法,并传入正确的创建人ID整数值(参数`userId`)来完成对创建人信息的更新操作, + * 从而确保对象中的创建人相关数据能准确反映实际业务情况,便于后续进行诸如权限管理、统计分析等相关业务逻辑处理。 + * @param userId 要设置的刷题活动创建人的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取班级刷题活动创建的时间信息,外部代码调用该方法可以获取当前`GradeExercise`对象对应的创建时间值, + * 其类型为`LocalDateTime`,格式遵循如“YYYY-MM-DD HH:mm:ss”等标准时间格式。 + * 这个时间信息在业务逻辑中有着重要作用,比如可用于记录刷题活动的发起顺序,分析不同时间段班级刷题的活跃度, + * 也方便后续进行数据统计(例如统计某个时间段内创建的刷题活动数量等)以及活动管理等操作,返回值为`LocalDateTime`类型。 + * @return 返回班级刷题活动的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置班级刷题活动创建的时间信息,通过此方法能够对当前`GradeExercise`对象中存储创建时间的`createTime`属性进行更新操作。 + * 不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过`@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整创建时间值时, + * 可以调用该方法,并传入符合业务要求的`LocalDateTime`类型的时间值(参数`createTime`)来完成对创建时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的班级刷题活动创建的`LocalDateTime`类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /** + * 重写了`Object`类的`toString`方法,用于将`GradeExercise`对象转换为一个包含各属性值的字符串表示形式。 + * 按照“GradeExercise{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看班级刷题活动对象各个属性具体的值,返回值为`String`类型。 + * @return 返回表示`GradeExercise`对象各属性值的字符串。 + */ @Override public String toString() { return "GradeExercise{" + - "id=" + id + - ", repoId=" + repoId + - ", gradeId=" + gradeId + - ", userId=" + userId + - ", createTime=" + createTime + - "}"; - } -} + "id=" + id + + ", repoId=" + repoId + + ", gradeId=" + gradeId + + ", userId=" + userId + + ", createTime=" + createTime + + "}"; + } \ No newline at end of file -- 2.34.1 From 3b41078d21320c06449d18e195ce5bc69455c7cc Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 17:15:15 +0800 Subject: [PATCH 15/25] 1 --- .../alan/exam/model/entity/ManualScore.java | 95 +++++++++++++++++-- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/ManualScore.java b/src/main/java/cn/org/alan/exam/model/entity/ManualScore.java index 55c6e5d..4c102ad 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/ManualScore.java +++ b/src/main/java/cn/org/alan/exam/model/entity/ManualScore.java @@ -7,7 +7,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为ManualScore,实现了Serializable接口,使其具备可序列化的能力,方便在如将人工评分相关的数据持久化存储到文件、在网络间传输评分记录等场景下进行数据交换与保存,确保数据能在不同环境中完整且有效地流转,适用于考试系统等对主观题人工评分信息管理的需求。 + * 它对应数据库中的“t_manual_score”表,主要用于封装人工评分活动相关的关键信息,通过这个类可以清晰地知晓针对哪条考试记录答案进行了人工评分、评分人是谁、具体得分以及评分时间等重要内容,是关联考试答题记录与人工评分操作的重要实体类。 *
* * @author WeiJin @@ -17,79 +18,157 @@ import java.time.LocalDateTime; public class ManualScore implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同阶段或环境下对对象操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_manual_score”中的不同字段,用于存储人工评分相关的详细信息,下面将逐个进行注释说明。 /** * id 人工评分表 + * 此属性作为人工评分记录在数据库中的唯一标识符,对应数据库表“t_manual_score”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的人工评分记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条人工评分记录都有一个独一无二的编号,方便后续对这些记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如根据ID查询特定的人工评分详情等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 考试记录答案id + * 用于存储被人工评分的那条考试记录答案的唯一标识符,类型为Integer,通过这个字段可以明确是针对哪一条具体的考试答题记录进行的评分操作, + * 它会和存储考试答题记录信息的表(例如前面提到的“t_exam_qu_answer”表)中的相应记录ID进行关联,便于在业务逻辑中查找对应的答题内容、追溯评分对象等,确保评分与答题情况准确对应。 */ private Integer examQuAnswerId; /** * 批改人id + * 用来存放进行人工评分的用户(通常是教师等具备批改权限的角色)的唯一标识符,类型为Integer,通过这个字段可以明确是谁对答题记录进行了批改,便于关联用户信息以及后续进行诸如权限管理(批改人可能有特定的评分权限范围等)、统计不同批改人批改的数量等业务操作。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入人工评分记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到评分的执行者。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 得分 + * 用于记录人工评分给出的具体分值,类型为Integer,这个分值是批改人根据答题情况(如主观题的答题内容完整性、准确性等)进行评判后给出的结果, + * 在统计考试总成绩、分析各题得分情况以及评估考生表现等业务操作中起到关键作用,是衡量考生答题质量的重要指标之一。 */ private Integer score; /** * 批改时间 + * 用于存储进行人工评分操作的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD HH:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录评分的先后顺序、分析不同时间段的批改工作量等,方便后续进行数据统计和管理。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对ManualScore对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取人工评分记录的唯一ID,外部代码通过调用该方法能够拿到当前ManualScore对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的人工评分记录,返回值为Integer类型。 + * @return 返回人工评分记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置人工评分记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的人工评分记录的ID整数值。 + * @param id 要设置的人工评分记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取被人工评分的考试记录答案的ID,外部代码调用该方法可以获取当前ManualScore对象对应的考试记录答案ID值, + * 用于在业务逻辑中查找对应的答题记录、关联答题内容等操作,返回值为Integer类型。 + * @return 返回考试记录答案的ID值。 + */ public Integer getExamQuAnswerId() { return examQuAnswerId; } + /** + * 设置被人工评分的考试记录答案的ID,当存在答题记录相关信息变更(如记录ID更新或者重新关联评分记录到不同答题记录等情况)时, + * 可以通过调用该方法来更新当前ManualScore对象中的考试记录答案ID值,参数“examQuAnswerId”为要设置的考试记录答案的ID整数值。 + * @param examQuAnswerId 要设置的考试记录答案的ID整数值。 + */ public void setExamQuAnswerId(Integer examQuAnswerId) { this.examQuAnswerId = examQuAnswerId; } + + /** + * 获取人工评分的批改人ID,外部代码调用该方法可以获取当前ManualScore对象对应的批改人ID值, + * 用于在业务逻辑中查找批改人的相关信息、进行权限管理以及统计批改人批改的数量等操作,返回值为Integer类型。 + * @return 返回人工评分的批改人ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置人工评分的批改人ID,例如在数据修正(发现批改人记录错误)、重新指定批改人(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前ManualScore对象中的批改人ID值,参数“userId”为要设置的人工评分的批改人ID整数值。 + * @param userId 要设置的人工评分的批改人ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取人工评分给出的得分,外部代码调用该方法可以获取当前ManualScore对象对应的评分分值, + * 在统计考试总成绩、分析各题得分情况以及评估考生表现等业务操作中会用到该分值信息,返回值为Integer类型。 + * @return 返回人工评分给出的得分。 + */ public Integer getScore() { return score; } + /** + * 设置人工评分给出的得分,在成绩复查、分数修正(如发现批改有误等情况)等场景下, + * 可以通过调用该方法来更新当前ManualScore对象中的评分分值,参数“score”为要设置的人工评分的分值整数值。 + * @param score 要设置的人工评分的分值整数值。 + */ public void setScore(Integer score) { this.score = score; } + + /** + * 获取人工评分的批改时间,外部代码调用该方法可以获取当前ManualScore对象对应的批改时间值, + * 其类型为LocalDateTime,格式遵循如“YYYY-MM-DD HH:mm:ss”等标准时间格式,这个时间信息在业务逻辑中有着重要作用, + * 比如可用于记录评分的先后顺序,分析不同时间段的批改工作量等,返回值为LocalDateTime类型。 + * @return 返回人工评分的批改时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置人工评分的批改时间,不过通常情况下,批改时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整批改时间值时, + * 可以调用该方法,并传入符合业务要求的LocalDateTime类型的时间值(参数`createTime`)来完成对批改时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的人工评分的批改时间的LocalDateTime类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /** + * 重写了Object类的toString方法,用于将ManualScore对象转换为一个包含各属性值的字符串表示形式。 + * 按照“ManualScore{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看人工评分对象各个属性具体的值,返回值为String类型。 + * @return 返回表示ManualScore对象各属性值的字符串。 + */ @Override public String toString() { return "ManualScore{" + - "id=" + id + - ", examQuAnswerId=" + examQuAnswerId + - ", userId=" + userId + - ", score=" + score + - ", createTime=" + createTime + - "}"; + "id=" + id + + ", examQuAnswerId=" + examQuAnswerId + + ", userId=" + userId + + ", score=" + score + + ", createTime=" + createTime + + "}"; } -} +} \ No newline at end of file -- 2.34.1 From df9269de93000d509e18ef20c1d3ae7eb17a4575 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Tue, 17 Dec 2024 17:20:36 +0800 Subject: [PATCH 16/25] 1 --- .../cn/org/alan/exam/model/entity/Notice.java | 98 ++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Notice.java b/src/main/java/cn/org/alan/exam/model/entity/Notice.java index 209bc3c..87f7413 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Notice.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Notice.java @@ -7,7 +7,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为Notice,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将公告相关信息持久化存储到文件、在网络间传输公告数据等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类需要发布和管理公告信息的系统中。 + * 它对应数据库中的“t_notice”表,主要用于封装公告的各种关键信息,通过这个类可以清晰地呈现出公告的基本属性,包括标题、内容、相关图片地址以及创建人、创建时间、逻辑删除状态等信息,是对系统中公告这一实体在代码层面的映射表示。 *
* * @author WeiJin @@ -17,101 +18,194 @@ import java.time.LocalDateTime; public class Notice implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_notice”中的不同字段,用于存储公告相关的关键信息,下面将逐个进行注释说明。 /** * ID 公告表 + * 此属性作为公告记录在数据库中的唯一标识符,对应数据库表“t_notice”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的公告记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条公告记录都有一个唯一的编号,方便后续对公告记录进行查找、操作等业务处理,例如根据ID查询特定公告的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 公告标题 + * 用于存储公告的标题内容,类型为String,公告标题通常是对公告核心内容的简要概括,方便用户在浏览公告列表等场景下快速了解公告大致主题,起到吸引用户进一步查看公告详细内容的作用,是公告的一个重要展示属性。 */ private String title; /** * 图片地址 + * 用来存放与公告相关的图片资源的地址信息,类型为String,在一些公告中可能会搭配图片来更直观地传达信息(比如活动公告搭配活动海报图片、产品介绍公告配上产品图片等),通过这个地址可以获取对应的图片资源进行展示,增强公告的表现力和吸引力。 */ private String image; /** * 公告内容 + * 用于存储公告的详细文本内容,类型为String,这里包含了要传达给用户的具体信息,如通知事项、活动详情、政策解读等实质性内容,是公告的核心组成部分,用户查看公告主要就是为了获取这部分内容信息。 */ private String content; /** * 创建用户ID 唯一 + * 用于记录创建该公告的用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户发布了该公告,便于关联用户信息以及后续进行诸如权限管理(创建者可能有特定的公告管理权限)、统计不同用户发布的公告数量等业务操作。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入公告记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到公告的创建源头。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 创建时间 + * 用于存储公告创建的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD HH:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录公告的发布顺序、分析不同时间段的公告发布活跃度等,方便后续进行数据统计和管理。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 逻辑删除字段 + * 用于标记公告记录是否被逻辑删除,类型为Integer,通常取值为0表示未删除(正常状态),1表示已删除(逻辑上的删除,实际数据可能还在数据库中,只是在业务逻辑层面视为不可见、不可操作了),方便在数据管理中实现软删除功能,避免直接物理删除数据带来的一些潜在风险(如误删无法恢复等),同时也便于后续可能的恢复操作或者数据统计(如统计已删除公告数量等)。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Notice对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取公告记录的逻辑删除标记值,外部代码通过调用该方法能够拿到当前Notice对象对应的逻辑删除状态值, + * 用于在业务逻辑中判断公告记录是否已被删除,进而决定是否对其进行相关操作(如查询、更新等操作对于已删除记录通常是受限的),返回值为Integer类型。 + * @return 返回公告记录的逻辑删除状态值(0或1)。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置公告记录的逻辑删除标记值,在执行公告删除操作(逻辑删除)或者进行数据恢复(将逻辑删除标记改回未删除状态)等场景下, + * 可以通过调用该方法来更新当前Notice对象中的逻辑删除状态值,参数“isDeleted”为要设置的逻辑删除的整数值(0或1),确保数据的删除状态能准确反映业务需求。 + * @param isDeleted 要设置的逻辑删除的整数值(0或1)。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } + /** + * 获取公告记录的唯一ID,外部代码通过调用该方法能够拿到当前Notice对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的公告记录,例如根据ID查询公告详细信息、更新公告相关属性等,返回值为Integer类型。 + * @return 返回公告记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置公告记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的公告记录的ID整数值。 + * @param id 要设置的公告记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + /** + * 获取公告的标题,外部代码调用该方法可以获取当前Notice对象对应的公告标题字符串, + * 在展示公告信息、供用户快速识别公告主题等业务场景中会用到该标题,返回值为String类型。 + * @return 返回公告的标题字符串。 + */ public String getTitle() { return title; } + /** + * 设置公告的标题,在公告标题需要变更(如因内容调整、重新吸引用户关注等原因)时, + * 可以通过调用该方法来更新当前Notice对象中的公告标题字符串,参数“title”为要设置的新的公告标题字符串值。 + * @param title 要设置的新的公告标题字符串值。 + */ public void setTitle(String title) { this.title = title; } + /** + * 获取公告的图片地址,外部代码调用该方法可以获取当前Notice对象对应的图片地址字符串, + * 在获取并展示公告相关图片资源、判断是否有配图等业务场景中会用到该地址信息,返回值为String类型。 + * @return 返回公告的图片地址字符串。 + */ public String getImage() { return image; } + /** + * 设置公告的图片地址,当公告配图发生变化(如更换更合适的图片、图片资源链接更新等情况)时, + * 可以通过调用该方法来更新当前Notice对象中的图片地址字符串,参数“image”为要设置的新的图片地址字符串值。 + * @param image 要设置的新的图片地址字符串值。 + */ public void setImage(String image) { this.image = image; } + /** + * 获取公告的内容,外部代码调用该方法可以获取当前Notice对象对应的公告内容字符串, + * 这是公告的核心信息所在,用户查看公告就是为了获取该内容,返回值为String类型。 + * @return 返回公告的内容字符串。 + */ public String getContent() { return content; } + /** + * 设置公告的内容,在公告具体内容需要修改(如信息补充、纠错等情况)时, + * 可以通过调用该方法来更新当前Notice对象中的公告内容字符串,参数“content”为要设置的新的公告内容字符串值。 + * @param content 要设置的新的公告内容字符串值。 + */ public void setContent(String content) { this.content = content; } + /** + * 获取公告创建人的ID,外部代码调用该方法可以获取当前Notice对象对应的公告创建人ID值, + * 用于在业务逻辑中关联创建人相关信息、进行权限管理以及统计创建人发布的公告情况等操作,返回值为Integer类型。 + * @return 返回公告创建人的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置公告创建人的ID,例如在数据修正(发现创建人记录错误)、重新指定公告创建人(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前Notice对象中的公告创建人ID值,参数“userId”为要设置的公告创建人的ID整数值。 + * @param userId 要设置的公告创建人的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + /** + * 获取公告的创建时间,外部代码调用该方法可以获取当前Notice对象对应的创建时间值, + * 其类型为LocalDateTime,格式遵循如“YYYY-MM-DD HH:mm:ss”等标准时间格式,这个时间信息在业务逻辑中有着重要作用, + * 比如可用于记录公告的发布顺序,分析不同时间段的公告发布活跃度等,返回值为LocalDateTime类型。 + * @return 返回公告的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置公告的创建时间,不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整创建时间值时, + * 可以调用该方法,并传入符合业务要求的LocalDateTime类型的时间值(参数`createTime`)来完成对创建时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的公告的创建时间的LocalDateTime类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /** + * 重写了Object类的toString方法,用于将Notice对象转换为一个包含各属性值的字符串表示形式, + * 按照“Notice{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看公告对象各个属性具体的值,返回值为String类型。 + * @return 返回表示Notice对象各属性值的字符串。 + */ @Override public String toString() { return "Notice{" + @@ -124,4 +218,4 @@ public class Notice implements Serializable { ", isDeleted=" + isDeleted + '}'; } -} +} \ No newline at end of file -- 2.34.1 From 3687920bac2c9e7ae7667c2d49b0439c7e97ccf1 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 15:43:43 +0800 Subject: [PATCH 17/25] 1 --- .../alan/exam/model/entity/NoticeGrade.java | 67 ++++++++++++++++--- 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/NoticeGrade.java b/src/main/java/cn/org/alan/exam/model/entity/NoticeGrade.java index 7fe54af..8cfa1f3 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/NoticeGrade.java +++ b/src/main/java/cn/org/alan/exam/model/entity/NoticeGrade.java @@ -8,7 +8,8 @@ import java.io.Serializable; /** *- * + * 该类名为NoticeGrade,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将公告与班级关联相关的数据持久化存储到文件、在网络间传输此类关联信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于学校教学管理等系统中对公告定向推送至特定班级的功能实现。 + * 它对应数据库中的“t_notice_grade”表,主要用于封装公告与班级之间的关联关系信息,通过这个类可以清晰地知晓某条公告具体关联了哪些班级,是实现针对不同班级精准推送公告的关键实体类,在信息发布与班级管理的交互业务中起着重要作用。 *
* * @author WeiJin @@ -18,51 +19,101 @@ import java.io.Serializable; public class NoticeGrade implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同阶段或环境下对对象操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_notice_grade”中的不同字段,用于存储公告与班级关联的关键信息,下面将逐个进行注释说明。 /** * ID 公告班级关联表 + * 此属性作为公告与班级关联记录在数据库中的唯一标识符,对应数据库表“t_notice_grade”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的公告与班级关联记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条关联记录都有一个独一无二的编号,方便后续对这些记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如根据ID查询特定的公告与班级关联详情等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 公告id + * 用于存储关联的公告的唯一标识符,类型为Integer,通过这个字段可以明确是哪一条公告与班级产生了关联关系, + * 它会和存储公告信息的表(例如前面提到的“t_notice”表)中的公告ID进行关联,便于在业务逻辑中查找特定公告关联了哪些班级、对关联班级推送相应公告等操作,确保公告能准确地推送给目标班级。 */ private Integer noticeId; /** * 班级 + * 用来存放与之关联的班级的唯一标识符,类型为Integer,借助这个字段能够确定是哪个班级与特定公告相关联, + * 会和存储班级信息的表(例如“t_grade”表)中的班级ID相互关联,在诸如按班级查看已接收的公告、统计不同班级接收的公告数量等业务场景中起到关键作用,实现班级与公告之间的精准对应。 */ private Integer gradeId; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对NoticeGrade对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取公告与班级关联记录的唯一ID,外部代码通过调用该方法能够拿到当前NoticeGrade对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的关联记录,返回值为Integer类型。 + * @return 返回关联记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置公告与班级关联记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的关联记录的ID整数值。 + * @param id 要设置的关联记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取关联的公告的ID,外部代码调用该方法可以获取当前NoticeGrade对象对应的公告ID值, + * 用于在业务逻辑中查找该公告关联的其他班级、进行公告推送等操作,返回值为Integer类型。 + * @return 返回关联的公告的ID值。 + */ public Integer getNoticeId() { return noticeId; } + /** + * 设置关联的公告的ID,当存在公告信息变更(如公告ID更新或者重新关联班级与不同公告等情况)时, + * 可以通过调用该方法来更新当前NoticeGrade对象中的公告ID值,参数“noticeId”为要设置的公告的ID整数值。 + * @param noticeId 要设置的公告的ID整数值。 + */ public void setNoticeId(Integer noticeId) { this.noticeId = noticeId; } + + /** + * 获取关联的班级的ID,外部代码调用该方法可以获取当前NoticeGrade对象对应的班级ID值, + * 在业务逻辑中可用于查找该班级关联的其他公告、统计班级接收公告情况等操作,返回值为Integer类型。 + * @return 返回关联的班级的ID值。 + */ public Integer getGradeId() { - return gradeId; + return gradeId; } + /** + * 设置关联的班级的ID,用于更新当前`NoticeGrade`对象中表示班级ID的`gradeId`属性值。 + * 在实际业务场景中,若出现班级信息调整(比如班级ID发生变化、需要重新关联公告与不同班级等情况)时, + * 可以通过调用该方法,并传入正确的班级ID整数值(参数`gradeId`)来完成对班级关联信息的更新操作, + * 从而确保对象中的班级相关数据能准确反映实际业务情况,便于后续进行诸如按班级查看公告、统计不同班级接收公告情况等相关业务逻辑处理。 + * @param gradeId 要设置的关联的班级的ID整数值。 + */ public void setGradeId(Integer gradeId) { this.gradeId = gradeId; } + /** + * 重写了`Object`类的`toString`方法,用于将`NoticeGrade`对象转换为一个包含各属性值的字符串表示形式。 + * 按照“NoticeGrade{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看公告与班级关联对象各个属性具体的值,返回值为`String`类型。 + * @return 返回表示`NoticeGrade`对象各属性值的字符串。 + */ @Override public String toString() { return "NoticeGrade{" + - "id=" + id + - ", noticeId=" + noticeId + - ", gradeId=" + gradeId + - "}"; - } -} + "id=" + id + + ", noticeId=" + noticeId + + ", gradeId=" + gradeId + + "}"; + } \ No newline at end of file -- 2.34.1 From a36c53e0a1eba6382caa6f30d2d0f8df904a0b3c Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 15:47:44 +0800 Subject: [PATCH 18/25] 1 --- .../cn/org/alan/exam/model/entity/Option.java | 105 ++++++++++++++++-- 1 file changed, 98 insertions(+), 7 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Option.java b/src/main/java/cn/org/alan/exam/model/entity/Option.java index 6e2dc96..1a19586 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Option.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Option.java @@ -9,7 +9,8 @@ import java.io.Serializable; /** *- * + * 该类名为Option,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将选项答案相关的数据持久化存储到文件、在网络间传输选项信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于考试系统等对试题选项进行管理的场景。 + * 它对应数据库中的“t_option”表,主要用于封装试题选项的各种关键信息,包括选项对应的试题、是否正确、图片地址、具体内容、排序以及逻辑删除状态等,是对试题中单个选项这一实体在代码层面的完整映射表示,关乎试题的完整性以及答题判断等业务逻辑。 *
* * @author WeiJin @@ -19,100 +20,190 @@ import java.io.Serializable; public class Option implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_option”中的不同字段,用于存储试题选项相关的关键信息,下面将逐个进行注释说明。 /** * id 选项答案表 + * 此属性作为选项记录在数据库中的唯一标识符,对应数据库表“t_option”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的选项记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条选项记录都有一个唯一的编号,方便后续对选项记录进行查找、操作等业务处理,例如根据ID查询特定选项的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 试题id + * 用于存储该选项所属试题的唯一标识符,类型为Integer,通过这个字段可以明确该选项是对应哪一道试题的,便于在业务逻辑中关联试题整体信息,例如获取该试题的其他选项、判断该试题的正确答案组合等操作,确保选项与所属试题准确对应,它会和存储试题信息的表(具体表名根据实际业务而定)中的试题ID进行关联。 */ private Integer quId; /** * 是否正确 + * 用于标记该选项是否为正确答案,类型为Integer,并且通过`@NotNull`、`@Min`、`@Max`等注解进行了有效性约束。`@NotNull`注解表示该字段不能为空,`@Min(value = 0)`和`@Max(value = 1)`注解限定其取值只能是0(表示错误)或者1(表示正确),以此严格规范选项正确与否的标记,保证答题判断逻辑的准确性,在判断用户选择的答案是否正确等业务操作中起到关键作用。 */ @NotNull(message = "选型是否正确(isRight)不能为空") - @Min(value = 0,message = "选项是否正确(isRight)只能是:0错误1正确") - @Max(value = 1,message = "选项是否正确(isRight)只能是:0错误1正确") + @Min(value = 0, message = "选项是否正确(isRight)只能是:0错误1正确") + @Max(value = 1, message = "选项是否正确(isRight)只能是:0错误1正确") private Integer isRight; /** * 图片地址 0错误 1正确 + * 用来存放与该选项相关的图片资源的地址信息(可能在一些题目中,选项会配有图片辅助说明,比如图形题、实物描述题等),类型为String,若选项不需要图片辅助,则该字段可以为空字符串,其具体使用情况根据试题的实际设计而定,通过该地址可以获取对应的图片资源进行展示,增强选项的表现力和理解度。 */ private String image; /** * 选项内容 - */ - @NotBlank(message = "选型内容(content)不能为空") + * 用于存储选项的具体文本内容,类型为String,这是选项呈现给答题者的核心信息,如选择题中的各个选项文字表述等,并且通过`@NotBlank`注解约束该字段不能为空,确保每个选项都有实际的内容可供答题者选择,是答题者判断和选择的重要依据。 + * @NotBlank(message = "选型内容(content)不能为空") private String content; /** * 排序 + * 用于记录该选项在所属试题的所有选项中的排列顺序,类型为Integer,这个顺序信息在展示试题选项(比如按照顺序依次罗列选择题的各个选项)以及处理答题逻辑(如根据用户选择的选项序号进行相关判断等)等业务场景中会用到,保证选项呈现的规范性和逻辑性。 */ private Integer sort; /** * 逻辑删除字段 + * 用于标记选项记录是否被逻辑删除,类型为Integer,通常取值为0表示未删除(正常状态),1表示已删除(逻辑上的删除,实际数据可能还在数据库中,只是在业务逻辑层面视为不可见、不可操作了),方便在数据管理中实现软删除功能,避免直接物理删除数据带来的一些潜在风险(如误删无法恢复等),同时也便于后续可能的恢复操作或者数据统计(如统计已删除选项数量等)。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Option对象的属性进行访问和修改,下面分别进行注释。 - + /** + * 获取选项记录的逻辑删除标记值,外部代码通过调用该方法能够拿到当前Option对象对应的逻辑删除状态值, + * 用于在业务逻辑中判断选项记录是否已被删除,进而决定是否对其进行相关操作(如查询、更新等操作对于已删除记录通常是受限的),返回值为Integer类型。 + * @return 返回选项记录的逻辑删除状态值(0或1)。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置选项记录的逻辑删除标记值,在执行选项删除操作(逻辑删除)或者进行数据恢复(将逻辑删除标记改回未删除状态)等场景下, + * 可以通过调用该方法来更新当前Option对象中的逻辑删除状态值,参数“isDeleted”为要设置的逻辑删除的整数值(0或1),确保数据的删除状态能准确反映业务需求。 + * @param isDeleted 要设置的逻辑删除的整数值(0或1)。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } + /** + * 获取选项记录的唯一ID,外部代码通过调用该方法能够拿到当前Option对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的选项记录,例如根据ID查询选项详细信息、更新选项相关属性等,返回值为Integer类型。 + * @return 返回选项记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置选项记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的选项记录的ID整数值。 + * @param id 要设置的选项记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取选项所属试题的ID,外部代码调用该方法可以获取当前Option对象对应的试题ID值, + * 用于在业务逻辑中查找该试题的其他选项、关联试题整体信息等操作,返回值为Integer类型。 + * @return 返回选项所属试题的ID值。 + */ public Integer getQuId() { return quId; } + /** + * 设置选项所属试题的ID,当存在试题信息变更(如试题ID更新或者重新关联选项与不同试题等情况)时, + * 可以通过调用该方法来更新当前Option对象中的试题ID值,参数“quId”为要设置的试题的ID整数值。 + * @param quId 要设置的试题的ID整数值。 + */ public void setQuId(Integer quId) { this.quId = quId; } + + /** + * 获取选项是否正确的标记值,外部代码调用该方法可以获取当前Option对象对应的选项正确与否的标记值, + * 用于在判断答题是否正确、统计试题正确答案情况等业务操作中会用到该标记信息,返回值为Integer类型。 + * @return 返回选项是否正确的标记值(0或1)。 + */ public Integer getIsRight() { return isRight; } + /** + * 设置选项是否正确的标记值,在如答案标准调整(发现之前设置的选项正确与否有误等情况)、进行数据修正等场景下, + * 可以通过调用该方法来更新当前Option对象中的选项正确与否的标记值,参数“isRight”为要设置的表示选项是否正确的整数值(0或1),确保答题判断逻辑基于准确的答案标记。 + * @param isRight 要设置的表示选项是否正确的整数值(0或1)。 + */ public void setIsRight(Integer isRight) { this.isRight = isRight; } + + /** + * 获取选项的图片地址,外部代码调用该方法可以获取当前Option对象对应的图片地址字符串, + * 在获取并展示选项相关图片资源、判断是否有配图等业务场景中会用到该地址信息,返回值为String类型。 + * @return 返回选项的图片地址字符串。 + */ public String getImage() { return image; } + /** + * 设置选项的图片地址,当选项配图发生变化(如更换更合适的图片、图片资源链接更新等情况)时, + * 可以通过调用该方法来更新当前Option对象中的图片地址字符串,参数“image”为要设置的新的图片地址字符串值。 + * @param image 要设置的新的图片地址字符串值。 + */ public void setImage(String image) { this.image = image; } + + /** + * 获取选项的内容,外部代码调用该方法可以获取当前Option对象对应的选项内容字符串, + * 这是选项呈现给答题者的核心信息,用于答题者进行选择判断等操作,返回值为String类型。 + * @return 返回选项的内容字符串。 + */ public String getContent() { return content; } + /** + * 设置选项的内容,在选项具体内容需要修改(如内容纠错、更新表述等情况)时, + * 可以通过调用该方法来更新当前Option对象中的选项内容字符串,参数“content”为要设置的新的选项内容字符串值。 + * @param content 要设置的新的选项内容字符串值。 + */ public void setContent(String content) { this.content = content; } + + /** + * 获取选项的排序序号,外部代码调用该方法可以获取当前Option对象对应的选项排序值, + * 在展示试题选项、处理答题逻辑等业务场景中会用到该排序信息,返回值为Integer类型。 + * @return 返回选项的排序序号。 + */ public Integer getSort() { return sort; } + /** + * 设置选项的排序序号,当需要调整选项在试题中的呈现顺序(如重新安排选择题选项顺序等情况)时, + * 可以通过调用该方法来更新当前Option对象中的选项排序值,参数“sort”为要设置的新的排序整数值。 + * @param sort 要设置的新的排序整数值。 + */ public void setSort(Integer sort) { this.sort = sort; } + /** + * 重写了Object类的toString方法,用于将Option对象转换为一个包含各属性值的字符串表示形式, + * 按照“Option{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看选项对象各个属性具体的值,返回值为String类型。 + * @return 返回表示Option对象各属性值的字符串。 + */ @Override public String toString() { return "Option{" + @@ -125,4 +216,4 @@ public class Option implements Serializable { ", isDeleted=" + isDeleted + '}'; } -} +} \ No newline at end of file -- 2.34.1 From a01d3184c01258c30cb13eecbc56391da591f031 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 15:52:33 +0800 Subject: [PATCH 19/25] 1 --- .../org/alan/exam/model/entity/Question.java | 137 ++++++++++++++++-- 1 file changed, 127 insertions(+), 10 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Question.java b/src/main/java/cn/org/alan/exam/model/entity/Question.java index 79b2ab8..4354fb6 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Question.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Question.java @@ -7,7 +7,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为Question,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将试题相关的数据持久化存储到文件、在网络间传输试题信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类考试、练习系统等对试题进行管理的场景。 + * 它对应数据库中的“t_question”表,主要用于封装试题的各种关键信息,涵盖了试题的基本属性,像试题类型、是否有图片、题干内容、创建时间、题目分析以及所属题库、创建人、逻辑删除状态等信息,是对一道试题在代码层面的完整映射表示,关乎整个测试相关业务的核心数据管理。 *
* * @author WeiJin @@ -17,126 +18,242 @@ import java.time.LocalDateTime; public class Question implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_question”中的不同字段,用于存储试题相关的关键信息,下面将逐个进行注释说明。 /** * id 试题表 + * 此属性作为试题记录在数据库中的唯一标识符,对应数据库表“t_question”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的试题记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条试题记录都有一个唯一的编号,方便后续对试题记录进行查找、操作等业务处理,例如根据ID查询特定试题的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 试题类型 + * 用于存储试题的类型标识,类型为Integer,可能通过特定的数值来代表不同的题目类型,比如1表示单选题、2表示多选题、3表示简答题等(具体数值与题目类型的对应关系需根据业务定义),这个属性有助于在业务处理中根据不同题目类型采取相应的逻辑,例如不同类型的试题在答案处理、展示格式、答题规则等方面会有不同的操作,也方便后续进行试题的分类统计和分析。 */ private Integer quType; /** * 试题图片 + * 用来存放与该试题相关的图片资源的地址信息(可能在一些题目中,会配有图片辅助说明,比如图形题、实物描述题等),类型为String,若试题不需要图片辅助,则该字段可以为空字符串,其具体使用情况根据试题的实际设计而定,通过该地址可以获取对应的图片资源进行展示,增强试题的表现力和理解度。 */ private String image; /** * 题干 + * 用于存储试题的主体文本内容,也就是向答题者展示的需要回答的问题内容,类型为String,这是试题的核心组成部分,答题者主要依据题干来理解题意并进行作答,是整个答题过程的关键依据所在。 */ private String content; /** * 创建时间 + * 用于存储试题创建的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD HH:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录试题的添加顺序、分析不同时间段的试题创建活跃度等,方便后续进行数据统计和管理,例如统计某个时间段内新增了多少试题等。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 题目分析 + * 用于存储对该试题的分析内容,类型为String,可能包含对试题考点、解题思路、易错点等方面的讲解,方便答题者在做完题目后查看分析来理解题目、掌握知识点,也有助于教师等出题者对试题进行备注说明,在教学、练习、测试等业务场景中辅助提升学习效果。 */ private String analysis; /** * 题库id + * 用于存储该试题所属的题库的唯一标识符,类型为Integer,通过这个字段可以明确该试题是来源于哪个题库的,便于在业务逻辑中关联题库信息,例如统计某个题库中各类试题的数量、查询特定题库下的所有试题等操作,它会和存储题库信息的表(具体表名根据实际业务而定)中的题库ID进行关联。 */ private Integer repoId; + /** * 创建人id + * 用来存放创建该试题的用户(通常是教师、出题者等具备出题权限的角色)的唯一标识符,类型为Integer,通过这个字段可以明确是谁创建了该试题,便于关联用户信息以及后续进行诸如权限管理(创建者可能有特定的试题管理权限)、统计不同用户创建的试题数量等业务操作。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入试题记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到试题的创建源头。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 逻辑删除字段 + * 用于标记试题记录是否被逻辑删除,类型为Integer,通常取值为0表示未删除(正常状态),1表示已删除(逻辑上的删除,实际数据可能还在数据库中,只是在业务逻辑层面视为不可见、不可操作了),方便在数据管理中实现软删除功能,避免直接物理删除数据带来的一些潜在风险(如误删无法恢复等),同时也便于后续可能的恢复操作或者数据统计(如统计已删除试题数量等)。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Question对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取试题记录的逻辑删除标记值,外部代码通过调用该方法能够拿到当前Question对象对应的逻辑删除状态值, + * 用于在业务逻辑中判断试题记录是否已被删除,进而决定是否对其进行相关操作(如查询、更新等操作对于已删除记录通常是受限的),返回值为Integer类型。 + * @return 返回试题记录的逻辑删除状态值(0或1)。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置试题记录的逻辑删除标记值,在执行试题删除操作(逻辑删除)或者进行数据恢复(将逻辑删除标记改回未删除状态)等场景下, + * 可以通过调用该方法来更新当前Question对象中的逻辑删除状态值,参数“isDeleted”为要设置的逻辑删除的整数值(0或1),确保数据的删除状态能准确反映业务需求。 + * @param isDeleted 要设置的逻辑删除的整数值(0或1)。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } - public Integer getUserId() { - return userId; - } - - public void setUserId(Integer userId) { - this.userId = userId; - } - + /** + * 获取试题记录的唯一ID,外部代码通过调用该方法能够拿到当前Question对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的试题记录,例如根据ID查询试题详细信息、更新试题相关属性等,返回值为Integer类型。 + * @return 返回试题记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置试题记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的试题记录的ID整数值。 + * @param id 要设置的试题记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + /** + * 获取试题的类型标识,外部代码调用该方法可以获取当前Question对象对应的试题类型值, + * 用于在业务逻辑中根据不同题目类型采取相应的处理逻辑,如不同类型试题的答案处理、展示格式等方面的差异化操作,返回值为Integer类型。 + * @return 返回试题的类型标识值。 + */ public Integer getQuType() { return quType; } + /** + * 设置试题的类型标识,在试题类型定义变更(比如整个系统重新规划了题型分类,调整了各题型对应的代码值)或者发现已有试题记录中类型标记有误需要修正等情况时, + * 可以通过调用该方法来更新当前Question对象中的试题类型值,参数“quType”为要设置的试题的类型标识整数值。 + * @param quType 要设置的试题的类型标识整数值。 + */ public void setQuType(Integer quType) { this.quType = quType; } + /** + * 获取试题的图片地址,外部代码调用该方法可以获取当前Question对象对应的图片地址字符串, + * 在获取并展示试题相关图片资源、判断是否有配图等业务场景中会用到该地址信息,返回值为String类型。 + * @return 返回试题的图片地址字符串。 + */ public String getImage() { return image; } + /** + * 设置试题的图片地址,当试题配图发生变化(如更换更合适的图片、图片资源链接更新等情况)时, + * 可以通过调用该方法来更新当前Question对象中的图片地址字符串,参数“image”为要设置的新的图片地址字符串值。 + * @param image 要设置的新的图片地址字符串值。 + */ public void setImage(String image) { this.image = image; } + /** + * 获取试题的题干内容,外部代码调用该方法可以获取当前Question对象对应的题干内容字符串, + * 这是试题呈现给答题者的核心信息,用于答题者进行作答等操作,返回值为String类型。 + * @return 返回试题的题干内容字符串。 + */ public String getContent() { return content; } + /** + * 设置试题的题干内容,在试题题干需要修改(如内容纠错、更新表述等情况)时, + * 可以通过调用该方法来更新当前Question对象中的题干内容字符串,参数“content”为要设置的新的题干内容字符串值。 + * @param content 要设置的新的题干内容字符串值。 + */ public void setContent(String content) { this.content = content; } + /** + * 获取试题的创建时间,外部代码调用该方法可以获取当前Question对象对应的创建时间值, + * 其类型为LocalDateTime,格式遵循如“YYYY-MM-DD HH:mm:ss”等标准时间格式,这个时间信息在业务逻辑中有着重要作用, + * 比如可用于记录试题的添加顺序,分析不同时间段的试题创建活跃度等,返回值为LocalDateTime类型。 + * @return 返回试题的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置试题的创建时间,不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整创建时间值时, + * 可以调用该方法,并传入符合业务要求的LocalDateTime类型的时间值(参数`createTime`)来完成对创建时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的试题的创建时间的LocalDateTime类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /** + * 获取试题的题目分析内容,外部代码调用该方法可以获取当前Question对象对应的题目分析字符串, + * 这部分内容有助于答题者理解题目、掌握知识点,在教学、练习、测试等业务场景中辅助提升学习效果,返回值为String类型。 + * @return 返回试题的题目分析字符串。 + */ public String getAnalysis() { return analysis; } + /** + * 设置试题的题目分析内容,在对试题分析内容进行补充、修改(如更新解题思路、完善易错点说明等情况)时, + * 可以通过调用该方法来更新当前Question对象中的题目分析字符串,参数“analysis”为要设置的新的题目分析字符串值。 + * @param analysis 要设置的新的题目分析字符串值。 + */ public void setAnalysis(String analysis) { this.analysis = analysis; } + /** + * 获取试题所属的题库的ID,外部代码调用该方法可以获取当前Question对象对应的题库ID值, + * 用于在业务逻辑中查找该题库的其他试题、关联题库信息等操作,返回值为Integer类型。 + * @return 返回试题所属的题库的ID值。 + */ public Integer getRepoId() { return repoId; } + /** + * 设置试题所属的题库的ID,当存在题库信息变更(如题库ID更新或者重新关联试题与不同题库等情况)时, + * 可以通过调用该方法来更新当前Question对象中的题库ID值,参数“repoId”为要设置的试题所属的题库的ID整数值。 + * @param repoId 要设置的试题所属的题库的ID整数值。 + */ public void setRepoId(Integer repoId) { this.repoId = repoId; } + /** + * 获取试题创建人的ID,外部代码调用该方法可以获取当前Question对象对应的试题创建人ID值, + * 用于在业务逻辑中关联创建人相关信息、进行权限管理以及统计创建人创建的试题数量等操作,返回值为Integer类型。 + * @return 返回试题创建人的ID值。 + */ + public Integer getUserId() { + return userId; + } + + /** + * 设置试题创建人的ID,例如在数据修正(发现创建人记录错误)、重新指定试题创建人(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前Question对象中的试题创建人ID值,参数“userId”为要设置的试题创建人的ID整数值。 + * @param userId 要设置的试题创建人的ID整数值。 + */ + public void setUserId(Integer userId) { + this.userId = userId; + } + + /** + * 重写了Object类的toString方法,用于将Question对象转换为一个包含各属性值的字符串表示形式, + * 按照“Question{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看试题对象各个属性具体的值,返回值为String类型。 + * @return 返回表示Question对象各属性值的字符串。 + */ @Override public String toString() { return "Question{" + @@ -151,4 +268,4 @@ public class Question implements Serializable { ", isDeleted=" + isDeleted + '}'; } -} +} \ No newline at end of file -- 2.34.1 From 9620c32d15c652e0b75b34ce354f6dab4aacbdd4 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 15:57:57 +0800 Subject: [PATCH 20/25] 1 --- .../cn/org/alan/exam/model/entity/Repo.java | 82 ++++++++++++++++++- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Repo.java b/src/main/java/cn/org/alan/exam/model/entity/Repo.java index 25c44b5..f25c34a 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Repo.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Repo.java @@ -10,7 +10,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为Repo,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将题库相关的数据持久化存储到文件、在网络间传输题库信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类考试、练习系统等对题库进行管理的场景。 + * 它对应数据库中的“t_repo”表,主要用于封装题库的各种关键信息,包含了像题库的唯一标识符、创建人、题库标题、创建时间以及逻辑删除状态等属性,是对一个题库在代码层面的完整映射表示,在题库的创建、维护以及使用等业务流程中起着核心作用。 *
* * @author WeiJin @@ -20,73 +21,146 @@ import java.time.LocalDateTime; public class Repo implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,这里初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_repo”中的不同字段,用于存储题库相关的关键信息,下面将逐个进行注释说明。 /** * id 题库表 + * 此属性作为题库记录在数据库中的唯一标识符,对应数据库表“t_repo”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的题库记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条题库记录都有一个唯一的编号,方便后续对题库记录进行查找、操作等业务处理,例如根据ID查询特定题库的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 创建人id + * 用来存放创建该题库的用户(通常是教师、出题者等具备出题权限的角色)的唯一标识符,类型为Integer,通过这个字段可以明确是谁创建了该题库,便于关联用户信息以及后续进行诸如权限管理(创建者可能有特定的题库管理权限)、统计不同用户创建的题库数量等业务操作。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入题库记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到题库的创建源头。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 题库标题 - */ - @NotBlank(message = "题库名不能为空") + * 用于存储题库的名称,类型为String,并且通过`@NotBlank`注解约束该字段不能为空,这意味着每个题库都必须有一个明确的标题,方便在业务逻辑中对不同的题库进行区分、展示以及查找等操作,例如在题库列表中展示给用户查看,用户可以通过标题直观地了解题库的大致范围或用途等。 + * @NotBlank(message = "题库名不能为空") private String title; /** * 创建时间 + * 用于存储题库创建的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD HH:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录题库的添加顺序、分析不同时间段的题库创建活跃度等,方便后续进行数据统计和管理,例如统计某个时间段内新增了多少题库等。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 逻辑删除字段 + * 用于标记题库记录是否被逻辑删除,类型为Integer,通常取值为0表示未删除(正常状态),1表示已删除(逻辑上的删除,实际数据可能还在数据库中,只是在业务逻辑层面视为不可见、不可操作了),方便在数据管理中实现软删除功能,避免直接物理删除数据带来的一些潜在风险(如误删无法恢复等),同时也便于后续可能的恢复操作或者数据统计(如统计已删除题库数量等)。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Repo对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取题库记录的逻辑删除标记值,外部代码通过调用该方法能够拿到当前Repo对象对应的逻辑删除状态值, + * 用于在业务逻辑中判断题库记录是否已被删除,进而决定是否对其进行相关操作(如查询、更新等操作对于已删除记录通常是受限的),返回值为Integer类型。 + * @return 返回题库记录的逻辑删除状态值(0或1)。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置题库记录的逻辑删除标记值,在执行题库删除操作(逻辑删除)或者进行数据恢复(将逻辑删除标记改回未删除状态)等场景下, + * 可以通过调用该方法来更新当前Repo对象中的逻辑删除状态值,参数“isDeleted”为要设置的逻辑删除的整数值(0或1),确保数据的删除状态能准确反映业务需求。 + * @param isDeleted 要设置的逻辑删除的整数值(0或1)。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } + /** + * 获取题库记录的唯一ID,外部代码通过调用该方法能够拿到当前Repo对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的题库记录,例如根据ID查询题库详细信息、更新题库相关属性等,返回值为Integer类型。 + * @return 返回题库记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置题库记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的题库记录的ID整数值。 + * @param id 要设置的题库记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取题库的创建人ID,外部代码调用该方法可以获取当前Repo对象对应的创建人ID值, + * 用于在业务逻辑中关联创建人相关信息、进行权限管理以及统计创建人创建的题库数量等操作,返回值为Integer类型。 + * @return 返回题库的创建人ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置题库的创建人ID,例如在数据修正(发现创建人记录错误)、重新指定题库创建人(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前Repo对象中的创建人ID值,参数“userId”为要设置的题库创建人的ID整数值。 + * @param userId 要设置的题库创建人的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取题库的标题,外部代码调用该方法可以获取当前Repo对象对应的题库标题字符串, + * 这是用于区分不同题库的重要标识,在展示、查找等业务场景中会用到,返回值为String类型。 + * @return 返回题库的标题字符串。 + */ public String getTitle() { return title; } + /** + * 设置题库的标题,在题库标题需要修改(如因内容调整、重新命名等原因)时, + * 可以通过调用该方法来更新当前Repo对象中的题库标题字符串,参数“title”为要设置的新的题库标题字符串值。 + * @param title 要设置的新的题库标题字符串值。 + */ public void setTitle(String title) { this.title = title; } + + /** + * 获取题库的创建时间,外部代码调用该方法可以获取当前Repo对象对应的创建时间值, + * 其类型为LocalDateTime,格式遵循如“YYYY-MM-DD HH:mm:ss”等标准时间格式,这个时间信息在业务逻辑中有着重要作用, + * 比如可用于记录题库的添加顺序,分析不同时间段的题库创建活跃度等,返回值为LocalDateTime类型。 + * @return 返回题库的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置题库的创建时间,不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整创建时间值时, + * 可以调用该方法,并传入符合业务要求的LocalDateTime类型的时间值(参数`createTime`)来完成对创建时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的题库的创建时间的LocalDateTime类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /** + * 重写了Object类的toString方法,用于将Repo对象转换为一个包含各属性值的字符串表示形式, + * 按照“Repo{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看题库对象各个属性具体的值,返回值为String类型。 + * @return 返回表示Repo对象各属性值的字符串。 + */ @Override public String toString() { return "Repo{" + @@ -97,4 +171,4 @@ public class Repo implements Serializable { ", isDeleted=" + isDeleted + '}'; } -} +} \ No newline at end of file -- 2.34.1 From 9acb1fcfa303cf9ff44cbb13e8d2ad76238d0711 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 16:01:03 +0800 Subject: [PATCH 21/25] 1 --- .../cn/org/alan/exam/model/entity/Role.java | 60 +++++++++++++++++-- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/Role.java b/src/main/java/cn/org/alan/exam/model/entity/Role.java index b602780..a40f704 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/Role.java +++ b/src/main/java/cn/org/alan/exam/model/entity/Role.java @@ -10,55 +10,105 @@ import java.io.Serializable; * @ Author JinXi * @ Version 1.0 * @ Date 2024/4/25 14:10 + * 该类名为Role,实现了Serializable接口,这使得该类的对象能够被序列化,方便在如将角色相关的数据持久化存储到文件、在网络间传输角色信息等场景下进行数据交换与保存,确保数据能在不同环境中完整且有效地流转使用,适用于各类系统中对用户角色进行管理的场景,例如权限管理系统等。 + * 它对应数据库中的“t_role”表,主要用于封装角色的关键信息,通过这个类可以清晰地知晓角色的基本属性,像角色的唯一标识符、角色名称以及角色编码等内容,是对系统中角色这一概念在代码层面的重要映射表示,关乎用户权限分配、功能访问控制等业务逻辑的实现。 */ @TableName("t_role") public class Role implements Serializable { + private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同阶段或环境下对对象操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_role”中的不同字段,用于存储角色相关的关键信息,下面将逐个进行注释说明。 /** * ID 角色表 + * 此属性作为角色记录在数据库中的唯一标识符,对应数据库表“t_role”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的角色记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条角色记录都有一个独一无二的编号,方便后续对这些记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如根据ID查询特定角色的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 角色名称 + * 用于存储角色的具体名称,类型为String,这个名称通常是一个具有实际业务含义的字符串,方便用户(如系统管理员、普通用户等)直观地识别和区分不同的角色,例如“管理员”“普通用户”“教师”等,在展示角色列表、分配角色给用户等业务场景中起到关键作用,便于人们快速理解角色的定位和功能权限范围。 */ private String roleName; /** * 角色编码 + * 用来存放角色的编码信息,类型为String,角色编码一般是系统内部为了便于识别、处理角色而设定的一个特定代码,可能遵循一定的编码规则,在程序逻辑中可以通过角色编码进行快速匹配、判断等操作,例如在权限配置中根据角色编码来精准赋予相应的功能权限,它与角色名称相互配合,共同完善角色的标识和定位。 */ private String code; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对Role对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取角色记录的唯一ID,外部代码通过调用该方法能够拿到当前Role对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的角色记录,返回值为Integer类型。 + * @return 返回角色记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置角色记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的角色记录的ID整数值。 + * @param id 要设置的角色记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取角色的名称,外部代码调用该方法可以获取当前Role对象对应的角色名称字符串, + * 在展示角色信息、供用户识别角色等业务场景中会用到该名称,返回值为String类型。 + * @return 返回角色的名称字符串。 + */ public String getRoleName() { return roleName; } + /** + * 设置角色的名称,在角色名称需要变更(如因业务调整、重新命名角色等原因)时, + * 可以通过调用该方法来更新当前Role对象中的角色名称字符串,参数“roleName”为要设置的新的角色名称字符串值。 + * @param roleName 要设置的新的角色名称字符串值。 + */ public void setRoleName(String roleName) { this.roleName = roleName; } + + /** + * 获取角色的编码,外部代码调用该方法可以获取当前Role对象对应的角色编码字符串, + * 在程序逻辑中进行角色匹配、权限配置等业务场景中会用到该编码信息,返回值为String类型。 + * @return 返回角色的编码字符串。 + */ public String getCode() { return code; } + /** + * 设置角色的编码,当角色编码需要更新(如遵循新的编码规则、调整编码与业务逻辑的对应关系等情况)时, + * 可以通过调用该方法来更新当前Role对象中的角色编码字符串,参数“code”为要设置的新的角色编码字符串值。 + * @param code 要设置的新的角色编码字符串值。 + */ public void setCode(String code) { this.code = code; } + /** + * 重写了Object类的toString方法,用于将Role对象转换为一个包含各属性值的字符串表示形式, + * 按照“Role{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看角色对象各个属性具体的值,返回值为String类型。 + * @return 返回表示Role对象各属性值的字符串。 + */ @Override public String toString() { return "Role{" + - "id=" + id + - ", roleName=" + roleName + - ", code=" + code + - "}"; + "id=" + id + + ",'roleName=" + roleName + + ", code=" + code + + "}"; } -} +} \ No newline at end of file -- 2.34.1 From 2ebbab95925a8ae8e6c3fd6683a1525fe15938c2 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 16:04:02 +0800 Subject: [PATCH 22/25] 1 --- .../cn/org/alan/exam/model/entity/User.java | 142 +++++++++++++++++- 1 file changed, 138 insertions(+), 4 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/User.java b/src/main/java/cn/org/alan/exam/model/entity/User.java index 1184c71..4cb18b2 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/User.java +++ b/src/main/java/cn/org/alan/exam/model/entity/User.java @@ -8,7 +8,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为User,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将用户相关的数据持久化存储到文件、在网络间传输用户信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类需要对用户进行管理的系统,比如教学管理系统、办公系统等。 + * 它对应数据库中的“t_user”表,主要用于封装用户的各种关键信息,涵盖了用户的基本标识、个人资料、权限关联、所属班级以及状态等多方面内容,是对系统中用户这一实体在代码层面的完整映射表示,在用户注册、登录、权限控制、信息展示等众多业务操作中起着核心作用。 *
* * @author WeiJin @@ -18,133 +19,266 @@ import java.time.LocalDateTime; public class User implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_user”中的不同字段,用于存储用户相关的关键信息,下面将逐个进行注释说明。 /** * ID + * 此属性作为用户记录在数据库中的唯一标识符,对应数据库表“t_user”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的用户记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条用户记录都有一个唯一的编号,方便后续对用户记录进行查找、操作等业务处理,例如根据ID查询特定用户的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户名 + * 用于存储用户在系统中登录时使用的名称,类型为String,通常是用户自行设定且具有唯一性(在系统的验证规则下),是用户登录系统的重要凭证之一,同时也方便在系统内对不同用户进行区分和标识,比如在用户列表展示等场景下通过用户名来呈现用户信息。 */ private String userName; /** * 真实姓名 + * 用来存放用户的真实身份姓名,类型为String,这个信息更偏向于用户的实际个人信息,在一些需要核实用户真实身份、进行线下沟通对接或者展示更正式的用户信息等场景下会用到,例如在教师查看班级学生信息时,显示的就是学生的真实姓名。 */ private String realName; /** * 密码 - */ - @TableField(fill = FieldFill.INSERT) + * 用于存储用户登录系统的密码信息,类型为String,并且通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在用户注册(向数据库插入新用户记录)时,该字段会按照相应规则自动获取并填充对应的密码值(一般是经过加密处理后的密码),保证用户登录的安全性,密码是验证用户身份合法性的关键依据。 + * @TableField(fill = FieldFill.INSERT) private String password; /** * 头像地址 + * 用于存放用户头像图片资源的网络地址或者本地文件路径等信息(具体取决于系统的存储和展示方式),类型为String,头像可以让用户在系统中更具个性化的展示,也方便其他用户在交互过程中直观地识别不同用户,若用户没有设置头像,则该字段可以为空字符串。 */ private String avatar; /** * 角色id + * 用来存放关联的用户角色的唯一标识符,类型为Integer,通过这个字段可以明确用户在系统中所属的角色(例如管理员、普通用户、教师、学生等不同角色分类),便于后续根据角色进行权限控制、功能访问限制等操作,它会和存储角色信息的表(例如前面提到的“t_role”表)中的角色ID进行关联,在权限管理业务逻辑中起到关键作用。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入用户记录时,该字段会按照相应规则自动获取并填充对应的角色ID值,保证记录的完整性和准确性,确保用户角色能准确对应。 */ @TableField(fill = FieldFill.INSERT) private Integer roleId; /** * 班级id + * 用于存储用户所属班级的唯一标识符,类型为Integer,在一些具有班级划分的系统中(比如学校教学管理系统),该字段可以明确用户具体属于哪个班级,便于进行班级相关的业务操作,例如教师针对特定班级发布通知、查看班级学生的学习情况等,它会和存储班级信息的表(例如“t_grade”表)中的班级ID相互关联。 */ private Integer gradeId; /** * 创建时间 YYYY-MM-DD hh:mm:ss + * 用于存储用户账号创建的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD hh:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录用户的注册顺序、分析不同时间段的用户注册活跃度等,方便后续进行数据统计和管理,例如统计某个时间段内新增了多少用户等。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 状态 1正常0禁用 + * 用于标记用户账号的当前使用状态,类型为Integer,取值为1表示账号处于正常可使用状态,0表示账号被禁用(可能是因为违规操作、长期未登录等原因),方便在系统管理中对用户账号进行有效的管控,例如管理员可以根据实际情况禁用或启用特定用户的账号。 */ private Integer status; /** * 逻辑删除字段 + * 用于标记用户记录是否被逻辑删除,类型为Integer,通常取值为0表示未删除(正常状态),1表示已删除(逻辑上的删除,实际数据可能还在数据库中,只是在业务逻辑层面视为不可见、不可操作了),方便在数据管理中实现软删除功能,避免直接物理删除数据带来的一些潜在风险(如误删无法恢复等),同时也便于后续可能的恢复操作或者数据统计(如统计已删除用户数量等)。 */ private Integer isDeleted; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对User对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取用户记录的逻辑删除标记值,外部代码通过调用该方法能够拿到当前User对象对应的逻辑删除状态值, + * 用于在业务逻辑中判断用户记录是否已被删除,进而决定是否对其进行相关操作(如查询、更新等操作对于已删除记录通常是受限的),返回值为Integer类型。 + * @return 返回用户记录的逻辑删除状态值(0或1)。 + */ public Integer getIsDeleted() { return isDeleted; } + /** + * 设置用户记录的逻辑删除标记值,在执行用户删除操作(逻辑删除)或者进行数据恢复(将逻辑删除标记改回未删除状态)等场景下, + * 可以通过调用该方法来更新当前User对象中的逻辑删除状态值,参数“isDeleted”为要设置的逻辑删除的整数值(0或1),确保数据的删除状态能准确反映业务需求。 + * @param isDeleted 要设置的逻辑删除的整数值(0或1)。 + */ public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } + /** + * 获取用户记录的唯一ID,外部代码通过调用该方法能够拿到当前User对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的用户记录,例如根据ID查询用户详细信息、更新用户相关属性等,返回值为Integer类型。 + * @return 返回用户记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置用户记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的用户记录的ID整数值。 + * @param id 要设置的用户记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取用户的用户名,外部代码调用该方法可以获取当前User对象对应的用户名字符串, + * 在用户登录、展示用户信息等业务场景中会用到该用户名,返回值为String类型。 + * @return 返回用户的用户名字符串。 + */ public String getUserName() { return userName; } + /** + * 设置用户的用户名,在用户修改用户名(比如想要更换一个更容易记忆或更喜欢的用户名等情况)时, + * 可以通过调用该方法来更新当前User对象中的用户名字符串,参数“userName”为要设置的新的用户名字符串值。 + * @param userName 要设置的新的用户名字符串值。 + */ public void setUserName(String userName) { this.userName = userName; } + + /** + * 获取用户的真实姓名,外部代码调用该方法可以获取当前User对象对应的真实姓名字符串, + * 在需要核实用户真实身份、展示正式用户信息等业务场景中会用到该真实姓名,返回值为String类型。 + * @return 返回用户的真实姓名字符串。 + */ public String getRealName() { return realName; } + /** + * 设置用户的真实姓名,在用户真实姓名需要修改(比如姓名发生变更等情况)时, + * 可以通过调用该方法来更新当前User对象中的真实姓名字符串,参数“realName”为要设置的新的真实姓名字符串值。 + * @param realName 要设置的新的真实姓名字符串值。 + */ public void setRealName(String realName) { this.realName = realName; } + + /** + * 获取用户的密码,外部代码调用该方法可以获取当前User对象对应的密码字符串, + * 不过在实际业务中,获取密码一般是用于验证登录等操作,并且密码通常是经过加密存储的,返回值为String类型。 + * @return 返回用户的密码字符串。 + */ public String getPassword() { return password; } + /** + * 设置用户的密码,在用户修改密码(比如忘记密码后重置、主动更换密码等情况)时, + * 可以通过调用该方法来更新当前User对象中的密码字符串,参数“password”为要设置的新的密码字符串值,注意一般需要对新密码进行加密处理后再存储。 + * @param password 要设置的新的密码字符串值。 + */ public void setPassword(String password) { this.password = password; } + + /** + * 获取用户的头像地址,外部代码调用该方法可以获取当前User对象对应的头像地址字符串, + * 在获取并展示用户头像、判断用户是否设置头像等业务场景中会用到该地址信息,返回值为String类型。 + * @return 返回用户的头像地址字符串。 + */ public String getAvatar() { return avatar; } + /** + * 设置用户的头像地址,当用户更换头像(比如选择了新的图片作为头像)时, + * 可以通过调用该方法来更新当前User对象中的头像地址字符串,参数“avatar”为要设置的新的头像地址字符串值。 + * @param avatar 要设置的新的头像地址字符串值。 + */ public void setAvatar(String avatar) { this.avatar = avatar; } + + /** + * 获取用户所属的角色ID,外部代码调用该方法可以获取当前User对象对应的角色ID值, + * 用于在业务逻辑中关联角色信息、进行权限管理以及统计不同角色下的用户数量等操作,返回值为Integer类型。 + * @return 返回用户所属的角色ID值。 + */ public Integer getRoleId() { return roleId; } + /** + * 设置用户所属的角色ID,例如在用户角色变更(比如从普通用户升级为管理员、因业务调整重新分配角色等情况)时, + * 可以通过调用该方法来更新当前User对象中的角色ID值,参数“roleId”为要设置的用户所属的角色ID整数值。 + * @param roleId 要设置的用户所属的角色ID整数值。 + */ public void setRoleId(Integer roleId) { this.roleId = roleId; } + + /** + * 获取用户所属的班级ID,外部代码调用该方法可以获取当前User对象对应的班级ID值, + * 在业务逻辑中可用于查找该班级的其他用户、进行班级相关业务操作等,返回值为Integer类型。 + * @return 返回用户所属的班级ID值。 + */ public Integer getGradeId() { return gradeId; } + /** + * 设置用户所属的班级ID,当用户班级归属发生变化(比如转班等情况)时, + * 可以通过调用该方法来更新当前User对象中的班级ID值,参数“gradeId”为要设置的用户所属的班级ID整数值。 + * @param gradeId 要设置的用户所属的班级ID整数值。 + */ public void setGradeId(Integer gradeId) { this.gradeId = gradeId; } + + /** + * 获取用户的创建时间,外部代码调用该方法可以获取当前User对象对应的创建时间值, + * 其类型为LocalDateTime,格式遵循如“YYYY-MM-DD hh:mm:ss”等标准时间格式,这个时间信息在业务逻辑中有着重要作用, + * 比如可用于记录用户的注册顺序,分析不同时间段的用户注册活跃度等,返回值为LocalDateTime类型。 + * @return 返回用户的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置用户的创建时间,不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整创建时间值时, + * 可以调用该方法,并传入符合业务要求的LocalDateTime类型的时间值(参数`createTime`)来完成对创建时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的用户的创建时间的LocalDateTime类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + + /** + * 获取用户的状态标记值,外部代码调用该方法可以获取当前User对象对应的用户状态值(1表示正常,0表示禁用), + * 用于在业务逻辑中判断用户账号是否可用,进而决定是否允许用户进行相应操作,返回值为Integer类型。 + * @return 返回用户的状态标记值(1或0)。 + */ public Integer getStatus() { return status; } + /** + * 设置用户的状态标记值,在管理员对用户账号进行启用或禁用操作(比如因用户违规禁用账号、用户申诉后重新启用账号等情况)时, + * 可以通过调用该方法来更新当前User对象中的用户状态值,参数“state”为要设置的用户的状态标记整数值(1或0),确保用户账号状态能准确反映业务需求。 + * @param state 要设置的用户的状态标记整数值(1或0)。 + */ public void setStatus(Integer state) { this.status = state; } + /** + * 重写了Object类的toString方法,用于将User对象转换为一个包含各属性值的字符串表示形式, + * 按照“User{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看用户对象各个属性具体的值,返回值为String类型。 + * @return 返回表示User对象各属性值的字符串。 + */ @Override public String toString() { return "User{" + @@ -160,4 +294,4 @@ public class User implements Serializable { ", isDeleted=" + isDeleted + '}'; } -} +} \ No newline at end of file -- 2.34.1 From 7af82b95908abcb931b182bc23076b6537cd33fe Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 16:08:12 +0800 Subject: [PATCH 23/25] 1 --- .../org/alan/exam/model/entity/UserBook.java | 93 +++++++++++++++++-- 1 file changed, 85 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/UserBook.java b/src/main/java/cn/org/alan/exam/model/entity/UserBook.java index 3933b6b..369ce72 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/UserBook.java +++ b/src/main/java/cn/org/alan/exam/model/entity/UserBook.java @@ -7,7 +7,8 @@ import java.time.LocalDateTime; /** *- * + * 该类名为UserBook,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将错题本相关的数据持久化存储到文件、在网络间传输错题本信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类学习、考试系统中对用户错题本进行管理的场景,帮助用户收集和回顾自己做错的题目。 + * 它对应数据库中的“t_user_book”表,主要用于封装错题本中的关键信息,通过这个类可以清晰地知晓错题对应的考试、所属用户以及具体题目等内容,是错题本功能在代码层面的重要实体类,关乎错题整理、复习巩固等业务逻辑的实现。 *
* * @author WeiJin @@ -17,79 +18,155 @@ import java.time.LocalDateTime; public class UserBook implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同阶段或环境下对对象操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_user_book”中的不同字段,用于存储错题本相关的关键信息,下面将逐个进行注释说明。 /** * ID 错题本 + * 此属性作为错题本记录在数据库中的唯一标识符,对应数据库表“t_user_book”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的错题本记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条错题本记录都有一个独一无二的编号,方便后续对这些记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如根据ID查询特定错题本记录的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 考试id 唯一 + * 用于存储该错题对应的考试的唯一标识符,类型为Integer,通过这个字段可以明确是在哪一场考试中出现的错题,便于在业务逻辑中关联考试相关信息,例如查看该场考试的其他详情(考试时间、考试科目等),它会和存储考试信息的表(具体表名根据实际业务而定)中的考试ID进行关联,帮助用户更好地回顾考试场景以及分析错题产生的背景。 */ private Integer examId; /** * 用户id 唯一 + * 用来存放该错题所属用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户将这道题添加到了错题本中,便于在业务逻辑中关联用户信息,例如根据用户查看其所有错题、统计不同用户错题本中的错题数量等操作,也确保错题能准确对应到所属用户。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入错题本记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保能追溯到错题的主人。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 题目id 唯一 + * 用于存储该错题对应的具体题目的唯一标识符,类型为Integer,借助这个字段能够确定是哪一道题目被收录进了错题本,便于在业务逻辑中关联题目详细信息(如题目内容、正确答案、解析等),它会和存储题目信息的表(例如前面提到的“t_question”表)中的题目ID进行关联,方便用户后续针对具体错题进行复习和分析错因。 */ private Integer quId; /** * 创建时间 YYYY-MM-DD hh:mm:ss + * 用于存储该错题本记录创建的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD hh:mm:ss”等标准时间格式,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),意味着在向数据库插入新记录时,该时间值会自动按照系统当前时间进行填充, + * 这个时间信息在业务逻辑中可用于记录错题被添加到错题本的先后顺序、分析用户不同时间段整理错题的活跃度等,方便后续进行数据统计和管理,例如统计某个时间段内用户新增了多少错题到错题本中等。 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对UserBook对象的属性进行访问和修改,下面分别进行注释。 + + /** + * 获取错题本记录的唯一ID,外部代码通过调用该方法能够拿到当前UserBook对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的错题本记录,返回值为Integer类型。 + * @return 返回错题本记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置错题本记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的错题本记录的ID整数值。 + * @param id 要设置的错题本记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取错题对应的考试的ID,外部代码调用该方法可以获取当前UserBook对象对应的考试ID值, + * 用于在业务逻辑中查找该考试的相关信息、分析错题产生的背景等操作,返回值为Integer类型。 + * @return 返回错题对应的考试的ID值。 + */ public Integer getExamId() { return examId; } + /** + * 设置错题对应的考试的ID,当存在考试信息变更(如考试ID更新或者重新关联错题与不同考试等情况)时, + * 可以通过调用该方法来更新当前UserBook对象中的考试ID值,参数“examId”为要设置的错题对应的考试的ID整数值。 + * @param examId 要设置的错题对应的考试的ID整数值。 + */ public void setExamId(Integer examId) { this.examId = examId; } + + /** + * 获取错题所属用户的ID,外部代码调用该方法可以获取当前UserBook对象对应的用户ID值, + * 用于在业务逻辑中关联用户信息、统计用户错题情况等操作,返回值为Integer类型。 + * @return 返回错题所属用户的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置错题所属用户的ID,例如在数据修正(发现用户记录错误)、重新指定错题所属用户(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前UserBook对象中的用户ID值,参数“userId”为要设置的错题所属用户的ID整数值。 + * @param userId 要设置的错题所属用户的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取错题对应的题目ID,外部代码调用该方法可以获取当前UserBook对象对应的题目ID值, + * 用于在业务逻辑中查找题目详细信息、针对错题进行复习分析等操作,返回值为Integer类型。 + * @return 返回错题对应的题目ID值。 + */ public Integer getQuId() { return quId; } + /** + * 设置错题对应的题目ID,当存在题目信息变更(如题目ID更新或者重新关联错题与不同题目等情况)时, + * 可以通过调用该方法来更新当前UserBook对象中的题目ID值,参数“quId”为要设置的错题对应的题目ID整数值。 + * @param quId 要设置的错题对应的题目ID整数值。 + */ public void setQuId(Integer quId) { this.quId = quId; } + + /** + * 获取错题本记录的创建时间,外部代码调用该方法可以获取当前UserBook对象对应的创建时间值, + * 其类型为LocalDateTime,格式遵循如“YYYY-MM-DD hh:mm:ss”等标准时间格式,这个时间信息在业务逻辑中有着重要作用, + * 比如可用于记录错题添加顺序,分析用户整理错题的活跃度等,返回值为LocalDateTime类型。 + * @return 返回错题本记录的创建时间。 + */ public LocalDateTime getCreateTime() { return createTime; } + /** + * 设置错题本记录的创建时间,不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(fill = FieldFill.INSERT)`配置), + * 但在一些特殊场景下,比如数据恢复、数据迁移等过程中,可能需要手动设置或调整创建时间值时, + * 可以调用该方法,并传入符合业务要求的LocalDateTime类型的时间值(参数`createTime`)来完成对创建时间的修改, + * 确保时间数据的准确性以及与业务实际情况相符。 + * @param createTime 要设置的错题本记录的创建时间的LocalDateTime类型时间值。 + */ public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + /** + * 重写了Object类的toString方法,用于将UserBook对象转换为一个包含各属性值的字符串表示形式, + * 按照“UserBook{属性名=属性值,...}”的格式进行输出,方便在调试程序、打印日志以及展示对象信息等场景下直观地查看错题本对象各个属性具体的值,返回值为String类型。 + * @return 返回表示UserBook对象各属性值的字符串。 + */ @Override public String toString() { return "UserBook{" + - "id=" + id + - ", examId=" + examId + - ", userId=" + userId + - ", quId=" + quId + - ", createTime=" + createTime + - "}"; + "id=" + id + + ", examId=" + examId + + ", userId=" + userId + + ", quId=" + quId + + ", createTime=" + createTime + + "}"; } -} +} \ No newline at end of file -- 2.34.1 From 0f8dd9b42ac109d049a1bc2b4acb41ed07741bbe Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 16:13:11 +0800 Subject: [PATCH 24/25] 1 --- .../model/entity/UserDailyLoginDuration.java | 61 ++++++++++++++++--- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/UserDailyLoginDuration.java b/src/main/java/cn/org/alan/exam/model/entity/UserDailyLoginDuration.java index 50f6baf..da4ebdc 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/UserDailyLoginDuration.java +++ b/src/main/java/cn/org/alan/exam/model/entity/UserDailyLoginDuration.java @@ -10,6 +10,7 @@ import java.io.Serializable; /** * * 用户每日登录时长实体类 + * 该类名为UserDailyLoginDuration,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将用户每日登录时长相关的数据持久化存储到文件、在网络间传输此类信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类需要统计和分析用户登录时长情况的系统,比如在线学习平台、办公软件等,通过该类可以详细记录每个用户每天的登录时长信息。 * @Author Alan * @Version * @Date 2024/5/28 10:44 PM @@ -18,62 +19,106 @@ import java.io.Serializable; public class UserDailyLoginDuration implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同时间或环境下对对象进行序列化和反序列化操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_user_daily_login_duration”中的不同字段,用于存储用户每日登录时长相关的关键信息,下面将逐个进行注释说明。 /** * 主键ID + * 此属性作为用户每日登录时长记录在数据库中的唯一标识符,对应数据库表“t_user_daily_login_duration”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解进行标识,并指定了主键生成策略为自增长(IdType.AUTO),这样在向数据库插入新的用户每日登录时长记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值,保证每条记录都有一个唯一的编号,方便后续对记录进行查找、操作等业务处理,例如根据ID查询特定日期某用户的登录时长详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户ID - */ - @TableField("user_id") + * 用于存储该登录时长记录所属用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户对应的登录时长信息,便于在业务逻辑中关联用户的其他信息(如用户名、用户角色等),也方便对不同用户的登录时长情况进行统计和分析,它会和存储用户信息的表(例如前面提到的“t_user”表)中的用户ID进行关联,确保登录时长数据能准确对应到具体用户。 + * @TableField("user_id") private Integer userId; /** * 登录日期 - */ - @TableField("login_date") + * 用来存放用户登录的具体日期信息,类型为LocalDate,格式遵循“YYYY-MM-DD”,通过这个字段可以明确该登录时长是对应哪一天的,便于按日期对用户登录时长进行统计、分析登录时长在不同时间段的变化趋势等业务操作,比如查看用户在某个月内每天的登录时长情况,或者对比不同日期用户的活跃度等。 + * @TableField("login_date") private LocalDate loginDate; /** * 累积在线秒数 - */ - @TableField("total_seconds") + * 用于存储用户在对应登录日期内累积在线的时长,单位为秒,类型为Integer,这个字段直观地反映了用户在一天内实际使用系统的时长情况,在统计用户的活跃度、分析用户使用习惯(比如平均每天使用多长时间)等业务场景中起到关键作用,通过对该数据的分析可以进一步优化系统功能、提供更贴合用户需求的服务等。 + * @TableField("total_seconds") private Integer totalSeconds; + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对UserDailyLoginDuration对象的属性进行访问和修改,下面分别进行注释。 - // Getter 和 Setter 方法 - + /** + * 获取用户每日登录时长记录的唯一ID,外部代码通过调用该方法能够拿到当前UserDailyLoginDuration对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的记录,例如根据ID更新记录、删除记录或者查询详细信息等,返回值为Integer类型。 + * @return 返回记录的ID值。 + */ public Integer getId() { return id; } + /** + * 设置用户每日登录时长记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的记录的ID整数值。 + * @param id 要设置的记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + /** + * 获取该登录时长记录所属用户的ID,外部代码调用该方法可以获取当前UserDailyLoginDuration对象对应的用户ID值, + * 用于在业务逻辑中关联用户其他信息、统计不同用户的登录时长等操作,返回值为Integer类型。 + * @return 返回用户的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置该登录时长记录所属用户的ID,例如在数据修正(发现用户记录错误)、重新关联登录时长记录与不同用户等情况时, + * 可以通过调用该方法来更新当前UserDailyLoginDuration对象中的用户ID值,参数“userId”为要设置的用户的ID整数值。 + * @param userId 要设置的用户的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + /** + * 获取用户登录的日期,外部代码调用该方法可以获取当前UserDailyLoginDuration对象对应的登录日期值, + * 其类型为LocalDate,格式遵循“YYYY-MM-DD”,在按日期统计、分析用户登录时长等业务场景中会用到该日期信息,返回值为LocalDate类型。 + * @return 返回用户登录的日期。 + */ public LocalDate getLoginDate() { return loginDate; } + /** + * 设置用户登录的日期,在一些特殊场景下,比如数据修正(发现日期记录错误)、调整登录时长记录对应的统计周期等情况时, + * 可以通过调用该方法来更新当前UserDailyLoginDuration对象中的登录日期值,参数“loginDate”为要设置的登录日期的LocalDate类型值。 + * @param loginDate 要设置的登录日期的LocalDate类型值。 + */ public void setLoginDate(LocalDate loginDate) { this.loginDate = loginDate; } + /** + * 获取用户在对应登录日期内累积在线的秒数,外部代码调用该方法可以获取当前UserDailyLoginDuration对象对应的累积在线时长值, + * 用于统计用户活跃度、分析使用习惯等业务操作,返回值为Integer类型。 + * @return 返回用户累积在线的秒数。 + */ public Integer getTotalSeconds() { return totalSeconds; } + /** + * 设置用户在对应登录日期内累积在线的秒数,在如时长统计出现偏差需要修正、重新核算用户当天实际在线时长等情况时, + * 可以通过调用该方法来更新当前UserDailyLoginDuration对象中的累积在线秒数值,参数“totalSeconds”为要设置的累积在线的整数值(单位为秒)。 + * @param totalSeconds 要设置的累积在线的整数值(单位为秒)。 + */ public void setTotalSeconds(Integer totalSeconds) { this.totalSeconds = totalSeconds; } -- 2.34.1 From 5f69474c95aea56a46a239d34ce3511cce383d66 Mon Sep 17 00:00:00 2001 From: xuzhen <3316602697@qq.com> Date: Wed, 18 Dec 2024 16:18:37 +0800 Subject: [PATCH 25/25] 1 --- .../exam/model/entity/UserExamsScore.java | 156 ++++++++++++++++-- 1 file changed, 143 insertions(+), 13 deletions(-) diff --git a/src/main/java/cn/org/alan/exam/model/entity/UserExamsScore.java b/src/main/java/cn/org/alan/exam/model/entity/UserExamsScore.java index 73dae63..70cc46e 100644 --- a/src/main/java/cn/org/alan/exam/model/entity/UserExamsScore.java +++ b/src/main/java/cn/org/alan/exam/model/entity/UserExamsScore.java @@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDateTime; - /** *- * + * 该类名为UserExamsScore,实现了Serializable接口,这使得该类的对象能够被序列化,便于在如将用户考试成绩相关的数据持久化存储到文件、在网络间传输此类成绩信息等场景下进行数据交换与保存,确保数据可以完整且有效地在不同环境中流转使用,适用于各类考试系统中对用户考试成绩及相关情况进行记录和管理的场景,是分析用户考试表现、统计考试数据等业务的关键实体类。 + * 它对应数据库中的“t_user_exams_score”表,主要用于封装用户在每场考试中的各种关键信息,涵盖了考试成绩、用时情况、交卷时间、考试状态以及是否阅卷等多方面内容,通过这个类可以全面了解用户在特定考试中的具体表现和相关细节。 *
* * @author WeiJin @@ -17,139 +17,269 @@ import java.time.LocalDateTime; public class UserExamsScore implements Serializable { private static final long serialVersionUID = 1L; + // 定义序列化版本号,用于在对象序列化和反序列化过程中保证版本兼容性,初始化为1L,确保在不同阶段或环境下对对象操作时数据能正确对应。 + + // 以下是类中定义的各个成员变量,分别对应数据库表“t_user_exams_score”中的不同字段,用于存储用户考试成绩相关的关键信息,下面将逐个进行注释说明。 /** * id 用户考试成绩表 + * 此属性作为用户考试成绩记录在数据库中的唯一标识符,对应数据库表“t_user_exams_score”中的“id”字段,其类型为Integer。 + * 通过MyBatis Plus的@TableId注解并设置主键生成策略为自增长(IdType.AUTO),意味着在向数据库插入新的用户考试成绩记录时,该字段的值会由数据库自动按照既定规则生成,无需手动赋值, + * 保证每条用户考试成绩记录都有一个独一无二的编号,方便后续对这些记录进行查找、更新、删除等数据库操作以及在业务逻辑中进行相应的处理,例如根据ID查询特定考试成绩记录的详细信息等。 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户id 唯一 + * 用来存放参加考试的用户的唯一标识符,类型为Integer,通过这个字段可以明确是哪位用户的考试成绩信息,便于在业务逻辑中关联用户的其他信息(如用户名、所属班级等),也方便对不同用户的考试成绩进行统计和分析,例如查看某个用户在多场考试中的成绩变化情况等。 + * 此外,通过@TableField注解设置了填充策略为在插入时填充(FieldFill.INSERT),表示在向数据库插入用户考试成绩记录时,该字段会按照相应规则自动获取并填充对应的用户ID值,保证记录的完整性和准确性,确保成绩能准确对应到所属用户。 */ @TableField(fill = FieldFill.INSERT) private Integer userId; /** * 试卷id 唯一 + * 用于存储该考试对应的试卷的唯一标识符,类型为Integer,借助这个字段能够确定是哪一份试卷的考试成绩,便于在业务逻辑中关联试卷相关信息(如试卷名称、试卷总分、题型分布等),它会和存储试卷信息的表(具体表名根据实际业务而定)中的试卷ID进行关联,方便对不同试卷的考试情况进行对比分析等操作,比如查看某份试卷的整体得分情况、各题型的得分率等。 */ private Integer examId; /** * 总时长 YYYY-MM-DD hh:mm:ss + * 用于存储考试设定的总时长信息,格式遵循“YYYY-MM-DD hh:mm:ss”,不过这里通常应该是以时间长度的表示形式(比如考试总时长是多少分钟、多少小时等换算后的时间值),类型为Integer,这个字段明确了考试所规定的整体时间范围,可用于在考试过程中进行时间提醒、判断用户用时是否超时等操作,同时也方便后续分析不同考试时长设置对用户成绩的影响等情况。 */ private Integer totalTime; /** * 用户用时 YYYY-MM-DD hh:mm:ss + * 用来记录用户实际完成考试所花费的时间,格式同样遵循“YYYY-MM-DD hh:mm:ss”,实际也是以时间长度表示(如花费了多少分钟答题等),类型为Integer,通过对比用户用时和总时长,可以了解用户的答题速度情况,分析答题效率与考试成绩之间的关系,例如用时较短且成绩较好的用户可能答题效率较高等,在考试情况分析业务场景中有着重要作用。 */ private Integer userTime; /** * 用户得分 + * 用于存储用户在此次考试中最终获得的分数,类型为Integer,这是衡量用户考试结果的核心指标,便于统计用户的成绩情况、分析得分分布(如各分数段的人数占比等),也可以根据得分情况判断用户对知识的掌握程度等,在成绩统计、教学评估等业务操作中起到关键作用。 */ private Integer userScore; /** * 交卷时间 YYYY-MM-DD hh:mm:ss + * 用于记录用户提交试卷的具体时间信息,类型为LocalDateTime,格式遵循“YYYY-MM-DD hh:mm:ss”,这个时间信息可以明确用户完成考试的实际时刻,在统计交卷时间分布、分析不同交卷时间的用户成绩差异等业务场景中会用到,比如查看较早交卷的用户成绩情况与较晚交卷的用户有无明显差异等。 */ private LocalDateTime limitTime; /** * 切屏次数 + * 用于统计用户在考试过程中切换屏幕的次数,类型为Integer,在一些线上考试场景中,切屏次数可能会作为判断用户是否存在违规行为(如是否可能借助外部资料答题等)的参考依据之一,也可以分析切屏次数与考试成绩之间是否存在关联,比如频繁切屏是否会影响成绩等情况,对考试的公平性和成绩分析有一定意义。 */ private Integer count; /** * 状态 0正在考试 1考试完成 + * 用于标记用户当前考试的状态,类型为Integer,取值为0表示用户还处于正在考试的过程中,1表示考试已经完成,方便在系统中对考试的进展情况进行实时跟踪和管理,例如可以根据状态筛选出正在进行的考试或者已经结束的考试进行相应的后续处理,如统计完成考试的人数等。 */ private Integer state; + /** * 是否阅卷-1 未简答题 0 未阅卷 1已阅卷 + * 用于表示试卷是否已经完成阅卷工作以及是否包含简答题等情况,类型为Integer,取值为 -1表示试卷中存在未简答题(可能后续需要人工进一步阅卷等情况),0表示试卷还未进行阅卷操作,1表示已经完成阅卷,这个字段便于对阅卷进度进行管理,了解考试成绩的最终确定情况,比如统计已阅卷的试卷数量、查看哪些试卷还需要处理简答题等。 */ private Integer whetherMark; - public Integer getWhetherMark() { - return whetherMark; - } - - public void setWhetherMark(Integer whetherMark) { - this.whetherMark = whetherMark; - } + // 以下是各个成员变量对应的Getter和Setter方法,用于获取和设置对象的属性值,方便在其他类中对UserExamsScore对象的属性进行访问和修改,下面分别进行注释。 /** - * 创建时间 YYYY-MM-DD hh:mm:ss + * 获取用户考试成绩记录的唯一ID,外部代码通过调用该方法能够拿到当前UserExamsScore对象对应的ID值, + * 可用于在业务逻辑中识别、查找或操作这条具体的成绩记录,例如根据ID更新记录、删除记录或者查询详细信息等,返回值为Integer类型。 + * @return 返回记录的ID值。 */ - @TableField(fill = FieldFill.INSERT) - private LocalDateTime createTime; - public Integer getId() { return id; } + /** + * 设置用户考试成绩记录的唯一ID,不过一般主键ID有数据库层面的自增长等生成规则, + * 所以在常规业务操作中较少直接使用该方法手动修改主键值,但在一些特殊的数据初始化、迁移等场景下可能会用到,参数“id”为要设置的记录的ID整数值。 + * @param id 要设置的记录的ID整数值。 + */ public void setId(Integer id) { this.id = id; } + + /** + * 获取该考试成绩记录所属用户的ID,外部代码调用该方法可以获取当前UserExamsScore对象对应的用户ID值, + * 用于在业务逻辑中关联用户其他信息、统计不同用户的考试成绩等操作,返回值为Integer类型。 + * @return 返回用户的ID值。 + */ public Integer getUserId() { return userId; } + /** + * 设置该考试成绩记录所属用户的ID,例如在数据修正(发现用户记录错误)、重新关联考试成绩记录与不同用户等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的用户ID值,参数“userId”为要设置的用户的ID整数值。 + * @param userId 要设置的用户的ID整数值。 + */ public void setUserId(Integer userId) { this.userId = userId; } + + /** + * 获取该考试对应的试卷ID,外部代码调用该方法可以获取当前UserExamsScore对象对应的试卷ID值, + * 用于在业务逻辑中关联试卷相关信息、分析不同试卷的考试情况等操作,返回值为Integer类型。 + * @return 返回试卷的ID值。 + */ public Integer getExamId() { return examId; } + /** + * 设置该考试对应的试卷ID,当存在试卷信息变更(如试卷ID更新或者重新关联考试成绩与不同试卷等情况)时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的试卷ID值,参数“examId”为要设置的试卷的ID整数值。 + * @param examId 要设置的试卷的ID整数值。 + */ public void setExamId(Integer examId) { this.examId = examId; } + + /** + * 获取考试的总时长,外部代码调用该方法可以获取当前UserExamsScore对象对应的考试总时长值, + * 用于在考试过程中进行时间提醒、分析不同时长设置对成绩影响等业务操作,返回值为Integer类型。 + * @return 返回考试的总时长值。 + */ public Integer getTotalTime() { return totalTime; } + /** + * 设置考试的总时长,在如考试规则调整(修改总时长设定)、数据修正(发现时长记录错误)等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的考试总时长值,参数“totalTime”为要设置的考试的总时长整数值。 + * @param totalTime 要设置的考试的总时长整数值。 + */ public void setTotalTime(Integer totalTime) { this.totalTime = totalTime; } + + /** + * 获取用户实际考试用时,外部代码调用该方法可以获取当前UserExamsScore对象对应的用户用时值, + * 用于分析用户答题速度、对比用时与成绩关系等业务操作,返回值为Integer类型。 + * @return 返回用户实际考试用时值。 + */ public Integer getUserTime() { return userTime; } + /** + * 设置用户实际考试用时,当存在用时记录错误或者需要重新核算用户用时等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的用户用时值,参数“userTime”为要设置的用户实际考试用时整数值。 + * @param userTime 要设置的用户实际考试用时整数值。 + */ public void setUserTime(Integer userTime) { this.userTime = userTime; } + + /** + * 获取用户的考试得分,外部代码调用该方法可以获取当前UserExamsScore对象对应的用户得分值, + * 这是衡量考试结果的关键指标,用于成绩统计、教学评估等操作,返回值为Integer类型。 + * @return 返回用户的考试得分值。 + */ public Integer getUserScore() { return userScore; } + /** + * 设置用户的考试得分,例如在成绩复查后发现分数有误需要修正、重新核算得分等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的用户得分值,参数“userScore”为要设置的用户的考试得分整数值。 + * @param userScore 要设置的用户的考试得分整数值。 + */ public void setUserScore(Integer userScore) { this.userScore = userScore; } + + /** + * 获取用户的交卷时间,外部代码调用该方法可以获取当前UserExamsScore对象对应的交卷时间值, + * 其类型为LocalDateTime,格式遵循“YYYY-MM-DD hh:mm:ss”,在统计交卷时间分布、分析不同交卷时间成绩差异等业务场景中会用到该时间信息,返回值为LocalDateTime类型。 + * @return 返回用户的交卷时间值。 + */ public LocalDateTime getLimitTime() { return limitTime; } + /** + * 设置用户的交卷时间,在如交卷时间记录错误、调整交卷时间(特殊业务需求下)等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的交卷时间值,参数“limitTime”为要设置的交卷时间的LocalDateTime类型值。 + * @param limitTime 要设置的交卷时间的LocalDateTime类型值。 + */ public void setLimitTime(LocalDateTime limitTime) { this.limitTime = limitTime; } + + /** + * 获取用户在考试过程中的切屏次数,外部代码调用该方法可以获取当前UserExamsScore对象对应的切屏次数值, + * 可作为判断考试违规、分析切屏与成绩关系等业务操作的依据,返回值为Integer类型。 + * @return 返回用户在考试过程中的切屏次数值。 + */ public Integer getCount() { return count; } + /** + * 设置用户在考试过程中的切屏次数,在如切屏次数统计有误、重新核算切屏情况等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的切屏次数值,参数“count”为要设置的切屏次数整数值。 + * @param count 要设置的切屏次数整数值。 + */ public void setCount(Integer count) { this.count = count; } + + /** + * 获取用户考试的当前状态,外部代码调用该方法可以获取当前UserExamsScore对象对应的考试状态值(0表示正在考试,1表示考试完成), + * 用于对考试进展情况进行实时跟踪和管理,返回值为Integer类型。 + * @return 返回用户考试的当前状态值。 + */ public Integer getState() { return state; } + /** + * 设置用户考试的当前状态,在如系统根据实际情况更新考试状态(比如用户手动提交试卷后将状态从0改为1等情况)、数据修正(状态记录错误)等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的考试状态值,参数“state”为要设置的用户考试的当前状态整数值(0或1)。 + * @param state 要设置的用户考试的当前状态整数值(0或1)。 + */ public void setState(Integer state) { this.state = state; } + + /** + * 获取试卷是否阅卷以及是否包含简答题的标记值,外部代码调用该方法可以获取当前UserExamsScore对象对应的阅卷相关标记值(-1表示未简答题,0表示未阅卷,1表示已阅卷), + * 用于对阅卷进度进行管理、了解成绩最终确定情况等操作,返回值为Integer类型。 + * @return 返回试卷是否阅卷以及是否包含简答题的标记值。 + */ + public Integer getWhetherMark() { + return whetherMark; + } + + /** + * 设置试卷是否阅卷以及是否包含简答题的标记值,在如阅卷工作进展变化(完成阅卷后将状态从0改为1等情况)、发现标记记录错误等情况时, + * 可以通过调用该方法来更新当前UserExamsScore对象中的阅卷相关标记值,参数“whetherMark”为要设置的表示是否阅卷及是否含简答题的整数值(-1、0或1)。 + * @param whetherMark 要设置的表示是否阅卷及是否含简答题的整数值(-1、0或1)。 + */ + public void setWhetherMark(Integer whetherMark) { + this.whetherMark = whetherMark; + } + + /** + * 获取用户考试成绩记录的创建时间,外部代码调用该方法可以获取当前UserExamsScore对象对应的创建时间值, + * 其类型为LocalDateTime,格式遵循“YYYY-MM-DD hh:mm:ss”,这个时间信息在业务逻辑中可用于记录成绩记录生成的先后顺序、分析不同时间段的考试情况等,返回值为LocalDateTime类型。 + * @return 返回用户考试成绩记录的创建时间值。 + */ public LocalDateTime getCreateTime() { return createTime; } +/** + * 设置用户考试成绩记录的创建时间,不过通常情况下,创建时间是在向数据库插入记录时自动按照系统当前时间填充(通过@TableField(f + public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } -- 2.34.1