| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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<String> 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<String> questionIds;
- /**
- * 试卷中题目id - 题目分值的map
- */
- @ElementCollection
- @CollectionTable(name = "question_score_of_exam", joinColumns = @JoinColumn(name = "exam_id"))
- @MapKeyColumn(name="question_id")
- @Column(name="score")
- private Map<String, Double> 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<Question>
- public Exam(String examName, String position, List<String> 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;
- }
- }
|