using System;
using System.Collections.Generic;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Output
{
///
/// 智能整合结果
/// 记录智能任务整合的完整执行结果和统计信息
///
/// 业务价值:
/// 1. 结果追踪:详细记录整合执行的完整结果
/// 2. 性能评估:提供整合后的效果评估和性能指标
/// 3. 问题诊断:记录失败原因和改进建议
/// 4. 决策支持:为后续优化提供数据支撑
/// 5. 审计追踪:支持操作审计和合规性检查
///
public class SmartIntegrationResult
{
#region 核心执行状态
///
/// 整合是否成功
///
public bool IsSuccess { get; set; }
///
/// 整合批次编码
/// 格式:INT + yyyyMMddHHmmss + XXX,总长度23字符
///
public string IntegrationBatchCode { get; set; } = string.Empty;
///
/// 整合记录ID
/// 关联到数据库中的整合记录表
///
public long IntegrationRecordId { get; set; }
///
/// 完成时间
///
public DateTime CompletionTime { get; set; } = DateTime.Now;
///
/// 执行耗时(毫秒)
///
public long ElapsedMilliseconds { get; set; }
#endregion
#region 分配结果
///
/// 人员分配结果
/// 包含成功分配、失败分配、公平性评分等详细信息
///
public PersonnelAllocationResult PersonnelAllocation { get; set; } = new();
///
/// 设备分配结果
/// 包含成功分配、失败分配、利用率分析等详细信息
///
public EquipmentAllocationResult EquipmentAllocation { get; set; } = new();
#endregion
#region 统计信息
///
/// 成功分配的任务数量
///
public int SuccessfulTaskCount { get; set; }
///
/// 总体成功率(0-1)
/// 计算公式:成功任务数量 / 总任务数量
///
public double OverallSuccessRate { get; set; }
///
/// 失败任务列表
/// 包含失败原因、类型和冲突详情
///
public List FailedTasks { get; set; } = new();
#endregion
#region 详细信息和报告
///
/// 整合详情
/// 包含整合过程的详细描述和结果摘要
///
public string IntegrationDetails { get; set; } = string.Empty;
///
/// 改进建议列表
/// 基于整合结果生成的优化建议
///
public List ImprovementSuggestions { get; set; } = new();
///
/// 警告信息列表
/// 整合过程中产生的警告信息
///
public List WarningMessages { get; set; } = new();
#endregion
#region 性能和质量指标
///
/// 人员分配公平性评分(0-100)
/// 评估人员分配是否公平合理
///
public double PersonnelFairnessScore => PersonnelAllocation?.FairnessScore ?? 0;
///
/// 设备利用率(百分比)
/// 设备分配后的整体利用率
///
public decimal EquipmentUtilizationRate => EquipmentAllocation?.OverallUtilizationRate ?? 0;
///
/// 整合质量评分(0-100)
/// 综合考虑成功率、公平性、利用率等因素
///
public double IntegrationQualityScore => CalculateIntegrationQualityScore();
#endregion
#region 操作信息
///
/// 操作员用户ID
///
public long OperatorUserId { get; set; }
///
/// 操作员姓名
///
public string OperatorName { get; set; } = string.Empty;
///
/// 操作时间
///
public DateTime OperationTime { get; set; } = DateTime.Now;
#endregion
#region 业务统计
///
/// 涉及的项目数量
///
public int ProjectCount { get; set; }
///
/// 涉及的项目编号列表
///
public List ProjectNumbers { get; set; } = new();
///
/// 任务优先级分布
/// 记录不同优先级任务的数量分布
///
public Dictionary TaskPriorityDistribution { get; set; } = new();
///
/// 任务复杂度分布
/// 记录不同复杂度任务的数量分布
///
public Dictionary TaskComplexityDistribution { get; set; } = new();
#endregion
#region 系统信息
///
/// 系统版本信息
///
public string SystemVersion { get; set; } = string.Empty;
///
/// 执行环境信息
///
public string ExecutionEnvironment { get; set; } = string.Empty;
///
/// 数据库连接信息(脱敏)
///
public string DatabaseInfo { get; set; } = string.Empty;
#endregion
#region 私有方法
///
/// 计算整合质量评分
/// 综合考虑多个维度的质量指标
///
private double CalculateIntegrationQualityScore()
{
var successRateWeight = 0.4;
var fairnessWeight = 0.3;
var utilizationWeight = 0.2;
var efficiencyWeight = 0.1;
var successRateScore = OverallSuccessRate * 100;
var fairnessScore = PersonnelFairnessScore;
var utilizationScore = (double)EquipmentUtilizationRate;
var efficiencyScore = ElapsedMilliseconds > 0 ? Math.Min(100, 10000.0 / ElapsedMilliseconds * 100) : 0;
return successRateScore * successRateWeight +
fairnessScore * fairnessWeight +
utilizationScore * utilizationWeight +
efficiencyScore * efficiencyWeight;
}
#endregion
}
}