版本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,187 @@
namespace OrpaonVision.Core.Testing;
/// <summary>
/// 测试数据工厂。
/// </summary>
public static class TestDataFactory
{
/// <summary>
/// 创建测试用户。
/// </summary>
/// <param name="id">用户ID。</param>
/// <param name="userName">用户名。</param>
/// <param name="displayName">显示名称。</param>
/// <returns>测试用户。</returns>
public static Security.Contracts.UserDetailDto CreateUser(
Guid id = default,
string userName = "testuser",
string displayName = "Test User")
{
return new Security.Contracts.UserDetailDto
{
UserId = id == default ? Guid.NewGuid() : id,
UserName = userName,
DisplayName = displayName,
Email = $"{userName}@example.com",
Status = "Active",
IsActive = true,
Roles = ["Operator"],
Permissions = ["production.view", "training.view"],
CreatedAtUtc = DateTime.UtcNow.AddDays(-30),
LastLoginAtUtc = DateTime.UtcNow.AddHours(-2)
};
}
/// <summary>
/// 创建测试产品会话。
/// </summary>
/// <param name="id">会话ID。</param>
/// <returns>测试产品会话。</returns>
public static Production.Contracts.ProductSessionDetailDto CreateProductSession(
Guid id = default)
{
return new Production.Contracts.ProductSessionDetailDto
{
SessionId = id == default ? Guid.NewGuid() : id,
ProductSerialNumber = "PSN-001",
ProductTypeId = Guid.NewGuid(),
ProductTypeCode = "PT-A100",
ProductTypeName = "变频器 A100",
WorkstationId = Guid.NewGuid(),
WorkstationName = "Station-01",
OperatorName = "张三",
Shift = "白班",
StartedAtUtc = DateTime.UtcNow.AddMinutes(-30),
EndedAtUtc = DateTime.UtcNow.AddMinutes(-5),
TotalDurationSeconds = 1500,
FinalResult = "OK",
ModelVersion = "v1.0.0",
RuleVersion = "v1.0.0",
LayerResults = [],
AbnormalRecords = [],
KeyScreenshots = []
};
}
/// <summary>
/// 创建测试训练任务。
/// </summary>
/// <param name="id">任务ID。</param>
/// <param name="name">任务名称。</param>
/// <param name="status">状态。</param>
/// <returns>测试训练任务。</returns>
public static Training.Contracts.TrainingJobDetailDto CreateTrainingJob(
Guid id = default,
string name = "Test Training Job",
string status = "Running")
{
return new Training.Contracts.TrainingJobDetailDto
{
TrainingJobId = id == default ? Guid.NewGuid() : id,
Name = name,
Description = "Test training job description",
DatasetVersionId = Guid.NewGuid(),
DatasetVersionNo = "Dataset-v1.0",
ProductTypeId = Guid.NewGuid(),
ProductTypeCode = "PT-A100",
AlgorithmType = "YOLOv8",
TrainingParametersJson = "{}",
Status = status,
ProgressPercentage = status == "Completed" ? 100 : 50,
CurrentEpoch = status == "Completed" ? 100 : 50,
TotalEpochs = 100,
CurrentLoss = status == "Completed" ? 0.1m : 0.5m,
BestLoss = 0.1m,
EstimatedRemainingSeconds = status == "Completed" ? 0 : 1800,
StartedAtUtc = DateTime.UtcNow.AddHours(-2),
CompletedAtUtc = status == "Completed" ? DateTime.UtcNow.AddMinutes(-30) : null,
CreatedBy = "testuser",
CreatedAtUtc = DateTime.UtcNow.AddDays(-1),
ErrorMessage = string.Empty,
OutputPath = "outputs/train-001",
LogPath = "logs/train-001.log"
};
}
/// <summary>
/// 创建测试审计日志。
/// </summary>
/// <param name="id">日志ID。</param>
/// <param name="action">操作类型。</param>
/// <param name="module">模块。</param>
/// <returns>测试审计日志。</returns>
public static Audit.Contracts.AuditLogDetailDto CreateAuditLog(
Guid id = default,
string action = "CREATE",
string module = "UserManagement")
{
return new Audit.Contracts.AuditLogDetailDto
{
AuditLogId = id == default ? Guid.NewGuid() : id,
ActionType = action,
Module = module,
Description = "测试审计日志",
OperatorUserName = "testuser",
OperatorIpAddress = "127.0.0.1",
OperatorUserAgent = "UnitTest",
TargetResourceType = "User",
TargetResourceId = Guid.NewGuid().ToString(),
Result = "Success",
RiskLevel = "Low",
DurationMs = 150,
OperatedAtUtc = DateTime.UtcNow.AddMinutes(-10),
RequestParametersJson = "{}",
ResponseDataJson = "{}",
ErrorMessage = string.Empty,
ExceptionStackTrace = string.Empty,
SessionId = Guid.NewGuid().ToString("N"),
TraceId = Guid.NewGuid().ToString("N"),
BusinessContextJson = "{}"
};
}
/// <summary>
/// 创建测试相机帧。
/// </summary>
/// <param name="id">帧ID。</param>
/// <param name="width">宽度。</param>
/// <param name="height">高度。</param>
/// <returns>测试相机帧。</returns>
public static object CreateCameraFrame(
Guid id = default,
int width = 1920,
int height = 1080)
{
return new
{
FrameId = id == default ? Guid.NewGuid() : id,
CameraId = "Camera-01",
TimestampUtc = DateTime.UtcNow,
Width = width,
Height = height,
Format = "RGB",
FrameNumber = 12345
};
}
/// <summary>
/// 创建测试推理结果。
/// </summary>
/// <param name="id">结果ID。</param>
/// <param name="confidence">置信度。</param>
/// <returns>测试推理结果。</returns>
public static object CreateInferenceResult(
Guid id = default,
double confidence = 0.95)
{
return new
{
ResultId = id == default ? Guid.NewGuid() : id,
ModelVersion = "v1.0.0",
ModelName = "YOLOv8",
InferenceTimeMs = 150,
Confidence = confidence,
TimestampUtc = DateTime.UtcNow
};
}
}