namespace OrpaonVision.Core.Domain; /// /// 版本化实体基类。 /// public abstract class VersionedEntityBase : AuditableEntityBase { /// /// 版本号。 /// public string VersionNo { get; set; } = string.Empty; /// /// 状态。 /// public int Status { get; set; } /// /// 发布时间(UTC)。 /// public DateTime? PublishedAt { get; private set; } /// /// 发布者。 /// public string? PublishedBy { get; private set; } /// /// 是否为当前版本。 /// public bool IsCurrent { get; private set; } /// /// 是否已发布。 /// public bool IsPublished => PublishedAt.HasValue; /// /// 标记为已发布。 /// /// 发布者。 public virtual void MarkAsPublished(string? publishedBy = null) { if (!IsPublished) { PublishedAt = DateTime.UtcNow; PublishedBy = publishedBy; Status = 1; // 已发布状态 MarkAsUpdated(publishedBy); } } /// /// 标记为当前版本。 /// /// 更新者。 public virtual void MarkAsCurrent(string? updatedBy = null) { if (!IsCurrent) { IsCurrent = true; MarkAsUpdated(updatedBy); } } /// /// 取消当前版本状态。 /// /// 更新者。 public virtual void UnmarkCurrent(string? updatedBy = null) { if (IsCurrent) { IsCurrent = false; MarkAsUpdated(updatedBy); } } /// /// 设置版本号。 /// /// 版本号。 /// 更新者。 public virtual void SetVersionNo(string versionNo, string? updatedBy = null) { if (VersionNo != versionNo) { VersionNo = versionNo; MarkAsUpdated(updatedBy); } } /// /// 设置状态。 /// /// 状态。 /// 更新者。 public virtual void SetStatus(int status, string? updatedBy = null) { if (Status != status) { Status = status; MarkAsUpdated(updatedBy); } } }