package org.dddlib.organisation.domain; import org.dayatang.domain.AbstractEntity; import org.dayatang.utils.Assert; import org.dayatang.utils.DateUtils; import javax.persistence.*; import java.util.Date; @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING) public abstract class Party extends AbstractEntity { private static final long serialVersionUID = -6083088250263550905L; // 编码 private String sn; // 名称 private String name; // 创建日期 @Temporal(TemporalType.DATE) private Date createDate = new Date(); // 终结日期 @Temporal(TemporalType.DATE) private Date terminateDate = DateUtils.MAX_DATE; public Party() { } public Party(String name) { Assert.notBlank(name, "Name is blank!"); this.name = name; } public String getSn() { return sn; } public void setSn(String sn) { this.sn = sn; } public String getName() { return name; } public final void setName(String name) { this.name = name; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getTerminateDate() { return terminateDate; } public void setTerminateDate(Date terminateDate) { this.terminateDate = terminateDate; } /** * 判断在指定的日期是否“存活”,即参数date处于其生命周期内。 * * @param date * @return */ public boolean isActive(Date date) { return DateUtils.isSameDay(date, getCreateDate()) || date.after(getCreateDate()) && date.before(getTerminateDate()); } /** * 终结当事人,例如撤销机构、撤销岗位、员工离职退休等 * * @param date */ @SuppressWarnings("rawtypes") public void terminate(Date date) { for (Accountability each : Accountability.findAccountabilitiesByParty(this, date)) { each.terminate(date); } terminateDate = date; save(); } @Override public String[] businessKeys() { return new String[]{"sn", "name"}; } }