2541 lines
62 KiB
C#
2541 lines
62 KiB
C#
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
|
||
}
|