xiangpei
2024-06-11 5ada29cec4b0c4a339a3e1c207363ae71e02c42f
考试管理、bug处理
10个文件已修改
1个文件已添加
124 ■■■■ 已修改文件
src/main/java/com/ycl/jxkg/domain/entity/Classes.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/entity/Exam.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/form/ExamForm.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/query/ClassesQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/query/ExamQuery.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/ExamVO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/enums/general/ExamStatusEnum.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ClassesMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ExamMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/entity/Classes.java
@@ -1,5 +1,6 @@
package com.ycl.jxkg.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -53,6 +54,6 @@
    /** 备注 */
    private String remark;
    @TableField("create_time")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;
}
src/main/java/com/ycl/jxkg/domain/entity/Exam.java
@@ -1,10 +1,12 @@
package com.ycl.jxkg.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import java.util.Date;
import com.ycl.jxkg.domain.base.AbsEntity;
import com.ycl.jxkg.enums.general.ExamStatusEnum;
import lombok.Data;
/**
@@ -33,7 +35,7 @@
    @TableField("exam_paper_type")
    /** 试卷类型 */
    private String examPaperType;
    private Integer examPaperType;
    @TableField("exam_place")
    /** 考试地点 */
@@ -41,19 +43,20 @@
    @TableField("status")
    /** 考试状态 */
    private String status;
    private ExamStatusEnum status;
    @TableField("start_time")
    /** 开始时间 */
    private LocalDateTime startTime;
    private Date startTime;
    @TableField("end_time")
    /** 结束时间 */
    private LocalDateTime endTime;
    private Date endTime;
    @TableField("teacher_id")
    /** 创建老师 */
    private Integer teacherId;
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;
}
src/main/java/com/ycl/jxkg/domain/form/ExamForm.java
@@ -1,5 +1,6 @@
package com.ycl.jxkg.domain.form;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.jxkg.group.Update;
import com.ycl.jxkg.group.Add;
import com.ycl.jxkg.domain.base.AbsForm;
@@ -35,9 +36,9 @@
    @ApiModelProperty("班级ID")
    private Integer classesId;
    @NotBlank(message = "试卷类型不能为空", groups = {Add.class, Update.class})
    @NotNull(message = "试卷类型不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("试卷类型")
    private String examPaperType;
    private Integer examPaperType;
    @NotBlank(message = "考试地点不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("考试地点")
@@ -45,10 +46,12 @@
    @NotNull(message = "开始时间不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    @NotNull(message = "结束时间不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;
    public static Exam getEntityByForm(@NonNull ExamForm form, Exam entity) {
src/main/java/com/ycl/jxkg/domain/query/ClassesQuery.java
@@ -26,5 +26,7 @@
    /** 班级状态 */
    private String status;
    private Integer userId;
}
src/main/java/com/ycl/jxkg/domain/query/ExamQuery.java
@@ -18,5 +18,12 @@
@Data
@ApiModel(value = "Exam查询", description = "考试查询")
public class ExamQuery extends AbsQuery {
    /** 考试名称 */
    private String examName;
    /** 班级 */
    private Integer classesId;
}
src/main/java/com/ycl/jxkg/domain/vo/ExamVO.java
@@ -1,5 +1,6 @@
package com.ycl.jxkg.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.jxkg.domain.base.AbsVo;
import com.ycl.jxkg.domain.entity.Exam;
import java.util.List;
@@ -24,12 +25,14 @@
    /** 试卷ID */
    private Integer examPaperId;
    private String examPaperName;
    /** 班级ID */
    private Integer classesId;
    private String className;
    /** 试卷类型 */
    private String examPaperType;
    private Integer examPaperType;
    /** 考试地点 */
    private String examPlace;
@@ -38,12 +41,15 @@
    private String status;
    /** 开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    /** 结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;
    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 创建老师 */
src/main/java/com/ycl/jxkg/enums/general/ExamStatusEnum.java
New file
@@ -0,0 +1,55 @@
package com.ycl.jxkg.enums.general;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import java.util.Date;
import java.util.Objects;
/**
 * 考试状态
 *
 * @author:xp
 * @date:2024/6/4 9:35
 */
@Getter
public enum ExamStatusEnum {
    NOT_START("not_start", "未开始"),
    ING("ing", "进行中"),
    FINISHED("finished", "已结束"),
    ;
    @EnumValue
    private final String value;
    @JsonValue
    private final String desc;
    ExamStatusEnum(String value, String desc) {
        this.value = value;
        this.desc = desc;
    }
    /**
     * 判断当前时间对应的考试状态
     *
     * @param start
     * @param end
     * @param now
     * @return
     */
    public static ExamStatusEnum getStatusByTime(Date start, Date end, Date now) {
        if (Objects.isNull(now)) {
            now = new Date();
        }
        if (now.after(end)) {
            return FINISHED;
        } else if (now.before(start)) {
            return NOT_START;
        } else {
            return ING;
        }
    }
}
src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java
@@ -43,6 +43,8 @@
    @Override
    public Result add(ClassesForm form) {
        Classes entity = ClassesForm.getEntityByForm(form, null);
        entity.setStatus(ClassesStatusEnum.NORMAL);
        entity.setCreateUser(webContext.getCurrentUser().getId());
        baseMapper.insert(entity);
        return Result.ok("添加成功");
    }
@@ -93,6 +95,7 @@
    @Override
    public Result page(ClassesQuery query) {
        IPage<ClassesVO> page = PageUtil.getPage(query, ClassesVO.class);
        query.setUserId(webContext.getCurrentUser().getId());
        baseMapper.getPage(page, query);
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -1,7 +1,9 @@
package com.ycl.jxkg.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.entity.Exam;
import com.ycl.jxkg.enums.general.ExamStatusEnum;
import com.ycl.jxkg.mapper.ExamMapper;
import com.ycl.jxkg.service.ExamService;
import com.ycl.jxkg.base.Result;
@@ -29,6 +31,7 @@
public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements ExamService {
    private final ExamMapper examMapper;
    private final WebContext webContext;
    /**
     * 添加
@@ -38,6 +41,8 @@
    @Override
    public Result add(ExamForm form) {
        Exam entity = ExamForm.getEntityByForm(form, null);
        entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null));
        entity.setTeacherId(webContext.getCurrentUser().getId());
        baseMapper.insert(entity);
        return Result.ok("添加成功");
    }
@@ -50,10 +55,10 @@
    @Override
    public Result update(ExamForm form) {
        Exam entity = baseMapper.selectById(form.getId());
        // 为空抛IllegalArgumentException,做全局异常处理
        Assert.notNull(entity, "记录不存在");
        BeanUtils.copyProperties(form, entity);
        entity.setStatus(ExamStatusEnum.getStatusByTime(form.getStartTime(), form.getEndTime(), null));
        baseMapper.updateById(entity);
        return Result.ok("修改成功");
    }
src/main/resources/mapper/ClassesMapper.xml
@@ -63,7 +63,7 @@
            t_classes TC
                LEFT JOIN t_user TU ON TU.id = TC.create_user AND TU.deleted = 0
        WHERE
            TC.deleted = 0
            TC.deleted = 0 AND TC.create_user = #{query.userId}
            <if test="query.className != null and query.className != ''">
                AND TC.class_name like concat('%', #{query.className}, '%')
            </if>
src/main/resources/mapper/ExamMapper.xml
@@ -14,6 +14,8 @@
        <result column="end_time" property="endTime" />
        <result column="create_time" property="createTime" />
        <result column="teacher_id" property="teacherId" />
        <result column="class_name" property="className" />
        <result column="name" property="examPaperName" />
    </resultMap>
@@ -54,11 +56,22 @@
            TE.end_time,
            TE.create_time,
            TE.teacher_id,
            TE.id
            TE.id,
            TC.class_name,
            TEP.name
        FROM
            t_exam TE
                INNER JOIN t_user TU ON TU.id = TE.teacher_id AND TU.deleted = 0
                INNER JOIN t_classes TC ON TC.id = TE.classes_id AND TC.deleted = 0
                INNER JOIN t_exam_paper TEP ON TEP.id = TE.exam_paper_id AND TEP.deleted = 0
        WHERE
            TE.deleted = 0
            <if test="query.examName != null and query.examName != ''">
                AND TE.exam_name like concat('%', #{query.examName}, '%')
            </if>
            <if test="query.classesId != null">
                AND TE.classes_id = #{query.classesId}
            </if>
    </select>
</mapper>