| | |
| | | package com.ycl.jxkg.domain.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | |
| | |
| | | /** 备注 */ |
| | | private String remark; |
| | | |
| | | @TableField("create_time") |
| | | @TableField(value = "create_time", fill = FieldFill.INSERT) |
| | | private Date createTime; |
| | | } |
| | |
| | | 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; |
| | | |
| | | /** |
| | |
| | | |
| | | @TableField("exam_paper_type") |
| | | /** 试卷类型 */ |
| | | private String examPaperType; |
| | | private Integer examPaperType; |
| | | |
| | | @TableField("exam_place") |
| | | /** 考试地点 */ |
| | |
| | | |
| | | @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; |
| | | } |
| | |
| | | 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; |
| | |
| | | @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("考试地点") |
| | |
| | | |
| | | @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) { |
| | |
| | | /** 班级状态 */ |
| | | private String status; |
| | | |
| | | private Integer userId; |
| | | |
| | | } |
| | | |
| | |
| | | @Data |
| | | @ApiModel(value = "Exam查询", description = "考试查询") |
| | | public class ExamQuery extends AbsQuery { |
| | | |
| | | /** 考试名称 */ |
| | | private String examName; |
| | | |
| | | /** 班级 */ |
| | | private Integer classesId; |
| | | |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | |
| | | /** 试卷ID */ |
| | | private Integer examPaperId; |
| | | private String examPaperName; |
| | | |
| | | /** 班级ID */ |
| | | private Integer classesId; |
| | | private String className; |
| | | |
| | | /** 试卷类型 */ |
| | | private String examPaperType; |
| | | private Integer examPaperType; |
| | | |
| | | /** 考试地点 */ |
| | | private String examPlace; |
| | |
| | | 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; |
| | | |
| | | /** 创建老师 */ |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | @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("添加成功"); |
| | | } |
| | |
| | | @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()); |
| | | } |
| | |
| | | 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; |
| | |
| | | public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements ExamService { |
| | | |
| | | private final ExamMapper examMapper; |
| | | private final WebContext webContext; |
| | | |
| | | /** |
| | | * 添加 |
| | |
| | | @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("添加成功"); |
| | | } |
| | |
| | | @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("修改成功"); |
| | | } |
| | |
| | | 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> |
| | |
| | | <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> |
| | | |
| | | |
| | |
| | | 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> |