feat: 扩展领域模型与配置
This commit is contained in:
130
src/Domain/TakeoutSaaS.Domain/Stores/Entities/Store.cs
Normal file
130
src/Domain/TakeoutSaaS.Domain/Stores/Entities/Store.cs
Normal 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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
45
src/Domain/TakeoutSaaS.Domain/Stores/Entities/StoreTable.cs
Normal file
45
src/Domain/TakeoutSaaS.Domain/Stores/Entities/StoreTable.cs
Normal 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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
27
src/Domain/TakeoutSaaS.Domain/Stores/Enums/StoreStatus.cs
Normal file
27
src/Domain/TakeoutSaaS.Domain/Stores/Enums/StoreStatus.cs
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user