using System; using System.Collections.Generic; using System.Linq; using NPP.SmartSchedue.Api.Contracts.Services.Integration.Models; namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Output { /// /// 人员分配验证结果 /// 智能分配系统验证阶段的完整结果数据模型 /// 包含验证状态、违规详情、统计分析、改进建议等全面信息 /// public class PersonnelAllocationValidationResult { #region 核心验证结果 /// /// 验证是否通过 /// 整体验证结果的最终判定 /// public bool IsValid { get; set; } /// /// 验证通过的分配数量 /// public int PassedAssignmentCount { get; set; } /// /// 验证失败的分配数量 /// public int FailedAssignmentCount { get; set; } /// /// 总分配数量 /// public int TotalAssignmentCount => PassedAssignmentCount + FailedAssignmentCount; /// /// 验证通过率 (0-100) /// public double PassRate => TotalAssignmentCount > 0 ? (double)PassedAssignmentCount / TotalAssignmentCount * 100 : 0; #endregion #region 详细验证信息 /// /// 验证违规列表 /// 记录所有未通过验证的具体问题 /// public List Violations { get; set; } = new(); /// /// 验证警告列表 /// 记录潜在风险和建议关注的问题 /// public List Warnings { get; set; } = new(); /// /// 验证详细结果列表 /// 每个分配项的具体验证结果 /// public List ValidationDetails { get; set; } = new(); #endregion #region 质量评估指标 /// /// 验证质量评分 (0-100) /// 综合评估验证结果的质量水平 /// public double ValidationScore { get; set; } /// /// 验证置信度 (0-100) /// 对验证结果准确性的信心程度 /// public double ConfidenceLevel { get; set; } /// /// 风险等级 /// public ValidationRiskLevel RiskLevel { get; set; } = ValidationRiskLevel.Low; /// /// 业务影响评估 /// public BusinessImpactAssessment BusinessImpact { get; set; } = new(); #endregion #region 统计分析数据 /// /// 验证统计信息 /// 各类验证项的统计汇总 /// public ValidationStatistics Statistics { get; set; } = new(); /// /// 违规类型分布 /// Key: 违规类型, Value: 出现次数 /// public Dictionary ViolationTypeDistribution => AnalyzeViolationDistribution(); /// /// 人员验证通过率分析 /// Key: 人员ID, Value: 通过率 /// public Dictionary PersonnelPassRateAnalysis => AnalyzePersonnelPassRate(); /// /// 任务验证难度分析 /// Key: 任务ID, Value: 验证难度评分 /// public Dictionary TaskValidationDifficultyAnalysis => AnalyzeTaskDifficulty(); #endregion #region 验证执行信息 /// /// 验证执行开始时间 /// public DateTime ValidationStartTime { get; set; } /// /// 验证执行结束时间 /// public DateTime ValidationEndTime { get; set; } /// /// 验证执行耗时(毫秒) /// public long ExecutionTimeMs => (ValidationEndTime - ValidationStartTime).Ticks / TimeSpan.TicksPerMillisecond; /// /// 验证批次ID /// public string ValidationBatchId { get; set; } = string.Empty; /// /// 验证器版本 /// public string ValidatorVersion { get; set; } = "1.0.0"; #endregion #region 改进建议和报告 /// /// 验证报告摘要 /// 人性化的验证结果描述 /// public string ValidationReport { get; set; } = string.Empty; /// /// 改进建议列表 /// 针对验证问题的具体改进建议 /// public List ImprovementSuggestions { get; set; } = new(); /// /// 后续行动建议 /// 基于验证结果的下一步操作建议 /// public List ActionRecommendations { get; set; } = new(); /// /// 关键问题摘要 /// 最重要的验证问题汇总 /// public List CriticalIssuesSummary { get; set; } = new(); #endregion #region 性能和监控数据 /// /// 性能监控指标 /// 验证过程的性能数据 /// public Dictionary PerformanceMetrics { get; set; } = new(); /// /// 资源使用统计 /// public ResourceUsageStatistics ResourceUsage { get; set; } = new(); /// /// 验证缓存命中统计 /// public CacheStatistics CacheStatistics { get; set; } = new(); #endregion #region 辅助分析方法 /// /// 分析违规类型分布 /// private Dictionary AnalyzeViolationDistribution() { return Violations .GroupBy(v => v.ViolationType) .ToDictionary(g => g.Key, g => g.Count()); } /// /// 分析人员验证通过率 /// private Dictionary AnalyzePersonnelPassRate() { var personnelStats = ValidationDetails .GroupBy(d => d.PersonnelId) .ToDictionary( g => g.Key, g => g.Count(d => d.IsValid) / (double)g.Count() * 100 ); return personnelStats; } /// /// 分析任务验证难度 /// private Dictionary AnalyzeTaskDifficulty() { var taskDifficulty = ValidationDetails .GroupBy(d => d.WorkOrderId) .ToDictionary( g => g.Key, g => { var details = g.ToList(); var failureRate = details.Count(d => !d.IsValid) / (double)details.Count(); var avgViolationCount = details.Average(d => d.ViolationCount); return Math.Round((failureRate * 50) + (avgViolationCount * 10), 1); } ); return taskDifficulty; } /// /// 获取验证摘要信息 /// public ValidationSummary GetValidationSummary() { return new ValidationSummary { IsValid = IsValid, PassRate = PassRate, TotalAssignments = TotalAssignmentCount, CriticalViolations = Violations.Count(v => v.Severity == ViolationSeverity.Critical), HighViolations = Violations.Count(v => v.Severity == ViolationSeverity.High), MediumViolations = Violations.Count(v => v.Severity == ViolationSeverity.Medium), LowViolations = Violations.Count(v => v.Severity == ViolationSeverity.Low), WarningCount = Warnings.Count, ExecutionTimeMs = ExecutionTimeMs, ValidationScore = ValidationScore, RiskLevel = RiskLevel }; } /// /// 检查是否存在阻塞性问题 /// public bool HasBlockingIssues() { return Violations.Any(v => v.Severity >= ViolationSeverity.High && v.IsBlockingIssue); } /// /// 获取最高优先级的违规问题 /// public List GetHighPriorityViolations() { return Violations .Where(v => v.Severity >= ViolationSeverity.High) .OrderByDescending(v => v.Severity) .ThenByDescending(v => v.BusinessImpact) .ToList(); } /// /// 生成验证结果健康评分 /// public ValidationHealthScore CalculateHealthScore() { var score = new ValidationHealthScore(); // 基础通过率评分 score.PassRateScore = PassRate; // 违规严重程度扣分 score.ViolationImpactScore = 100 - Violations .Sum(v => (int)v.Severity * v.BusinessImpact) / Math.Max(1, Violations.Count); // 性能评分 score.PerformanceScore = ExecutionTimeMs < 5000 ? 100 : Math.Max(0, 100 - (ExecutionTimeMs - 5000) / 100); // 综合评分 score.OverallScore = (score.PassRateScore * 0.5 + score.ViolationImpactScore * 0.3 + score.PerformanceScore * 0.2); return score; } #endregion } #region 支持类定义 /// /// 人员分配验证违规信息 /// 继承自通用ValidationViolation,增加人员分配特定字段 /// public class PersonnelAllocationViolation : ValidationViolation { /// /// 工作任务ID /// public long WorkOrderId { get; set; } /// /// 人员ID /// public long PersonnelId { get; set; } /// /// 违规规则ID /// public string RuleId { get; set; } = string.Empty; /// /// 违规规则名称 /// public string RuleName { get; set; } = string.Empty; } /// /// 人员分配验证警告信息 /// 继承自通用ValidationWarning,增加人员分配特定字段 /// public class PersonnelAllocationWarning : ValidationWarning { /// /// 工作任务ID /// public long WorkOrderId { get; set; } /// /// 人员ID /// public long PersonnelId { get; set; } /// /// 警告描述 /// public string Description { get; set; } = string.Empty; /// /// 潜在风险描述 /// public string PotentialRisk { get; set; } = string.Empty; /// /// 预防建议 /// public List PreventionSuggestions { get; set; } = new(); } /// /// 分配验证详情 /// public class AssignmentValidationDetail { /// /// 工作任务ID /// public long WorkOrderId { get; set; } /// /// 人员ID /// public long PersonnelId { get; set; } /// /// 该分配项是否验证通过 /// public bool IsValid { get; set; } /// /// 违规数量 /// public int ViolationCount { get; set; } /// /// 警告数量 /// public int WarningCount { get; set; } /// /// 验证评分 (0-100) /// public double ValidationScore { get; set; } /// /// 验证耗时(毫秒) /// public long ValidationTimeMs { get; set; } /// /// 验证的具体项目 /// public List ValidationItems { get; set; } = new(); /// /// 验证状态 /// public string ValidationStatus { get; set; } = string.Empty; /// /// 验证备注 /// public string Remarks { get; set; } = string.Empty; } /// /// 验证项 /// public class ValidationItem { /// /// 验证项名称 /// public string ItemName { get; set; } = string.Empty; /// /// 验证结果 /// public bool IsValid { get; set; } /// /// 验证消息 /// public string Message { get; set; } = string.Empty; /// /// 验证耗时(毫秒) /// public long ExecutionTimeMs { get; set; } } /// /// 业务影响评估 /// public class BusinessImpactAssessment { /// /// 对生产效率的影响 (1-10) /// public int ProductionEfficiencyImpact { get; set; } /// /// 对成本控制的影响 (1-10) /// public int CostControlImpact { get; set; } /// /// 对质量管控的影响 (1-10) /// public int QualityControlImpact { get; set; } /// /// 对安全管理的影响 (1-10) /// public int SafetyManagementImpact { get; set; } /// /// 对合规性的影响 (1-10) /// public int ComplianceImpact { get; set; } /// /// 综合业务影响评分 (1-10) /// public double OverallBusinessImpact => (ProductionEfficiencyImpact + CostControlImpact + QualityControlImpact + SafetyManagementImpact + ComplianceImpact) / 5.0; } /// /// 验证统计信息 /// public class ValidationStatistics { /// /// 资质验证统计 /// public ValidationTypeStatistics QualificationValidation { get; set; } = new(); /// /// 时间冲突验证统计 /// public ValidationTypeStatistics TimeConflictValidation { get; set; } = new(); /// /// 工作限制验证统计 /// public ValidationTypeStatistics WorkLimitValidation { get; set; } = new(); /// /// 班次规则验证统计 /// public ValidationTypeStatistics ShiftRuleValidation { get; set; } = new(); /// /// 自定义规则验证统计 /// public ValidationTypeStatistics CustomRuleValidation { get; set; } = new(); } /// /// 验证类型统计 /// public class ValidationTypeStatistics { /// /// 验证项总数 /// public int TotalCount { get; set; } /// /// 通过数量 /// public int PassedCount { get; set; } /// /// 失败数量 /// public int FailedCount { get; set; } /// /// 跳过数量 /// public int SkippedCount { get; set; } /// /// 通过率 (0-100) /// public double PassRate => TotalCount > 0 ? (double)PassedCount / TotalCount * 100 : 0; /// /// 平均验证耗时(毫秒) /// public double AverageExecutionTimeMs { get; set; } } /// /// 改进建议 /// public class ImprovementSuggestion { /// /// 建议ID /// public string SuggestionId { get; set; } = Guid.NewGuid().ToString(); /// /// 建议类型 /// public SuggestionType Type { get; set; } = SuggestionType.Process; /// /// 建议标题 /// public string Title { get; set; } = string.Empty; /// /// 建议描述 /// public string Description { get; set; } = string.Empty; /// /// 优先级 (1-10) /// public int Priority { get; set; } = 5; /// /// 预期收益描述 /// public string ExpectedBenefit { get; set; } = string.Empty; /// /// 实施难度 (1-10) /// public int ImplementationDifficulty { get; set; } = 5; /// /// 相关的违规ID列表 /// public List RelatedViolationIds { get; set; } = new(); } /// /// 行动建议 /// public class ActionRecommendation { /// /// 行动类型 /// public ActionType ActionType { get; set; } = ActionType.Review; /// /// 行动描述 /// public string Description { get; set; } = string.Empty; /// /// 紧急程度 (1-10) /// public int UrgencyLevel { get; set; } = 5; /// /// 建议执行时间 /// public DateTime RecommendedExecutionTime { get; set; } /// /// 负责人角色 /// public string ResponsibleRole { get; set; } = string.Empty; } /// /// 资源使用统计 /// public class ResourceUsageStatistics { /// /// 峰值内存使用(字节) /// public long PeakMemoryUsageBytes { get; set; } /// /// CPU使用时间(毫秒) /// public long CpuTimeMs { get; set; } /// /// 数据库查询次数 /// public int DatabaseQueryCount { get; set; } /// /// 缓存查询次数 /// public int CacheQueryCount { get; set; } /// /// 网络请求次数 /// public int NetworkRequestCount { get; set; } } /// /// 缓存统计 /// public class CacheStatistics { /// /// 缓存命中次数 /// public int HitCount { get; set; } /// /// 缓存未命中次数 /// public int MissCount { get; set; } /// /// 缓存命中率 (0-100) /// public double HitRate => (HitCount + MissCount) > 0 ? (double)HitCount / (HitCount + MissCount) * 100 : 0; /// /// 缓存更新次数 /// public int UpdateCount { get; set; } /// /// 缓存清理次数 /// public int EvictionCount { get; set; } } /// /// 验证摘要 /// public class ValidationSummary { public bool IsValid { get; set; } public double PassRate { get; set; } public int TotalAssignments { get; set; } public int CriticalViolations { get; set; } public int HighViolations { get; set; } public int MediumViolations { get; set; } public int LowViolations { get; set; } public int WarningCount { get; set; } public long ExecutionTimeMs { get; set; } public double ValidationScore { get; set; } public ValidationRiskLevel RiskLevel { get; set; } } /// /// 验证健康评分 /// public class ValidationHealthScore { /// /// 通过率评分 (0-100) /// public double PassRateScore { get; set; } /// /// 违规影响评分 (0-100) /// public double ViolationImpactScore { get; set; } /// /// 性能评分 (0-100) /// public double PerformanceScore { get; set; } /// /// 综合评分 (0-100) /// public double OverallScore { get; set; } /// /// 健康等级 /// public HealthGrade Grade => DetermineGrade(); /// /// 确定健康等级 /// private HealthGrade DetermineGrade() { if (OverallScore >= 90) return HealthGrade.Excellent; if (OverallScore >= 80) return HealthGrade.Good; if (OverallScore >= 70) return HealthGrade.Fair; if (OverallScore >= 60) return HealthGrade.Poor; return HealthGrade.Critical; } } #endregion #region 枚举定义 /// /// 验证风险等级枚举 /// public enum ValidationRiskLevel { /// /// 低风险 /// Low = 1, /// /// 中风险 /// Medium = 2, /// /// 高风险 /// High = 3, /// /// 极高风险 /// Critical = 4 } /// /// 建议类型枚举 /// public enum SuggestionType { /// /// 流程改进 /// Process = 1, /// /// 系统配置 /// Configuration = 2, /// /// 人员培训 /// Training = 3, /// /// 技术升级 /// Technology = 4, /// /// 政策调整 /// Policy = 5 } /// /// 行动类型枚举 /// public enum ActionType { /// /// 立即处理 /// Immediate = 1, /// /// 审查复核 /// Review = 2, /// /// 计划改进 /// Improve = 3, /// /// 监控观察 /// Monitor = 4, /// /// 忽略接受 /// Accept = 5 } /// /// 健康等级枚举 /// public enum HealthGrade { /// /// 危险 /// Critical = 1, /// /// 差 /// Poor = 2, /// /// 一般 /// Fair = 3, /// /// 良好 /// Good = 4, /// /// 优秀 /// Excellent = 5 } #endregion }