SOMS/YunDa.Domain/YunDa.SOMS.Entities/DataMonitoring/SecondaryCircuitInspectionPlanItem.cs

166 lines
4.9 KiB
C#
Raw Normal View History

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Abp.Domain.Entities.Auditing;
namespace YunDa.SOMS.Entities.DataMonitoring
{
/// <summary>
/// 二次回路巡检计划项表 - 连接巡检计划和巡检项的关联表
/// </summary>
[Table("dm_SecondaryCircuitInspectionPlanItem")]
public class SecondaryCircuitInspectionPlanItem : FullAuditedEntity<Guid>
{
/// <summary>
/// 巡检计划ID
/// </summary>
[Required]
public virtual Guid InspectionPlanId { get; set; }
/// <summary>
/// 巡检项ID
/// </summary>
[Required]
public virtual Guid InspectionItemId { get; set; }
/// <summary>
/// 执行顺序
/// </summary>
public virtual int ExecutionOrder { get; set; } = 0;
/// <summary>
/// 是否启用
/// </summary>
public virtual bool IsActive { get; set; } = true;
/// <summary>
/// 最后执行时间
/// </summary>
public virtual DateTime? LastExecutionTime { get; set; }
/// <summary>
/// 最后执行结果
/// </summary>
public virtual SecondaryCircuitInspectionResultStatus LastExecutionResult { get; set; } = SecondaryCircuitInspectionResultStatus.NotExecuted;
/// <summary>
/// 最后执行错误信息
/// </summary>
[StringLength(1000)]
public virtual string LastExecutionErrorMessage { get; set; }
/// <summary>
/// 执行次数
/// </summary>
public virtual int ExecutionCount { get; set; } = 0;
/// <summary>
/// 成功次数
/// </summary>
public virtual int SuccessCount { get; set; } = 0;
/// <summary>
/// 异常次数
/// </summary>
public virtual int AbnormalCount { get; set; } = 0;
/// <summary>
/// 错误次数
/// </summary>
public virtual int ErrorCount { get; set; } = 0;
/// <summary>
/// 平均执行耗时(毫秒)
/// </summary>
public virtual long AverageExecutionTimeMs { get; set; } = 0;
/// <summary>
/// 备注
/// </summary>
[StringLength(1000)]
public virtual string Remark { get; set; }
/// <summary>
/// 巡检计划导航属性
/// </summary>
[ForeignKey("InspectionPlanId")]
public virtual SecondaryCircuitInspectionPlan InspectionPlan { get; set; }
/// <summary>
/// 巡检项导航属性
/// </summary>
[ForeignKey("InspectionItemId")]
public virtual SecondaryCircuitInspectionItem InspectionItem { get; set; }
public SecondaryCircuitInspectionPlanItem()
{
Id = Guid.NewGuid();
}
/// <summary>
/// 更新执行统计信息
/// </summary>
/// <param name="result">执行结果</param>
/// <param name="executionTimeMs">执行耗时(毫秒)</param>
public void UpdateExecutionStatistics(SecondaryCircuitInspectionResultStatus result, long executionTimeMs)
{
LastExecutionTime = DateTime.Now;
LastExecutionResult = result;
ExecutionCount++;
switch (result)
{
case SecondaryCircuitInspectionResultStatus.Normal:
SuccessCount++;
break;
case SecondaryCircuitInspectionResultStatus.Abnormal:
AbnormalCount++;
break;
case SecondaryCircuitInspectionResultStatus.Error:
ErrorCount++;
break;
}
// 更新平均执行耗时
if (ExecutionCount > 1)
{
AverageExecutionTimeMs = (AverageExecutionTimeMs * (ExecutionCount - 1) + executionTimeMs) / ExecutionCount;
}
else
{
AverageExecutionTimeMs = executionTimeMs;
}
}
/// <summary>
/// 获取成功率
/// </summary>
/// <returns>成功率(百分比)</returns>
public decimal GetSuccessRate()
{
if (ExecutionCount == 0) return 0;
return (decimal)SuccessCount / ExecutionCount * 100;
}
/// <summary>
/// 获取异常率
/// </summary>
/// <returns>异常率(百分比)</returns>
public decimal GetAbnormalRate()
{
if (ExecutionCount == 0) return 0;
return (decimal)AbnormalCount / ExecutionCount * 100;
}
/// <summary>
/// 获取错误率
/// </summary>
/// <returns>错误率(百分比)</returns>
public decimal GetErrorRate()
{
if (ExecutionCount == 0) return 0;
return (decimal)ErrorCount / ExecutionCount * 100;
}
}
}