feat: 新增加料管理接口与模板能力
All checks were successful
Build and Deploy TenantApi / build-and-deploy (push) Successful in 43s

This commit is contained in:
2026-02-21 08:44:26 +08:00
parent 848778b8b5
commit 93bc072b8d
27 changed files with 1605 additions and 6 deletions

View File

@@ -18,6 +18,11 @@ public sealed class ProductSpecTemplate : MultiTenantEntityBase
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 模板描述。
/// </summary>
public string Description { get; set; } = string.Empty;
/// <summary>
/// 模板类型。
/// </summary>
@@ -33,6 +38,16 @@ public sealed class ProductSpecTemplate : MultiTenantEntityBase
/// </summary>
public bool IsRequired { get; set; } = true;
/// <summary>
/// 最小可选数。
/// </summary>
public int MinSelect { get; set; }
/// <summary>
/// 最大可选数。
/// </summary>
public int MaxSelect { get; set; } = 1;
/// <summary>
/// 排序值。
/// </summary>

View File

@@ -22,6 +22,16 @@ public sealed class ProductSpecTemplateOption : MultiTenantEntityBase
/// </summary>
public decimal ExtraPrice { get; set; }
/// <summary>
/// 库存数量。
/// </summary>
public int Stock { get; set; } = 999;
/// <summary>
/// 是否启用。
/// </summary>
public bool IsEnabled { get; set; } = true;
/// <summary>
/// 排序值。
/// </summary>

View File

@@ -13,5 +13,10 @@ public enum ProductSpecTemplateType
/// <summary>
/// 做法模板。
/// </summary>
Method = 1
Method = 1,
/// <summary>
/// 加料模板。
/// </summary>
Addon = 2
}

View File

@@ -48,16 +48,31 @@ public interface IProductRepository
/// </summary>
Task<IReadOnlyList<ProductSpecTemplate>> GetSpecTemplatesByStoreAsync(long tenantId, long storeId, CancellationToken cancellationToken = default);
/// <summary>
/// 按门店读取加料模板。
/// </summary>
Task<IReadOnlyList<ProductSpecTemplate>> GetAddonTemplatesByStoreAsync(long tenantId, long storeId, CancellationToken cancellationToken = default);
/// <summary>
/// 依据标识读取规格做法模板。
/// </summary>
Task<ProductSpecTemplate?> FindSpecTemplateByIdAsync(long templateId, long tenantId, CancellationToken cancellationToken = default);
/// <summary>
/// 依据标识读取加料模板。
/// </summary>
Task<ProductSpecTemplate?> FindAddonTemplateByIdAsync(long templateId, long tenantId, CancellationToken cancellationToken = default);
/// <summary>
/// 判断门店内模板名称是否已存在。
/// </summary>
Task<bool> ExistsSpecTemplateNameAsync(long tenantId, long storeId, string name, long? excludeTemplateId = null, CancellationToken cancellationToken = default);
/// <summary>
/// 判断门店内加料模板名称是否已存在。
/// </summary>
Task<bool> ExistsAddonTemplateNameAsync(long tenantId, long storeId, string name, long? excludeTemplateId = null, CancellationToken cancellationToken = default);
/// <summary>
/// 按模板读取规格做法选项。
/// </summary>