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,111 @@
using TakeoutSaaS.Domain.Orders.Enums;
using TakeoutSaaS.Domain.Payments.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Orders.Entities;
/// <summary>
/// 交易订单。
/// </summary>
public sealed class Order : MultiTenantEntityBase
{
/// <summary>
/// 订单号。
/// </summary>
public string OrderNo { get; set; } = string.Empty;
/// <summary>
/// 门店。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 下单渠道。
/// </summary>
public OrderChannel Channel { get; set; } = OrderChannel.MiniProgram;
/// <summary>
/// 履约类型。
/// </summary>
public DeliveryType DeliveryType { get; set; } = DeliveryType.DineIn;
/// <summary>
/// 当前状态。
/// </summary>
public OrderStatus Status { get; set; } = OrderStatus.PendingPayment;
/// <summary>
/// 支付状态。
/// </summary>
public PaymentStatus PaymentStatus { get; set; } = PaymentStatus.Unpaid;
/// <summary>
/// 顾客姓名。
/// </summary>
public string? CustomerName { get; set; }
/// <summary>
/// 顾客手机号。
/// </summary>
public string? CustomerPhone { get; set; }
/// <summary>
/// 就餐桌号。
/// </summary>
public string? TableNo { get; set; }
/// <summary>
/// 排队号(如有)。
/// </summary>
public string? QueueNumber { get; set; }
/// <summary>
/// 预约 ID。
/// </summary>
public Guid? ReservationId { get; set; }
/// <summary>
/// 商品总额。
/// </summary>
public decimal ItemsAmount { get; set; }
/// <summary>
/// 优惠金额。
/// </summary>
public decimal DiscountAmount { get; set; }
/// <summary>
/// 应付金额。
/// </summary>
public decimal PayableAmount { get; set; }
/// <summary>
/// 实付金额。
/// </summary>
public decimal PaidAmount { get; set; }
/// <summary>
/// 支付时间。
/// </summary>
public DateTime? PaidAt { get; set; }
/// <summary>
/// 完成时间。
/// </summary>
public DateTime? FinishedAt { get; set; }
/// <summary>
/// 取消时间。
/// </summary>
public DateTime? CancelledAt { get; set; }
/// <summary>
/// 取消原因。
/// </summary>
public string? CancelReason { get; set; }
/// <summary>
/// 备注。
/// </summary>
public string? Remark { get; set; }
}

View File

@@ -0,0 +1,59 @@
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Orders.Entities;
/// <summary>
/// 订单明细。
/// </summary>
public sealed class OrderItem : MultiTenantEntityBase
{
/// <summary>
/// 订单 ID。
/// </summary>
public Guid OrderId { get; set; }
/// <summary>
/// 商品 ID。
/// </summary>
public Guid ProductId { get; set; }
/// <summary>
/// 商品名称。
/// </summary>
public string ProductName { get; set; } = string.Empty;
/// <summary>
/// SKU/规格描述。
/// </summary>
public string? SkuName { get; set; }
/// <summary>
/// 单位。
/// </summary>
public string? Unit { get; set; }
/// <summary>
/// 数量。
/// </summary>
public int Quantity { get; set; }
/// <summary>
/// 单价。
/// </summary>
public decimal UnitPrice { get; set; }
/// <summary>
/// 折扣金额。
/// </summary>
public decimal DiscountAmount { get; set; }
/// <summary>
/// 小计。
/// </summary>
public decimal SubTotal { get; set; }
/// <summary>
/// 自定义属性 JSON。
/// </summary>
public string? AttributesJson { get; set; }
}

View File

@@ -0,0 +1,35 @@
using TakeoutSaaS.Domain.Orders.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Orders.Entities;
/// <summary>
/// 订单状态流转记录。
/// </summary>
public sealed class OrderStatusHistory : MultiTenantEntityBase
{
/// <summary>
/// 订单标识。
/// </summary>
public Guid OrderId { get; set; }
/// <summary>
/// 变更后的状态。
/// </summary>
public OrderStatus Status { get; set; }
/// <summary>
/// 操作人标识(可为空表示系统)。
/// </summary>
public Guid? OperatorId { get; set; }
/// <summary>
/// 备注信息。
/// </summary>
public string? Notes { get; set; }
/// <summary>
/// 发生时间。
/// </summary>
public DateTime OccurredAt { get; set; } = DateTime.UtcNow;
}

View File

@@ -0,0 +1,50 @@
using TakeoutSaaS.Domain.Orders.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Orders.Entities;
/// <summary>
/// 售后/退款申请。
/// </summary>
public sealed class RefundRequest : MultiTenantEntityBase
{
/// <summary>
/// 关联订单标识。
/// </summary>
public Guid OrderId { get; set; }
/// <summary>
/// 退款单号。
/// </summary>
public string RefundNo { get; set; } = string.Empty;
/// <summary>
/// 申请金额。
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 申请原因。
/// </summary>
public string Reason { get; set; } = string.Empty;
/// <summary>
/// 退款状态。
/// </summary>
public RefundStatus Status { get; set; } = RefundStatus.Pending;
/// <summary>
/// 用户提交时间。
/// </summary>
public DateTime RequestedAt { get; set; } = DateTime.UtcNow;
/// <summary>
/// 审核完成时间。
/// </summary>
public DateTime? ProcessedAt { get; set; }
/// <summary>
/// 审核备注。
/// </summary>
public string? ReviewNotes { get; set; }
}

View File

@@ -0,0 +1,11 @@
namespace TakeoutSaaS.Domain.Orders.Enums;
/// <summary>
/// 履约/交付方式。
/// </summary>
public enum DeliveryType
{
DineIn = 0,
Pickup = 1,
Delivery = 2
}

View File

@@ -0,0 +1,14 @@
namespace TakeoutSaaS.Domain.Orders.Enums;
/// <summary>
/// 下单渠道。
/// </summary>
public enum OrderChannel
{
Unknown = 0,
MiniProgram = 1,
ScanToOrder = 2,
StaffConsole = 3,
PhoneReservation = 4,
ThirdPartyDelivery = 5
}

View File

@@ -0,0 +1,14 @@
namespace TakeoutSaaS.Domain.Orders.Enums;
/// <summary>
/// 订单状态。
/// </summary>
public enum OrderStatus
{
PendingPayment = 0,
AwaitingPreparation = 1,
InProgress = 2,
Ready = 3,
Completed = 4,
Cancelled = 5
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.Orders.Enums;
/// <summary>
/// 退款申请状态。
/// </summary>
public enum RefundStatus
{
/// <summary>
/// 等待审核。
/// </summary>
Pending = 0,
/// <summary>
/// 审核通过,待原路退款。
/// </summary>
Approved = 1,
/// <summary>
/// 已拒绝。
/// </summary>
Rejected = 2,
/// <summary>
/// 已完成退款。
/// </summary>
Refunded = 3
}