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