using OrpaonVision.Core.Results;
using OrpaonVision.Model.Production;
namespace OrpaonVision.Core.Abstractions;
///
/// 产品会话记录服务接口。
///
public interface IProductionSessionService
{
///
/// 创建新的产品会话。
///
Result CreateSession(CreateProductionSessionRequest request);
///
/// 更新会话状态。
///
Result UpdateSessionStatus(Guid sessionId, ProductionSessionStatus status, string? reason = null);
///
/// 更新会话进度。
///
Result UpdateSessionProgress(Guid sessionId, int currentLayer);
///
/// 完成会话。
///
Result CompleteSession(Guid sessionId, ProductionSessionResult result, string? ngReason = null, string? remark = null);
///
/// 取消会话。
///
Result CancelSession(Guid sessionId, string? reason = null);
///
/// 获取会话详情。
///
Result GetSession(Guid sessionId);
///
/// 获取会话列表。
///
Result> GetSessions(GetProductionSessionsRequest request);
///
/// 获取当前活动会话。
///
Result GetCurrentSession(string stationId);
///
/// 获取会话统计信息。
///
Result GetStatistics(GetProductionSessionStatisticsRequest request);
///
/// 导出会话记录。
///
Result ExportSessions(ExportProductionSessionsRequest request);
}
///
/// 创建产品会话请求。
///
public sealed class CreateProductionSessionRequest
{
///
/// 产品类型编码。
///
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 CreatedBy { get; set; } = string.Empty;
///
/// 备注。
///
public string? Remark { get; set; }
}
///
/// 获取产品会话列表请求。
///
public sealed class GetProductionSessionsRequest
{
///
/// 产品类型编码(可选)。
///
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 sealed class GetProductionSessionStatisticsRequest
{
///
/// 产品类型编码(可选)。
///
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 sealed class ExportProductionSessionsRequest
{
///
/// 产品类型编码(可选)。
///
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 enum ExportFormat
{
///
/// Excel格式。
///
Excel = 0,
///
/// CSV格式。
///
Csv = 1,
///
/// JSON格式。
///
Json = 2
}
///
/// 产品会话统计信息。
///
public sealed class ProductionSessionStatistics
{
///
/// 总会话数。
///
public int TotalSessions { get; set; }
///
/// OK会话数。
///
public int OkSessions { get; set; }
///
/// NG会话数。
///
public int NgSessions { get; set; }
///
/// 进行中会话数。
///
public int InProgressSessions { get; set; }
///
/// 取消会话数。
///
public int CancelledSessions { get; set; }
///
/// 暂停会话数。
///
public int PausedSessions { get; set; }
///
/// 合格率。
///
public double PassRate { get; set; }
///
/// 平均处理时间(秒)。
///
public double AverageProcessingTimeSeconds { get; set; }
///
/// 每小时处理量。
///
public double ThroughputPerHour { get; set; }
///
/// 按产品类型分组的统计。
///
public List ByProductType { get; set; } = new();
///
/// 按工位分组的统计。
///
public List ByStation { get; set; } = new();
///
/// 按操作员分组的统计。
///
public List ByOperator { get; set; } = new();
///
/// 按日期分组的统计。
///
public List ByDate { get; set; } = new();
}
///
/// 产品类型统计。
///
public sealed class ProductTypeStatistics
{
///
/// 产品类型编码。
///
public string ProductTypeCode { get; set; } = string.Empty;
///
/// 产品类型名称。
///
public string ProductTypeName { get; set; } = string.Empty;
///
/// 总会话数。
///
public int TotalSessions { get; set; }
///
/// OK会话数。
///
public int OkSessions { get; set; }
///
/// NG会话数。
///
public int NgSessions { get; set; }
///
/// 合格率。
///
public double PassRate { get; set; }
}
///
/// 工位统计。
///
public sealed class StationStatistics
{
///
/// 工位ID。
///
public string StationId { get; set; } = string.Empty;
///
/// 工位名称。
///
public string StationName { get; set; } = string.Empty;
///
/// 总会话数。
///
public int TotalSessions { get; set; }
///
/// OK会话数。
///
public int OkSessions { get; set; }
///
/// NG会话数。
///
public int NgSessions { get; set; }
///
/// 合格率。
///
public double PassRate { get; set; }
///
/// 每小时处理量。
///
public double ThroughputPerHour { get; set; }
}
///
/// 操作员统计。
///
public sealed class OperatorStatistics
{
///
/// 操作员ID。
///
public string OperatorId { get; set; } = string.Empty;
///
/// 操作员姓名。
///
public string OperatorName { get; set; } = string.Empty;
///
/// 总会话数。
///
public int TotalSessions { get; set; }
///
/// OK会话数。
///
public int OkSessions { get; set; }
///
/// NG会话数。
///
public int NgSessions { get; set; }
///
/// 合格率。
///
public double PassRate { get; set; }
///
/// 平均处理时间(秒)。
///
public double AverageProcessingTimeSeconds { get; set; }
}
///
/// 日期统计。
///
public sealed class DailyStatistics
{
///
/// 日期(UTC)。
///
public DateTime DateUtc { get; set; }
///
/// 总会话数。
///
public int TotalSessions { get; set; }
///
/// OK会话数。
///
public int OkSessions { get; set; }
///
/// NG会话数。
///
public int NgSessions { get; set; }
///
/// 合格率。
///
public double PassRate { get; set; }
///
/// 每小时处理量。
///
public double ThroughputPerHour { get; set; }
}