S8IssueLedgerStates.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. namespace Admin.NET.Plugin.AiDOP.Infrastructure.S8;
  2. /// <summary>
  3. /// G-06 最小问题台账三档状态短码 ↔ 主链状态集合的静态映射。
  4. /// 口径来源《G-06 最小问题台账》§五;不落库、不可配置、不支持运行期追加;
  5. /// 短码白名单固定为 discovered / processing / closed,留空视为全量;
  6. /// hold / suspend / pending / all 等一律视为非法参数。
  7. /// </summary>
  8. public static class S8IssueLedgerStates
  9. {
  10. /// <summary>台账状态短码:已登记但尚未被接单。</summary>
  11. public const string Discovered = "discovered";
  12. /// <summary>台账状态短码:已进入处置链路。</summary>
  13. public const string Processing = "processing";
  14. /// <summary>台账状态短码:终局(CLOSED / REJECTED)。</summary>
  15. public const string Closed = "closed";
  16. /// <summary>短码 → 主链状态集合。挂起不存在,hold / suspend / pending 均视为非法参数。</summary>
  17. private static readonly IReadOnlyDictionary<string, IReadOnlyList<string>> ShortCodeToStatuses =
  18. new Dictionary<string, IReadOnlyList<string>>(StringComparer.Ordinal)
  19. {
  20. [Discovered] = new[] { "NEW" },
  21. [Processing] = new[] { "ASSIGNED", "IN_PROGRESS", "PENDING_VERIFICATION", "ESCALATED", "RESOLVED" },
  22. [Closed] = new[] { "CLOSED", "REJECTED" }
  23. };
  24. /// <summary>由主链状态解析台账短码;未归类返回 null。</summary>
  25. public static string? TryGetShortCode(string? status)
  26. {
  27. if (string.IsNullOrWhiteSpace(status)) return null;
  28. return status switch
  29. {
  30. "NEW" => Discovered,
  31. "ASSIGNED" or "IN_PROGRESS" or "PENDING_VERIFICATION" or "ESCALATED" or "RESOLVED" => Processing,
  32. "CLOSED" or "REJECTED" => Closed,
  33. _ => null
  34. };
  35. }
  36. /// <summary>由台账短码获取对应主链状态集合;未知短码返回空集合。</summary>
  37. public static IReadOnlyList<string> GetStatuses(string? shortCode)
  38. {
  39. if (string.IsNullOrWhiteSpace(shortCode)) return Array.Empty<string>();
  40. return ShortCodeToStatuses.TryGetValue(shortCode, out var statuses)
  41. ? statuses
  42. : Array.Empty<string>();
  43. }
  44. /// <summary>三档短码对应的全部主链状态集合(便于查询层复用)。</summary>
  45. public static IReadOnlyList<string> AllStatuses { get; } = new[]
  46. {
  47. "NEW",
  48. "ASSIGNED", "IN_PROGRESS", "PENDING_VERIFICATION", "ESCALATED", "RESOLVED",
  49. "CLOSED", "REJECTED"
  50. };
  51. }