版本260406

This commit is contained in:
2026-04-06 22:04:05 +08:00
parent 7dc5e73af7
commit 0b150470be
216 changed files with 98993 additions and 33 deletions

View File

@@ -0,0 +1,85 @@
using OrpaonVision.Core.Results;
using OrpaonVision.Core.Validation;
namespace OrpaonVision.Core.Validation;
/// <summary>
/// JSON Schema验证服务接口。
/// </summary>
public interface IJsonSchemaValidator
{
/// <summary>
/// 验证JSON字符串是否符合指定Schema。
/// </summary>
/// <param name="jsonString">要验证的JSON字符串。</param>
/// <param name="schemaType">Schema类型。</param>
/// <param name="schemaVersion">Schema版本。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>验证结果。</returns>
Task<Result<JsonSchemaValidationResult>> ValidateAsync(string jsonString, string schemaType, string schemaVersion = "1.0", CancellationToken cancellationToken = default);
/// <summary>
/// 验证配置快照JSON。
/// </summary>
/// <param name="snapshotJson">快照JSON字符串。</param>
/// <param name="snapshotType">快照类型。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>验证结果。</returns>
Task<Result<JsonSchemaValidationResult>> ValidateSnapshotAsync(string snapshotJson, string snapshotType, CancellationToken cancellationToken = default);
/// <summary>
/// 验证规则配置JSON。
/// </summary>
/// <param name="ruleJson">规则JSON字符串。</param>
/// <param name="ruleType">规则类型。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>验证结果。</returns>
Task<Result<JsonSchemaValidationResult>> ValidateRuleAsync(string ruleJson, string ruleType, CancellationToken cancellationToken = default);
/// <summary>
/// 验证推理结果JSON。
/// </summary>
/// <param name="inferenceJson">推理结果JSON字符串。</param>
/// <param name="modelType">模型类型。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>验证结果。</returns>
Task<Result<JsonSchemaValidationResult>> ValidateInferenceResultAsync(string inferenceJson, string modelType, CancellationToken cancellationToken = default);
/// <summary>
/// 获取支持的Schema类型列表。
/// </summary>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>Schema类型列表。</returns>
Task<Result<IReadOnlyList<string>>> GetSupportedSchemaTypesAsync(CancellationToken cancellationToken = default);
/// <summary>
/// 获取Schema定义。
/// </summary>
/// <param name="schemaType">Schema类型。</param>
/// <param name="schemaVersion">Schema版本。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>Schema定义。</returns>
Task<Result<string>> GetSchemaAsync(string schemaType, string schemaVersion = "1.0", CancellationToken cancellationToken = default);
/// <summary>
/// 验证并转换JSON为强类型对象。
/// </summary>
/// <typeparam name="T">目标类型。</typeparam>
/// <param name="jsonString">JSON字符串。</param>
/// <param name="schemaType">Schema类型。</param>
/// <param name="schemaVersion">Schema版本。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>转换结果。</returns>
Task<Result<T>> ValidateAndDeserializeAsync<T>(string jsonString, string schemaType, string schemaVersion = "1.0", CancellationToken cancellationToken = default) where T : class;
/// <summary>
/// 验证强类型对象并序列化为JSON。
/// </summary>
/// <typeparam name="T">源类型。</typeparam>
/// <param name="obj">要验证的对象。</param>
/// <param name="schemaType">Schema类型。</param>
/// <param name="schemaVersion">Schema版本。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>序列化结果。</returns>
Task<Result<string>> ValidateAndSerializeAsync<T>(T obj, string schemaType, string schemaVersion = "1.0", CancellationToken cancellationToken = default) where T : class;
}

View File

@@ -0,0 +1,205 @@
namespace OrpaonVision.Core.Validation;
/// <summary>
/// JSON Schema类型常量。
/// </summary>
public static class JsonSchemaTypes
{
/// <summary>
/// 机种配置快照Schema。
/// </summary>
public const string ProductTypeSnapshot = "ProductTypeSnapshot";
/// <summary>
/// 规则配置快照Schema。
/// </summary>
public const string RuleConfigurationSnapshot = "RuleConfigurationSnapshot";
/// <summary>
/// 层级配置Schema。
/// </summary>
public const string LayerConfiguration = "LayerConfiguration";
/// <summary>
/// 部件配置Schema。
/// </summary>
public const string PartConfiguration = "PartConfiguration";
/// <summary>
/// ROI配置Schema。
/// </summary>
public const string RoiConfiguration = "RoiConfiguration";
/// <summary>
/// 推理结果Schema。
/// </summary>
public const string InferenceResult = "InferenceResult";
/// <summary>
/// 检测结果Schema。
/// </summary>
public const string DetectionResult = "DetectionResult";
/// <summary>
/// 运行状态Schema。
/// </summary>
public const string RuntimeState = "RuntimeState";
/// <summary>
/// 产品会话Schema。
/// </summary>
public const string ProductSession = "ProductSession";
/// <summary>
/// 异常记录Schema。
/// </summary>
public const string AbnormalRecord = "AbnormalRecord";
/// <summary>
/// 训练任务Schema。
/// </summary>
public const string TrainingJob = "TrainingJob";
/// <summary>
/// 数据集版本Schema。
/// </summary>
public const string DatasetVersion = "DatasetVersion";
/// <summary>
/// 模型包Schema。
/// </summary>
public const string ModelPackage = "ModelPackage";
/// <summary>
/// 用户配置Schema。
/// </summary>
public const string UserConfiguration = "UserConfiguration";
/// <summary>
/// 审计日志Schema。
/// </summary>
public const string AuditLog = "AuditLog";
}
/// <summary>
/// JSON Schema版本常量。
/// </summary>
public static class JsonSchemaVersions
{
/// <summary>
/// 当前版本。
/// </summary>
public const string Current = "1.0";
/// <summary>
/// 初始版本。
/// </summary>
public const string V1_0 = "1.0";
/// <summary>
/// 向后兼容的最低版本。
/// </summary>
public const string MinimumCompatible = "1.0";
}
/// <summary>
/// JSON Schema验证错误代码。
/// </summary>
public static class JsonSchemaErrorCodes
{
/// <summary>
/// JSON格式错误。
/// </summary>
public const string InvalidJsonFormat = "INVALID_JSON_FORMAT";
/// <summary>
/// Schema版本不支持。
/// </summary>
public const string UnsupportedSchemaVersion = "UNSUPPORTED_SCHEMA_VERSION";
/// <summary>
/// 必需字段缺失。
/// </summary>
public const string RequiredFieldMissing = "REQUIRED_FIELD_MISSING";
/// <summary>
/// 字段类型不匹配。
/// </summary>
public const string FieldTypeMismatch = "FIELD_TYPE_MISMATCH";
/// <summary>
/// 字段值超出范围。
/// </summary>
public const string FieldValueOutOfRange = "FIELD_VALUE_OUT_OF_RANGE";
/// <summary>
/// 枚举值无效。
/// </summary>
public const string InvalidEnumValue = "INVALID_ENUM_VALUE";
/// <summary>
/// 数组长度超出限制。
/// </summary>
public const string ArrayLengthExceeded = "ARRAY_LENGTH_EXCEEDED";
/// <summary>
/// 字符串长度超出限制。
/// </summary>
public const string StringLengthExceeded = "STRING_LENGTH_EXCEEDED";
/// <summary>
/// 引用对象不存在。
/// </summary>
public const string ReferenceNotFound = "REFERENCE_NOT_FOUND";
/// <summary>
/// 循环引用。
/// </summary>
public const string CircularReference = "CIRCULAR_REFERENCE";
/// <summary>
/// 依赖字段缺失。
/// </summary>
public const string DependencyFieldMissing = "DEPENDENCY_FIELD_MISSING";
/// <summary>
/// 条件验证失败。
/// </summary>
public const string ConditionalValidationFailed = "CONDITIONAL_VALIDATION_FAILED";
}
/// <summary>
/// JSON Schema验证警告代码。
/// </summary>
public static class JsonSchemaWarningCodes
{
/// <summary>
/// 使用了已弃用的字段。
/// </summary>
public const string DeprecatedFieldUsed = "DEPRECATED_FIELD_USED";
/// <summary>
/// 字段值为默认值。
/// </summary>
public const string FieldUsingDefaultValue = "FIELD_USING_DEFAULT_VALUE";
/// <summary>
/// 可选字段未提供。
/// </summary>
public const string OptionalFieldNotProvided = "OPTIONAL_FIELD_NOT_PROVIDED";
/// <summary>
/// 字段值可能不是最优的。
/// </summary>
public const string SuboptimalFieldValue = "SUBOPTIMAL_FIELD_VALUE";
/// <summary>
/// 性能警告。
/// </summary>
public const string PerformanceWarning = "PERFORMANCE_WARNING";
/// <summary>
/// 安全警告。
/// </summary>
public const string SecurityWarning = "SECURITY_WARNING";
}

View File

@@ -0,0 +1,109 @@
namespace OrpaonVision.Core.Validation;
/// <summary>
/// JSON Schema验证结果。
/// </summary>
public sealed class JsonSchemaValidationResult
{
/// <summary>
/// 是否验证通过。
/// </summary>
public bool IsValid { get; init; }
/// <summary>
/// 验证错误列表。
/// </summary>
public IReadOnlyList<JsonSchemaValidationError> Errors { get; init; } = [];
/// <summary>
/// 警告列表。
/// </summary>
public IReadOnlyList<JsonSchemaValidationWarning> Warnings { get; init; } = [];
/// <summary>
/// 验证耗时(毫秒)。
/// </summary>
public long ValidationTimeMs { get; init; }
/// <summary>
/// Schema版本。
/// </summary>
public string SchemaVersion { get; init; } = string.Empty;
/// <summary>
/// 验证时间UTC
/// </summary>
public DateTime ValidatedAtUtc { get; init; } = DateTime.UtcNow;
}
/// <summary>
/// JSON Schema验证错误。
/// </summary>
public sealed class JsonSchemaValidationError
{
/// <summary>
/// 错误代码。
/// </summary>
public string Code { get; init; } = string.Empty;
/// <summary>
/// 错误消息。
/// </summary>
public string Message { get; init; } = string.Empty;
/// <summary>
/// 错误路径。
/// </summary>
public string Path { get; init; } = string.Empty;
/// <summary>
/// 错误严重程度。
/// </summary>
public string Severity { get; init; } = string.Empty;
/// <summary>
/// 期望值。
/// </summary>
public string? ExpectedValue { get; init; }
/// <summary>
/// 实际值。
/// </summary>
public string? ActualValue { get; init; }
/// <summary>
/// 修复建议。
/// </summary>
public string? Suggestion { get; init; }
}
/// <summary>
/// JSON Schema验证警告。
/// </summary>
public sealed class JsonSchemaValidationWarning
{
/// <summary>
/// 警告代码。
/// </summary>
public string Code { get; init; } = string.Empty;
/// <summary>
/// 警告消息。
/// </summary>
public string Message { get; init; } = string.Empty;
/// <summary>
/// 警告路径。
/// </summary>
public string Path { get; init; } = string.Empty;
/// <summary>
/// 警告级别。
/// </summary>
public string Level { get; init; } = string.Empty;
/// <summary>
/// 建议操作。
/// </summary>
public string? Recommendation { get; init; }
}