feat: 扩展领域模型与配置
This commit is contained in:
50
src/Domain/TakeoutSaaS.Domain/Coupons/Entities/Coupon.cs
Normal file
50
src/Domain/TakeoutSaaS.Domain/Coupons/Entities/Coupon.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
using TakeoutSaaS.Domain.Coupons.Enums;
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Coupons.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 用户领取的券。
|
||||
/// </summary>
|
||||
public sealed class Coupon : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 模板标识。
|
||||
/// </summary>
|
||||
public Guid CouponTemplateId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 券码或序列号。
|
||||
/// </summary>
|
||||
public string Code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 归属用户。
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单 ID(已使用时记录)。
|
||||
/// </summary>
|
||||
public Guid? OrderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态。
|
||||
/// </summary>
|
||||
public CouponStatus Status { get; set; } = CouponStatus.Available;
|
||||
|
||||
/// <summary>
|
||||
/// 发放时间。
|
||||
/// </summary>
|
||||
public DateTime IssuedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// 使用时间。
|
||||
/// </summary>
|
||||
public DateTime? UsedAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 到期时间。
|
||||
/// </summary>
|
||||
public DateTime ExpireAt { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
using TakeoutSaaS.Domain.Coupons.Enums;
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Coupons.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 优惠券模板。
|
||||
/// </summary>
|
||||
public sealed class CouponTemplate : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 模板名称。
|
||||
/// </summary>
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 券类型。
|
||||
/// </summary>
|
||||
public CouponType CouponType { get; set; } = CouponType.AmountOff;
|
||||
|
||||
/// <summary>
|
||||
/// 面值或折扣额度。
|
||||
/// </summary>
|
||||
public decimal Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 折扣上限(针对折扣券)。
|
||||
/// </summary>
|
||||
public decimal? DiscountCap { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最低消费门槛。
|
||||
/// </summary>
|
||||
public decimal? MinimumSpend { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 可用开始时间。
|
||||
/// </summary>
|
||||
public DateTime? ValidFrom { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 可用结束时间。
|
||||
/// </summary>
|
||||
public DateTime? ValidTo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 有效天数(相对发放时间)。
|
||||
/// </summary>
|
||||
public int? RelativeValidDays { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 总发放数量上限。
|
||||
/// </summary>
|
||||
public int? TotalQuantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已领取数量。
|
||||
/// </summary>
|
||||
public int ClaimedQuantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 适用门店 ID 集合(JSON)。
|
||||
/// </summary>
|
||||
public string? StoreScopeJson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 适用品类或商品范围(JSON)。
|
||||
/// </summary>
|
||||
public string? ProductScopeJson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 发放渠道(JSON)。
|
||||
/// </summary>
|
||||
public string? ChannelsJson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否允许叠加其他优惠。
|
||||
/// </summary>
|
||||
public bool AllowStack { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态。
|
||||
/// </summary>
|
||||
public CouponTemplateStatus Status { get; set; } = CouponTemplateStatus.Draft;
|
||||
|
||||
/// <summary>
|
||||
/// 备注。
|
||||
/// </summary>
|
||||
public string? Description { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using TakeoutSaaS.Domain.Coupons.Enums;
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Coupons.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 营销活动配置。
|
||||
/// </summary>
|
||||
public sealed class PromotionCampaign : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 活动名称。
|
||||
/// </summary>
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 活动类型。
|
||||
/// </summary>
|
||||
public PromotionType PromotionType { get; set; } = PromotionType.Coupon;
|
||||
|
||||
/// <summary>
|
||||
/// 活动状态。
|
||||
/// </summary>
|
||||
public PromotionStatus Status { get; set; } = PromotionStatus.Draft;
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间。
|
||||
/// </summary>
|
||||
public DateTime StartAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间。
|
||||
/// </summary>
|
||||
public DateTime EndAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 预算金额。
|
||||
/// </summary>
|
||||
public decimal? Budget { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 活动规则 JSON。
|
||||
/// </summary>
|
||||
public string RulesJson { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 目标人群描述。
|
||||
/// </summary>
|
||||
public string? AudienceDescription { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 营销素材(如 banner)。
|
||||
/// </summary>
|
||||
public string? BannerUrl { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user