feat: 扩展领域模型与配置

This commit is contained in:
贺爱泽
2025-12-01 13:26:05 +08:00
parent a08804658b
commit 5ddad07658
148 changed files with 8519 additions and 2 deletions

View 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; }
}

View File

@@ -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; }
}

View File

@@ -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; }
}

View File

@@ -0,0 +1,32 @@
namespace TakeoutSaaS.Domain.Coupons.Enums;
/// <summary>
/// 券使用状态。
/// </summary>
public enum CouponStatus
{
/// <summary>
/// 可使用。
/// </summary>
Available = 0,
/// <summary>
/// 已锁定。
/// </summary>
Locked = 1,
/// <summary>
/// 已使用。
/// </summary>
Redeemed = 2,
/// <summary>
/// 已过期。
/// </summary>
Expired = 3,
/// <summary>
/// 已作废。
/// </summary>
Voided = 4
}

View File

@@ -0,0 +1,22 @@
namespace TakeoutSaaS.Domain.Coupons.Enums;
/// <summary>
/// 券模板状态。
/// </summary>
public enum CouponTemplateStatus
{
/// <summary>
/// 草稿状态。
/// </summary>
Draft = 0,
/// <summary>
/// 已上线可发放。
/// </summary>
Active = 1,
/// <summary>
/// 已下架。
/// </summary>
Archived = 2
}

View File

@@ -0,0 +1,32 @@
namespace TakeoutSaaS.Domain.Coupons.Enums;
/// <summary>
/// 券类型。
/// </summary>
public enum CouponType
{
/// <summary>
/// 满减券。
/// </summary>
AmountOff = 0,
/// <summary>
/// 折扣券。
/// </summary>
Percentage = 1,
/// <summary>
/// 现金券/无门槛券。
/// </summary>
Cash = 2,
/// <summary>
/// 免配送费券。
/// </summary>
DeliveryFee = 3,
/// <summary>
/// 礼品/兑换券。
/// </summary>
Gift = 4
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.Coupons.Enums;
/// <summary>
/// 营销活动状态。
/// </summary>
public enum PromotionStatus
{
/// <summary>
/// 草稿。
/// </summary>
Draft = 0,
/// <summary>
/// 进行中。
/// </summary>
Active = 1,
/// <summary>
/// 已结束。
/// </summary>
Completed = 2,
/// <summary>
/// 暂停。
/// </summary>
Paused = 3
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.Coupons.Enums;
/// <summary>
/// 营销活动类型。
/// </summary>
public enum PromotionType
{
/// <summary>
/// 优惠券活动。
/// </summary>
Coupon = 0,
/// <summary>
/// 秒杀/限时购。
/// </summary>
FlashSale = 1,
/// <summary>
/// 满减活动。
/// </summary>
FullReduction = 2,
/// <summary>
/// 抽奖活动。
/// </summary>
Lottery = 3
}