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
}