ProcessStep.cs 2.11 KB
namespace RobotProductionSystem.Api.Domain;

public enum ProcessStep
{
    Unknown = 0,
    Assembly = 1,
    Debug = 2,
    Testing = 3,
    FinalInspection = 4,
    Rework = 5,
    Warehousing = 6
}

public static class ProcessStepMapper
{
    public static readonly ProcessStep[] SupportedSteps =
    [
        ProcessStep.Assembly,
        ProcessStep.Debug,
        ProcessStep.Testing,
        ProcessStep.FinalInspection,
        ProcessStep.Rework,
        ProcessStep.Warehousing
    ];

    public static bool TryParse(string? value, out ProcessStep step)
    {
        var text = value?.Trim();
        if (string.IsNullOrWhiteSpace(text))
        {
            step = default;
            return false;
        }

        var normalized = text.ToLowerInvariant();
        step = normalized switch
        {
            "装配" or "assembly" => ProcessStep.Assembly,
            "调试" or "debug" => ProcessStep.Debug,
            "测试" or "test" or "testing" => ProcessStep.Testing,
            "终检" or "final_inspection" or "final-inspection" or "finalinspection" => ProcessStep.FinalInspection,
            "返修" or "rework" => ProcessStep.Rework,
            "入库" or "warehousing" or "warehouse" => ProcessStep.Warehousing,
            _ => default
        };

        return step != ProcessStep.Unknown;
    }

    public static string ToApiValue(ProcessStep step) => step switch
    {
        ProcessStep.Assembly => "装配",
        ProcessStep.Debug => "调试",
        ProcessStep.Testing => "测试",
        ProcessStep.FinalInspection => "终检",
        ProcessStep.Rework => "返修",
        ProcessStep.Warehousing => "入库",
        _ => "未知"
    };

    public static bool MatchesFilter(ProcessStep step, string? keyword)
    {
        var trimmed = keyword?.Trim();
        if (string.IsNullOrWhiteSpace(trimmed))
        {
            return true;
        }

        var filter = trimmed.ToLowerInvariant();
        var apiValue = ToApiValue(step).ToLowerInvariant();
        var enumValue = step.ToString().ToLowerInvariant();
        return apiValue.Contains(filter) || enumValue.Contains(filter);
    }
}