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;
}