using System;
using System.Collections.Generic;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Output;
using NPP.SmartSchedue.Api.Contracts.Domain.Work;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration.Input
{
///
/// 智能整合输入
///
public class SmartIntegrationInput
{
///
/// 选中的任务ID列表
///
public List SelectedTaskIds { get; set; } = new();
///
/// 选中的项目号列表
///
public List SelectedProjectNumbers { get; set; } = new();
///
/// 整合策略配置
///
public IntegrationStrategy Strategy { get; set; } = new();
///
/// 操作员信息
///
public long OperatorUserId { get; set; }
public string OperatorName { get; set; }
///
/// 整合批次名称(可选)
///
public string BatchName { get; set; }
///
/// 整合备注
///
public string Remarks { get; set; }
}
///
/// 整合策略
///
public class IntegrationStrategy
{
///
/// 人员分配策略
///
public PersonnelAllocationStrategy PersonnelStrategy { get; set; } = PersonnelAllocationStrategy.FairDistribution;
///
/// 设备分配策略
///
public EquipmentAllocationStrategy EquipmentStrategy { get; set; } = EquipmentAllocationStrategy.MaxUtilization;
///
/// 是否强制满足班次规则
///
public bool EnforceShiftRules { get; set; } = true;
///
/// 是否优先分配高优先级任务
///
public bool PrioritizeHighPriorityTasks { get; set; } = true;
///
/// 是否考虑人员资质匹配
///
public bool ConsiderQualificationMatch { get; set; } = true;
///
/// 是否启用负载均衡
///
public bool EnableLoadBalancing { get; set; } = true;
///
/// 最大连续工作天数限制
///
public int? MaxContinuousWorkDays { get; set; }
///
/// 设备利用率目标(百分比)
///
public decimal TargetEquipmentUtilization { get; set; } = 80.0m;
}
///
/// 人员分配策略枚举
///
public enum PersonnelAllocationStrategy
{
///
/// 公平分配(均衡工作量)
///
FairDistribution = 1,
///
/// 技能优先(优先匹配最佳技能)
///
SkillPriority = 2,
///
/// 效率优先(优先分配给高效人员)
///
EfficiencyPriority = 3,
///
/// 负载均衡(平衡所有人员工作负荷)
///
LoadBalance = 4
}
///
/// 设备分配策略枚举
///
public enum EquipmentAllocationStrategy
{
///
/// 最大利用率(优先使用利用率高的设备)
///
MaxUtilization = 1,
///
/// 负载均衡(平衡所有设备使用率)
///
LoadBalance = 2,
///
/// 性能优先(优先使用性能最佳的设备)
///
PerformancePriority = 3,
///
/// 就近分配(优先分配距离最近的设备)
///
ProximityPriority = 4
}
///
/// 人员分配输入
/// 深度架构思考:支持两种输入模式,避免重复数据库查询,提升性能和数据一致性
///
public class PersonnelAllocationInput
{
///
/// 待分配的任务ID列表(当Tasks为空时使用)
///
public List TaskIds { get; set; } = new();
///
/// 待分配的任务对象列表(性能优化:避免重复数据库查询)
/// 深度业务考量:当上级调用方已经加载了完整的task对象时,直接传入可以:
/// 1. 避免重复数据库查询,提升性能
/// 2. 确保数据一致性,防止查询间隙的数据变更
/// 3. 减少Include操作的开销
/// 使用优先级:Tasks > TaskIds
///
public List Tasks { get; set; } = new();
///
/// 人员分配策略
///
public PersonnelAllocationStrategy Strategy { get; set; }
///
/// 是否强制满足班次规则
///
public bool EnforceShiftRules { get; set; } = true;
///
/// 排除的人员ID列表(不参与分配)
///
public List ExcludedPersonnelIds { get; set; } = new();
///
/// 优先考虑的人员ID列表
///
public List PreferredPersonnelIds { get; set; } = new();
}
///
/// 设备分配输入
/// 深度架构优化:支持两种输入模式,避免重复数据库查询,提升性能和数据一致性
///
public class EquipmentAllocationInput
{
///
/// 待分配的任务ID列表(当Tasks为空时使用)
///
public List TaskIds { get; set; } = new();
///
/// 待分配的任务对象列表(性能优化:避免重复数据库查询)
/// 深度业务考量:当上级调用方(SmartScheduleOrchestratorService)已经加载了完整的task对象时,直接传入可以:
/// 1. 避免重复数据库查询,提升性能50%以上
/// 2. 确保数据一致性,防止查询间隙的数据变更
/// 3. 减少Include操作的开销,降低内存占用
/// 4. 保持与PersonnelAllocationInput相同的优化模式
/// 使用优先级:Tasks > TaskIds
///
public List Tasks { get; set; } = new();
///
/// 设备分配策略
///
public EquipmentAllocationStrategy Strategy { get; set; }
///
/// 目标利用率(百分比)
///
public decimal TargetUtilization { get; set; } = 80.0m;
///
/// 排除的设备ID列表(不参与分配)
///
public List ExcludedEquipmentIds { get; set; } = new();
///
/// 优先考虑的设备ID列表
///
public List PreferredEquipmentIds { get; set; } = new();
}
///
/// 整合记录输入
///
public class IntegrationRecordInput
{
///
/// 整合的任务ID列表
///
public List TaskIds { get; set; } = new();
///
/// 人员分配结果
///
public PersonnelAllocationResult PersonnelAllocation { get; set; }
///
/// 设备分配结果
///
public EquipmentAllocationResult EquipmentAllocation { get; set; }
///
/// 整合策略
///
public IntegrationStrategy Strategy { get; set; }
///
/// 操作员信息
///
public long OperatorUserId { get; set; }
public string OperatorName { get; set; }
///
/// 整合备注
///
public string Remarks { get; set; }
}
///
/// 整合历史查询输入
///
public class IntegrationHistoryQueryInput
{
///
/// 操作员ID
///
public long? OperatorUserId { get; set; }
///
/// 项目号
///
public string ProjectNumber { get; set; }
///
/// 整合时间范围
///
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
///
/// 分页参数
///
public int PageIndex { get; set; } = 1;
public int PageSize { get; set; } = 20;
}
}