namespace OrpaonVision.Core.Testing; /// /// 测试数据工厂。 /// public static class TestDataFactory { /// /// 创建测试用户。 /// /// 用户ID。 /// 用户名。 /// 显示名称。 /// 测试用户。 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) }; } /// /// 创建测试产品会话。 /// /// 会话ID。 /// 测试产品会话。 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 = [] }; } /// /// 创建测试训练任务。 /// /// 任务ID。 /// 任务名称。 /// 状态。 /// 测试训练任务。 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" }; } /// /// 创建测试审计日志。 /// /// 日志ID。 /// 操作类型。 /// 模块。 /// 测试审计日志。 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 = "{}" }; } /// /// 创建测试相机帧。 /// /// 帧ID。 /// 宽度。 /// 高度。 /// 测试相机帧。 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 }; } /// /// 创建测试推理结果。 /// /// 结果ID。 /// 置信度。 /// 测试推理结果。 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 }; } }