package com.rongyichuang.activity.entity; import com.rongyichuang.rating.entity.RatingScheme; import jakarta.persistence.*; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.UpdateTimestamp; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Entity @Table(name = "t_activity") public class Activity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "pid", nullable = false) private Long pid = 0L; @Column(name = "path", nullable = false) private String path = ""; @Column(name = "name", nullable = false, length = 128) private String name; @Column(name = "description", columnDefinition = "TEXT") private String description; @Column(name = "signup_deadline", nullable = false) private LocalDateTime signupDeadline; @Column(name = "match_time") private LocalDateTime matchTime; @Column(name = "address") private String address; @Column(name = "rating_scheme_id", nullable = false) private Long ratingSchemeId; @Column(name = "player_max") private Integer playerMax; @Column(name = "state", nullable = false) private Integer state = 1; @Column(name = "create_time", nullable = false, updatable = false) @CreationTimestamp private LocalDateTime createTime; @Column(name = "create_user_id") private Long createUserId; @Column(name = "update_time", nullable = false) @UpdateTimestamp private LocalDateTime updateTime; @Column(name = "update_user_id") private Long updateUserId; @Version @Column(name = "version", nullable = false) private Long version = 0L; // 关联评分模板 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "rating_scheme_id", insertable = false, updatable = false) private RatingScheme ratingScheme; // 比赛阶段(子活动) @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "pid") private List stages = new ArrayList<>(); // 父比赛 - 只有当 pid > 0 时才关联父记录 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid", insertable = false, updatable = false) @org.hibernate.annotations.Where(clause = "pid > 0") private Activity parent; // 构造函数 public Activity() {} public Activity(String name, String description, LocalDateTime signupDeadline, LocalDateTime matchTime, String address, Long ratingSchemeId, Integer playerMax) { this.name = name; this.description = description; this.signupDeadline = signupDeadline; this.matchTime = matchTime; this.address = address; this.ratingSchemeId = ratingSchemeId; this.playerMax = playerMax; } // Getters and Setters public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getPid() { return pid; } public void setPid(Long pid) { this.pid = pid; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public LocalDateTime getSignupDeadline() { return signupDeadline; } public void setSignupDeadline(LocalDateTime signupDeadline) { this.signupDeadline = signupDeadline; } public LocalDateTime getMatchTime() { return matchTime; } public void setMatchTime(LocalDateTime matchTime) { this.matchTime = matchTime; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Long getRatingSchemeId() { return ratingSchemeId; } public void setRatingSchemeId(Long ratingSchemeId) { this.ratingSchemeId = ratingSchemeId; } public Integer getPlayerMax() { return playerMax; } public void setPlayerMax(Integer playerMax) { this.playerMax = playerMax; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public Long getCreateUserId() { return createUserId; } public void setCreateUserId(Long createUserId) { this.createUserId = createUserId; } public LocalDateTime getUpdateTime() { return updateTime; } public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; } public Long getUpdateUserId() { return updateUserId; } public void setUpdateUserId(Long updateUserId) { this.updateUserId = updateUserId; } public Long getVersion() { return version; } public void setVersion(Long version) { this.version = version; } public RatingScheme getRatingScheme() { return ratingScheme; } public void setRatingScheme(RatingScheme ratingScheme) { this.ratingScheme = ratingScheme; } public List getStages() { return stages; } public void setStages(List stages) { this.stages = stages; } public Activity getParent() { return parent; } public void setParent(Activity parent) { this.parent = parent; } // 业务方法 public boolean isCompetition() { return pid == 0; } public boolean isStage() { return pid > 0; } }