using OrpaonVision.Core.Results; using OrpaonVision.Core.Common; using OrpaonVision.Model.Production; namespace OrpaonVision.ConfigApp.Infrastructure.Persistence; /// /// 产品会话仓储接口。 /// public interface IProductionSessionRepository { /// /// 创建会话。 /// /// 会话模型。 /// 取消令牌。 /// 创建结果。 Task CreateAsync(ProductionSessionModel session, CancellationToken cancellationToken = default); /// /// 更新会话。 /// /// 会话模型。 /// 取消令牌。 /// 更新结果。 Task UpdateAsync(ProductionSessionModel session, CancellationToken cancellationToken = default); /// /// 删除会话。 /// /// 会话ID。 /// 取消令牌。 /// 删除结果。 Task DeleteAsync(Guid sessionId, CancellationToken cancellationToken = default); /// /// 根据ID获取会话。 /// /// 会话ID。 /// 取消令牌。 /// 会话模型。 Task> GetByIdAsync(Guid sessionId, CancellationToken cancellationToken = default); /// /// 根据工位ID获取当前活动会话。 /// /// 工位ID。 /// 取消令牌。 /// 当前活动会话。 Task> GetActiveByStationIdAsync(string stationId, CancellationToken cancellationToken = default); /// /// 根据条件查询会话列表。 /// /// 查询条件。 /// 取消令牌。 /// 会话列表。 Task>> GetByQueryAsync(SessionQuery query, CancellationToken cancellationToken = default); /// /// 根据条件分页查询会话。 /// /// 查询条件。 /// 页码。 /// 页大小。 /// 取消令牌。 /// 分页结果。 Task> GetPagedByQueryAsync(SessionQuery query, int pageIndex, int pageSize, CancellationToken cancellationToken = default); /// /// 批量创建会话。 /// /// 会话列表。 /// 取消令牌。 /// 创建结果。 Task> BatchCreateAsync(IReadOnlyList sessions, CancellationToken cancellationToken = default); /// /// 批量更新会话。 /// /// 会话列表。 /// 取消令牌。 /// 更新结果。 Task> BatchUpdateAsync(IReadOnlyList sessions, CancellationToken cancellationToken = default); /// /// 批量删除会话。 /// /// 会话ID列表。 /// 取消令牌。 /// 删除结果。 Task> BatchDeleteAsync(IReadOnlyList sessionIds, CancellationToken cancellationToken = default); /// /// 获取会话统计信息。 /// /// 统计查询条件。 /// 取消令牌。 /// 统计结果。 Task> GetStatisticsAsync(SessionStatisticsQuery query, CancellationToken cancellationToken = default); /// /// 清理过期会话。 /// /// 截止日期。 /// 取消令牌。 /// 清理结果。 Task> CleanupExpiredAsync(DateTime cutoffDate, CancellationToken cancellationToken = default); /// /// 检查会话是否存在。 /// /// 会话ID。 /// 取消令牌。 /// 是否存在。 Task> ExistsAsync(Guid sessionId, CancellationToken cancellationToken = default); /// /// 获取会话数量。 /// /// 查询条件。 /// 取消令牌。 /// 会话数量。 Task> CountAsync(SessionQuery query, CancellationToken cancellationToken = default); } /// /// 会话查询条件。 /// public sealed class SessionQuery { /// /// 会话ID列表。 /// public IReadOnlyList? SessionIds { get; set; } /// /// 产品类型编码。 /// public string? ProductTypeCode { get; set; } /// /// 工位ID。 /// public string? StationId { get; set; } /// /// 操作员ID。 /// public string? OperatorId { get; set; } /// /// 班次ID。 /// public string? ShiftId { get; set; } /// /// 会话状态列表。 /// public IReadOnlyList? Statuses { get; set; } /// /// 会话结果列表。 /// public IReadOnlyList? Results { get; set; } /// /// 开始时间范围。 /// public DateTimeRange? StartTimeRange { get; set; } /// /// 结束时间范围。 /// public DateTimeRange? EndTimeRange { get; set; } /// /// 创建时间范围。 /// public DateTimeRange? CreatedTimeRange { get; set; } /// /// 关键词搜索(搜索产品类型、工位、操作员等)。 /// public string? Keyword { get; set; } /// /// 是否只包含活动会话。 /// public bool ActiveOnly { get; set; } = false; /// /// 是否只包含已完成会话。 /// public bool CompletedOnly { get; set; } = false; /// /// 排序字段。 /// public SessionSortField SortField { get; set; } = SessionSortField.StartTimeUtc; /// /// 排序方向。 /// public SortDirection SortDirection { get; set; } = SortDirection.Descending; } /// /// 会话统计查询条件。 /// public sealed class SessionStatisticsQuery { /// /// 产品类型编码。 /// public string? ProductTypeCode { get; set; } /// /// 工位ID。 /// public string? StationId { get; set; } /// /// 操作员ID。 /// public string? OperatorId { get; set; } /// /// 班次ID。 /// public string? ShiftId { get; set; } /// /// 统计开始时间。 /// public DateTime StartTime { get; set; } /// /// 统计结束时间。 /// public DateTime EndTime { get; set; } /// /// 统计维度。 /// public List Dimensions { get; set; } = new(); /// /// 是否包含活动会话。 /// public bool IncludeActive { get; set; } = true; /// /// 是否包含已完成会话。 /// public bool IncludeCompleted { get; set; } = true; } /// /// 分页会话结果。 /// public sealed class PagedSessionResult { /// /// 会话列表。 /// public IReadOnlyList Items { get; init; } = Array.Empty(); /// /// 总记录数。 /// public int TotalCount { get; init; } /// /// 页码。 /// public int PageIndex { get; init; } /// /// 页大小。 /// public int PageSize { get; init; } /// /// 总页数。 /// public int TotalPages => (int)Math.Ceiling((double)TotalCount / PageSize); } /// /// 批量创建结果。 /// public sealed class BatchCreateResult { /// /// 总数量。 /// public int TotalCount { get; init; } /// /// 成功数量。 /// public int SuccessCount { get; init; } /// /// 失败数量。 /// public int FailureCount { get; init; } /// /// 失败的会话索引列表。 /// public List FailedIndexes { get; init; } = new(); /// /// 错误信息。 /// public List Errors { get; init; } = new(); } /// /// 批量更新结果。 /// public sealed class BatchUpdateResult { /// /// 总数量。 /// public int TotalCount { get; init; } /// /// 成功数量。 /// public int SuccessCount { get; init; } /// /// 失败数量。 /// public int FailureCount { get; init; } /// /// 失败的会话索引列表。 /// public List FailedIndexes { get; init; } = new(); /// /// 错误信息。 /// public List Errors { get; init; } = new(); } /// /// 批量删除结果。 /// public sealed class BatchDeleteResult { /// /// 总数量。 /// 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 SessionStatistics { /// /// 总会话数。 /// public int TotalSessions { get; init; } /// /// OK会话数。 /// public int OkSessions { get; init; } /// /// NG会话数。 /// public int NgSessions { get; init; } /// /// 进行中会话数。 /// public int InProgressSessions { get; init; } /// /// 取消会话数。 /// public int CancelledSessions { get; init; } /// /// 暂停会话数。 /// public int PausedSessions { get; init; } /// /// 合格率。 /// public double PassRate { get; init; } /// /// 平均处理时间(秒)。 /// public double AverageProcessingTimeSeconds { get; init; } /// /// 每小时处理量。 /// public double ThroughputPerHour { get; init; } /// /// 按产品类型分组的统计。 /// public List ByProductType { get; init; } = new(); /// /// 按工位分组的统计。 /// public List ByStation { get; init; } = new(); /// /// 按操作员分组的统计。 /// public List ByOperator { get; init; } = new(); /// /// 按日期分组的统计。 /// public List ByDate { get; init; } = new(); /// /// 按班次分组的统计。 /// public List ByShift { get; init; } = new(); } /// /// 班次统计。 /// public sealed class ShiftStatistics { /// /// 班次ID。 /// public string ShiftId { get; init; } = string.Empty; /// /// 班次名称。 /// public string ShiftName { get; init; } = string.Empty; /// /// 总会话数。 /// public int TotalSessions { get; init; } /// /// OK会话数。 /// public int OkSessions { get; init; } /// /// NG会话数。 /// public int NgSessions { get; init; } /// /// 合格率。 /// public double PassRate { get; init; } /// /// 每小时处理量。 /// public double ThroughputPerHour { get; init; } } /// /// 清理结果。 /// public sealed class CleanupResult { /// /// 清理的会话数量。 /// public int CleanedCount { get; init; } /// /// 释放的存储空间(字节)。 /// public long FreedSpaceBytes { get; init; } /// /// 清理耗时(毫秒)。 /// public long ElapsedMilliseconds { get; init; } /// /// 清理的会话事件数量。 /// public int CleanedEventCount { get; init; } } /// /// 日期时间范围。 /// public sealed class DateTimeRange { /// /// 开始时间。 /// public DateTime Start { get; init; } /// /// 结束时间。 /// public DateTime End { get; init; } /// /// 是否包含开始时间。 /// public bool IncludeStart { get; init; } = true; /// /// 是否包含结束时间。 /// public bool IncludeEnd { get; init; } = true; }