namespace TakeoutSaaS.Domain.Tenants.Entities;
///
/// 账单明细项(值对象)。
/// 用于记录账单中的单项费用明细,如套餐费用、配额包费用等。
///
public sealed class BillingLineItem
{
///
/// 明细项类型(如:套餐费、配额包、其他费用)。
///
public string ItemType { get; set; } = string.Empty;
///
/// 明细项描述。
///
public string Description { get; set; } = string.Empty;
///
/// 数量。
///
public decimal Quantity { get; set; }
///
/// 单价。
///
public decimal UnitPrice { get; set; }
///
/// 金额(数量 × 单价)。
///
public decimal Amount { get; set; }
///
/// 折扣率(0-1 之间,如 0.1 表示 10% 折扣)。
///
public decimal DiscountRate { get; set; }
///
/// 创建账单明细项。
///
/// 明细项类型。
/// 描述。
/// 数量。
/// 单价。
/// 折扣率。
/// 账单明细项实例。
public static BillingLineItem Create(
string itemType,
string description,
decimal quantity,
decimal unitPrice,
decimal discountRate = 0)
{
var amount = quantity * unitPrice * (1 - discountRate);
return new BillingLineItem
{
ItemType = itemType,
Description = description,
Quantity = quantity,
UnitPrice = unitPrice,
Amount = amount,
DiscountRate = discountRate
};
}
///
/// 计算折扣后的金额。
///
/// 折扣后金额。
public decimal CalculateDiscountedAmount()
{
return Quantity * UnitPrice * (1 - DiscountRate);
}
///
/// 获取折扣金额。
///
/// 折扣金额。
public decimal GetDiscountAmount()
{
return Quantity * UnitPrice * DiscountRate;
}
}