package com.nju.edu.eval.data.entity; import com.fasterxml.jackson.annotation.JsonFormat; import com.nju.edu.eval.publicdatas.enums.ExamState; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import javax.persistence.*; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author mars */ @Data @Entity @EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor @Table(name = "exam") public class Exam { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "exam_name") private String examName; private String position; @ElementCollection @CollectionTable(name = "skill_of_exam", joinColumns = @JoinColumn(name = "exam_id")) @Column(name = "skill") private List skills; @Column(name = "expected_difficulty") private int difficulty; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; private String comment; private String inviteCode = ""; @Column(name = "is_invigilate") private Integer antiCheating; /** * 是否需要邀请码参加考试 */ @Column(name = "is_public") private Integer isPublic; // @ElementCollection // @CollectionTable(name = "question_id_of_exam", // joinColumns = @JoinColumn(name = "exam_id")) // @Column(name = "question_id") // private List questionIds; /** * 试卷中题目id - 题目分值的map */ @ElementCollection @CollectionTable(name = "question_score_of_exam", joinColumns = @JoinColumn(name = "exam_id")) @MapKeyColumn(name="question_id") @Column(name="score") private Map questionAndScore = new HashMap<>(); /** * 考试创建者 */ @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY) @JoinColumn(name = "creator_id") private User creator; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "general_report_id") private GeneralReport generalReport; // private List public Exam(String examName, String position, List skills, Date startTime, Date endTime, String comment, User user) { this.examName = examName; this.position = position; this.skills = skills; this.startTime = startTime; this.endTime = endTime; this.comment = comment; this.creator = user; } public ExamState getState() { Date date = new Date(); if (this.startTime.after(date)) { return ExamState.NOT_STARTED; } if (this.endTime.before(date)) { return ExamState.OVER; } return ExamState.IN_PROGRESS; } }