Files
OrpaonVision/OrpaonVision.Core/Production/Contracts/ProductionAnalysisDto.cs
2026-04-06 22:04:05 +08:00

466 lines
11 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace OrpaonVision.Core.Production.Contracts;
/// <summary>
/// 实时生产状态。
/// </summary>
public sealed class RealtimeProductionStatusDto
{
/// <summary>
/// 工位ID。
/// </summary>
public Guid WorkstationId { get; init; }
/// <summary>
/// 工位名称。
/// </summary>
public string WorkstationName { get; init; } = string.Empty;
/// <summary>
/// 当前状态。
/// </summary>
public string CurrentStatus { get; init; } = string.Empty;
/// <summary>
/// 当前产品序列号。
/// </summary>
public string? CurrentProductSerialNumber { get; init; }
/// <summary>
/// 当前机种编码。
/// </summary>
public string? CurrentProductTypeCode { get; init; }
/// <summary>
/// 当前层级名称。
/// </summary>
public string? CurrentLayerName { get; init; }
/// <summary>
/// 当前层级序号。
/// </summary>
public int? CurrentLayerSequence { get; init; }
/// <summary>
/// 当前操作员姓名。
/// </summary>
public string? CurrentOperatorName { get; init; }
/// <summary>
/// 当前班次。
/// </summary>
public string? CurrentShift { get; init; }
/// <summary>
/// 今日OK数量。
/// </summary>
public long TodayOkCount { get; init; }
/// <summary>
/// 今日NG数量。
/// </summary>
public long TodayNgCount { get; init; }
/// <summary>
/// 今日良率。
/// </summary>
public decimal TodayYieldRate { get; init; }
/// <summary>
/// 当前班次OK数量。
/// </summary>
public long ShiftOkCount { get; init; }
/// <summary>
/// 当前班次NG数量。
/// </summary>
public long ShiftNgCount { get; init; }
/// <summary>
/// 当前班次良率。
/// </summary>
public decimal ShiftYieldRate { get; init; }
/// <summary>
/// 平均节拍(秒)。
/// </summary>
public decimal AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 设备运行状态。
/// </summary>
public string DeviceStatus { get; init; } = string.Empty;
/// <summary>
/// 最后更新时间UTC
/// </summary>
public DateTime LastUpdatedAtUtc { get; init; }
/// <summary>
/// 连续正常生产数量。
/// </summary>
public int ConsecutiveOkCount { get; init; }
/// <summary>
/// 最近一次NG时间UTC
/// </summary>
public DateTime? LastNgAtUtc { get; init; }
/// <summary>
/// 最近一次NG类型。
/// </summary>
public string? LastNgType { get; init; }
}
/// <summary>
/// 质量分析报告。
/// </summary>
public sealed class QualityAnalysisReportDto
{
/// <summary>
/// 报告时间范围开始UTC
/// </summary>
public DateTime StartTimeUtc { get; init; }
/// <summary>
/// 报告时间范围结束UTC
/// </summary>
public DateTime EndTimeUtc { get; init; }
/// <summary>
/// 工位名称。
/// </summary>
public string WorkstationName { get; init; } = string.Empty;
/// <summary>
/// 总体质量指标。
/// </summary>
public OverallQualityMetricsDto OverallMetrics { get; init; } = new();
/// <summary>
/// NG类型分析。
/// </summary>
public IReadOnlyList<NgTypeAnalysisDto> NgTypeAnalysis { get; init; } = [];
/// <summary>
/// 机种质量对比。
/// </summary>
public IReadOnlyList<ProductTypeQualityDto> ProductTypeQuality { get; init; } = [];
/// <summary>
/// 层级质量分析。
/// </summary>
public IReadOnlyList<LayerQualityAnalysisDto> LayerQualityAnalysis { get; init; } = [];
/// <summary>
/// 操作员质量分析。
/// </summary>
public IReadOnlyList<OperatorQualityAnalysisDto> OperatorQualityAnalysis { get; init; } = [];
/// <summary>
/// 时间趋势分析。
/// </summary>
public IReadOnlyList<QualityTrendDto> QualityTrends { get; init; } = [];
/// <summary>
/// 改进建议。
/// </summary>
public IReadOnlyList<ImprovementSuggestionDto> ImprovementSuggestions { get; init; } = [];
}
/// <summary>
/// 总体质量指标。
/// </summary>
public sealed class OverallQualityMetricsDto
{
/// <summary>
/// 总产品数量。
/// </summary>
public long TotalProducts { get; init; }
/// <summary>
/// OK产品数量。
/// </summary>
public long OkProducts { get; init; }
/// <summary>
/// NG产品数量。
/// </summary>
public long NgProducts { get; init; }
/// <summary>
/// 良率。
/// </summary>
public decimal YieldRate { get; init; }
/// <summary>
/// 目标良率。
/// </summary>
public decimal TargetYieldRate { get; init; }
/// <summary>
/// 良率达成率。
/// </summary>
public decimal YieldRateAchievement { get; init; }
/// <summary>
/// 平均节拍(秒)。
/// </summary>
public decimal AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 目标节拍(秒)。
/// </summary>
public decimal TargetCycleTimeSeconds { get; init; }
/// <summary>
/// 节拍达成率。
/// </summary>
public decimal CycleTimeAchievement { get; init; }
/// <summary>
/// 质量评分0-100
/// </summary>
public decimal QualityScore { get; init; }
/// <summary>
/// 质量等级。
/// </summary>
public string QualityGrade { get; init; } = string.Empty;
}
/// <summary>
/// NG类型分析。
/// </summary>
public sealed class NgTypeAnalysisDto
{
/// <summary>
/// NG类型。
/// </summary>
public string NgType { get; init; } = string.Empty;
/// <summary>
/// NG类型描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// NG数量。
/// </summary>
public long Count { get; init; }
/// <summary>
/// 占比。
/// </summary>
public decimal Percentage { get; init; }
/// <summary>
/// 严重程度。
/// </summary>
public string Severity { get; init; } = string.Empty;
/// <summary>
/// 主要发生层级。
/// </summary>
public string MainLayer { get; init; } = string.Empty;
/// <summary>
/// 趋势(上升/下降/稳定)。
/// </summary>
public string Trend { get; init; } = string.Empty;
/// <summary>
/// 趋势变化率。
/// </summary>
public decimal TrendChangeRate { get; init; }
}
/// <summary>
/// 机种质量对比。
/// </summary>
public sealed class ProductTypeQualityDto
{
/// <summary>
/// 机种编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 机种名称。
/// </summary>
public string ProductTypeName { get; init; } = string.Empty;
/// <summary>
/// 产品数量。
/// </summary>
public long ProductCount { get; init; }
/// <summary>
/// 良率。
/// </summary>
public decimal YieldRate { get; init; }
/// <summary>
/// 平均节拍(秒)。
/// </summary>
public decimal AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 质量排名。
/// </summary>
public int QualityRanking { get; init; }
/// <summary>
/// 效率排名。
/// </summary>
public int EfficiencyRanking { init; get; }
}
/// <summary>
/// 层级质量分析。
/// </summary>
public sealed class LayerQualityAnalysisDto
{
/// <summary>
/// 层级名称。
/// </summary>
public string LayerName { get; init; } = string.Empty;
/// <summary>
/// 层级序号。
/// </summary>
public int LayerSequence { get; init; }
/// <summary>
/// 检测次数。
/// </summary>
public long DetectionCount { get; init; }
/// <summary>
/// NG次数。
/// </summary>
public long NgCount { get; init; }
/// <summary>
/// NG率。
/// </summary>
public decimal NgRate { get; init; }
/// <summary>
/// 平均检测时间(毫秒)。
/// </summary>
public decimal AverageDetectionTimeMs { get; init; }
/// <summary>
/// 风险等级。
/// </summary>
public string RiskLevel { get; init; } = string.Empty;
}
/// <summary>
/// 操作员质量分析。
/// </summary>
public sealed class OperatorQualityAnalysisDto
{
/// <summary>
/// 操作员姓名。
/// </summary>
public string OperatorName { get; init; } = string.Empty;
/// <summary>
/// 班次。
/// </summary>
public string Shift { get; init; } = string.Empty;
/// <summary>
/// 产品数量。
/// </summary>
public long ProductCount { get; init; }
/// <summary>
/// 良率。
/// </summary>
public decimal YieldRate { get; init; }
/// <summary>
/// 平均节拍(秒)。
/// </summary>
public decimal AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 技能等级。
/// </summary>
public string SkillLevel { get; init; } = string.Empty;
/// <summary>
/// 绩效评分。
/// </summary>
public decimal PerformanceScore { get; init; }
}
/// <summary>
/// 质量趋势。
/// </summary>
public sealed class QualityTrendDto
{
/// <summary>
/// 时间点UTC
/// </summary>
public DateTime TimePointUtc { get; init; }
/// <summary>
/// 良率。
/// </summary>
public decimal YieldRate { get; init; }
/// <summary>
/// 产品数量。
/// </summary>
public long ProductCount { get; init; }
/// <summary>
/// 移动平均良率。
/// </summary>
public decimal MovingAverageYieldRate { get; init; }
}
/// <summary>
/// 改进建议。
/// </summary>
public sealed class ImprovementSuggestionDto
{
/// <summary>
/// 建议类型。
/// </summary>
public string SuggestionType { get; init; } = string.Empty;
/// <summary>
/// 建议标题。
/// </summary>
public string Title { get; init; } = string.Empty;
/// <summary>
/// 建议描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
public string Priority { get; init; } = string.Empty;
/// <summary>
/// 预期效果。
/// </summary>
public string ExpectedImpact { get; init; } = string.Empty;
/// <summary>
/// 实施难度。
/// </summary>
public string ImplementationDifficulty { get; init; } = string.Empty;
/// <summary>
/// 相关数据支持。
/// </summary>
public string SupportingData { get; init; } = string.Empty;
}