using System;
using System.Collections.Generic;
using System.Linq;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Models;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Output;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Output
{
///
/// 人员分配推荐结果
/// 智能推荐系统生成的最优人员分配方案
/// 包含推荐列表、最优分配、置信度评估、冲突检测等全面信息
///
public class PersonnelAllocationRecommendation
{
#region 核心推荐数据
///
/// 推荐批次标识
/// 用于关联和追踪推荐过程
///
public string RecommendationBatchId { get; set; } = string.Empty;
///
/// 推荐生成时间
///
public DateTime GeneratedAt { get; set; } = DateTime.Now;
///
/// 推荐策略
/// 生成推荐时使用的分配策略
///
public string Strategy { get; set; } = string.Empty;
///
/// 推荐任务总数
///
public int TotalTaskCount { get; set; }
///
/// 成功推荐任务数
///
public int SuccessfulRecommendationCount { get; set; }
///
/// 推荐成功率
///
public double SuccessRate => TotalTaskCount > 0 ? (double)SuccessfulRecommendationCount / TotalTaskCount * 100 : 0;
#endregion
#region 详细推荐结果
///
/// 任务推荐映射
/// Key: 任务ID, Value: 推荐人员列表(按评分排序)
///
public Dictionary> Recommendations { get; set; } = new();
///
/// 最优分配方案
/// Key: 任务ID, Value: 最优推荐人员
///
public Dictionary OptimalAssignments { get; set; } = new();
///
/// 替代分配方案
/// 当最优方案不可行时的备选方案
///
public Dictionary> AlternativeAssignments { get; set; } = new();
#endregion
#region 质量评估指标
///
/// 推荐置信度 (0-100)
/// 对推荐结果准确性的整体信心程度
///
public double RecommendationConfidence { get; set; }
///
/// 推荐质量评分 (0-100)
/// 综合评估推荐结果的质量水平
///
public double QualityScore { get; set; }
///
/// 平均匹配分数
/// 所有推荐人员的平均匹配分数
///
public double AverageMatchScore { get; set; }
///
/// 最低匹配分数
/// 所有推荐人员中的最低匹配分数
///
public double MinimumMatchScore { get; set; }
///
/// 最高匹配分数
/// 所有推荐人员中的最高匹配分数
///
public double MaximumMatchScore { get; set; }
#endregion
#region 风险评估和冲突检测
///
/// 潜在冲突警告
/// 检测到的分配冲突和风险提示
///
public List ConflictWarnings { get; set; } = new();
///
/// 风险评估结果
/// 整体风险评估和风险分布
///
public RiskAssessment RiskAssessment { get; set; } = new();
///
/// 合规性检查结果
/// 推荐方案的合规性评估
///
public ComplianceCheckResult ComplianceCheck { get; set; } = new();
#endregion
#region 统计和分析数据
///
/// 人员利用率统计
/// 推荐方案中的人员工作负载分布
///
public Dictionary PersonnelUtilization { get; set; } = new();
///
/// 技能匹配统计
/// 推荐方案的整体技能匹配情况
///
public SkillMatchStatistics SkillMatchStats { get; set; } = new();
///
/// 负载均衡评估
/// 推荐方案的工作负载均衡程度
///
public LoadBalanceAssessment LoadBalanceAssessment { get; set; } = new();
#endregion
#region 推荐摘要和说明
///
/// 推荐摘要
/// 推荐结果的简要总结
///
public string RecommendationSummary { get; set; } = string.Empty;
///
/// 推荐依据
/// 生成推荐的具体理由和依据
///
public string RecommendationBasis { get; set; } = string.Empty;
///
/// 执行建议
/// 实施推荐方案的具体建议和注意事项
///
public List ExecutionAdvice { get; set; } = new();
///
/// 改进建议
/// 提高推荐质量的改进建议
///
public List ImprovementSuggestions { get; set; } = new();
#endregion
#region 性能指标
///
/// 推荐生成耗时(毫秒)
///
public long GenerationTimeMs { get; set; }
///
/// 推荐算法版本
///
public string AlgorithmVersion { get; set; } = string.Empty;
///
/// 使用的权重配置
///
public Dictionary UsedWeights { get; set; } = new();
#endregion
#region 构造函数
public PersonnelAllocationRecommendation()
{
Recommendations = new Dictionary>();
OptimalAssignments = new Dictionary();
AlternativeAssignments = new Dictionary>();
ConflictWarnings = new List();
ExecutionAdvice = new List();
ImprovementSuggestions = new List();
PersonnelUtilization = new Dictionary();
UsedWeights = new Dictionary();
}
#endregion
#region 辅助方法
///
/// 获取指定任务的推荐人员数量
///
/// 任务ID
/// 推荐人员数量
public int GetRecommendationCount(long taskId)
{
return Recommendations.TryGetValue(taskId, out var candidates) ? candidates.Count : 0;
}
///
/// 获取指定任务的最优推荐人员
///
/// 任务ID
/// 最优推荐人员,如果不存在则返回null
public PersonnelCandidate? GetOptimalCandidate(long taskId)
{
return OptimalAssignments.TryGetValue(taskId, out var candidate) ? candidate : null;
}
///
/// 检查是否有冲突警告
///
/// 是否存在冲突警告
public bool HasConflicts => ConflictWarnings.Any();
///
/// 获取高风险的冲突警告
///
/// 高风险冲突警告列表
public List GetHighRiskConflicts()
{
return ConflictWarnings.Where(c => c.RiskLevel == RiskLevel.High).ToList();
}
///
/// 计算整体推荐质量
///
/// 推荐质量评分
public double CalculateOverallQuality()
{
if (!OptimalAssignments.Any())
return 0;
var scores = OptimalAssignments.Values.Select(c => c.TotalScore);
return scores.Average();
}
#endregion
}
#region 相关数据模型
///
/// 冲突警告
///
public class ConflictWarning
{
///
/// 冲突描述
///
public string Description { get; set; } = string.Empty;
///
/// 涉及的任务ID
///
public List AffectedTaskIds { get; set; } = new();
///
/// 涉及的人员ID
///
public List AffectedPersonnelIds { get; set; } = new();
///
/// 风险等级
///
public RiskLevel RiskLevel { get; set; } = RiskLevel.Medium;
///
/// 建议解决方案
///
public List SuggestedSolutions { get; set; } = new();
///
/// 冲突发生时间
///
public DateTime ConflictTime { get; set; } = DateTime.Now;
}
///
/// 合规性检查结果
///
public class ComplianceCheckResult
{
///
/// 是否合规
///
public bool IsCompliant { get; set; } = true;
///
/// 合规性评分 (0-100)
///
public double ComplianceScore { get; set; }
///
/// 合规检查项目
///
public List CheckItems { get; set; } = new();
///
/// 不合规项目
///
public List Violations { get; set; } = new();
///
/// 合规性建议
///
public List ComplianceSuggestions { get; set; } = new();
}
///
/// 人员利用率统计
///
public class PersonnelUtilizationStats
{
///
/// 人员ID
///
public long PersonnelId { get; set; }
///
/// 人员姓名
///
public string PersonnelName { get; set; } = string.Empty;
///
/// 已分配任务数
///
public int AssignedTaskCount { get; set; }
///
/// 工作负载百分比
///
public double WorkloadPercentage { get; set; }
///
/// 是否超负荷
///
public bool IsOverloaded => WorkloadPercentage > 100;
///
/// 剩余可分配容量
///
public double RemainingCapacity { get; set; }
}
///
/// 技能匹配统计
///
public class SkillMatchStatistics
{
///
/// 平均技能匹配分数
///
public double AverageSkillMatchScore { get; set; }
///
/// 技能匹配分布
/// 各分数段的分布情况
///
public Dictionary ScoreDistribution { get; set; } = new();
///
/// 技能匹配率
///
public double SkillMatchRate { get; set; }
///
/// 技能提升建议
///
public List SkillImprovementSuggestions { get; set; } = new();
}
///
/// 负载均衡评估
///
public class LoadBalanceAssessment
{
///
/// 负载均衡评分 (0-100)
///
public double LoadBalanceScore { get; set; }
///
/// 负载分布情况
///
public Dictionary LoadDistribution { get; set; } = new();
///
/// 负载不均衡程度
///
public double LoadImbalanceDegree { get; set; }
///
/// 负载均衡建议
///
public List LoadBalanceSuggestions { get; set; } = new();
}
///
/// 合规检查项目
///
public class ComplianceCheckItem
{
///
/// 检查项目名称
///
public string ItemName { get; set; } = string.Empty;
///
/// 检查结果
///
public bool IsPassed { get; set; }
///
/// 检查详情
///
public string Details { get; set; } = string.Empty;
///
/// 检查时间
///
public DateTime CheckTime { get; set; } = DateTime.Now;
}
///
/// 合规违规
///
public class ComplianceViolation
{
///
/// 违规类型
///
public string ViolationType { get; set; } = string.Empty;
///
/// 违规描述
///
public string Description { get; set; } = string.Empty;
///
/// 违规严重程度
///
public ViolationSeverity Severity { get; set; } = ViolationSeverity.Warning;
///
/// 涉及的任务ID
///
public List AffectedTaskIds { get; set; } = new();
///
/// 涉及的人员ID
///
public List AffectedPersonnelIds { get; set; } = new();
}
#endregion
}