Files
OrpaonVision/OrpaonVision.Core/Statistics/IStatisticsService.cs
2026-04-06 22:04:05 +08:00

2541 lines
62 KiB
C#
Raw 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.
using OrpaonVision.Core.Results;
using OrpaonVision.Core.Common;
namespace OrpaonVision.Core.Statistics;
/// <summary>
/// 统计服务接口。
/// </summary>
public interface IStatisticsService
{
/// <summary>
/// 获取节拍统计信息。
/// </summary>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>节拍统计信息。</returns>
Task<Result<CycleTimeStatistics>> GetCycleTimeStatisticsAsync(DateTime startTime, DateTime endTime, string? productTypeCode = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取班次统计信息。
/// </summary>
/// <param name="shiftDate">班次日期。</param>
/// <param name="shiftType">班次类型(可选)。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>班次统计信息。</returns>
Task<Result<ShiftStatistics>> GetShiftStatisticsAsync(DateTime shiftDate, ShiftType? shiftType = null, string? productTypeCode = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取班次列表。
/// </summary>
/// <param name="startDate">开始日期。</param>
/// <param name="endDate">结束日期。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>班次列表。</returns>
Task<Result<IReadOnlyList<ShiftInfo>>> GetShiftListAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
/// <summary>
/// 获取生产效率统计。
/// </summary>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="granularity">统计粒度。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>生产效率统计。</returns>
Task<Result<ProductionEfficiencyStatistics>> GetProductionEfficiencyStatisticsAsync(DateTime startTime, DateTime endTime, string? productTypeCode = null, StatisticsGranularity granularity = StatisticsGranularity.Hourly, CancellationToken cancellationToken = default);
/// <summary>
/// 获取质量统计信息。
/// </summary>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>质量统计信息。</returns>
Task<Result<QualityStatistics>> GetQualityStatisticsAsync(DateTime startTime, DateTime endTime, string? productTypeCode = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取设备利用率统计。
/// </summary>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="equipmentId">设备ID可选。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>设备利用率统计。</returns>
Task<Result<EquipmentUtilizationStatistics>> GetEquipmentUtilizationStatisticsAsync(DateTime startTime, DateTime endTime, string? equipmentId = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取报警统计信息。
/// </summary>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="alarmLevel">报警级别(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>报警统计信息。</returns>
Task<Result<AlarmStatisticsSummary>> GetAlarmStatisticsSummaryAsync(DateTime startTime, DateTime endTime, AlarmLevel? alarmLevel = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取综合生产报告。
/// </summary>
/// <param name="reportType">报告类型。</param>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>综合生产报告。</returns>
Task<Result<ComprehensiveProductionReport>> GetComprehensiveProductionReportAsync(ProductionReportType reportType, DateTime startTime, DateTime endTime, string? productTypeCode = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取实时统计仪表板数据。
/// </summary>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>实时统计仪表板数据。</returns>
Task<Result<RealTimeStatisticsDashboard>> GetRealTimeStatisticsDashboardAsync(string? productTypeCode = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取历史趋势数据。
/// </summary>
/// <param name="metricType">指标类型。</param>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="granularity">统计粒度。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>历史趋势数据。</returns>
Task<Result<HistoricalTrendData>> GetHistoricalTrendDataAsync(MetricType metricType, DateTime startTime, DateTime endTime, string? productTypeCode = null, StatisticsGranularity granularity = StatisticsGranularity.Hourly, CancellationToken cancellationToken = default);
/// <summary>
/// 创建统计配置。
/// </summary>
/// <param name="config">统计配置。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>创建结果。</returns>
Task<Result<StatisticsConfig>> CreateStatisticsConfigAsync(StatisticsConfig config, CancellationToken cancellationToken = default);
/// <summary>
/// 更新统计配置。
/// </summary>
/// <param name="config">统计配置。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>更新结果。</returns>
Task<Result> UpdateStatisticsConfigAsync(StatisticsConfig config, CancellationToken cancellationToken = default);
/// <summary>
/// 获取统计配置。
/// </summary>
/// <param name="configType">配置类型。</param>
/// <param name="productTypeCode">产品类型编码(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>统计配置。</returns>
Task<Result<StatisticsConfig>> GetStatisticsConfigAsync(StatisticsConfigType configType, string? productTypeCode = null, CancellationToken cancellationToken = default);
/// <summary>
/// 导出统计数据。
/// </summary>
/// <param name="exportRequest">导出请求。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>导出结果。</returns>
Task<Result<StatisticsExportResult>> ExportStatisticsAsync(StatisticsExportRequest exportRequest, CancellationToken cancellationToken = default);
}
/// <summary>
/// 节拍统计信息。
/// </summary>
public sealed class CycleTimeStatistics
{
/// <summary>
/// 统计时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 总处理数量。
/// </summary>
public int TotalProcessedCount { get; init; }
/// <summary>
/// 成功处理数量。
/// </summary>
public int SuccessfulProcessedCount { get; init; }
/// <summary>
/// 失败处理数量。
/// </summary>
public int FailedProcessedCount { get; init; }
/// <summary>
/// 总体成功率。
/// </summary>
public double OverallSuccessRate => TotalProcessedCount > 0 ? (double)SuccessfulProcessedCount / TotalProcessedCount * 100 : 0.0;
/// <summary>
/// 平均节拍时间(秒)。
/// </summary>
public double AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 最短节拍时间(秒)。
/// </summary>
public double MinCycleTimeSeconds { get; init; }
/// <summary>
/// 最长节拍时间(秒)。
/// </summary>
public double MaxCycleTimeSeconds { get; init; }
/// <summary>
/// 节拍时间标准差(秒)。
/// </summary>
public double CycleTimeStandardDeviationSeconds { get; init; }
/// <summary>
/// 目标节拍时间(秒)。
/// </summary>
public double TargetCycleTimeSeconds { get; init; }
/// <summary>
/// 节拍达成率。
/// </summary>
public double CycleTimeAchievementRate => TargetCycleTimeSeconds > 0 ? (double)CountAchievedCycleTime / TotalProcessedCount * 100 : 0.0;
/// <summary>
/// 达到目标节拍的数量。
/// </summary>
public int CountAchievedCycleTime { get; init; }
/// <summary>
/// 按小时分组的节拍统计。
/// </summary>
public Dictionary<int, HourlyCycleTimeStatistics> ByHour { get; init; } = new();
/// <summary>
/// 按产品类型分组的节拍统计。
/// </summary>
public Dictionary<string, ProductTypeCycleTimeStatistics> ByProductType { get; init; } = new();
/// <summary>
/// 节拍时间分布。
/// </summary>
public CycleTimeDistribution Distribution { get; init; } = new();
/// <summary>
/// 趋势分析。
/// </summary>
public CycleTimeTrend Trend { get; init; } = new();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 时间范围。
/// </summary>
public sealed class TimeRange
{
/// <summary>
/// 开始时间。
/// </summary>
public DateTime StartTimeUtc { get; init; }
/// <summary>
/// 结束时间。
/// </summary>
public DateTime EndTimeUtc { get; init; }
/// <summary>
/// 时间跨度(小时)。
/// </summary>
public double DurationHours => (EndTimeUtc - StartTimeUtc).TotalHours;
}
/// <summary>
/// 按小时分组的节拍统计。
/// </summary>
public sealed class HourlyCycleTimeStatistics
{
/// <summary>
/// 小时。
/// </summary>
public int Hour { get; init; }
/// <summary>
/// 处理数量。
/// </summary>
public int ProcessedCount { get; init; }
/// <summary>
/// 成功数量。
/// </summary>
public int SuccessCount { get; init; }
/// <summary>
/// 平均节拍时间(秒)。
/// </summary>
public double AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 成功率。
/// </summary>
public double SuccessRate => ProcessedCount > 0 ? (double)SuccessCount / ProcessedCount * 100 : 0.0;
}
/// <summary>
/// 按产品类型分组的节拍统计。
/// </summary>
public sealed class ProductTypeCycleTimeStatistics
{
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 处理数量。
/// </summary>
public int ProcessedCount { get; init; }
/// <summary>
/// 成功数量。
/// </summary>
public int SuccessCount { get; init; }
/// <summary>
/// 平均节拍时间(秒)。
/// </summary>
public double AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 成功率。
/// </summary>
public double SuccessRate => ProcessedCount > 0 ? (double)SuccessCount / ProcessedCount * 100 : 0.0;
}
/// <summary>
/// 节拍时间分布。
/// </summary>
public sealed class CycleTimeDistribution
{
/// <summary>
/// 小于目标时间的数量。
/// </summary>
public int BelowTargetCount { get; init; }
/// <summary>
/// 在目标时间±10%范围内的数量。
/// </summary>
public int WithinTargetRangeCount { get; init; }
/// <summary>
/// 超过目标时间10%的数量。
/// </summary>
public int AboveTargetRangeCount { get; init; }
/// <summary>
/// 小于目标时间的百分比。
/// </summary>
public double BelowTargetPercentage { get; init; }
/// <summary>
/// 在目标时间±10%范围内的百分比。
/// </summary>
public double WithinTargetRangePercentage { get; init; }
/// <summary>
/// 超过目标时间10%的百分比。
/// </summary>
public double AboveTargetRangePercentage { get; init; }
}
/// <summary>
/// 节拍趋势分析。
/// </summary>
public sealed class CycleTimeTrend
{
/// <summary>
/// 趋势方向。
/// </summary>
public TrendDirection Direction { get; init; }
/// <summary>
/// 变化率(百分比)。
/// </summary>
public double ChangeRatePercentage { get; init; }
/// <summary>
/// 趋势描述。
/// </summary>
public string TrendDescription { get; init; } = string.Empty;
/// <summary>
/// 预测下个周期的节拍时间(秒)。
/// </summary>
public double PredictedNextCycleTimeSeconds { get; init; }
/// <summary>
/// 置信度。
/// </summary>
public double Confidence { get; init; }
}
/// <summary>
/// 班次统计信息。
/// </summary>
public sealed class ShiftStatistics
{
/// <summary>
/// 班次信息。
/// </summary>
public ShiftInfo ShiftInfo { get; init; } = new();
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 计划生产数量。
/// </summary>
public int PlannedProductionCount { get; init; }
/// <summary>
/// 实际生产数量。
/// </summary>
public int ActualProductionCount { get; init; }
/// <summary>
/// 合格产品数量。
/// </summary>
public int QualifiedProductionCount { get; init; }
/// <summary>
/// 不合格产品数量。
/// </summary>
public int UnqualifiedProductionCount { get; init; }
/// <summary>
/// 生产完成率。
/// </summary>
public double ProductionCompletionRate => PlannedProductionCount > 0 ? (double)ActualProductionCount / PlannedProductionCount * 100 : 0.0;
/// <summary>
/// 质量合格率。
/// </summary>
public double QualityPassRate => ActualProductionCount > 0 ? (double)QualifiedProductionCount / ActualProductionCount * 100 : 0.0;
/// <summary>
/// 班次开始时间。
/// </summary>
public DateTime ShiftStartTimeUtc { get; init; }
/// <summary>
/// 班次结束时间。
/// </summary>
public DateTime ShiftEndTimeUtc { get; init; }
/// <summary>
/// 实际工作时间(小时)。
/// </summary>
public double ActualWorkingHours { get; init; }
/// <summary>
/// 设备停机时间(小时)。
/// </summary>
public double EquipmentDowntimeHours { get; init; }
/// <summary>
/// 设备利用率。
/// </summary>
public double EquipmentUtilizationRate => ActualWorkingHours > 0 ? (ActualWorkingHours - EquipmentDowntimeHours) / ActualWorkingHours * 100 : 0.0;
/// <summary>
/// 平均节拍时间(秒)。
/// </summary>
public double AverageCycleTimeSeconds { get; init; }
/// <summary>
/// 班次效率。
/// </summary>
public double ShiftEfficiency => ActualWorkingHours > 0 ? (double)ActualProductionCount / ActualWorkingHours : 0.0;
/// <summary>
/// 按小时分组的统计。
/// </summary>
public Dictionary<int, HourlyShiftStatistics> ByHour { get; init; } = new();
/// <summary>
/// 按产品类型分组的统计。
/// </summary>
public Dictionary<string, ProductTypeShiftStatistics> ByProductType { get; init; } = new();
/// <summary>
/// 异常事件统计。
/// </summary>
public ShiftAnomalyStatistics AnomalyStatistics { get; init; } = new();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 班次信息。
/// </summary>
public sealed class ShiftInfo
{
/// <summary>
/// 班次ID。
/// </summary>
public Guid ShiftId { get; init; }
/// <summary>
/// 班次日期。
/// </summary>
public DateTime ShiftDate { get; init; }
/// <summary>
/// 班次类型。
/// </summary>
public ShiftType ShiftType { get; init; }
/// <summary>
/// 班次名称。
/// </summary>
public string ShiftName { get; init; } = string.Empty;
/// <summary>
/// 班次开始时间。
/// </summary>
public TimeSpan StartTime { get; init; }
/// <summary>
/// 班次结束时间。
/// </summary>
public TimeSpan EndTime { get; init; }
/// <summary>
/// 班次时长(小时)。
/// </summary>
public double DurationHours => (EndTime - StartTime).TotalHours;
/// <summary>
/// 操作员列表。
/// </summary>
public IReadOnlyList<string> Operators { get; init; } = Array.Empty<string>();
/// <summary>
/// 主管。
/// </summary>
public string? Supervisor { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 按小时分组的班次统计。
/// </summary>
public sealed class HourlyShiftStatistics
{
/// <summary>
/// 小时。
/// </summary>
public int Hour { get; init; }
/// <summary>
/// 生产数量。
/// </summary>
public int ProductionCount { get; init; }
/// <summary>
/// 合格数量。
/// </summary>
public int QualifiedCount { get; init; }
/// <summary>
/// 质量合格率。
/// </summary>
public double QualityPassRate => ProductionCount > 0 ? (double)QualifiedCount / ProductionCount * 100 : 0.0;
/// <summary>
/// 设备运行时间(分钟)。
/// </summary>
public double EquipmentRunningMinutes { get; init; }
/// <summary>
/// 设备停机时间(分钟)。
/// </summary>
public double EquipmentDowntimeMinutes { get; init; }
}
/// <summary>
/// 按产品类型分组的班次统计。
/// </summary>
public sealed class ProductTypeShiftStatistics
{
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 生产数量。
/// </summary>
public int ProductionCount { get; init; }
/// <summary>
/// 合格数量。
/// </summary>
public int QualifiedCount { get; init; }
/// <summary>
/// 质量合格率。
/// </summary>
public double QualityPassRate => ProductionCount > 0 ? (double)QualifiedCount / ProductionCount * 100 : 0.0;
/// <summary>
/// 平均节拍时间(秒)。
/// </summary>
public double AverageCycleTimeSeconds { get; init; }
}
/// <summary>
/// 班次异常统计。
/// </summary>
public sealed class ShiftAnomalyStatistics
{
/// <summary>
/// 总异常数量。
/// </summary>
public int TotalAnomalyCount { get; init; }
/// <summary>
/// 设备故障数量。
/// </summary>
public int EquipmentFailureCount { get; init; }
/// <summary>
/// 质量异常数量。
/// </summary>
public int QualityAnomalyCount { get; init; }
/// <summary>
/// 工艺异常数量。
/// </summary>
public int ProcessAnomalyCount { get; init; }
/// <summary>
/// 停机时间(分钟)。
/// </summary>
public double DowntimeMinutes { get; init; }
/// <summary>
/// 异常率。
/// </summary>
public double AnomalyRate { get; init; }
}
/// <summary>
/// 生产效率统计。
/// </summary>
public sealed class ProductionEfficiencyStatistics
{
/// <summary>
/// 统计时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 统计粒度。
/// </summary>
public StatisticsGranularity Granularity { get; init; }
/// <summary>
/// 计划工作时间(小时)。
/// </summary>
public double PlannedWorkingHours { get; init; }
/// <summary>
/// 实际工作时间(小时)。
/// </summary>
public double ActualWorkingHours { get; init; }
/// <summary>
/// 设备运行时间(小时)。
/// </summary>
public double EquipmentRunningHours { get; init; }
/// <summary>
/// 计划生产数量。
/// </summary>
public int PlannedProductionCount { get; init; }
/// <summary>
/// 实际生产数量。
/// </summary>
public int ActualProductionCount { get; init; }
/// <summary>
/// 合格生产数量。
/// </summary>
public int QualifiedProductionCount { get; init; }
/// <summary>
/// 时间利用率。
/// </summary>
public double TimeUtilizationRate => PlannedWorkingHours > 0 ? ActualWorkingHours / PlannedWorkingHours * 100 : 0.0;
/// <summary>
/// 设备利用率。
/// </summary>
public double EquipmentUtilizationRate => ActualWorkingHours > 0 ? EquipmentRunningHours / ActualWorkingHours * 100 : 0.0;
/// <summary>
/// 生产完成率。
/// </summary>
public double ProductionCompletionRate => PlannedProductionCount > 0 ? (double)ActualProductionCount / PlannedProductionCount * 100 : 0.0;
/// <summary>
/// 质量合格率。
/// </summary>
public double QualityPassRate => ActualProductionCount > 0 ? (double)QualifiedProductionCount / ActualProductionCount * 100 : 0.0;
/// <summary>
/// 综合效率OEE
/// </summary>
public double OverallEquipmentEffectiveness => TimeUtilizationRate * EquipmentUtilizationRate * ProductionCompletionRate * QualityPassRate / 10000;
/// <summary>
/// 按时间分组的效率数据。
/// </summary>
public Dictionary<DateTime, TimeSlotEfficiency> ByTimeSlot { get; init; } = new();
/// <summary>
/// 效率趋势分析。
/// </summary>
public EfficiencyTrend Trend { get; init; } = new();
/// <summary>
/// 效率基准对比。
/// </summary>
public EfficiencyBenchmark Benchmark { get; init; } = new();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 时间段效率。
/// </summary>
public sealed class TimeSlotEfficiency
{
/// <summary>
/// 时间点。
/// </summary>
public DateTime TimeSlot { get; init; }
/// <summary>
/// 生产数量。
/// </summary>
public int ProductionCount { get; init; }
/// <summary>
/// 合格数量。
/// </summary>
public int QualifiedCount { get; init; }
/// <summary>
/// 设备运行时间(分钟)。
/// </summary>
public double EquipmentRunningMinutes { get; init; }
/// <summary>
/// 综合效率。
/// </summary>
public double OverallEfficiency { get; init; }
}
/// <summary>
/// 效率趋势分析。
/// </summary>
public sealed class EfficiencyTrend
{
/// <summary>
/// 趋势方向。
/// </summary>
public TrendDirection Direction { get; init; }
/// <summary>
/// 变化率(百分比)。
/// </summary>
public double ChangeRatePercentage { get; init; }
/// <summary>
/// 趋势描述。
/// </summary>
public string TrendDescription { get; init; } = string.Empty;
/// <summary>
/// 预测下个周期的效率。
/// </summary>
public double PredictedNextEfficiency { get; init; }
/// <summary>
/// 置信度。
/// </summary>
public double Confidence { get; init; }
}
/// <summary>
/// 效率基准对比。
/// </summary>
public sealed class EfficiencyBenchmark
{
/// <summary>
/// 历史最佳效率。
/// </summary>
public double HistoricalBestEfficiency { get; init; }
/// <summary>
/// 历史平均效率。
/// </summary>
public double HistoricalAverageEfficiency { get; init; }
/// <summary>
/// 行业基准效率。
/// </summary>
public double IndustryBenchmarkEfficiency { get; init; }
/// <summary>
/// 目标效率。
/// </summary>
public double TargetEfficiency { get; init; }
/// <summary>
/// 与历史最佳的差距。
/// </summary>
public double GapToHistoricalBest => HistoricalBestEfficiency - (HistoricalBestEfficiency + IndustryBenchmarkEfficiency + TargetEfficiency) / 3;
/// <summary>
/// 达标率。
/// </summary>
public double AchievementRate => TargetEfficiency > 0 ? (HistoricalBestEfficiency + IndustryBenchmarkEfficiency + TargetEfficiency) / 3 / TargetEfficiency * 100 : 0.0;
}
/// <summary>
/// 质量统计信息。
/// </summary>
public sealed class QualityStatistics
{
/// <summary>
/// 统计时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 总检测数量。
/// </summary>
public int TotalInspectionCount { get; init; }
/// <summary>
/// 合格数量。
/// </summary>
public int QualifiedCount { get; init; }
/// <summary>
/// 不合格数量。
/// </summary>
public int UnqualifiedCount { get; init; }
/// <summary>
/// 总体合格率。
/// </summary>
public double OverallPassRate => TotalInspectionCount > 0 ? (double)QualifiedCount / TotalInspectionCount * 100 : 0.0;
/// <summary>
/// 按缺陷类型分组的统计。
/// </summary>
public Dictionary<DefectType, DefectStatistics> ByDefectType { get; init; } = new();
/// <summary>
/// 按严重程度分组的统计。
/// </summary>
public Dictionary<DefectSeverity, SeverityStatistics> BySeverity { get; init; } = new();
/// <summary>
/// 按产品类型分组的统计。
/// </summary>
public Dictionary<string, ProductTypeQualityStatistics> ByProductType { get; init; } = new();
/// <summary>
/// 按检测时间分组的统计。
/// </summary>
public Dictionary<DateTime, QualityTimeSlotStatistics> ByTimeSlot { get; init; } = new();
/// <summary>
/// 质量趋势分析。
/// </summary>
public QualityTrend Trend { get; init; } = new();
/// <summary>
/// 质量改进建议。
/// </summary>
public IReadOnlyList<QualityImprovementSuggestion> ImprovementSuggestions { get; init; } = Array.Empty<QualityImprovementSuggestion>();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 缺陷统计。
/// </summary>
public sealed class DefectStatistics
{
/// <summary>
/// 缺陷类型。
/// </summary>
public DefectType DefectType { get; init; }
/// <summary>
/// 缺陷数量。
/// </summary>
public int DefectCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
/// <summary>
/// 平均严重程度。
/// </summary>
public double AverageSeverity { get; init; }
}
/// <summary>
/// 严重程度统计。
/// </summary>
public sealed class SeverityStatistics
{
/// <summary>
/// 严重程度。
/// </summary>
public DefectSeverity Severity { get; init; }
/// <summary>
/// 缺陷数量。
/// </summary>
public int DefectCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
}
/// <summary>
/// 按产品类型分组的质量统计。
/// </summary>
public sealed class ProductTypeQualityStatistics
{
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 检测数量。
/// </summary>
public int InspectionCount { get; init; }
/// <summary>
/// 合格数量。
/// </summary>
public int QualifiedCount { get; init; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate => InspectionCount > 0 ? (double)QualifiedCount / InspectionCount * 100 : 0.0;
}
/// <summary>
/// 按检测时间的质量统计。
/// </summary>
public sealed class QualityTimeSlotStatistics
{
/// <summary>
/// 检测时间。
/// </summary>
public DateTime InspectionTime { get; init; }
/// <summary>
/// 检测数量。
/// </summary>
public int InspectionCount { get; init; }
/// <summary>
/// 合格数量。
/// </summary>
public int QualifiedCount { get; init; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate => InspectionCount > 0 ? (double)QualifiedCount / InspectionCount * 100 : 0.0;
}
/// <summary>
/// 质量趋势分析。
/// </summary>
public sealed class QualityTrend
{
/// <summary>
/// 趋势方向。
/// </summary>
public TrendDirection Direction { get; init; }
/// <summary>
/// 变化率(百分比)。
/// </summary>
public double ChangeRatePercentage { get; init; }
/// <summary>
/// 趋势描述。
/// </summary>
public string TrendDescription { get; init; } = string.Empty;
/// <summary>
/// 预测下个周期的合格率。
/// </summary>
public double PredictedNextPassRate { get; init; }
/// <summary>
/// 置信度。
/// </summary>
public double Confidence { get; init; }
}
/// <summary>
/// 质量改进建议。
/// </summary>
public sealed class QualityImprovementSuggestion
{
/// <summary>
/// 建议ID。
/// </summary>
public Guid SuggestionId { get; init; }
/// <summary>
/// 建议类型。
/// </summary>
public SuggestionType SuggestionType { get; init; }
/// <summary>
/// 建议标题。
/// </summary>
public string Title { get; init; } = string.Empty;
/// <summary>
/// 建议描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
public int Priority { get; init; }
/// <summary>
/// 预期效果。
/// </summary>
public string ExpectedImpact { get; init; } = string.Empty;
/// <summary>
/// 实施难度。
/// </summary>
public ImplementationDifficulty Difficulty { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 建议类型枚举。
/// </summary>
public enum SuggestionType
{
/// <summary>
/// 工艺改进。
/// </summary>
ProcessImprovement = 0,
/// <summary>
/// 设备维护。
/// </summary>
EquipmentMaintenance = 1,
/// <summary>
/// 材料更换。
/// </summary>
MaterialReplacement = 2,
/// <summary>
/// 操作培训。
/// </summary>
OperatorTraining = 3,
/// <summary>
/// 环境改善。
/// </summary>
EnvironmentImprovement = 4,
/// <summary>
/// 检测优化。
/// </summary>
InspectionOptimization = 5,
/// <summary>
/// 其他建议。
/// </summary>
Other = 6
}
/// <summary>
/// 设备利用率统计。
/// </summary>
public sealed class EquipmentUtilizationStatistics
{
/// <summary>
/// 统计时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 设备ID。
/// </summary>
public string EquipmentId { get; init; } = string.Empty;
/// <summary>
/// 设备名称。
/// </summary>
public string EquipmentName { get; init; } = string.Empty;
/// <summary>
/// 计划运行时间(小时)。
/// </summary>
public double PlannedRunningHours { get; init; }
/// <summary>
/// 实际运行时间(小时)。
/// </summary>
public double ActualRunningHours { get; init; }
/// <summary>
/// 生产时间(小时)。
/// </summary>
public double ProductionHours { get; init; }
/// <summary>
/// 维护时间(小时)。
/// </summary>
public double MaintenanceHours { get; init; }
/// <summary>
/// 故障时间(小时)。
/// </summary>
public double FailureHours { get; init; }
/// <summary>
/// 空闲时间(小时)。
/// </summary>
public double IdleHours { get; init; }
/// <summary>
/// 总体利用率。
/// </summary>
public double OverallUtilizationRate => PlannedRunningHours > 0 ? ActualRunningHours / PlannedRunningHours * 100 : 0.0;
/// <summary>
/// 生产利用率。
/// </summary>
public double ProductionUtilizationRate => ActualRunningHours > 0 ? ProductionHours / ActualRunningHours * 100 : 0.0;
/// <summary>
/// 可用率。
/// </summary>
public double AvailabilityRate => PlannedRunningHours > 0 ? (PlannedRunningHours - MaintenanceHours - FailureHours) / PlannedRunningHours * 100 : 0.0;
/// <summary>
/// 平均无故障时间(小时)。
/// </summary>
public double MeanTimeBetweenFailuresHours { get; init; }
/// <summary>
/// 平均修复时间(小时)。
/// </summary>
public double MeanTimeToRepairHours { get; init; }
/// <summary>
/// 按日期分组的利用率。
/// </summary>
public Dictionary<DateTime, DailyUtilizationStatistics> ByDate { get; init; } = new();
/// <summary>
/// 利用率趋势分析。
/// </summary>
public UtilizationTrend Trend { get; init; } = new();
/// <summary>
/// 维护建议。
/// </summary>
public IReadOnlyList<MaintenanceSuggestion> MaintenanceSuggestions { get; init; } = Array.Empty<MaintenanceSuggestion>();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 按日期分组的利用率统计。
/// </summary>
public sealed class DailyUtilizationStatistics
{
/// <summary>
/// 日期。
/// </summary>
public DateTime Date { get; init; }
/// <summary>
/// 计划运行时间(小时)。
/// </summary>
public double PlannedRunningHours { get; init; }
/// <summary>
/// 实际运行时间(小时)。
/// </summary>
public double ActualRunningHours { get; init; }
/// <summary>
/// 利用率。
/// </summary>
public double UtilizationRate => PlannedRunningHours > 0 ? ActualRunningHours / PlannedRunningHours * 100 : 0.0;
}
/// <summary>
/// 利用率趋势分析。
/// </summary>
public sealed class UtilizationTrend
{
/// <summary>
/// 趋势方向。
/// </summary>
public TrendDirection Direction { get; init; }
/// <summary>
/// 变化率(百分比)。
/// </summary>
public double ChangeRatePercentage { get; init; }
/// <summary>
/// 趋势描述。
/// </summary>
public string TrendDescription { get; init; } = string.Empty;
/// <summary>
/// 预测下个周期的利用率。
/// </summary>
public double PredictedNextUtilization { get; init; }
/// <summary>
/// 置信度。
/// </summary>
public double Confidence { get; init; }
}
/// <summary>
/// 维护建议。
/// </summary>
public sealed class MaintenanceSuggestion
{
/// <summary>
/// 建议ID。
/// </summary>
public Guid SuggestionId { get; init; }
/// <summary>
/// 维护类型。
/// </summary>
public MaintenanceType MaintenanceType { get; init; }
/// <summary>
/// 建议标题。
/// </summary>
public string Title { get; init; } = string.Empty;
/// <summary>
/// 建议描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
public int Priority { get; init; }
/// <summary>
/// 预计维护时间(小时)。
/// </summary>
public double EstimatedMaintenanceHours { get; init; }
/// <summary>
/// 预计成本。
/// </summary>
public double EstimatedCost { get; init; }
/// <summary>
/// 建议维护时间。
/// </summary>
public DateTime? SuggestedMaintenanceTime { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 维护类型枚举。
/// </summary>
public enum MaintenanceType
{
/// <summary>
/// 预防性维护。
/// </summary>
Preventive = 0,
/// <summary>
/// 预测性维护。
/// </summary>
Predictive = 1,
/// <summary>
/// 纠正性维护。
/// </summary>
Corrective = 2,
/// <summary>
/// 紧急维护。
/// </summary>
Emergency = 3,
/// <summary>
/// 改善性维护。
/// </summary>
Improvement = 4
}
/// <summary>
/// 报警统计摘要。
/// </summary>
public sealed class AlarmStatisticsSummary
{
/// <summary>
/// 统计时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 总报警数量。
/// </summary>
public int TotalAlarmCount { get; init; }
/// <summary>
/// 活跃报警数量。
/// </summary>
public int ActiveAlarmCount { get; init; }
/// <summary>
/// 已确认报警数量。
/// </summary>
public int ConfirmedAlarmCount { get; init; }
/// <summary>
/// 已清除报警数量。
/// </summary>
public int ClearedAlarmCount { get; init; }
/// <summary>
/// 按报警级别分组的统计。
/// </summary>
public Dictionary<AlarmLevel, int> ByAlarmLevel { get; init; } = new();
/// <summary>
/// 按报警类型分组的统计。
/// </summary>
public Dictionary<AlarmType, int> ByAlarmType { get; init; } = new();
/// <summary>
/// 平均确认时间(分钟)。
/// </summary>
public double AverageConfirmTimeMinutes { get; init; }
/// <summary>
/// 平均清除时间(分钟)。
/// </summary>
public double AverageClearTimeMinutes { get; init; }
/// <summary>
/// 报警频率(每小时)。
/// </summary>
public double AlarmFrequencyPerHour { get; init; }
/// <summary>
/// 报警趋势。
/// </summary>
public AlarmTrend Trend { get; init; } = new();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警趋势分析。
/// </summary>
public sealed class AlarmTrend
{
/// <summary>
/// 趋势方向。
/// </summary>
public TrendDirection Direction { get; init; }
/// <summary>
/// 变化率(百分比)。
/// </summary>
public double ChangeRatePercentage { get; init; }
/// <summary>
/// 趋势描述。
/// </summary>
public string TrendDescription { get; init; } = string.Empty;
/// <summary>
/// 预测下个周期的报警数量。
/// </summary>
public int PredictedNextAlarmCount { get; init; }
/// <summary>
/// 置信度。
/// </summary>
public double Confidence { get; init; }
}
/// <summary>
/// 综合生产报告。
/// </summary>
public sealed class ComprehensiveProductionReport
{
/// <summary>
/// 报告ID。
/// </summary>
public Guid ReportId { get; init; }
/// <summary>
/// 报告类型。
/// </summary>
public ProductionReportType ReportType { get; init; }
/// <summary>
/// 报告时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 报告生成时间。
/// </summary>
public DateTime GeneratedAtUtc { get; init; }
/// <summary>
/// 执行摘要。
/// </summary>
public ExecutiveSummary ExecutiveSummary { get; init; } = new();
/// <summary>
/// 生产统计。
/// </summary>
public ProductionStatistics Production { get; init; } = new();
/// <summary>
/// 质量统计。
/// </summary>
public QualityStatistics Quality { get; init; } = new();
/// <summary>
/// 设备统计。
/// </summary>
public EquipmentStatistics Equipment { get; init; } = new();
/// <summary>
/// 报警统计。
/// </summary>
public AlarmStatisticsSummary Alarms { get; init; } = new();
/// <summary>
/// 趋势分析。
/// </summary>
public TrendAnalysis Trends { get; init; } = new();
/// <summary>
/// 改进建议。
/// </summary>
public IReadOnlyList<ImprovementRecommendation> Recommendations { get; init; } = Array.Empty<ImprovementRecommendation>();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 生产报告类型枚举。
/// </summary>
public enum ProductionReportType
{
/// <summary>
/// 日报。
/// </summary>
Daily = 0,
/// <summary>
/// 周报。
/// </summary>
Weekly = 1,
/// <summary>
/// 月报。
/// </summary>
Monthly = 2,
/// <summary>
/// 季报。
/// </summary>
Quarterly = 3,
/// <summary>
/// 年报。
/// </summary>
Annual = 4,
/// <summary>
/// 自定义报告。
/// </summary>
Custom = 5
}
/// <summary>
/// 执行摘要。
/// </summary>
public sealed class ExecutiveSummary
{
/// <summary>
/// 总体评分。
/// </summary>
public double OverallScore { get; init; }
/// <summary>
/// 关键指标。
/// </summary>
public Dictionary<string, double> KeyMetrics { get; init; } = new();
/// <summary>
/// 主要成就。
/// </summary>
public IReadOnlyList<string> Achievements { get; init; } = Array.Empty<string>();
/// <summary>
/// 主要问题。
/// </summary>
public IReadOnlyList<string> Issues { get; init; } = Array.Empty<string>();
/// <summary>
/// 摘要描述。
/// </summary>
public string SummaryDescription { get; init; } = string.Empty;
}
/// <summary>
/// 生产统计。
/// </summary>
public sealed class ProductionStatistics
{
/// <summary>
/// 计划产量。
/// </summary>
public int PlannedProduction { get; init; }
/// <summary>
/// 实际产量。
/// </summary>
public int ActualProduction { get; init; }
/// <summary>
/// 合格产量。
/// </summary>
public int QualifiedProduction { get; init; }
/// <summary>
/// 生产完成率。
/// </summary>
public double ProductionCompletionRate => PlannedProduction > 0 ? (double)ActualProduction / PlannedProduction * 100 : 0.0;
/// <summary>
/// 质量合格率。
/// </summary>
public double QualityPassRate => ActualProduction > 0 ? (double)QualifiedProduction / ActualProduction * 100 : 0.0;
/// <summary>
/// 平均节拍时间(秒)。
/// </summary>
public double AverageCycleTimeSeconds { get; init; }
}
/// <summary>
/// 设备统计。
/// </summary>
public sealed class EquipmentStatistics
{
/// <summary>
/// 设备数量。
/// </summary>
public int EquipmentCount { get; init; }
/// <summary>
/// 平均利用率。
/// </summary>
public double AverageUtilizationRate { get; init; }
/// <summary>
/// 平均可用率。
/// </summary>
public double AverageAvailabilityRate { get; init; }
/// <summary>
/// 总停机时间(小时)。
/// </summary>
public double TotalDowntimeHours { get; init; }
}
/// <summary>
/// 趋势分析。
/// </summary>
public sealed class TrendAnalysis
{
/// <summary>
/// 生产趋势。
/// </summary>
public TrendDirection ProductionTrend { get; init; }
/// <summary>
/// 质量趋势。
/// </summary>
public TrendDirection QualityTrend { get; init; }
/// <summary>
/// 设备趋势。
/// </summary>
public TrendDirection EquipmentTrend { get; init; }
/// <summary>
/// 报警趋势。
/// </summary>
public TrendDirection AlarmTrend { get; init; }
/// <summary>
/// 趋势描述。
/// </summary>
public string TrendDescription { get; init; } = string.Empty;
}
/// <summary>
/// 改进建议。
/// </summary>
public sealed class ImprovementRecommendation
{
/// <summary>
/// 建议ID。
/// </summary>
public Guid RecommendationId { get; init; }
/// <summary>
/// 建议类别。
/// </summary>
public RecommendationCategory Category { get; init; }
/// <summary>
/// 建议标题。
/// </summary>
public string Title { get; init; } = string.Empty;
/// <summary>
/// 建议描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
public int Priority { get; init; }
/// <summary>
/// 预期收益。
/// </summary>
public string ExpectedBenefit { get; init; } = string.Empty;
/// <summary>
/// 实施成本。
/// </summary>
public double ImplementationCost { get; init; }
/// <summary>
/// 投资回报率。
/// </summary>
public double ReturnOnInvestment { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 建议类别枚举。
/// </summary>
public enum RecommendationCategory
{
/// <summary>
/// 生产优化。
/// </summary>
ProductionOptimization = 0,
/// <summary>
/// 质量改进。
/// </summary>
QualityImprovement = 1,
/// <summary>
/// 设备维护。
/// </summary>
EquipmentMaintenance = 2,
/// <summary>
/// 工艺改进。
/// </summary>
ProcessImprovement = 3,
/// <summary>
/// 人员培训。
/// </summary>
PersonnelTraining = 4,
/// <summary>
/// 成本控制。
/// </summary>
CostControl = 5,
/// <summary>
/// 安全改善。
/// </summary>
SafetyImprovement = 6,
/// <summary>
/// 其他建议。
/// </summary>
Other = 7
}
/// <summary>
/// 实时统计仪表板数据。
/// </summary>
public sealed class RealTimeStatisticsDashboard
{
/// <summary>
/// 数据更新时间。
/// </summary>
public DateTime LastUpdatedUtc { get; init; }
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 当前班次信息。
/// </summary>
public ShiftInfo CurrentShift { get; init; } = new();
/// <summary>
/// 实时生产指标。
/// </summary>
public RealTimeProductionMetrics Production { get; init; } = new();
/// <summary>
/// 实时质量指标。
/// </summary>
public RealTimeQualityMetrics Quality { get; init; } = new();
/// <summary>
/// 实时设备指标。
/// </summary>
public RealTimeEquipmentMetrics Equipment { get; init; } = new();
/// <summary>
/// 实时报警指标。
/// </summary>
public RealTimeAlarmMetrics Alarms { get; init; } = new();
/// <summary>
/// 实时效率指标。
/// </summary>
public RealTimeEfficiencyMetrics Efficiency { get; init; } = new();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 实时生产指标。
/// </summary>
public sealed class RealTimeProductionMetrics
{
/// <summary>
/// 当前小时产量。
/// </summary>
public int CurrentHourProduction { get; init; }
/// <summary>
/// 当前班次产量。
/// </summary>
public int CurrentShiftProduction { get; init; }
/// <summary>
/// 今日产量。
/// </summary>
public int TodayProduction { get; init; }
/// <summary>
/// 当前节拍时间(秒)。
/// </summary>
public double CurrentCycleTimeSeconds { get; init; }
/// <summary>
/// 节拍达成率。
/// </summary>
public double CycleTimeAchievementRate { get; init; }
/// <summary>
/// 生产速度趋势。
/// </summary>
public TrendDirection ProductionSpeedTrend { get; init; }
}
/// <summary>
/// 实时质量指标。
/// </summary>
public sealed class RealTimeQualityMetrics
{
/// <summary>
/// 当前小时合格率。
/// </summary>
public double CurrentHourPassRate { get; init; }
/// <summary>
/// 当前班次合格率。
/// </summary>
public double CurrentShiftPassRate { get; init; }
/// <summary>
/// 今日合格率。
/// </summary>
public double TodayPassRate { get; init; }
/// <summary>
/// 最近缺陷数量。
/// </summary>
public int RecentDefectCount { get; init; }
/// <summary>
/// 质量趋势。
/// </summary>
public TrendDirection QualityTrend { get; init; }
}
/// <summary>
/// 实时设备指标。
/// </summary>
public sealed class RealTimeEquipmentMetrics
{
/// <summary>
/// 运行设备数量。
/// </summary>
public int RunningEquipmentCount { get; init; }
/// <summary>
/// 停机设备数量。
/// </summary>
public int DownEquipmentCount { get; init; }
/// <summary>
/// 当前利用率。
/// </summary>
public double CurrentUtilizationRate { get; init; }
/// <summary>
/// 当前可用率。
/// </summary>
public double CurrentAvailabilityRate { get; init; }
/// <summary>
/// 设备状态趋势。
/// </summary>
public TrendDirection EquipmentStatusTrend { get; init; }
}
/// <summary>
/// 实时报警指标。
/// </summary>
public sealed class RealTimeAlarmMetrics
{
/// <summary>
/// 活跃报警数量。
/// </summary>
public int ActiveAlarmCount { get; init; }
/// <summary>
/// 今日新增报警数量。
/// </summary>
public int TodayNewAlarmCount { get; init; }
/// <summary>
/// 严重报警数量。
/// </summary>
public int CriticalAlarmCount { get; init; }
/// <summary>
/// 最近报警时间。
/// </summary>
public DateTime? LastAlarmTime { get; init; }
/// <summary>
/// 报警趋势。
/// </summary>
public TrendDirection AlarmTrend { get; init; }
}
/// <summary>
/// 实时效率指标。
/// </summary>
public sealed class RealTimeEfficiencyMetrics
{
/// <summary>
/// 当前OEE。
/// </summary>
public double CurrentOEE { get; init; }
/// <summary>
/// 时间利用率。
/// </summary>
public double TimeUtilizationRate { get; init; }
/// <summary>
/// 设备利用率。
/// </summary>
public double EquipmentUtilizationRate { get; init; }
/// <summary>
/// 性能效率。
/// </summary>
public double PerformanceEfficiency { get; init; }
/// <summary>
/// 效率趋势。
/// </summary>
public TrendDirection EfficiencyTrend { get; init; }
}
/// <summary>
/// 历史趋势数据。
/// </summary>
public sealed class HistoricalTrendData
{
/// <summary>
/// 指标类型。
/// </summary>
public MetricType MetricType { get; init; }
/// <summary>
/// 统计粒度。
/// </summary>
public StatisticsGranularity Granularity { get; init; }
/// <summary>
/// 时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 趋势数据点。
/// </summary>
public IReadOnlyList<TrendDataPoint> DataPoints { get; init; } = Array.Empty<TrendDataPoint>();
/// <summary>
/// 趋势分析。
/// </summary>
public TrendAnalysis TrendAnalysis { get; init; } = new();
/// <summary>
/// 统计摘要。
/// </summary>
public TrendStatisticsSummary Statistics { get; init; } = new();
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 指标类型枚举。
/// </summary>
public enum MetricType
{
/// <summary>
/// 产量。
/// </summary>
Production = 0,
/// <summary>
/// 质量。
/// </summary>
Quality = 1,
/// <summary>
/// 设备利用率。
/// </summary>
EquipmentUtilization = 2,
/// <summary>
/// 节拍时间。
/// </summary>
CycleTime = 3,
/// <summary>
/// OEE。
/// </summary>
OEE = 4,
/// <summary>
/// 报警数量。
/// </summary>
AlarmCount = 5,
/// <summary>
/// 停机时间。
/// </summary>
Downtime = 6,
/// <summary>
/// 效率。
/// </summary>
Efficiency = 7
}
/// <summary>
/// 统计粒度枚举。
/// </summary>
public enum StatisticsGranularity
{
/// <summary>
/// 按分钟。
/// </summary>
Minutely = 0,
/// <summary>
/// 按小时。
/// </summary>
Hourly = 1,
/// <summary>
/// 按班次。
/// </summary>
Shiftly = 2,
/// <summary>
/// 按天。
/// </summary>
Daily = 3,
/// <summary>
/// 按周。
/// </summary>
Weekly = 4,
/// <summary>
/// 按月。
/// </summary>
Monthly = 5,
/// <summary>
/// 按季度。
/// </summary>
Quarterly = 6,
/// <summary>
/// 按年。
/// </summary>
Yearly = 7
}
/// <summary>
/// 趋势数据点。
/// </summary>
public sealed class TrendDataPoint
{
/// <summary>
/// 时间点。
/// </summary>
public DateTime Timestamp { get; init; }
/// <summary>
/// 数值。
/// </summary>
public double Value { get; init; }
/// <summary>
/// 单位。
/// </summary>
public string Unit { get; init; } = string.Empty;
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 趋势统计摘要。
/// </summary>
public sealed class TrendStatisticsSummary
{
/// <summary>
/// 数据点数量。
/// </summary>
public int DataPointCount { get; init; }
/// <summary>
/// 最小值。
/// </summary>
public double MinValue { get; init; }
/// <summary>
/// 最大值。
/// </summary>
public double MaxValue { get; init; }
/// <summary>
/// 平均值。
/// </summary>
public double AverageValue { get; init; }
/// <summary>
/// 中位数。
/// </summary>
public double MedianValue { get; init; }
/// <summary>
/// 标准差。
/// </summary>
public double StandardDeviation { get; init; }
/// <summary>
/// 变异系数。
/// </summary>
public double CoefficientOfVariation => AverageValue > 0 ? StandardDeviation / AverageValue : 0.0;
}
/// <summary>
/// 统计配置。
/// </summary>
public sealed class StatisticsConfig
{
/// <summary>
/// 配置ID。
/// </summary>
public Guid ConfigId { get; init; }
/// <summary>
/// 配置类型。
/// </summary>
public StatisticsConfigType ConfigType { get; init; }
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 配置名称。
/// </summary>
public string ConfigName { get; init; } = string.Empty;
/// <summary>
/// 配置描述。
/// </summary>
public string ConfigDescription { get; init; } = string.Empty;
/// <summary>
/// 配置参数。
/// </summary>
public Dictionary<string, object> Parameters { get; init; } = new();
/// <summary>
/// 是否启用。
/// </summary>
public bool IsEnabled { get; init; } = true;
/// <summary>
/// 创建时间。
/// </summary>
public DateTime CreatedAtUtc { get; init; }
/// <summary>
/// 更新时间。
/// </summary>
public DateTime UpdatedAtUtc { get; init; }
/// <summary>
/// 版本号。
/// </summary>
public string Version { get; init; } = "1.0";
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 统计配置类型枚举。
/// </summary>
public enum StatisticsConfigType
{
/// <summary>
/// 节拍统计配置。
/// </summary>
CycleTime = 0,
/// <summary>
/// 班次统计配置。
/// </summary>
Shift = 1,
/// <summary>
/// 质量统计配置。
/// </summary>
Quality = 2,
/// <summary>
/// 设备统计配置。
/// </summary>
Equipment = 3,
/// <summary>
/// 报警统计配置。
/// </summary>
Alarm = 4,
/// <summary>
/// 效率统计配置。
/// </summary>
Efficiency = 5,
/// <summary>
/// 综合报告配置。
/// </summary>
Comprehensive = 6,
/// <summary>
/// 实时监控配置。
/// </summary>
RealTime = 7
}
/// <summary>
/// 统计导出请求。
/// </summary>
public sealed class StatisticsExportRequest
{
/// <summary>
/// 请求ID。
/// </summary>
public Guid RequestId { get; init; }
/// <summary>
/// 导出类型。
/// </summary>
public StatisticsExportType ExportType { get; init; }
/// <summary>
/// 导出格式。
/// </summary>
public ExportFormat ExportFormat { get; init; }
/// <summary>
/// 统计类型。
/// </summary>
public StatisticsType StatisticsType { get; init; }
/// <summary>
/// 时间范围。
/// </summary>
public TimeRange TimeRange { get; init; } = new();
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 统计粒度。
/// </summary>
public StatisticsGranularity Granularity { get; init; }
/// <summary>
/// 导出参数。
/// </summary>
public Dictionary<string, object> ExportParameters { get; init; } = new();
/// <summary>
/// 请求用户。
/// </summary>
public string RequestUser { get; init; } = string.Empty;
/// <summary>
/// 请求时间。
/// </summary>
public DateTime RequestTimeUtc { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 统计导出结果。
/// </summary>
public sealed class StatisticsExportResult
{
/// <summary>
/// 请求ID。
/// </summary>
public Guid RequestId { get; init; }
/// <summary>
/// 是否成功导出。
/// </summary>
public bool IsSuccess { get; init; }
/// <summary>
/// 导出文件路径。
/// </summary>
public string? FilePath { get; init; }
/// <summary>
/// 导出文件大小(字节)。
/// </summary>
public long FileSizeBytes { get; init; }
/// <summary>
/// 导出记录数量。
/// </summary>
public int RecordCount { get; init; }
/// <summary>
/// 导出耗时(毫秒)。
/// </summary>
public long ExportElapsedMs { get; init; }
/// <summary>
/// 导出时间。
/// </summary>
public DateTime ExportTimeUtc { get; init; }
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 统计导出类型枚举。
/// </summary>
public enum StatisticsExportType
{
/// <summary>
/// 节拍统计导出。
/// </summary>
CycleTime = 0,
/// <summary>
/// 班次统计导出。
/// </summary>
Shift = 1,
/// <summary>
/// 质量统计导出。
/// </summary>
Quality = 2,
/// <summary>
/// 设备统计导出。
/// </summary>
Equipment = 3,
/// <summary>
/// 报警统计导出。
/// </summary>
Alarm = 4,
/// <summary>
/// 效率统计导出。
/// </summary>
Efficiency = 5,
/// <summary>
/// 综合报告导出。
/// </summary>
Comprehensive = 6,
/// <summary>
/// 历史趋势导出。
/// </summary>
HistoricalTrend = 7
}
/// <summary>
/// 统计类型枚举。
/// </summary>
public enum StatisticsType
{
/// <summary>
/// 节拍统计。
/// </summary>
CycleTime = 0,
/// <summary>
/// 班次统计。
/// </summary>
Shift = 1,
/// <summary>
/// 生产效率统计。
/// </summary>
ProductionEfficiency = 2,
/// <summary>
/// 质量统计。
/// </summary>
Quality = 3,
/// <summary>
/// 设备利用率统计。
/// </summary>
EquipmentUtilization = 4,
/// <summary>
/// 报警统计摘要。
/// </summary>
AlarmSummary = 5,
/// <summary>
/// 综合生产报告。
/// </summary>
ComprehensiveReport = 6
}
/// <summary>
/// 班次类型枚举。
/// </summary>
public enum ShiftType
{
/// <summary>
/// 早班。
/// </summary>
Morning = 0,
/// <summary>
/// 中班。
/// </summary>
Afternoon = 1,
/// <summary>
/// 晚班。
/// </summary>
Night = 2,
/// <summary>
/// 通宵班。
/// </summary>
Overnight = 3,
/// <summary>
/// 全天班。
/// </summary>
AllDay = 4
}