using SqlSugar;
using Volo.Abp.Domain.Entities.Auditing;
namespace Yi.Framework.AiHub.Domain.Entities;
///
/// 尊享包聚合根
/// 用于给VIP扩展额外购买尊享token包
///
[SugarTable("Ai_PremiumPackage")]
[SugarIndex($"index_{nameof(UserId)}", nameof(UserId), OrderByType.Asc)]
public class PremiumPackageAggregateRoot : FullAuditedAggregateRoot
{
public PremiumPackageAggregateRoot()
{
}
public PremiumPackageAggregateRoot(Guid userId, long totalTokens, string packageName)
{
UserId = userId;
TotalTokens = totalTokens;
RemainingTokens = totalTokens;
PackageName = packageName;
IsActive = true;
}
///
/// 用户ID
///
public Guid UserId { get; set; }
///
/// 包名称
///
public string PackageName { get; set; }
///
/// 总用量(总token数)
///
public long TotalTokens { get; set; }
///
/// 剩余用量(剩余token数)
///
public long RemainingTokens { get; set; }
///
/// 已使用token数
///
public long UsedTokens { get; set; }
///
/// 到期时间
///
public DateTime? ExpireDateTime { get; set; }
///
/// 是否激活
///
public bool IsActive { get; set; }
///
/// 购买金额
///
public decimal PurchaseAmount { get; set; }
///
/// 备注
///
public string? Remark { get; set; }
///
/// 消耗token
///
/// 消耗的token数量
/// 是否消耗成功
public bool ConsumeTokens(long tokenCount)
{
RemainingTokens -= tokenCount;
UsedTokens += tokenCount;
return true;
}
///
/// 检查是否可用
///
/// 是否可用
public bool IsAvailable()
{
if (!IsActive)
{
return false;
}
if (RemainingTokens <= 0)
{
return false;
}
if (ExpireDateTime.HasValue && ExpireDateTime.Value < DateTime.Now)
{
return false;
}
return true;
}
///
/// 停用尊享包
///
public void Deactivate()
{
IsActive = false;
}
///
/// 激活尊享包
///
public void Activate()
{
IsActive = true;
}
///
/// 设置到期时间
///
/// 到期时间
public void SetExpireDateTime(DateTime expireDateTime)
{
ExpireDateTime = expireDateTime;
}
}