Exam.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.nju.edu.eval.data.entity;
  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import com.nju.edu.eval.publicdatas.enums.ExamState;
  4. import lombok.AllArgsConstructor;
  5. import lombok.Data;
  6. import lombok.EqualsAndHashCode;
  7. import lombok.NoArgsConstructor;
  8. import javax.persistence.*;
  9. import java.util.Date;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. /**
  14. * @author mars
  15. */
  16. @Data
  17. @Entity
  18. @EqualsAndHashCode
  19. @NoArgsConstructor
  20. @AllArgsConstructor
  21. @Table(name = "exam")
  22. public class Exam {
  23. @Id
  24. @GeneratedValue(strategy = GenerationType.IDENTITY)
  25. private Integer id;
  26. @Column(name = "exam_name")
  27. private String examName;
  28. private String position;
  29. @ElementCollection
  30. @CollectionTable(name = "skill_of_exam", joinColumns = @JoinColumn(name = "exam_id"))
  31. @Column(name = "skill")
  32. private List<String> skills;
  33. @Column(name = "expected_difficulty")
  34. private int difficulty;
  35. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  36. private Date startTime;
  37. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  38. private Date endTime;
  39. private String comment;
  40. private String inviteCode = "";
  41. @Column(name = "is_invigilate")
  42. private Integer antiCheating;
  43. /**
  44. * 是否需要邀请码参加考试
  45. */
  46. @Column(name = "is_public")
  47. private Integer isPublic;
  48. // @ElementCollection
  49. // @CollectionTable(name = "question_id_of_exam",
  50. // joinColumns = @JoinColumn(name = "exam_id"))
  51. // @Column(name = "question_id")
  52. // private List<String> questionIds;
  53. /**
  54. * 试卷中题目id - 题目分值的map
  55. */
  56. @ElementCollection
  57. @CollectionTable(name = "question_score_of_exam", joinColumns = @JoinColumn(name = "exam_id"))
  58. @MapKeyColumn(name="question_id")
  59. @Column(name="score")
  60. private Map<String, Double> questionAndScore = new HashMap<>();
  61. /**
  62. * 考试创建者
  63. */
  64. @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
  65. @JoinColumn(name = "creator_id")
  66. private User creator;
  67. @OneToOne(cascade = CascadeType.ALL)
  68. @JoinColumn(name = "general_report_id")
  69. private GeneralReport generalReport;
  70. // private List<Question>
  71. public Exam(String examName, String position, List<String> skills, Date startTime, Date endTime, String comment, User user) {
  72. this.examName = examName;
  73. this.position = position;
  74. this.skills = skills;
  75. this.startTime = startTime;
  76. this.endTime = endTime;
  77. this.comment = comment;
  78. this.creator = user;
  79. }
  80. public ExamState getState() {
  81. Date date = new Date();
  82. if (this.startTime.after(date)) {
  83. return ExamState.NOT_STARTED;
  84. }
  85. if (this.endTime.before(date)) {
  86. return ExamState.OVER;
  87. }
  88. return ExamState.IN_PROGRESS;
  89. }
  90. }