S8TimeoutParams.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System.Text.Json;
  2. namespace Admin.NET.Plugin.AiDOP.Service.S8.Rules;
  3. /// <summary>
  4. /// R2 TIMEOUT 类规则 params_json 解析结果。internal 可见,供测试覆盖。
  5. /// 字段缺失或非法 JSON:调用方负责降级(evaluator 静默返空命中),不在此抛出业务异常。
  6. /// </summary>
  7. internal sealed class S8TimeoutParams
  8. {
  9. public string? DueAtField { get; set; }
  10. public string? StatusField { get; set; }
  11. public List<string> CompletedStates { get; } = new();
  12. public string? ObjectCodeField { get; set; }
  13. public string? ObjectIdField { get; set; }
  14. public int GraceMinutes { get; set; }
  15. public string? ExceptionTypeCode { get; set; }
  16. /// <summary>解析 params_json;非法 JSON 抛 <see cref="JsonException"/>,由上游捕获。</summary>
  17. public static S8TimeoutParams Parse(string json)
  18. {
  19. using var doc = JsonDocument.Parse(json);
  20. var root = doc.RootElement;
  21. var p = new S8TimeoutParams();
  22. if (root.TryGetProperty("dueAtField", out var v1)) p.DueAtField = v1.GetString();
  23. if (root.TryGetProperty("statusField", out var v2)) p.StatusField = v2.GetString();
  24. if (root.TryGetProperty("objectCodeField", out var v3)) p.ObjectCodeField = v3.GetString();
  25. if (root.TryGetProperty("objectIdField", out var v4)) p.ObjectIdField = v4.GetString();
  26. if (root.TryGetProperty("graceMinutes", out var v5) && v5.ValueKind == JsonValueKind.Number) p.GraceMinutes = v5.GetInt32();
  27. if (root.TryGetProperty("exceptionTypeCode", out var v6)) p.ExceptionTypeCode = v6.GetString();
  28. if (root.TryGetProperty("completedStates", out var v7) && v7.ValueKind == JsonValueKind.Array)
  29. {
  30. foreach (var s in v7.EnumerateArray())
  31. {
  32. var str = s.GetString();
  33. if (!string.IsNullOrWhiteSpace(str)) p.CompletedStates.Add(str!);
  34. }
  35. }
  36. return p;
  37. }
  38. }