feat: 商品SKU支持异步保存与软禁用替换策略
All checks were successful
Build and Deploy TenantApi / build-and-deploy (push) Successful in 56s

This commit is contained in:
2026-02-25 09:23:15 +08:00
parent c2a6cf7b1e
commit 5fcc1e1484
14 changed files with 9897 additions and 100 deletions

View File

@@ -0,0 +1,70 @@
using TakeoutSaaS.Domain.Products.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Products.Entities;
/// <summary>
/// 商品 SKU 异步保存任务。
/// </summary>
public sealed class ProductSkuSaveJob : MultiTenantEntityBase
{
/// <summary>
/// 所属门店 ID。
/// </summary>
public long StoreId { get; set; }
/// <summary>
/// 所属商品 ID。
/// </summary>
public long ProductId { get; set; }
/// <summary>
/// 任务状态。
/// </summary>
public ProductSkuSaveJobStatus Status { get; set; } = ProductSkuSaveJobStatus.Queued;
/// <summary>
/// 任务模式(当前固定 replace
/// </summary>
public string Mode { get; set; } = "replace";
/// <summary>
/// 任务请求负载 JSON 快照。
/// </summary>
public string PayloadJson { get; set; } = string.Empty;
/// <summary>
/// 总处理数。
/// </summary>
public int ProgressTotal { get; set; }
/// <summary>
/// 已处理数。
/// </summary>
public int ProgressProcessed { get; set; }
/// <summary>
/// 失败条数。
/// </summary>
public int FailedCount { get; set; }
/// <summary>
/// 失败摘要。
/// </summary>
public string? ErrorMessage { get; set; }
/// <summary>
/// Hangfire 任务 ID。
/// </summary>
public string? HangfireJobId { get; set; }
/// <summary>
/// 开始执行时间UTC
/// </summary>
public DateTime? StartedAt { get; set; }
/// <summary>
/// 完成时间UTC
/// </summary>
public DateTime? FinishedAt { get; set; }
}

View File

@@ -0,0 +1,32 @@
namespace TakeoutSaaS.Domain.Products.Enums;
/// <summary>
/// 商品 SKU 异步保存任务状态。
/// </summary>
public enum ProductSkuSaveJobStatus
{
/// <summary>
/// 已排队。
/// </summary>
Queued = 0,
/// <summary>
/// 执行中。
/// </summary>
Running = 1,
/// <summary>
/// 已成功。
/// </summary>
Succeeded = 2,
/// <summary>
/// 执行失败。
/// </summary>
Failed = 3,
/// <summary>
/// 已取消。
/// </summary>
Canceled = 4,
}