| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- using System.Text.Json;
- namespace Admin.NET.Plugin.AiDOP.Service.S8.Rules;
- /// <summary>
- /// R2 TIMEOUT 类规则 params_json 解析结果。internal 可见,供测试覆盖。
- /// 字段缺失或非法 JSON:调用方负责降级(evaluator 静默返空命中),不在此抛出业务异常。
- /// </summary>
- internal sealed class S8TimeoutParams
- {
- public string? DueAtField { get; set; }
- public string? StatusField { get; set; }
- public List<string> CompletedStates { get; } = new();
- public string? ObjectCodeField { get; set; }
- public string? ObjectIdField { get; set; }
- public int GraceMinutes { get; set; }
- public string? ExceptionTypeCode { get; set; }
- /// <summary>解析 params_json;非法 JSON 抛 <see cref="JsonException"/>,由上游捕获。</summary>
- public static S8TimeoutParams Parse(string json)
- {
- using var doc = JsonDocument.Parse(json);
- var root = doc.RootElement;
- var p = new S8TimeoutParams();
- if (root.TryGetProperty("dueAtField", out var v1)) p.DueAtField = v1.GetString();
- if (root.TryGetProperty("statusField", out var v2)) p.StatusField = v2.GetString();
- if (root.TryGetProperty("objectCodeField", out var v3)) p.ObjectCodeField = v3.GetString();
- if (root.TryGetProperty("objectIdField", out var v4)) p.ObjectIdField = v4.GetString();
- if (root.TryGetProperty("graceMinutes", out var v5) && v5.ValueKind == JsonValueKind.Number) p.GraceMinutes = v5.GetInt32();
- if (root.TryGetProperty("exceptionTypeCode", out var v6)) p.ExceptionTypeCode = v6.GetString();
- if (root.TryGetProperty("completedStates", out var v7) && v7.ValueKind == JsonValueKind.Array)
- {
- foreach (var s in v7.EnumerateArray())
- {
- var str = s.GetString();
- if (!string.IsNullOrWhiteSpace(str)) p.CompletedStates.Add(str!);
- }
- }
- return p;
- }
- }
|