namespace Oms.Domain.OrdersAggregate.Consts;
///
/// 代发订单客户可见进度(由绑定状态 + 包裹生命周期聚合)。
///
public static class FulfillmentProgressCodes
{
/// 待绑定包裹/库存。
public const string PendingBind = "pendingBind";
/// 国内快递在途,未到仓。
public const string DomesticInTransit = "domesticInTransit";
/// 已到仓(或库存已就绪),待仓库拣货。
public const string ArrivedPendingPick = "arrivedPendingPick";
/// 已确认拣货扣减(出库完成)。
public const string OutboundDone = "outboundDone";
public static readonly HashSet All = new(StringComparer.OrdinalIgnoreCase)
{
PendingBind,
DomesticInTransit,
ArrivedPendingPick,
OutboundDone
};
///
/// 非仓内代发返回 null;否则按绑定与包裹状态合成进度码。
///
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;
}
}