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

1416 lines
33 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;
namespace OrpaonVision.Core.AlarmSystem;
/// <summary>
/// 异常报警系统服务接口。
/// </summary>
public interface IAlarmSystemService
{
/// <summary>
/// 触发报警。
/// </summary>
/// <param name="alarmRequest">报警请求。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>报警结果。</returns>
Task<Result<AlarmResult>> TriggerAlarmAsync(AlarmRequest alarmRequest, CancellationToken cancellationToken = default);
/// <summary>
/// 确认报警。
/// </summary>
/// <param name="alarmId">报警ID。</param>
/// <param name="confirmUser">确认用户。</param>
/// <param name="confirmNote">确认备注。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>确认结果。</returns>
Task<Result<AlarmConfirmResult>> ConfirmAlarmAsync(Guid alarmId, string confirmUser, string? confirmNote = null, CancellationToken cancellationToken = default);
/// <summary>
/// 清除报警。
/// </summary>
/// <param name="alarmId">报警ID。</param>
/// <param name="clearUser">清除用户。</param>
/// <param name="clearNote">清除备注。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>清除结果。</returns>
Task<Result<AlarmClearResult>> ClearAlarmAsync(Guid alarmId, string clearUser, string? clearNote = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取报警栈。
/// </summary>
/// <param name="stackType">栈类型。</param>
/// <param name="maxCount">最大数量。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>报警栈。</returns>
Task<Result<IReadOnlyList<Alarm>>> GetAlarmStackAsync(AlarmStackType stackType, int maxCount = 100, CancellationToken cancellationToken = default);
/// <summary>
/// 获取活跃报警。
/// </summary>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>活跃报警列表。</returns>
Task<Result<IReadOnlyList<Alarm>>> GetActiveAlarmsAsync(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<IReadOnlyList<Alarm>>> GetAlarmHistoryAsync(DateTime startTime, DateTime endTime, AlarmLevel? alarmLevel = null, CancellationToken cancellationToken = default);
/// <summary>
/// 获取报警统计信息。
/// </summary>
/// <param name="startTime">开始时间。</param>
/// <param name="endTime">结束时间。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>统计信息。</returns>
Task<Result<AlarmStatistics>> GetAlarmStatisticsAsync(DateTime startTime, DateTime endTime, CancellationToken cancellationToken = default);
/// <summary>
/// 批量确认报警。
/// </summary>
/// <param name="alarmIds">报警ID列表。</param>
/// <param name="confirmUser">确认用户。</param>
/// <param name="confirmNote">确认备注。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>批量确认结果。</returns>
Task<Result<BatchAlarmConfirmResult>> BatchConfirmAlarmsAsync(IReadOnlyList<Guid> alarmIds, string confirmUser, string? confirmNote = null, CancellationToken cancellationToken = default);
/// <summary>
/// 批量清除报警。
/// </summary>
/// <param name="alarmIds">报警ID列表。</param>
/// <param name="clearUser">清除用户。</param>
/// <param name="clearNote">清除备注。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>批量清除结果。</returns>
Task<Result<BatchAlarmClearResult>> BatchClearAlarmsAsync(IReadOnlyList<Guid> alarmIds, string clearUser, string? clearNote = null, CancellationToken cancellationToken = default);
/// <summary>
/// 创建报警规则。
/// </summary>
/// <param name="rule">报警规则。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>创建结果。</returns>
Task<Result<AlarmRule>> CreateAlarmRuleAsync(AlarmRule rule, CancellationToken cancellationToken = default);
/// <summary>
/// 更新报警规则。
/// </summary>
/// <param name="rule">报警规则。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>更新结果。</returns>
Task<Result> UpdateAlarmRuleAsync(AlarmRule rule, CancellationToken cancellationToken = default);
/// <summary>
/// 删除报警规则。
/// </summary>
/// <param name="ruleId">规则ID。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>删除结果。</returns>
Task<Result> DeleteAlarmRuleAsync(Guid ruleId, CancellationToken cancellationToken = default);
/// <summary>
/// 获取报警规则列表。
/// </summary>
/// <param name="isEnabled">是否启用(可选)。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>规则列表。</returns>
Task<Result<IReadOnlyList<AlarmRule>>> GetAlarmRulesAsync(bool? isEnabled = null, CancellationToken cancellationToken = default);
/// <summary>
/// 检查报警条件。
/// </summary>
/// <param name="conditionCheckRequest">条件检查请求。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>检查结果。</returns>
Task<Result<IReadOnlyList<AlarmConditionCheckResult>>> CheckAlarmConditionsAsync(AlarmConditionCheckRequest conditionCheckRequest, CancellationToken cancellationToken = default);
/// <summary>
/// 获取报警恢复状态。
/// </summary>
/// <param name="alarmId">报警ID。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>恢复状态。</returns>
Task<Result<AlarmRecoveryStatus>> GetAlarmRecoveryStatusAsync(Guid alarmId, CancellationToken cancellationToken = default);
/// <summary>
/// 设置报警恢复状态。
/// </summary>
/// <param name="recoveryRequest">恢复请求。</param>
/// <param name="cancellationToken">取消令牌。</param>
/// <returns>设置结果。</returns>
Task<Result<AlarmRecoveryResult>> SetAlarmRecoveryStatusAsync(AlarmRecoveryRequest recoveryRequest, CancellationToken cancellationToken = default);
}
/// <summary>
/// 报警请求。
/// </summary>
public sealed class AlarmRequest
{
/// <summary>
/// 请求ID。
/// </summary>
public Guid RequestId { get; init; }
/// <summary>
/// 报警类型。
/// </summary>
public AlarmType AlarmType { get; init; }
/// <summary>
/// 报警级别。
/// </summary>
public AlarmLevel AlarmLevel { get; init; }
/// <summary>
/// 报警标题。
/// </summary>
public string Title { get; init; } = string.Empty;
/// <summary>
/// 报警描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 会话ID。
/// </summary>
public string SessionId { get; init; } = string.Empty;
/// <summary>
/// 相关层级。
/// </summary>
public int? RelatedLayer { get; init; }
/// <summary>
/// 相关部件。
/// </summary>
public string? RelatedPart { get; init; }
/// <summary>
/// 报警源。
/// </summary>
public string Source { get; init; } = string.Empty;
/// <summary>
/// 报警数据。
/// </summary>
public object? AlarmData { get; init; }
/// <summary>
/// 是否需要确认。
/// </summary>
public bool RequiresConfirmation { get; init; } = true;
/// <summary>
/// 是否自动清除。
/// </summary>
public bool AutoClear { get; init; } = false;
/// <summary>
/// 自动清除时间(秒)。
/// </summary>
public int AutoClearAfterSeconds { get; init; } = 0;
/// <summary>
/// 报警标签。
/// </summary>
public IReadOnlyList<string> Tags { get; init; } = Array.Empty<string>();
/// <summary>
/// 请求时间。
/// </summary>
public DateTime RequestTimeUtc { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警结果。
/// </summary>
public sealed class AlarmResult
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 请求ID。
/// </summary>
public Guid RequestId { get; init; }
/// <summary>
/// 是否成功触发。
/// </summary>
public bool IsTriggered { get; init; }
/// <summary>
/// 报警状态。
/// </summary>
public AlarmStatus AlarmStatus { get; init; }
/// <summary>
/// 触发时间。
/// </summary>
public DateTime TriggerTimeUtc { get; init; }
/// <summary>
/// 触发耗时(毫秒)。
/// </summary>
public long TriggerElapsedMs { get; init; }
/// <summary>
/// 报警级别。
/// </summary>
public AlarmLevel AlarmLevel { get; init; }
/// <summary>
/// 报警栈位置。
/// </summary>
public int StackPosition { get; init; }
/// <summary>
/// 是否重复报警。
/// </summary>
public bool IsDuplicate { get; init; }
/// <summary>
/// 重复报警数量。
/// </summary>
public int DuplicateCount { get; init; }
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警确认结果。
/// </summary>
public sealed class AlarmConfirmResult
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 是否成功确认。
/// </summary>
public bool IsConfirmed { get; init; }
/// <summary>
/// 确认时间。
/// </summary>
public DateTime ConfirmTimeUtc { get; init; }
/// <summary>
/// 确认用户。
/// </summary>
public string ConfirmUser { get; init; } = string.Empty;
/// <summary>
/// 确认备注。
/// </summary>
public string? ConfirmNote { get; init; }
/// <summary>
/// 确认前状态。
/// </summary>
public AlarmStatus PreviousStatus { get; init; }
/// <summary>
/// 确认后状态。
/// </summary>
public AlarmStatus NewStatus { get; init; }
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警清除结果。
/// </summary>
public sealed class AlarmClearResult
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 是否成功清除。
/// </summary>
public bool IsCleared { get; init; }
/// <summary>
/// 清除时间。
/// </summary>
public DateTime ClearTimeUtc { get; init; }
/// <summary>
/// 清除用户。
/// </summary>
public string ClearUser { get; init; } = string.Empty;
/// <summary>
/// 清除备注。
/// </summary>
public string? ClearNote { get; init; }
/// <summary>
/// 清除前状态。
/// </summary>
public AlarmStatus PreviousStatus { get; init; }
/// <summary>
/// 清除后状态。
/// </summary>
public AlarmStatus NewStatus { get; init; }
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 批量报警确认结果。
/// </summary>
public sealed class BatchAlarmConfirmResult
{
/// <summary>
/// 确认结果列表。
/// </summary>
public IReadOnlyList<AlarmConfirmResult> ConfirmResults { get; init; } = Array.Empty<AlarmConfirmResult>();
/// <summary>
/// 总报警数量。
/// </summary>
public int TotalAlarms { get; init; }
/// <summary>
/// 成功确认数量。
/// </summary>
public int ConfirmedCount { get; init; }
/// <summary>
/// 失败确认数量。
/// </summary>
public int FailedCount { get; init; }
/// <summary>
/// 确认用户。
/// </summary>
public string ConfirmUser { get; init; } = string.Empty;
/// <summary>
/// 批量操作时间。
/// </summary>
public DateTime BatchOperationTimeUtc { get; init; }
/// <summary>
/// 总耗时(毫秒)。
/// </summary>
public long TotalElapsedMs { get; init; }
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 批量报警清除结果。
/// </summary>
public sealed class BatchAlarmClearResult
{
/// <summary>
/// 清除结果列表。
/// </summary>
public IReadOnlyList<AlarmClearResult> ClearResults { get; init; } = Array.Empty<AlarmClearResult>();
/// <summary>
/// 总报警数量。
/// </summary>
public int TotalAlarms { get; init; }
/// <summary>
/// 成功清除数量。
/// </summary>
public int ClearedCount { get; init; }
/// <summary>
/// 失败清除数量。
/// </summary>
public int FailedCount { get; init; }
/// <summary>
/// 清除用户。
/// </summary>
public string ClearUser { get; init; } = string.Empty;
/// <summary>
/// 批量操作时间。
/// </summary>
public DateTime BatchOperationTimeUtc { get; init; }
/// <summary>
/// 总耗时(毫秒)。
/// </summary>
public long TotalElapsedMs { get; init; }
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警。
/// </summary>
public sealed class Alarm
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 报警类型。
/// </summary>
public AlarmType AlarmType { get; init; }
/// <summary>
/// 报警级别。
/// </summary>
public AlarmLevel AlarmLevel { get; init; }
/// <summary>
/// 报警标题。
/// </summary>
public string Title { get; init; } = string.Empty;
/// <summary>
/// 报警描述。
/// </summary>
public string Description { get; init; } = string.Empty;
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 会话ID。
/// </summary>
public string SessionId { get; init; } = string.Empty;
/// <summary>
/// 相关层级。
/// </summary>
public int? RelatedLayer { get; init; }
/// <summary>
/// 相关部件。
/// </summary>
public string? RelatedPart { get; init; }
/// <summary>
/// 报警源。
/// </summary>
public string Source { get; init; } = string.Empty;
/// <summary>
/// 报警数据。
/// </summary>
public object? AlarmData { get; init; }
/// <summary>
/// 报警状态。
/// </summary>
public AlarmStatus AlarmStatus { get; init; }
/// <summary>
/// 触发时间。
/// </summary>
public DateTime TriggerTimeUtc { get; init; }
/// <summary>
/// 确认时间。
/// </summary>
public DateTime? ConfirmTimeUtc { get; init; }
/// <summary>
/// 清除时间。
/// </summary>
public DateTime? ClearTimeUtc { get; init; }
/// <summary>
/// 确认用户。
/// </summary>
public string? ConfirmUser { get; init; }
/// <summary>
/// 清除用户。
/// </summary>
public string? ClearUser { get; init; }
/// <summary>
/// 确认备注。
/// </summary>
public string? ConfirmNote { get; init; }
/// <summary>
/// 清除备注。
/// </summary>
public string? ClearNote { get; init; }
/// <summary>
/// 报警标签。
/// </summary>
public IReadOnlyList<string> Tags { get; init; } = Array.Empty<string>();
/// <summary>
/// 报警栈位置。
/// </summary>
public int StackPosition { get; init; }
/// <summary>
/// 重复报警数量。
/// </summary>
public int DuplicateCount { get; init; }
/// <summary>
/// 是否重复报警。
/// </summary>
public bool IsDuplicate { get; init; }
/// <summary>
/// 原报警ID重复报警时
/// </summary>
public Guid? OriginalAlarmId { get; init; }
/// <summary>
/// 恢复状态。
/// </summary>
public AlarmRecoveryStatus? RecoveryStatus { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警统计信息。
/// </summary>
public sealed class AlarmStatistics
{
/// <summary>
/// 总报警数量。
/// </summary>
public int TotalAlarms { get; init; }
/// <summary>
/// 活跃报警数量。
/// </summary>
public int ActiveAlarms { get; init; }
/// <summary>
/// 已确认报警数量。
/// </summary>
public int ConfirmedAlarms { get; init; }
/// <summary>
/// 已清除报警数量。
/// </summary>
public int ClearedAlarms { get; init; }
/// <summary>
/// 按报警类型分组的统计。
/// </summary>
public Dictionary<AlarmType, AlarmTypeStatistics> ByAlarmType { get; init; } = new();
/// <summary>
/// 按报警级别分组的统计。
/// </summary>
public Dictionary<AlarmLevel, AlarmLevelStatistics> ByAlarmLevel { get; init; } = new();
/// <summary>
/// 按报警状态分组的统计。
/// </summary>
public Dictionary<AlarmStatus, AlarmStatusStatistics> ByAlarmStatus { get; init; } = new();
/// <summary>
/// 按产品类型分组的统计。
/// </summary>
public Dictionary<string, ProductTypeAlarmStatistics> ByProductType { get; init; } = new();
/// <summary>
/// 按报警源分组的统计。
/// </summary>
public Dictionary<string, AlarmSourceStatistics> ByAlarmSource { get; init; } = new();
/// <summary>
/// 重复报警统计。
/// </summary>
public DuplicateAlarmStatistics DuplicateAlarms { get; init; } = new();
/// <summary>
/// 平均确认时间(分钟)。
/// </summary>
public double AverageConfirmTimeMinutes { get; init; }
/// <summary>
/// 平均清除时间(分钟)。
/// </summary>
public double AverageClearTimeMinutes { get; init; }
/// <summary>
/// 统计开始时间。
/// </summary>
public DateTime StartTimeUtc { get; init; }
/// <summary>
/// 统计结束时间。
/// </summary>
public DateTime EndTimeUtc { get; init; }
}
/// <summary>
/// 报警类型统计。
/// </summary>
public sealed class AlarmTypeStatistics
{
/// <summary>
/// 报警类型。
/// </summary>
public AlarmType AlarmType { get; init; }
/// <summary>
/// 报警数量。
/// </summary>
public int AlarmCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
/// <summary>
/// 平均级别。
/// </summary>
public double AverageLevel { get; init; }
}
/// <summary>
/// 报警级别统计。
/// </summary>
public sealed class AlarmLevelStatistics
{
/// <summary>
/// 报警级别。
/// </summary>
public AlarmLevel AlarmLevel { get; init; }
/// <summary>
/// 报警数量。
/// </summary>
public int AlarmCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
}
/// <summary>
/// 报警状态统计。
/// </summary>
public sealed class AlarmStatusStatistics
{
/// <summary>
/// 报警状态。
/// </summary>
public AlarmStatus AlarmStatus { get; init; }
/// <summary>
/// 报警数量。
/// </summary>
public int AlarmCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
}
/// <summary>
/// 产品类型报警统计。
/// </summary>
public sealed class ProductTypeAlarmStatistics
{
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 报警数量。
/// </summary>
public int AlarmCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
/// <summary>
/// 平均级别。
/// </summary>
public double AverageLevel { get; init; }
}
/// <summary>
/// 报警源统计。
/// </summary>
public sealed class AlarmSourceStatistics
{
/// <summary>
/// 报警源。
/// </summary>
public string AlarmSource { get; init; } = string.Empty;
/// <summary>
/// 报警数量。
/// </summary>
public int AlarmCount { get; init; }
/// <summary>
/// 占比。
/// </summary>
public double Percentage { get; init; }
}
/// <summary>
/// 重复报警统计。
/// </summary>
public sealed class DuplicateAlarmStatistics
{
/// <summary>
/// 重复报警数量。
/// </summary>
public int DuplicateAlarmCount { get; init; }
/// <summary>
/// 重复报警占比。
/// </summary>
public double DuplicatePercentage { get; init; }
/// <summary>
/// 平均重复次数。
/// </summary>
public double AverageDuplicateCount { get; init; }
}
/// <summary>
/// 报警规则。
/// </summary>
public sealed class AlarmRule
{
/// <summary>
/// 规则ID。
/// </summary>
public Guid RuleId { get; init; }
/// <summary>
/// 规则名称。
/// </summary>
public string RuleName { get; init; } = string.Empty;
/// <summary>
/// 规则描述。
/// </summary>
public string RuleDescription { get; init; } = string.Empty;
/// <summary>
/// 报警类型。
/// </summary>
public AlarmType AlarmType { get; init; }
/// <summary>
/// 报警级别。
/// </summary>
public AlarmLevel AlarmLevel { get; init; }
/// <summary>
/// 触发条件。
/// </summary>
public string TriggerCondition { get; init; } = string.Empty;
/// <summary>
/// 触发阈值。
/// </summary>
public double TriggerThreshold { get; init; }
/// <summary>
/// 比较操作符。
/// </summary>
public ComparisonOperator ComparisonOperator { get; init; }
/// <summary>
/// 是否启用。
/// </summary>
public bool IsEnabled { get; init; } = true;
/// <summary>
/// 是否需要确认。
/// </summary>
public bool RequiresConfirmation { get; init; } = true;
/// <summary>
/// 是否自动清除。
/// </summary>
public bool AutoClear { get; init; } = false;
/// <summary>
/// 自动清除时间(秒)。
/// </summary>
public int AutoClearAfterSeconds { get; init; } = 0;
/// <summary>
/// 优先级。
/// </summary>
public int Priority { get; init; } = 1;
/// <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 sealed class AlarmConditionCheckRequest
{
/// <summary>
/// 检查上下文。
/// </summary>
public object CheckContext { get; init; } = new();
/// <summary>
/// 检查的规则ID列表可选不指定则检查所有启用的规则
/// </summary>
public IReadOnlyList<Guid>? RuleIds { get; init; }
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; init; } = string.Empty;
/// <summary>
/// 会话ID。
/// </summary>
public string SessionId { get; init; } = string.Empty;
/// <summary>
/// 检查时间。
/// </summary>
public DateTime CheckTimeUtc { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警条件检查结果。
/// </summary>
public sealed class AlarmConditionCheckResult
{
/// <summary>
/// 规则ID。
/// </summary>
public Guid RuleId { get; init; }
/// <summary>
/// 规则名称。
/// </summary>
public string RuleName { get; init; } = string.Empty;
/// <summary>
/// 是否触发报警。
/// </summary>
public bool ShouldTriggerAlarm { get; init; }
/// <summary>
/// 实际值。
/// </summary>
public double ActualValue { get; init; }
/// <summary>
/// 阈值。
/// </summary>
public double Threshold { get; init; }
/// <summary>
/// 检查时间。
/// </summary>
public DateTime CheckTimeUtc { get; init; }
/// <summary>
/// 检查详情。
/// </summary>
public string? CheckDetails { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警恢复状态。
/// </summary>
public sealed class AlarmRecoveryStatus
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 恢复状态。
/// </summary>
public RecoveryStatus Status { get; init; }
/// <summary>
/// 恢复时间。
/// </summary>
public DateTime? RecoveryTimeUtc { get; init; }
/// <summary>
/// 恢复原因。
/// </summary>
public string? RecoveryReason { get; init; }
/// <summary>
/// 恢复用户。
/// </summary>
public string? RecoveryUser { get; init; }
/// <summary>
/// 恢复检查次数。
/// </summary>
public int RecoveryCheckCount { get; init; }
/// <summary>
/// 最后检查时间。
/// </summary>
public DateTime LastCheckTimeUtc { get; init; }
/// <summary>
/// 下次检查时间。
/// </summary>
public DateTime NextCheckTimeUtc { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警恢复请求。
/// </summary>
public sealed class AlarmRecoveryRequest
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 恢复状态。
/// </summary>
public RecoveryStatus Status { get; init; }
/// <summary>
/// 恢复原因。
/// </summary>
public string? RecoveryReason { get; init; }
/// <summary>
/// 恢复用户。
/// </summary>
public string RecoveryUser { get; init; } = string.Empty;
/// <summary>
/// 是否自动恢复。
/// </summary>
public bool IsAutoRecovery { get; init; } = false;
/// <summary>
/// 恢复检查间隔(秒)。
/// </summary>
public int RecoveryCheckIntervalSeconds { get; init; } = 30;
/// <summary>
/// 请求时间。
/// </summary>
public DateTime RequestTimeUtc { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警恢复结果。
/// </summary>
public sealed class AlarmRecoveryResult
{
/// <summary>
/// 报警ID。
/// </summary>
public Guid AlarmId { get; init; }
/// <summary>
/// 是否成功设置。
/// </summary>
public bool IsSuccess { get; init; }
/// <summary>
/// 恢复状态。
/// </summary>
public RecoveryStatus Status { get; init; }
/// <summary>
/// 设置时间。
/// </summary>
public DateTime SetTimeUtc { get; init; }
/// <summary>
/// 设置用户。
/// </summary>
public string SetUser { get; init; } = string.Empty;
/// <summary>
/// 结果描述。
/// </summary>
public string? ResultDescription { get; init; }
/// <summary>
/// 扩展属性。
/// </summary>
public Dictionary<string, object> ExtendedProperties { get; init; } = new();
}
/// <summary>
/// 报警类型枚举。
/// </summary>
public enum AlarmType
{
/// <summary>
/// 系统报警。
/// </summary>
System = 0,
/// <summary>
/// 设备报警。
/// </summary>
Equipment = 1,
/// <summary>
/// 工艺报警。
/// </summary>
Process = 2,
/// <summary>
/// 质量报警。
/// </summary>
Quality = 3,
/// <summary>
/// 安全报警。
/// </summary>
Safety = 4,
/// <summary>
/// 性能报警。
/// </summary>
Performance = 5,
/// <summary>
/// 网络报警。
/// </summary>
Network = 6,
/// <summary>
/// 用户报警。
/// </summary>
User = 7,
/// <summary>
/// 自定义报警。
/// </summary>
Custom = 8
}
/// <summary>
/// 报警级别枚举。
/// </summary>
public enum AlarmLevel
{
/// <summary>
/// 信息级别。
/// </summary>
Info = 0,
/// <summary>
/// 警告级别。
/// </summary>
Warning = 1,
/// <summary>
/// 错误级别。
/// </summary>
Error = 2,
/// <summary>
/// 严重级别。
/// </summary>
Critical = 3,
/// <summary>
/// 致命级别。
/// </summary>
Fatal = 4
}
/// <summary>
/// 报警状态枚举。
/// </summary>
public enum AlarmStatus
{
/// <summary>
/// 活跃。
/// </summary>
Active = 0,
/// <summary>
/// 已确认。
/// </summary>
Confirmed = 1,
/// <summary>
/// 已清除。
/// </summary>
Cleared = 2,
/// <summary>
/// 已恢复。
/// </summary>
Recovered = 3,
/// <summary>
/// 已忽略。
/// </summary>
Ignored = 4
}
/// <summary>
/// 报警栈类型枚举。
/// </summary>
public enum AlarmStackType
{
/// <summary>
/// 活跃报警栈。
/// </summary>
Active = 0,
/// <summary>
/// 历史报警栈。
/// </summary>
History = 1,
/// <summary>
/// 确认报警栈。
/// </summary>
Confirmed = 2,
/// <summary>
/// 清除报警栈。
/// </summary>
Cleared = 3
}
/// <summary>
/// 恢复状态枚举。
/// </summary>
public enum RecoveryStatus
{
/// <summary>
/// 未恢复。
/// </summary>
NotRecovered = 0,
/// <summary>
/// 恢复中。
/// </summary>
Recovering = 1,
/// <summary>
/// 已恢复。
/// </summary>
Recovered = 2,
/// <summary>
/// 恢复失败。
/// </summary>
RecoveryFailed = 3
}
/// <summary>
/// 比较操作符枚举。
/// </summary>
public enum ComparisonOperator
{
/// <summary>
/// 等于。
/// </summary>
Equal = 0,
/// <summary>
/// 不等于。
/// </summary>
NotEqual = 1,
/// <summary>
/// 大于。
/// </summary>
GreaterThan = 2,
/// <summary>
/// 大于等于。
/// </summary>
GreaterThanOrEqual = 3,
/// <summary>
/// 小于。
/// </summary>
LessThan = 4,
/// <summary>
/// 小于等于。
/// </summary>
LessThanOrEqual = 5
}
/// <summary>
/// 报警通知类型枚举。
/// </summary>
public enum AlarmNotificationType
{
/// <summary>
/// UI通知。
/// </summary>
UI = 0,
/// <summary>
/// 日志通知。
/// </summary>
Log = 1,
/// <summary>
/// 邮件通知。
/// </summary>
Email = 2,
/// <summary>
/// 短信通知。
/// </summary>
SMS = 3,
/// <summary>
/// 声音通知。
/// </summary>
Sound = 4,
/// <summary>
/// 灯光通知。
/// </summary>
Light = 5,
/// <summary>
/// 推送通知。
/// </summary>
Push = 6,
/// <summary>
/// 自定义通知。
/// </summary>
Custom = 7
}