using Fengling.Backend.Domain.AggregatesModel.MemberAggregate; namespace Fengling.Backend.Domain.AggregatesModel.PointsTransactionAggregate; /// /// 积分交易ID /// public partial record PointsTransactionId : IGuidStronglyTypedId; /// /// 积分交易聚合根 /// public class PointsTransaction : Entity, IAggregateRoot { protected PointsTransaction() { } /// /// 创建积分交易记录 /// public static PointsTransaction CreateEarnTransaction( MemberId memberId, int amount, string source, string reason, Guid relatedId, DateTime expiryDate) { if (amount <= 0) throw new KnownException("积分数量必须大于0"); return new PointsTransaction { MemberId = memberId, Type = PointsTransactionType.Earn, Amount = amount, Source = source, Reason = reason, RelatedId = relatedId, ExpiryDate = expiryDate, CreatedAt = DateTime.UtcNow }; } /// /// 创建积分消费记录 /// public static PointsTransaction CreateConsumeTransaction( MemberId memberId, int amount, string reason, Guid orderId) { if (amount <= 0) throw new KnownException("积分数量必须大于0"); return new PointsTransaction { MemberId = memberId, Type = PointsTransactionType.Consume, Amount = amount, Source = "兑换消费", Reason = reason, RelatedId = orderId, CreatedAt = DateTime.UtcNow }; } /// /// 创建积分退还记录 /// public static PointsTransaction CreateRefundTransaction( MemberId memberId, int amount, string reason, Guid orderId) { if (amount <= 0) throw new KnownException("积分数量必须大于0"); return new PointsTransaction { MemberId = memberId, Type = PointsTransactionType.Refund, Amount = amount, Source = "订单退还", Reason = reason, RelatedId = orderId, CreatedAt = DateTime.UtcNow }; } /// /// 创建积分过期记录 /// public static PointsTransaction CreateExpireTransaction( MemberId memberId, int amount, Guid batchId) { if (amount <= 0) throw new KnownException("积分数量必须大于0"); return new PointsTransaction { MemberId = memberId, Type = PointsTransactionType.Expire, Amount = amount, Source = "积分过期", Reason = "积分已过期自动失效", RelatedId = batchId, CreatedAt = DateTime.UtcNow }; } /// /// 会员ID /// public MemberId MemberId { get; private set; } = default!; /// /// 交易类型 /// public PointsTransactionType Type { get; private set; } /// /// 积分数量 /// public int Amount { get; private set; } /// /// 来源 /// public string Source { get; private set; } = string.Empty; /// /// 原因描述 /// public string Reason { get; private set; } = string.Empty; /// /// 关联ID(营销码ID/订单ID等) /// public Guid RelatedId { get; private set; } /// /// 过期时间(仅获取类型有效) /// public DateTime? ExpiryDate { get; private set; } /// /// 创建时间 /// public DateTime CreatedAt { get; private set; } public Deleted Deleted { get; private set; } = new(); public RowVersion RowVersion { get; private set; } = new(0); } /// /// 积分交易类型 /// public enum PointsTransactionType { /// /// 获得 /// Earn = 1, /// /// 消费 /// Consume = 2, /// /// 过期 /// Expire = 3, /// /// 退还 /// Refund = 4 }