- 新增 .dockerignore 文件,忽略多种临时及中间文件 - 新增 .gitattributes 文件,配置文本文件换行及合并行为 - 新增详细的 .gitignore 文件,排除多种开发及生成文件 - 新增 VS Code C# 代码片段,提升开发效率 - 添加 Directory.Build.props,统一 MSBuild 配置和代码分析规则 - 添加空的 Directory.Build.targets,预留构建任务扩展位置 - 添加 Directory.Packages.props,实现依赖包版本集中管理和声明
184 lines
4.4 KiB
C#
184 lines
4.4 KiB
C#
using Fengling.Backend.Domain.AggregatesModel.MemberAggregate;
|
|
|
|
namespace Fengling.Backend.Domain.AggregatesModel.PointsTransactionAggregate;
|
|
|
|
/// <summary>
|
|
/// 积分交易ID
|
|
/// </summary>
|
|
public partial record PointsTransactionId : IGuidStronglyTypedId;
|
|
|
|
/// <summary>
|
|
/// 积分交易聚合根
|
|
/// </summary>
|
|
public class PointsTransaction : Entity<PointsTransactionId>, IAggregateRoot
|
|
{
|
|
protected PointsTransaction() { }
|
|
|
|
/// <summary>
|
|
/// 创建积分交易记录
|
|
/// </summary>
|
|
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
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建积分消费记录
|
|
/// </summary>
|
|
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
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建积分退还记录
|
|
/// </summary>
|
|
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
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建积分过期记录
|
|
/// </summary>
|
|
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
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 会员ID
|
|
/// </summary>
|
|
public MemberId MemberId { get; private set; } = default!;
|
|
|
|
/// <summary>
|
|
/// 交易类型
|
|
/// </summary>
|
|
public PointsTransactionType Type { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 积分数量
|
|
/// </summary>
|
|
public int Amount { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 来源
|
|
/// </summary>
|
|
public string Source { get; private set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 原因描述
|
|
/// </summary>
|
|
public string Reason { get; private set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 关联ID(营销码ID/订单ID等)
|
|
/// </summary>
|
|
public Guid RelatedId { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 过期时间(仅获取类型有效)
|
|
/// </summary>
|
|
public DateTime? ExpiryDate { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 创建时间
|
|
/// </summary>
|
|
public DateTime CreatedAt { get; private set; }
|
|
|
|
public Deleted Deleted { get; private set; } = new();
|
|
public RowVersion RowVersion { get; private set; } = new(0);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 积分交易类型
|
|
/// </summary>
|
|
public enum PointsTransactionType
|
|
{
|
|
/// <summary>
|
|
/// 获得
|
|
/// </summary>
|
|
Earn = 1,
|
|
|
|
/// <summary>
|
|
/// 消费
|
|
/// </summary>
|
|
Consume = 2,
|
|
|
|
/// <summary>
|
|
/// 过期
|
|
/// </summary>
|
|
Expire = 3,
|
|
|
|
/// <summary>
|
|
/// 退还
|
|
/// </summary>
|
|
Refund = 4
|
|
}
|