using System.Collections.Generic;
using System.Threading.Tasks;
using NPP.SmartSchedue.Api.Contracts.Services.Work.Input;
using NPP.SmartSchedue.Api.Contracts.Services.Work.Output;
namespace NPP.SmartSchedue.Api.Contracts.Services.Work;
///
/// 工作任务分配修改服务接口
/// 专门用于智能排班结果的手动修改功能
///
public interface IWorkOrderAssignmentService
{
///
/// 更新任务人员分配
///
/// 人员分配更新输入
/// 分配更新结果
Task UpdatePersonnelAssignmentAsync(WorkOrderPersonnelUpdateInput input);
///
/// 更新任务设备分配
///
/// 设备分配更新输入
/// 分配更新结果
Task UpdateEquipmentAssignmentAsync(WorkOrderEquipmentUpdateInput input);
///
/// 批量更新任务分配(支持人员和设备同时修改)
///
/// 任务ID
/// 人员分配输入(可为空)
/// 设备分配输入(可为空)
/// 分配更新结果
Task UpdateAssignmentAsync(
long workOrderId,
WorkOrderPersonnelUpdateInput personnelInput = null,
WorkOrderEquipmentUpdateInput equipmentInput = null);
///
/// 验证任务分配的合法性(不执行更新,仅验证)
///
/// 任务ID
/// 人员ID
/// 设备ID
/// FL人员ID列表
/// 验证结果
Task ValidateAssignmentAsync(
long workOrderId,
long? personnelId = null,
long? equipmentId = null,
List flPersonnelIds = null);
///
/// 批量验证多个任务的分配修改
///
/// 分配修改请求列表
/// 批量验证结果
Task ValidateBatchAssignmentAsync(
List assignmentRequests);
///
/// 获取任务的可用人员列表(基于资质和时间约束)
///
/// 任务ID
/// 可用人员列表
Task GetAvailablePersonnelAsync(long workOrderId);
///
/// 获取任务的可用设备列表(基于设备类型和时间约束)
///
/// 任务ID
/// 可用设备列表
Task GetAvailableEquipmentAsync(long workOrderId);
}