手动阀

This commit is contained in:
2026-04-06 22:08:38 +08:00
parent 0b150470be
commit 71e099ca8e
9 changed files with 920 additions and 6 deletions

View File

@@ -0,0 +1,120 @@
namespace OrpaonVision.Core.Training.Contracts;
/// <summary>
/// 规则快照包校验结果。
/// </summary>
public sealed class RuleSnapshotValidationResultDto
{
/// <summary>
/// 是否通过校验。
/// </summary>
public bool IsValid { get; init; }
/// <summary>
/// 校验错误信息。
/// </summary>
public string[] Errors { get; init; } = Array.Empty<string>();
/// <summary>
/// 校验警告信息。
/// </summary>
public string[] Warnings { get; init; } = Array.Empty<string>();
/// <summary>
/// 层顺序校验结果。
/// </summary>
public LayerOrderValidationResultDto LayerOrderValidation { get; init; } = new();
/// <summary>
/// 部件编码唯一性校验结果。
/// </summary>
public PartCodeUniquenessValidationResultDto PartCodeUniquenessValidation { get; init; } = new();
/// <summary>
/// Schema合法性校验结果。
/// </summary>
public SchemaValidationResultDto SchemaValidation { get; init; } = new();
}
/// <summary>
/// 层顺序校验结果。
/// </summary>
public sealed class LayerOrderValidationResultDto
{
/// <summary>
/// 是否通过校验。
/// </summary>
public bool IsValid { get; init; }
/// <summary>
/// 错误信息。
/// </summary>
public string[] Errors { get; init; } = Array.Empty<string>();
/// <summary>
/// 实际层顺序。
/// </summary>
public string[] ActualLayerOrder { get; init; } = Array.Empty<string>();
/// <summary>
/// 期望层顺序。
/// </summary>
public string[] ExpectedLayerOrder { get; init; } = Array.Empty<string>();
}
/// <summary>
/// 部件编码唯一性校验结果。
/// </summary>
public sealed class PartCodeUniquenessValidationResultDto
{
/// <summary>
/// 是否通过校验。
/// </summary>
public bool IsValid { get; init; }
/// <summary>
/// 错误信息。
/// </summary>
public string[] Errors { get; init; } = Array.Empty<string>();
/// <summary>
/// 重复的部件编码。
/// </summary>
public string[] DuplicatePartCodes { get; init; } = Array.Empty<string>();
/// <summary>
/// 所有部件编码。
/// </summary>
public string[] AllPartCodes { get; init; } = Array.Empty<string>();
}
/// <summary>
/// Schema合法性校验结果。
/// </summary>
public sealed class SchemaValidationResultDto
{
/// <summary>
/// 是否通过校验。
/// </summary>
public bool IsValid { get; init; }
/// <summary>
/// 错误信息。
/// </summary>
public string[] Errors { get; init; } = Array.Empty<string>();
/// <summary>
/// 警告信息。
/// </summary>
public string[] Warnings { get; init; } = Array.Empty<string>();
/// <summary>
/// Schema版本。
/// </summary>
public string SchemaVersion { get; init; } = string.Empty;
/// <summary>
/// 校验的文件路径。
/// </summary>
public string[] ValidatedFiles { get; init; } = Array.Empty<string>();
}

View File

@@ -0,0 +1,52 @@
using OrpaonVision.Core.Results;
using OrpaonVision.Core.Training.Contracts;
namespace OrpaonVision.Core.Training;
/// <summary>
/// 规则校验服务接口。
/// </summary>
public interface IRuleValidationService
{
/// <summary>
/// 校验规则快照包。
/// </summary>
/// <param name="packagePath">包路径。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>校验结果。</returns>
Task<Result<RuleSnapshotValidationResultDto>> ValidateRuleSnapshotPackageAsync(
string packagePath,
CancellationToken cancellationToken = default);
/// <summary>
/// 校验层顺序。
/// </summary>
/// <param name="layerOrderData">层顺序数据。</param>
/// <param name="expectedOrder">期望的层顺序。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>校验结果。</returns>
Task<Result<LayerOrderValidationResultDto>> ValidateLayerOrderAsync(
string[] layerOrderData,
string[] expectedOrder,
CancellationToken cancellationToken = default);
/// <summary>
/// 校验部件编码唯一性。
/// </summary>
/// <param name="partCodes">部件编码列表。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>校验结果。</returns>
Task<Result<PartCodeUniquenessValidationResultDto>> ValidatePartCodeUniquenessAsync(
string[] partCodes,
CancellationToken cancellationToken = default);
/// <summary>
/// 校验Schema合法性。
/// </summary>
/// <param name="schemaFiles">Schema文件路径列表。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>校验结果。</returns>
Task<Result<SchemaValidationResultDto>> ValidateSchemaAsync(
string[] schemaFiles,
CancellationToken cancellationToken = default);
}