using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Output;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration
{
///
/// 设备服务客户端接口
/// 用于调度模块与EAM设备管理模块之间的通信
/// 避免直接依赖EAM模块的服务接口,实现模块解耦
///
public interface IEquipmentClientService
{
///
/// 获取指定日期的可用设备列表
/// 用于任务整合前的资源充足性检查
///
/// 指定日期
/// 工序ID(可选,用于筛选特定工序的设备)
/// 可用设备列表
Task> GetAvailableEquipmentAsync(DateTime date, long? processId = null);
///
/// 检查指定设备在指定日期是否可用
/// 用于验证特定设备的可用性状态
///
/// 设备ID
/// 指定日期
/// 是否可用
Task IsEquipmentAvailableAsync(long equipmentId, DateTime date);
///
/// 获取指定日期范围内的设备使用统计
/// 用于资源容量计算和负荷分析
///
/// 开始日期
/// 结束日期
/// 设备使用统计信息
Task GetEquipmentUsageStatisticsAsync(DateTime startDate, DateTime endDate);
///
/// 获取指定日期需要维护的设备列表
/// 用于计算维护中不可用的设备数量
///
/// 指定日期
/// 需要维护的设备列表
Task> GetMaintenanceEquipmentAsync(DateTime date);
///
/// 获取指定日期需要校验的设备列表
/// 用于计算校验中不可用的设备数量
///
/// 指定日期
/// 需要校验的设备列表
Task> GetCalibrationEquipmentAsync(DateTime date);
///
/// 批量检查设备可用性
/// 用于大批量任务的设备资源验证,提高查询效率
///
/// 设备ID列表
/// 指定日期
/// 设备可用性状态字典,Key为设备ID,Value为是否可用
Task> BatchCheckEquipmentAvailabilityAsync(List equipmentIds, DateTime date);
}
}