admin/src/Oms.Domain/OrdersAggregate/Consts/FulfillmentProgressCodes.cs
zzh 9d813a5f89 feat: 代发订单 FulfillmentType 与进度筛选、绑定拣货后端
支持 direct/warehouse 分轨、代发进度与库位排序、国内单号检索及到仓关联订单;扩展 SKU/店铺代发与库存绑定扣减能力。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 10:27:37 +08:00

57 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace Oms.Domain.OrdersAggregate.Consts;
/// <summary>
/// 代发订单客户可见进度(由绑定状态 + 包裹生命周期聚合)。
/// </summary>
public static class FulfillmentProgressCodes
{
/// <summary>待绑定包裹/库存。</summary>
public const string PendingBind = "pendingBind";
/// <summary>国内快递在途,未到仓。</summary>
public const string DomesticInTransit = "domesticInTransit";
/// <summary>已到仓(或库存已就绪),待仓库拣货。</summary>
public const string ArrivedPendingPick = "arrivedPendingPick";
/// <summary>已确认拣货扣减(出库完成)。</summary>
public const string OutboundDone = "outboundDone";
public static readonly HashSet<string> All = new(StringComparer.OrdinalIgnoreCase)
{
PendingBind,
DomesticInTransit,
ArrivedPendingPick,
OutboundDone
};
/// <summary>
/// 非仓内代发返回 null;否则按绑定与包裹状态合成进度码。
/// </summary>
public static string? Resolve(bool isWarehouseFulfill, string? bindStatus, int lineCount, bool hasInTransitParcel)
{
if (!isWarehouseFulfill)
{
return null;
}
var status = bindStatus?.Trim() ?? "none";
if (lineCount <= 0 || string.Equals(status, "none", StringComparison.OrdinalIgnoreCase))
{
return PendingBind;
}
if (string.Equals(status, OrderStockBindStatusCodes.Deducted, StringComparison.OrdinalIgnoreCase))
{
return OutboundDone;
}
if (hasInTransitParcel)
{
return DomesticInTransit;
}
return ArrivedPendingPick;
}
}