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