1416 lines
33 KiB
C#
1416 lines
33 KiB
C#
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
|
||
}
|