EmployeePositionRules.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. namespace Admin.NET.Plugin.AiDOP.DataPlatform;
  2. /// <summary>
  3. /// 岗位原文 → 中立岗位码。精确值优先于关键字。未命中为 UNKNOWN,不计入在职分母。
  4. /// </summary>
  5. public static class EmployeePositionRules
  6. {
  7. public const string Warehouse = "WAREHOUSE";
  8. public const string Production = "PRODUCTION";
  9. public const string Planner = "PLANNER";
  10. public const string Other = "OTHER";
  11. public const string Unknown = "UNKNOWN";
  12. public static readonly string[] WarehouseKeywords = ["仓", "库管", "保管", "物料员", "WMS"];
  13. public static readonly string[] ProductionKeywords = ["生产", "操作", "装配", "车间", "班组", "产线", "工段"];
  14. public static readonly string[] PlannerKeywords = ["计划", "PMC", "调度"];
  15. /// <summary>T8 gw 原值精确匹配,优先于关键字。</summary>
  16. public static readonly IReadOnlyDictionary<string, string> Exact = new Dictionary<string, string>(StringComparer.Ordinal)
  17. {
  18. ["计划"] = Planner,
  19. ["仓管"] = Warehouse,
  20. ["生产"] = Production
  21. };
  22. public static string Classify(string? raw)
  23. {
  24. if (string.IsNullOrWhiteSpace(raw))
  25. return Unknown;
  26. var text = raw.Trim();
  27. if (Exact.TryGetValue(text, out var exact))
  28. return exact;
  29. if (WarehouseKeywords.Any(text.Contains))
  30. return Warehouse;
  31. if (ProductionKeywords.Any(text.Contains))
  32. return Production;
  33. if (PlannerKeywords.Any(text.Contains))
  34. return Planner;
  35. return Unknown;
  36. }
  37. }