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
}