using OrpaonVision.Core.Results; using OrpaonVision.Core.Common; using OrpaonVision.Model.Production; using OrpaonVision.Model.Configuration; namespace OrpaonVision.Core.Production; /// /// 产品会话管理服务接口。 /// public interface IProductionSessionManagerService { /// /// 进站建会话。 /// /// 进站请求。 /// 取消令牌。 /// 会话创建结果。 Task> CreateSessionOnArrivalAsync(CreateSessionOnArrivalRequest request, CancellationToken cancellationToken = default); /// /// 离站归档会话。 /// /// 会话ID。 /// 最终结果。 /// NG原因。 /// 备注。 /// 取消令牌。 /// 归档结果。 Task ArchiveSessionOnDepartureAsync(Guid sessionId, ProductionSessionResult result, string? ngReason = null, string? remark = null, CancellationToken cancellationToken = default); /// /// 更新会话进度。 /// /// 会话ID。 /// 当前层级。 /// 层级状态。 /// 取消令牌。 /// 更新结果。 Task UpdateSessionProgressAsync(Guid sessionId, int currentLayer, ProductionSessionStatus layerStatus, CancellationToken cancellationToken = default); /// /// 暂停会话。 /// /// 会话ID。 /// 暂停原因。 /// 取消令牌。 /// 暂停结果。 Task PauseSessionAsync(Guid sessionId, string reason, CancellationToken cancellationToken = default); /// /// 恢复会话。 /// /// 会话ID。 /// 恢复原因。 /// 取消令牌。 /// 恢复结果。 Task ResumeSessionAsync(Guid sessionId, string reason, CancellationToken cancellationToken = default); /// /// 取消会话。 /// /// 会话ID。 /// 取消原因。 /// 取消令牌。 /// 取消结果。 Task CancelSessionAsync(Guid sessionId, string reason, CancellationToken cancellationToken = default); /// /// 获取当前活动会话。 /// /// 工位ID。 /// 取消令牌。 /// 当前会话。 Task> GetCurrentActiveSessionAsync(string stationId, CancellationToken cancellationToken = default); /// /// 获取会话详情。 /// /// 会话ID。 /// 取消令牌。 /// 会话详情。 Task> GetSessionAsync(Guid sessionId, CancellationToken cancellationToken = default); /// /// 获取会话历史记录。 /// /// 查询请求。 /// 取消令牌。 /// 会话列表。 Task>> GetSessionHistoryAsync(GetSessionHistoryRequest request, CancellationToken cancellationToken = default); /// /// 获取会话统计信息。 /// /// 统计请求。 /// 取消令牌。 /// 统计信息。 Task> GetSessionStatisticsAsync(GetSessionStatisticsRequest request, CancellationToken cancellationToken = default); /// /// 导出会话记录。 /// /// 导出请求。 /// 取消令牌。 /// 导出数据。 Task> ExportSessionsAsync(ExportSessionsRequest request, CancellationToken cancellationToken = default); /// /// 批量归档会话。 /// /// 会话ID列表。 /// 取消令牌。 /// 归档结果。 Task> BatchArchiveSessionsAsync(IReadOnlyList sessionIds, CancellationToken cancellationToken = default); /// /// 清理过期会话。 /// /// 保留天数。 /// 取消令牌。 /// 清理结果。 Task> CleanupExpiredSessionsAsync(int retentionDays, CancellationToken cancellationToken = default); } /// /// 进站建会话请求。 /// public sealed class CreateSessionOnArrivalRequest { /// /// 产品类型ID。 /// public Guid ProductTypeId { get; set; } /// /// 产品类型编码。 /// public string ProductTypeCode { get; set; } = string.Empty; /// /// 产品类型名称。 /// public string ProductTypeName { get; set; } = string.Empty; /// /// 工位ID。 /// public string StationId { get; set; } = string.Empty; /// /// 工位名称。 /// public string StationName { get; set; } = string.Empty; /// /// 操作员ID。 /// public string OperatorId { get; set; } = string.Empty; /// /// 操作员姓名。 /// public string OperatorName { get; set; } = string.Empty; /// /// 班次ID。 /// public string ShiftId { get; set; } = string.Empty; /// /// 班次名称。 /// public string ShiftName { get; set; } = string.Empty; /// /// 总层级数。 /// public int TotalLayers { get; set; } /// /// 产品序列号(可选)。 /// public string? ProductSerialNumber { get; set; } /// /// 进站时间(UTC)。 /// public DateTime ArrivalTimeUtc { get; set; } = DateTime.UtcNow; /// /// 创建人。 /// public string CreatedBy { get; set; } = string.Empty; /// /// 备注。 /// public string? Remark { get; set; } /// /// 扩展属性。 /// public Dictionary ExtendedProperties { get; set; } = new(); } /// /// 获取会话历史记录请求。 /// public sealed class GetSessionHistoryRequest { /// /// 产品类型编码(可选)。 /// public string? ProductTypeCode { get; set; } /// /// 工位ID(可选)。 /// public string? StationId { get; set; } /// /// 操作员ID(可选)。 /// public string? OperatorId { get; set; } /// /// 会话状态(可选)。 /// public ProductionSessionStatus? Status { get; set; } /// /// 会话结果(可选)。 /// public ProductionSessionResult? Result { get; set; } /// /// 开始时间(UTC)。 /// public DateTime? StartTimeUtc { get; set; } /// /// 结束时间(UTC)。 /// public DateTime? EndTimeUtc { get; set; } /// /// 页码(从1开始)。 /// public int PageIndex { get; set; } = 1; /// /// 每页大小。 /// public int PageSize { get; set; } = 20; /// /// 排序字段。 /// public SessionSortField SortField { get; set; } = SessionSortField.StartTimeUtc; /// /// 排序方向。 /// public SortDirection SortDirection { get; set; } = SortDirection.Descending; } /// /// 获取会话统计信息请求。 /// public sealed class GetSessionStatisticsRequest { /// /// 产品类型编码(可选)。 /// public string? ProductTypeCode { get; set; } /// /// 工位ID(可选)。 /// public string? StationId { get; set; } /// /// 操作员ID(可选)。 /// public string? OperatorId { get; set; } /// /// 统计开始时间(UTC)。 /// public DateTime StartTimeUtc { get; set; } /// /// 统计结束时间(UTC)。 /// public DateTime EndTimeUtc { get; set; } /// /// 统计维度。 /// public List Dimensions { get; set; } = new(); } /// /// 导出会话记录请求。 /// public sealed class ExportSessionsRequest { /// /// 产品类型编码(可选)。 /// public string? ProductTypeCode { get; set; } /// /// 工位ID(可选)。 /// public string? StationId { get; set; } /// /// 操作员ID(可选)。 /// public string? OperatorId { get; set; } /// /// 会话状态(可选)。 /// public ProductionSessionStatus? Status { get; set; } /// /// 会话结果(可选)。 /// public ProductionSessionResult? Result { get; set; } /// /// 开始时间(UTC)。 /// public DateTime? StartTimeUtc { get; set; } /// /// 结束时间(UTC)。 /// public DateTime? EndTimeUtc { get; set; } /// /// 导出格式。 /// public ExportFormat Format { get; set; } = ExportFormat.Excel; /// /// 是否包含详细信息。 /// public bool IncludeDetails { get; set; } = true; /// /// 是否包含扩展属性。 /// public bool IncludeExtendedProperties { get; set; } = false; } /// /// 批量归档结果。 /// public sealed class BatchArchiveResult { /// /// 总数量。 /// public int TotalCount { get; init; } /// /// 成功数量。 /// public int SuccessCount { get; init; } /// /// 失败数量。 /// public int FailureCount { get; init; } /// /// 失败的会话ID列表。 /// public List FailedSessionIds { get; init; } = new(); /// /// 错误信息。 /// public List Errors { get; init; } = new(); } /// /// 清理结果。 /// public sealed class CleanupResult { /// /// 清理的会话数量。 /// public int CleanedCount { get; init; } /// /// 释放的存储空间(字节)。 /// public long FreedSpaceBytes { get; init; } /// /// 清理耗时(毫秒)。 /// public long ElapsedMilliseconds { get; init; } } /// /// 会话排序字段。 /// public enum SessionSortField { /// /// 开始时间。 /// StartTimeUtc = 0, /// /// 结束时间。 /// EndTimeUtc = 1, /// /// 会话ID。 /// SessionId = 2, /// /// 产品类型编码。 /// ProductTypeCode = 3, /// /// 工位ID。 /// StationId = 4, /// /// 操作员姓名。 /// OperatorName = 5, /// /// 当前层级。 /// CurrentLayer = 6 } /// /// 排序方向。 /// public enum SortDirection { /// /// 升序。 /// Ascending = 0, /// /// 降序。 /// Descending = 1 }