using System;
using System.Collections.Generic;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Output;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Input
{
///
/// 处理任务变更输入
/// 用于检测和处理发布后的任务变更,触发智能重新分配
///
public class ProcessTaskChangesInput
{
///
/// 变更的任务ID列表
/// 指定需要处理变更的任务
///
public List ChangedTaskIds { get; set; } = new();
///
/// 整合记录ID
/// 指定要更新的整合记录
///
public long IntegrationRecordId { get; set; }
///
/// 变更触发源
/// TaskModification-任务修改, ResourceUnavailable-资源不可用, ConflictDetected-冲突检测, UserRequest-用户请求
///
public string ChangeTriggerSource { get; set; } = "TaskModification";
///
/// 处理策略
/// AutoReallocation-自动重新分配, ManualReview-手动审核, CreateNewVersion-创建新版本
///
public string ProcessingStrategy { get; set; } = "AutoReallocation";
///
/// 操作员用户ID
///
public long OperatorUserId { get; set; }
///
/// 操作员用户名
///
public string OperatorUserName { get; set; } = string.Empty;
///
/// 操作员真实姓名
///
public string OperatorRealName { get; set; } = string.Empty;
///
/// 变更原因说明
///
public string ChangeReason { get; set; } = string.Empty;
///
/// 是否强制重新分配
/// 即使影响评分较低也强制执行重新分配
///
public bool ForceReallocation { get; set; } = false;
///
/// 是否保持现有分配
/// 尽量保持当前的人员和设备分配,只调整有问题的部分
///
public bool PreserveExistingAllocations { get; set; } = true;
///
/// 重新分配范围
/// ChangedOnly-仅重新分配变更的任务, Affected-重新分配受影响的任务, All-重新分配所有任务
///
public string ReallocationScope { get; set; } = "Affected";
///
/// 优先级调整策略
/// None-不调整, Boost-提升变更任务优先级, Balance-平衡所有任务优先级
///
public string PriorityAdjustmentStrategy { get; set; } = "None";
///
/// 通知相关人员
/// 变更处理完成后是否通知受影响的人员
///
public bool NotifyAffectedPersonnel { get; set; } = true;
///
/// 创建变更日志
/// 是否详细记录变更处理过程
///
public bool CreateChangeLog { get; set; } = true;
///
/// 允许的最大处理时间(分钟)
/// 超时则转为手动处理
///
public int MaxProcessingTimeMinutes { get; set; } = 30;
///
/// 业务备注
///
public string Remarks { get; set; } = string.Empty;
///
/// 分析深度
/// 指定变更分析的深度级别
///
public TaskChangeAnalysisDepth AnalysisDepth { get; set; } = TaskChangeAnalysisDepth.Standard;
///
/// 版本创建原因
/// 当处理策略为CreateNewVersion时使用
///
public string VersionReason { get; set; } = string.Empty;
///
/// 是否发送通知
/// 处理完成后是否发送通知给相关人员
///
public bool SendNotifications { get; set; } = true;
}
///
/// 智能重新分配输入
/// 用于触发智能重新分配算法
///
public class SmartReallocationInput
{
///
/// 整合记录ID(根版本ID)
///
public long RootIntegrationRecordId { get; set; }
///
/// 需要重新分配的任务ID列表
/// 为空则表示重新分配所有任务
///
public List TaskIdsToReallocate { get; set; } = new();
///
/// 重新分配策略配置
/// 可以重用原策略或指定新策略
///
public SmartReallocationStrategyConfig Strategy { get; set; } = new();
///
/// 约束条件
/// 指定重新分配时需要遵守的约束条件
///
public List Constraints { get; set; } = new();
///
/// 操作员用户ID
///
public long OperatorUserId { get; set; }
///
/// 操作员用户名
///
public string OperatorUserName { get; set; } = string.Empty;
///
/// 操作员真实姓名
///
public string OperatorRealName { get; set; } = string.Empty;
///
/// 重新分配原因
///
public string ReallocationReason { get; set; } = string.Empty;
///
/// 是否创建新版本
/// true-创建新版本保留历史, false-更新当前版本
///
public bool CreateNewVersion { get; set; } = true;
///
/// 预期完成时间
/// 指定重新分配的预期完成时间
///
public DateTime? ExpectedCompletionTime { get; set; }
///
/// 质量优先级
/// 分配时的质量要求优先级:Low, Medium, High, Critical
///
public string QualityPriority { get; set; } = "Medium";
///
/// 成本控制要求
/// 是否需要考虑成本控制
///
public bool ConsiderCostControl { get; set; } = false;
///
/// 最大成本预算
///
public decimal? MaxBudget { get; set; }
///
/// 业务备注
///
public string Remarks { get; set; } = string.Empty;
///
/// 整合记录ID
/// 相关的整合记录标识
///
public long IntegrationRecordId { get; set; }
///
/// 变更的任务ID列表
/// 需要进行重新分配的任务
///
public List ChangedTaskIds { get; set; } = new();
///
/// 版本创建原因
/// 重新分配时创建版本的原因说明
///
public string VersionReason { get; set; } = string.Empty;
///
/// 受影响的任务ID列表
/// 可能受到变更影响的任务
///
public List AffectedTaskIds { get; set; } = new();
///
/// 是否重新分配人员
///
public bool ReallocatePersonnel { get; set; } = true;
///
/// 是否重新分配设备
///
public bool ReallocateEquipment { get; set; } = true;
}
///
/// 智能重新分配策略配置
///
public class SmartReallocationStrategyConfig
{
///
/// 是否使用原策略
///
public bool UseOriginalStrategy { get; set; } = true;
///
/// 人员分配策略
///
public string PersonnelStrategy { get; set; } = string.Empty;
///
/// 设备分配策略
///
public string EquipmentStrategy { get; set; } = string.Empty;
///
/// 强制执行班次规则
///
public bool EnforceShiftRules { get; set; } = true;
///
/// 优化目标
/// Efficiency-效率优先, Fairness-公平优先, Balance-平衡, Quality-质量优先
///
public string OptimizationTarget { get; set; } = "Balance";
///
/// 变更影响最小化
/// 尽量减少对现有分配的影响
///
public bool MinimizeChangeImpact { get; set; } = true;
///
/// 允许跨班次调整
///
public bool AllowCrossShiftAdjustment { get; set; } = false;
///
/// 允许跨项目资源共享
///
public bool AllowCrossProjectSharing { get; set; } = false;
///
/// 高级配置参数
///
public Dictionary AdvancedSettings { get; set; } = new();
}
///
/// 重新分配约束条件
///
public class ReallocationConstraint
{
///
/// 约束类型
/// Personnel-人员约束, Equipment-设备约束, Time-时间约束, Cost-成本约束
///
public string ConstraintType { get; set; } = string.Empty;
///
/// 约束目标ID
/// 人员ID、设备ID等
///
public long? TargetId { get; set; }
///
/// 约束操作
/// MustInclude-必须包含, MustExclude-必须排除, Prefer-优先选择, Avoid-尽量避免
///
public string ConstraintOperation { get; set; } = string.Empty;
///
/// 约束值
/// 具体的约束值或条件
///
public string ConstraintValue { get; set; } = string.Empty;
///
/// 约束优先级
/// 1-9,9为最高优先级
///
public int Priority { get; set; } = 5;
///
/// 约束说明
///
public string Description { get; set; } = string.Empty;
///
/// 是否为硬约束
/// true-硬约束(必须满足), false-软约束(尽量满足)
///
public bool IsHardConstraint { get; set; } = false;
}
///
/// 版本历史查询输入
///
public class IntegrationVersionHistoryInput
{
///
/// 整合记录ID
///
public long IntegrationRecordId { get; set; }
///
/// 根版本ID
///
public long RootVersionId { get; set; }
///
/// 需要比较的版本ID列表
///
public List CompareVersionIds { get; set; } = new();
///
/// 查询开始时间
///
public DateTime? StartTime { get; set; }
///
/// 查询结束时间
///
public DateTime? EndTime { get; set; }
///
/// 版本状态过滤
/// Active-活跃版本, Inactive-非活跃版本, All-所有版本
///
public string VersionStatusFilter { get; set; } = "All";
///
/// 变更类型过滤
///
public List ChangeTypeFilter { get; set; } = new();
///
/// 操作员过滤
///
public List OperatorFilter { get; set; } = new();
///
/// 是否包含快照数据
///
public bool IncludeSnapshotData { get; set; } = false;
///
/// 是否包含变更详情
///
public bool IncludeChangeDetails { get; set; } = true;
///
/// 页码
///
public int PageIndex { get; set; } = 1;
///
/// 页大小
///
public int PageSize { get; set; } = 20;
///
/// 排序字段
/// CreatedTime, Version, ImpactScore
///
public string SortBy { get; set; } = "CreatedTime";
///
/// 排序方向
/// Asc, Desc
///
public string SortDirection { get; set; } = "Desc";
///
/// 是否包含性能指标
///
public bool IncludePerformanceMetrics { get; set; } = false;
}
}