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,130 @@
using TakeoutSaaS.Domain.Stores.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 门店信息,承载营业配置与能力。
/// </summary>
public sealed class Store : MultiTenantEntityBase
{
/// <summary>
/// 所属商户标识。
/// </summary>
public Guid MerchantId { get; set; }
/// <summary>
/// 门店编码,便于扫码及外部对接。
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 门店名称。
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 联系电话。
/// </summary>
public string? Phone { get; set; }
/// <summary>
/// 门店负责人姓名。
/// </summary>
public string? ManagerName { get; set; }
/// <summary>
/// 门店当前运营状态。
/// </summary>
public StoreStatus Status { get; set; } = StoreStatus.Closed;
/// <summary>
/// 所在国家或地区。
/// </summary>
public string? Country { get; set; }
/// <summary>
/// 所在省份。
/// </summary>
public string? Province { get; set; }
/// <summary>
/// 所在城市。
/// </summary>
public string? City { get; set; }
/// <summary>
/// 区县信息。
/// </summary>
public string? District { get; set; }
/// <summary>
/// 详细地址。
/// </summary>
public string? Address { get; set; }
/// <summary>
/// 高德/腾讯地图经度。
/// </summary>
public double? Longitude { get; set; }
/// <summary>
/// 纬度。
/// </summary>
public double? Latitude { get; set; }
/// <summary>
/// 门店描述或公告。
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 门店营业时段描述(备用字符串)。
/// </summary>
public string? BusinessHours { get; set; }
/// <summary>
/// 是否支持堂食。
/// </summary>
public bool SupportsDineIn { get; set; } = true;
/// <summary>
/// 是否支持自提。
/// </summary>
public bool SupportsPickup { get; set; } = true;
/// <summary>
/// 是否支持配送。
/// </summary>
public bool SupportsDelivery { get; set; } = true;
/// <summary>
/// 支持预约。
/// </summary>
public bool SupportsReservation { get; set; }
/// <summary>
/// 支持排队叫号。
/// </summary>
public bool SupportsQueueing { get; set; }
/// <summary>
/// 默认配送半径(公里)。
/// </summary>
public decimal DeliveryRadiusKm { get; set; } = 3m;
/// <summary>
/// 门店公告。
/// </summary>
public string? Announcement { get; set; }
/// <summary>
/// 门店标签(逗号分隔)。
/// </summary>
public string? Tags { get; set; }
/// <summary>
/// 门店海报。
/// </summary>
public string? CoverImageUrl { get; set; }
}

View File

@@ -0,0 +1,45 @@
using TakeoutSaaS.Domain.Stores.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 门店营业时段配置。
/// </summary>
public sealed class StoreBusinessHour : MultiTenantEntityBase
{
/// <summary>
/// 门店标识。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 星期几0 表示周日。
/// </summary>
public DayOfWeek DayOfWeek { get; set; }
/// <summary>
/// 时段类型(正常营业、休息、预约等)。
/// </summary>
public BusinessHourType HourType { get; set; } = BusinessHourType.Normal;
/// <summary>
/// 开始时间(本地时间)。
/// </summary>
public TimeSpan StartTime { get; set; }
/// <summary>
/// 结束时间(本地时间)。
/// </summary>
public TimeSpan EndTime { get; set; }
/// <summary>
/// 最大接待容量或单量限制。
/// </summary>
public int? CapacityLimit { get; set; }
/// <summary>
/// 备注。
/// </summary>
public string? Notes { get; set; }
}

View File

@@ -0,0 +1,39 @@
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 门店配送范围配置。
/// </summary>
public sealed class StoreDeliveryZone : MultiTenantEntityBase
{
/// <summary>
/// 门店标识。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 区域名称。
/// </summary>
public string ZoneName { get; set; } = string.Empty;
/// <summary>
/// GeoJSON 表示的多边形范围。
/// </summary>
public string PolygonGeoJson { get; set; } = string.Empty;
/// <summary>
/// 起送价。
/// </summary>
public decimal? MinimumOrderAmount { get; set; }
/// <summary>
/// 配送费。
/// </summary>
public decimal? DeliveryFee { get; set; }
/// <summary>
/// 预计送达分钟。
/// </summary>
public int? EstimatedMinutes { get; set; }
}

View File

@@ -0,0 +1,45 @@
using TakeoutSaaS.Domain.Merchants.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 门店员工排班记录。
/// </summary>
public sealed class StoreEmployeeShift : MultiTenantEntityBase
{
/// <summary>
/// 门店标识。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 员工标识。
/// </summary>
public Guid StaffId { get; set; }
/// <summary>
/// 班次日期。
/// </summary>
public DateTime ShiftDate { get; set; }
/// <summary>
/// 开始时间。
/// </summary>
public TimeSpan StartTime { get; set; }
/// <summary>
/// 结束时间。
/// </summary>
public TimeSpan EndTime { get; set; }
/// <summary>
/// 排班角色。
/// </summary>
public StaffRoleType RoleType { get; set; } = StaffRoleType.FrontDesk;
/// <summary>
/// 备注。
/// </summary>
public string? Notes { get; set; }
}

View File

@@ -0,0 +1,29 @@
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 门店休息日或特殊营业日。
/// </summary>
public sealed class StoreHoliday : MultiTenantEntityBase
{
/// <summary>
/// 门店标识。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 日期。
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// 是否全天闭店。
/// </summary>
public bool IsClosed { get; set; } = true;
/// <summary>
/// 说明内容。
/// </summary>
public string? Reason { get; set; }
}

View File

@@ -0,0 +1,45 @@
using TakeoutSaaS.Domain.Stores.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 桌台信息与二维码绑定。
/// </summary>
public sealed class StoreTable : MultiTenantEntityBase
{
/// <summary>
/// 门店标识。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 所在区域 ID。
/// </summary>
public Guid? AreaId { get; set; }
/// <summary>
/// 桌码。
/// </summary>
public string TableCode { get; set; } = string.Empty;
/// <summary>
/// 可容纳人数。
/// </summary>
public int Capacity { get; set; }
/// <summary>
/// 桌台标签(堂食、快餐等)。
/// </summary>
public string? Tags { get; set; }
/// <summary>
/// 当前桌台状态。
/// </summary>
public StoreTableStatus Status { get; set; } = StoreTableStatus.Idle;
/// <summary>
/// 桌码二维码地址。
/// </summary>
public string? QrCodeUrl { get; set; }
}

View File

@@ -0,0 +1,24 @@
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Stores.Entities;
/// <summary>
/// 门店桌台区域配置。
/// </summary>
public sealed class StoreTableArea : MultiTenantEntityBase
{
/// <summary>
/// 门店标识。
/// </summary>
public Guid StoreId { get; set; }
/// <summary>
/// 区域名称。
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 区域描述。
/// </summary>
public string? Description { get; set; }
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.Stores.Enums;
/// <summary>
/// 营业时段类型。
/// </summary>
public enum BusinessHourType
{
/// <summary>
/// 正常营业时段。
/// </summary>
Normal = 0,
/// <summary>
/// 预留给预约的时段。
/// </summary>
ReservationOnly = 1,
/// <summary>
/// 仅自提或配送的时段。
/// </summary>
PickupOrDelivery = 2,
/// <summary>
/// 休息时段。
/// </summary>
Closed = 3
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.Stores.Enums;
/// <summary>
/// 门店运营状态。
/// </summary>
public enum StoreStatus
{
/// <summary>
/// 未开业或休眠。
/// </summary>
Closed = 0,
/// <summary>
/// 准备营业。
/// </summary>
Preparing = 1,
/// <summary>
/// 正常营业中。
/// </summary>
Operating = 2,
/// <summary>
/// 暂停营业。
/// </summary>
Suspended = 3
}

View File

@@ -0,0 +1,27 @@
namespace TakeoutSaaS.Domain.Stores.Enums;
/// <summary>
/// 桌台占用状态。
/// </summary>
public enum StoreTableStatus
{
/// <summary>
/// 空闲可用。
/// </summary>
Idle = 0,
/// <summary>
/// 已被占用。
/// </summary>
Occupied = 1,
/// <summary>
/// 正在清理。
/// </summary>
Cleaning = 2,
/// <summary>
/// 暂停使用。
/// </summary>
Disabled = 3
}