using System; using System.Collections.Generic; using System.Linq; using NPP.SmartSchedue.Api.Contracts.Services.Integration.Input; namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Output { /// /// 优化权重配置执行结果 /// 智能分配系统优化权重应用的完整结果数据模型 /// 包含权重应用效果、性能分析、业务洞察等全面信息 /// 深度业务思考:评估权重配置对分配结果的实际影响和优化效果 /// public class OptimizationWeightsResult { #region 核心执行结果 /// /// 权重配置应用是否成功 /// public bool IsSuccessful { get; set; } /// /// 应用的权重配置 /// 记录实际使用的权重配置详情 /// public OptimizationWeights AppliedWeights { get; set; } = new(); /// /// 权重应用前的分配结果摘要 /// public AllocationResultSummary BeforeWeightApplication { get; set; } = new(); /// /// 权重应用后的分配结果摘要 /// public AllocationResultSummary AfterWeightApplication { get; set; } = new(); /// /// 权重应用改进效果 /// 量化权重配置带来的实际改进 /// public WeightApplicationImprovement Improvement { get; set; } = new(); #endregion #region 权重效果分析 /// /// 各权重维度的实际影响分析 /// Key: 权重维度名称, Value: 影响分析结果 /// public Dictionary DimensionImpactAnalysis { get; set; } = new(); /// /// 权重配置有效性评分 (0-100) /// 综合评估权重配置的有效性和合理性 /// public double WeightEffectivenessScore { get; set; } /// /// 权重分布均衡性分析 /// 评估权重配置的分布是否合理均衡 /// public WeightDistributionAnalysis DistributionAnalysis { get; set; } = new(); /// /// 权重敏感性分析 /// 分析各权重变化对结果的敏感程度 /// public Dictionary WeightSensitivityAnalysis { get; set; } = new(); #endregion #region 业务效果评估 /// /// 业务目标达成情况 /// 评估权重配置对各业务目标的达成效果 /// public BusinessObjectiveAchievement ObjectiveAchievement { get; set; } = new(); /// /// 分配质量提升分析 /// public AllocationQualityImprovement QualityImprovement { get; set; } = new(); /// /// 人员满意度影响评估 /// public PersonnelSatisfactionImpact SatisfactionImpact { get; set; } = new(); /// /// 运营效率影响分析 /// public OperationalEfficiencyImpact EfficiencyImpact { get; set; } = new(); #endregion #region 性能和统计数据 /// /// 权重应用执行时间(毫秒) /// public long ExecutionTimeMs { get; set; } /// /// 权重计算统计信息 /// public WeightCalculationStatistics CalculationStatistics { get; set; } = new(); /// /// 权重应用过程日志 /// 记录权重应用的详细过程 /// public List ApplicationLogs { get; set; } = new(); /// /// 性能监控指标 /// public Dictionary PerformanceMetrics { get; set; } = new(); #endregion #region 优化建议和报告 /// /// 权重优化建议 /// 基于执行结果提出的权重调整建议 /// public List OptimizationSuggestions { get; set; } = new(); /// /// 权重配置评估报告 /// 人性化的权重应用效果总结 /// public string EvaluationReport { get; set; } = string.Empty; /// /// 下一步行动建议 /// public List NextStepRecommendations { get; set; } = new(); /// /// 权重配置风险评估 /// public WeightConfigurationRisk RiskAssessment { get; set; } = new(); #endregion #region 比较和基准分析 /// /// 与历史权重配置的比较 /// public List HistoricalComparisons { get; set; } = new(); /// /// 与基准权重配置的比较 /// public Dictionary BenchmarkComparisons { get; set; } = new(); /// /// 权重配置排名 /// 在所有测试配置中的表现排名 /// public WeightConfigurationRanking ConfigurationRanking { get; set; } = new(); #endregion #region 辅助分析方法 /// /// 计算总体改进率 /// 综合各维度的改进情况 /// public double CalculateOverallImprovementRate() { if (BeforeWeightApplication.TotalScore <= 0) return 0; var qualityImprovement = (AfterWeightApplication.AverageQualityScore - BeforeWeightApplication.AverageQualityScore) / BeforeWeightApplication.AverageQualityScore; var successRateImprovement = (AfterWeightApplication.SuccessRate - BeforeWeightApplication.SuccessRate) / Math.Max(BeforeWeightApplication.SuccessRate, 1); var efficiencyImprovement = Improvement.EfficiencyImprovement / 100; return Math.Round((qualityImprovement + successRateImprovement + efficiencyImprovement) / 3 * 100, 2); } /// /// 获取最显著的权重影响因子 /// public List GetTopImpactFactors(int topCount = 5) { return DimensionImpactAnalysis.Values .OrderByDescending(impact => Math.Abs(impact.ImpactScore)) .Take(topCount) .Select(impact => new WeightImpactFactor { DimensionName = impact.DimensionName, ImpactScore = impact.ImpactScore, ImpactDescription = impact.ImpactDescription }) .ToList(); } /// /// 评估权重配置的稳定性 /// public WeightStabilityAssessment AssessConfigurationStability() { var assessment = new WeightStabilityAssessment(); // 计算权重标准差 var weights = AppliedWeights.ToDictionary().Values.ToList(); var mean = weights.Average(); var variance = weights.Sum(w => Math.Pow(w - mean, 2)) / weights.Count; assessment.WeightVariance = variance; assessment.WeightStandardDeviation = Math.Sqrt(variance); // 评估敏感性稳定性 var sensitivities = WeightSensitivityAnalysis.Values.ToList(); if (sensitivities.Any()) { assessment.SensitivityRange = sensitivities.Max() - sensitivities.Min(); assessment.AverageSensitivity = sensitivities.Average(); } // 确定稳定性等级 assessment.StabilityLevel = DetermineStabilityLevel(assessment); return assessment; } /// /// 确定权重配置稳定性等级 /// private WeightStabilityLevel DetermineStabilityLevel(WeightStabilityAssessment assessment) { if (assessment.WeightStandardDeviation < 0.1 && assessment.SensitivityRange < 0.2) return WeightStabilityLevel.VeryStable; if (assessment.WeightStandardDeviation < 0.2 && assessment.SensitivityRange < 0.4) return WeightStabilityLevel.Stable; if (assessment.WeightStandardDeviation < 0.3 && assessment.SensitivityRange < 0.6) return WeightStabilityLevel.ModeratelyStable; if (assessment.WeightStandardDeviation < 0.4 && assessment.SensitivityRange < 0.8) return WeightStabilityLevel.Unstable; return WeightStabilityLevel.VeryUnstable; } /// /// 生成权重配置摘要 /// public WeightResultSummary GenerateSummary() { return new WeightResultSummary { IsSuccessful = IsSuccessful, ConfigurationName = AppliedWeights.ConfigurationName, OverallImprovementRate = CalculateOverallImprovementRate(), WeightEffectivenessScore = WeightEffectivenessScore, TopImpactFactors = GetTopImpactFactors(3), StabilityAssessment = AssessConfigurationStability(), ExecutionTimeMs = ExecutionTimeMs, RecommendationCount = OptimizationSuggestions.Count, RiskLevel = RiskAssessment.OverallRiskLevel }; } #endregion } #region 支持类定义 /// /// 分配结果摘要 /// public class AllocationResultSummary { /// /// 总任务数 /// public int TotalTasks { get; set; } /// /// 成功分配数 /// public int SuccessfulAllocations { get; set; } /// /// 成功率 (0-100) /// public double SuccessRate => TotalTasks > 0 ? (double)SuccessfulAllocations / TotalTasks * 100 : 0; /// /// 平均质量评分 /// public double AverageQualityScore { get; set; } /// /// 总评分 /// public double TotalScore { get; set; } /// /// 公平性评分 /// public double FairnessScore { get; set; } /// /// 生成时间 /// public DateTime GeneratedTime { get; set; } = DateTime.Now; } /// /// 权重应用改进效果 /// public class WeightApplicationImprovement { /// /// 质量改进百分比 /// public double QualityImprovement { get; set; } /// /// 成功率改进百分比 /// public double SuccessRateImprovement { get; set; } /// /// 效率改进百分比 /// public double EfficiencyImprovement { get; set; } /// /// 公平性改进百分比 /// public double FairnessImprovement { get; set; } /// /// 综合改进评分 (0-100) /// public double OverallImprovementScore => (QualityImprovement + SuccessRateImprovement + EfficiencyImprovement + FairnessImprovement) / 4; /// /// 改进详细描述 /// public string ImprovementDescription { get; set; } = string.Empty; } /// /// 权重维度影响分析 /// public class WeightDimensionImpact { /// /// 权重维度名称 /// public string DimensionName { get; set; } = string.Empty; /// /// 权重值 /// public double WeightValue { get; set; } /// /// 影响评分 (-100 到 100) /// 正值表示正面影响,负值表示负面影响 /// public double ImpactScore { get; set; } /// /// 影响描述 /// public string ImpactDescription { get; set; } = string.Empty; /// /// 实际应用次数 /// 该权重维度在分配过程中被实际使用的次数 /// public int ApplicationCount { get; set; } /// /// 平均贡献度 /// 该权重维度对最终分配结果的平均贡献度 /// public double AverageContribution { get; set; } /// /// 标准差 /// 该权重维度贡献度的稳定性指标 /// public double StandardDeviation { get; set; } } /// /// 权重分布均衡性分析 /// public class WeightDistributionAnalysis { /// /// 权重分布方差 /// public double DistributionVariance { get; set; } /// /// 权重分布标准差 /// public double DistributionStandardDeviation { get; set; } /// /// 最大权重值 /// public double MaxWeight { get; set; } /// /// 最小权重值 /// public double MinWeight { get; set; } /// /// 权重范围 /// public double WeightRange => MaxWeight - MinWeight; /// /// 权重集中度 /// 衡量权重是否过于集中在某几个维度 /// public double ConcentrationIndex { get; set; } /// /// 分布均衡性评级 /// public DistributionBalance BalanceRating { get; set; } = DistributionBalance.Moderate; } /// /// 业务目标达成情况 /// public class BusinessObjectiveAchievement { /// /// 效率目标达成率 (0-100) /// public double EfficiencyAchievementRate { get; set; } /// /// 公平性目标达成率 (0-100) /// public double FairnessAchievementRate { get; set; } /// /// 质量目标达成率 (0-100) /// public double QualityAchievementRate { get; set; } /// /// 连续性目标达成率 (0-100) /// public double ContinuityAchievementRate { get; set; } /// /// 成本控制目标达成率 (0-100) /// public double CostControlAchievementRate { get; set; } /// /// 整体目标达成率 (0-100) /// public double OverallAchievementRate => (EfficiencyAchievementRate + FairnessAchievementRate + QualityAchievementRate + ContinuityAchievementRate + CostControlAchievementRate) / 5; /// /// 目标达成详情 /// public List AchievementDetails { get; set; } = new(); } /// /// 目标达成详情 /// public class ObjectiveAchievementDetail { /// /// 目标名称 /// public string ObjectiveName { get; set; } = string.Empty; /// /// 目标值 /// public double TargetValue { get; set; } /// /// 实际值 /// public double ActualValue { get; set; } /// /// 达成率 (0-100) /// public double AchievementRate => TargetValue > 0 ? Math.Min(100, ActualValue / TargetValue * 100) : 0; /// /// 达成状态 /// public AchievementStatus Status { get; set; } = AchievementStatus.InProgress; } /// /// 分配质量提升分析 /// public class AllocationQualityImprovement { /// /// 匹配度提升 /// public double MatchingImprovement { get; set; } /// /// 约束符合度提升 /// public double ConstraintComplianceImprovement { get; set; } /// /// 风险降低程度 /// public double RiskReduction { get; set; } /// /// 稳定性提升 /// public double StabilityImprovement { get; set; } /// /// 质量提升详细报告 /// public string QualityImprovementReport { get; set; } = string.Empty; } /// /// 人员满意度影响评估 /// public class PersonnelSatisfactionImpact { /// /// 工作负载满意度变化 /// public double WorkloadSatisfactionChange { get; set; } /// /// 班次安排满意度变化 /// public double ShiftSatisfactionChange { get; set; } /// /// 技能匹配满意度变化 /// public double SkillMatchSatisfactionChange { get; set; } /// /// 整体满意度变化 /// public double OverallSatisfactionChange => (WorkloadSatisfactionChange + ShiftSatisfactionChange + SkillMatchSatisfactionChange) / 3; /// /// 满意度影响详情 /// public List ImpactDetails { get; set; } = new(); } /// /// 满意度影响详情 /// public class SatisfactionImpactDetail { /// /// 人员ID /// public long PersonnelId { get; set; } /// /// 人员姓名 /// public string PersonnelName { get; set; } = string.Empty; /// /// 满意度变化分数 /// public double SatisfactionChange { get; set; } /// /// 变化原因 /// public string ChangeReason { get; set; } = string.Empty; } /// /// 运营效率影响分析 /// public class OperationalEfficiencyImpact { /// /// 分配效率提升 (%) /// public double AllocationEfficiencyImprovement { get; set; } /// /// 执行时间减少 (%) /// public double ExecutionTimeReduction { get; set; } /// /// 资源利用率提升 (%) /// public double ResourceUtilizationImprovement { get; set; } /// /// 整体运营效率改进 (%) /// public double OverallEfficiencyImprovement => (AllocationEfficiencyImprovement + ExecutionTimeReduction + ResourceUtilizationImprovement) / 3; /// /// 效率影响报告 /// public string EfficiencyImpactReport { get; set; } = string.Empty; } /// /// 权重计算统计信息 /// public class WeightCalculationStatistics { /// /// 总计算次数 /// public int TotalCalculations { get; set; } /// /// 平均计算时间(毫秒) /// public double AverageCalculationTimeMs { get; set; } /// /// 权重应用成功次数 /// public int SuccessfulApplications { get; set; } /// /// 权重应用失败次数 /// public int FailedApplications { get; set; } /// /// 应用成功率 (0-100) /// public double ApplicationSuccessRate => TotalCalculations > 0 ? (double)SuccessfulApplications / TotalCalculations * 100 : 0; /// /// 缓存命中次数 /// public int CacheHits { get; set; } /// /// 缓存未命中次数 /// public int CacheMisses { get; set; } /// /// 缓存命中率 (0-100) /// public double CacheHitRate => (CacheHits + CacheMisses) > 0 ? (double)CacheHits / (CacheHits + CacheMisses) * 100 : 0; } /// /// 权重应用日志 /// public class WeightApplicationLog { /// /// 日志时间 /// public DateTime LogTime { get; set; } = DateTime.Now; /// /// 日志级别 /// public LogLevel Level { get; set; } = LogLevel.Info; /// /// 日志消息 /// public string Message { get; set; } = string.Empty; /// /// 相关的权重维度 /// public string WeightDimension { get; set; } = string.Empty; /// /// 详细数据 /// public Dictionary Details { get; set; } = new(); } /// /// 权重优化建议 /// public class WeightOptimizationSuggestion { /// /// 建议ID /// public string SuggestionId { get; set; } = Guid.NewGuid().ToString(); /// /// 建议类型 /// public OptimizationSuggestionType Type { get; set; } = OptimizationSuggestionType.WeightAdjustment; /// /// 建议标题 /// public string Title { get; set; } = string.Empty; /// /// 建议描述 /// public string Description { get; set; } = string.Empty; /// /// 目标权重维度 /// public string TargetDimension { get; set; } = string.Empty; /// /// 当前值 /// public double CurrentValue { get; set; } /// /// 建议值 /// public double SuggestedValue { get; set; } /// /// 预期改进效果 /// public double ExpectedImprovement { get; set; } /// /// 优先级 (1-10) /// public int Priority { get; set; } = 5; /// /// 置信度 (0-100) /// public double Confidence { get; set; } = 80; /// /// 建议理由 /// public string Rationale { get; set; } = string.Empty; } /// /// 权重行动建议 /// public class WeightActionRecommendation { /// /// 行动类型 /// public WeightActionType ActionType { get; set; } = WeightActionType.Monitor; /// /// 行动描述 /// public string ActionDescription { get; set; } = string.Empty; /// /// 建议执行时间 /// public DateTime RecommendedExecutionTime { get; set; } /// /// 紧急程度 (1-10) /// public int UrgencyLevel { get; set; } = 5; /// /// 负责角色 /// public string ResponsibleRole { get; set; } = string.Empty; /// /// 预期结果 /// public string ExpectedOutcome { get; set; } = string.Empty; } /// /// 权重配置风险评估 /// public class WeightConfigurationRisk { /// /// 整体风险等级 /// public RiskLevel OverallRiskLevel { get; set; } = RiskLevel.Low; /// /// 风险因子列表 /// public List RiskFactors { get; set; } = new(); /// /// 风险评分 (0-100) /// public double RiskScore { get; set; } /// /// 风险描述 /// public string RiskDescription { get; set; } = string.Empty; /// /// 缓解建议 /// public List MitigationSuggestions { get; set; } = new(); } /// /// 权重风险因子 /// public class WeightRiskFactor { /// /// 风险类型 /// public string RiskType { get; set; } = string.Empty; /// /// 风险描述 /// public string Description { get; set; } = string.Empty; /// /// 风险等级 /// public RiskLevel Level { get; set; } = RiskLevel.Low; /// /// 风险概率 (0-100) /// public double Probability { get; set; } /// /// 风险影响 (0-100) /// public double Impact { get; set; } } /// /// 历史权重配置比较 /// public class HistoricalWeightComparison { /// /// 比较日期 /// public DateTime ComparisonDate { get; set; } /// /// 历史配置名称 /// public string HistoricalConfigurationName { get; set; } = string.Empty; /// /// 性能改进 (%) /// public double PerformanceImprovement { get; set; } /// /// 质量改进 (%) /// public double QualityImprovement { get; set; } /// /// 比较摘要 /// public string ComparisonSummary { get; set; } = string.Empty; } /// /// 基准比较 /// public class BenchmarkComparison { /// /// 基准名称 /// public string BenchmarkName { get; set; } = string.Empty; /// /// 相对表现 (%) /// public double RelativePerformance { get; set; } /// /// 比较维度 /// public Dictionary ComparisonDimensions { get; set; } = new(); /// /// 比较结果 /// public ComparisonResult Result { get; set; } = ComparisonResult.Equal; } /// /// 权重配置排名 /// public class WeightConfigurationRanking { /// /// 整体排名 /// public int OverallRank { get; set; } /// /// 总配置数量 /// public int TotalConfigurations { get; set; } /// /// 百分位排名 /// public double PercentileRank => TotalConfigurations > 0 ? (double)(TotalConfigurations - OverallRank + 1) / TotalConfigurations * 100 : 0; /// /// 各维度排名 /// public Dictionary DimensionRankings { get; set; } = new(); /// /// 排名变化趋势 /// public RankingTrend Trend { get; set; } = RankingTrend.Stable; } /// /// 权重影响因子 /// public class WeightImpactFactor { /// /// 维度名称 /// public string DimensionName { get; set; } = string.Empty; /// /// 影响评分 /// public double ImpactScore { get; set; } /// /// 影响描述 /// public string ImpactDescription { get; set; } = string.Empty; } /// /// 权重稳定性评估 /// public class WeightStabilityAssessment { /// /// 权重方差 /// public double WeightVariance { get; set; } /// /// 权重标准差 /// public double WeightStandardDeviation { get; set; } /// /// 敏感性范围 /// public double SensitivityRange { get; set; } /// /// 平均敏感性 /// public double AverageSensitivity { get; set; } /// /// 稳定性等级 /// public WeightStabilityLevel StabilityLevel { get; set; } = WeightStabilityLevel.Stable; } /// /// 权重结果摘要 /// public class WeightResultSummary { /// /// 执行是否成功 /// public bool IsSuccessful { get; set; } /// /// 配置名称 /// public string ConfigurationName { get; set; } = string.Empty; /// /// 整体改进率 (%) /// public double OverallImprovementRate { get; set; } /// /// 权重有效性评分 /// public double WeightEffectivenessScore { get; set; } /// /// 主要影响因子 /// public List TopImpactFactors { get; set; } = new(); /// /// 稳定性评估 /// public WeightStabilityAssessment StabilityAssessment { get; set; } = new(); /// /// 执行时间(毫秒) /// public long ExecutionTimeMs { get; set; } /// /// 建议数量 /// public int RecommendationCount { get; set; } /// /// 风险等级 /// public RiskLevel RiskLevel { get; set; } = RiskLevel.Low; } #endregion #region 枚举定义 /// /// 分布均衡性枚举 /// public enum DistributionBalance { /// /// 非常不均衡 /// VeryUnbalanced = 1, /// /// 不均衡 /// Unbalanced = 2, /// /// 适中 /// Moderate = 3, /// /// 均衡 /// Balanced = 4, /// /// 非常均衡 /// VeryBalanced = 5 } /// /// 达成状态枚举 /// public enum AchievementStatus { /// /// 未开始 /// NotStarted = 0, /// /// 进行中 /// InProgress = 1, /// /// 已达成 /// Achieved = 2, /// /// 超额达成 /// Exceeded = 3, /// /// 未达成 /// Failed = 4 } /// /// 日志级别枚举 /// public enum LogLevel { /// /// 调试 /// Debug = 0, /// /// 信息 /// Info = 1, /// /// 警告 /// Warning = 2, /// /// 错误 /// Error = 3, /// /// 严重错误 /// Critical = 4 } /// /// 优化建议类型枚举 /// public enum OptimizationSuggestionType { /// /// 权重调整 /// WeightAdjustment = 1, /// /// 策略变更 /// StrategyChange = 2, /// /// 配置优化 /// ConfigurationOptimization = 3, /// /// 规则调整 /// RuleAdjustment = 4, /// /// 性能优化 /// PerformanceOptimization = 5 } /// /// 权重行动类型枚举 /// public enum WeightActionType { /// /// 立即调整 /// ImmediateAdjustment = 1, /// /// 监控观察 /// Monitor = 2, /// /// 详细分析 /// DetailedAnalysis = 3, /// /// 配置备份 /// ConfigurationBackup = 4, /// /// 回滚配置 /// ConfigurationRollback = 5 } /// /// 比较结果枚举 /// public enum ComparisonResult { /// /// 明显更差 /// MuchWorse = -2, /// /// 更差 /// Worse = -1, /// /// 相等 /// Equal = 0, /// /// 更好 /// Better = 1, /// /// 明显更好 /// MuchBetter = 2 } /// /// 排名趋势枚举 /// public enum RankingTrend { /// /// 下降 /// Declining = -1, /// /// 稳定 /// Stable = 0, /// /// 上升 /// Rising = 1 } /// /// 权重稳定性等级枚举 /// public enum WeightStabilityLevel { /// /// 非常不稳定 /// VeryUnstable = 1, /// /// 不稳定 /// Unstable = 2, /// /// 中等稳定 /// ModeratelyStable = 3, /// /// 稳定 /// Stable = 4, /// /// 非常稳定 /// VeryStable = 5 } #endregion }