Files
OrpaonVision/OrpaonVision.Core/Abstractions/IProductionSessionService.cs
2026-04-06 22:04:05 +08:00

496 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using OrpaonVision.Core.Results;
using OrpaonVision.Model.Production;
namespace OrpaonVision.Core.Abstractions;
/// <summary>
/// 产品会话记录服务接口。
/// </summary>
public interface IProductionSessionService
{
/// <summary>
/// 创建新的产品会话。
/// </summary>
Result<ProductionSessionModel> CreateSession(CreateProductionSessionRequest request);
/// <summary>
/// 更新会话状态。
/// </summary>
Result UpdateSessionStatus(Guid sessionId, ProductionSessionStatus status, string? reason = null);
/// <summary>
/// 更新会话进度。
/// </summary>
Result UpdateSessionProgress(Guid sessionId, int currentLayer);
/// <summary>
/// 完成会话。
/// </summary>
Result CompleteSession(Guid sessionId, ProductionSessionResult result, string? ngReason = null, string? remark = null);
/// <summary>
/// 取消会话。
/// </summary>
Result CancelSession(Guid sessionId, string? reason = null);
/// <summary>
/// 获取会话详情。
/// </summary>
Result<ProductionSessionModel?> GetSession(Guid sessionId);
/// <summary>
/// 获取会话列表。
/// </summary>
Result<PagedResult<ProductionSessionModel>> GetSessions(GetProductionSessionsRequest request);
/// <summary>
/// 获取当前活动会话。
/// </summary>
Result<ProductionSessionModel?> GetCurrentSession(string stationId);
/// <summary>
/// 获取会话统计信息。
/// </summary>
Result<ProductionSessionStatistics> GetStatistics(GetProductionSessionStatisticsRequest request);
/// <summary>
/// 导出会话记录。
/// </summary>
Result<byte[]> ExportSessions(ExportProductionSessionsRequest request);
}
/// <summary>
/// 创建产品会话请求。
/// </summary>
public sealed class CreateProductionSessionRequest
{
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; set; } = string.Empty;
/// <summary>
/// 产品类型名称。
/// </summary>
public string ProductTypeName { get; set; } = string.Empty;
/// <summary>
/// 工位ID。
/// </summary>
public string StationId { get; set; } = string.Empty;
/// <summary>
/// 工位名称。
/// </summary>
public string StationName { get; set; } = string.Empty;
/// <summary>
/// 操作员ID。
/// </summary>
public string OperatorId { get; set; } = string.Empty;
/// <summary>
/// 操作员姓名。
/// </summary>
public string OperatorName { get; set; } = string.Empty;
/// <summary>
/// 班次ID。
/// </summary>
public string ShiftId { get; set; } = string.Empty;
/// <summary>
/// 班次名称。
/// </summary>
public string ShiftName { get; set; } = string.Empty;
/// <summary>
/// 总层级数。
/// </summary>
public int TotalLayers { get; set; }
/// <summary>
/// 创建人。
/// </summary>
public string CreatedBy { get; set; } = string.Empty;
/// <summary>
/// 备注。
/// </summary>
public string? Remark { get; set; }
}
/// <summary>
/// 获取产品会话列表请求。
/// </summary>
public sealed class GetProductionSessionsRequest
{
/// <summary>
/// 产品类型编码(可选)。
/// </summary>
public string? ProductTypeCode { get; set; }
/// <summary>
/// 工位ID可选
/// </summary>
public string? StationId { get; set; }
/// <summary>
/// 操作员ID可选
/// </summary>
public string? OperatorId { get; set; }
/// <summary>
/// 会话状态(可选)。
/// </summary>
public ProductionSessionStatus? Status { get; set; }
/// <summary>
/// 会话结果(可选)。
/// </summary>
public ProductionSessionResult? Result { get; set; }
/// <summary>
/// 开始时间UTC
/// </summary>
public DateTime? StartTimeUtc { get; set; }
/// <summary>
/// 结束时间UTC
/// </summary>
public DateTime? EndTimeUtc { get; set; }
/// <summary>
/// 页码从1开始
/// </summary>
public int PageIndex { get; set; } = 1;
/// <summary>
/// 每页大小。
/// </summary>
public int PageSize { get; set; } = 20;
}
/// <summary>
/// 获取产品会话统计信息请求。
/// </summary>
public sealed class GetProductionSessionStatisticsRequest
{
/// <summary>
/// 产品类型编码(可选)。
/// </summary>
public string? ProductTypeCode { get; set; }
/// <summary>
/// 工位ID可选
/// </summary>
public string? StationId { get; set; }
/// <summary>
/// 操作员ID可选
/// </summary>
public string? OperatorId { get; set; }
/// <summary>
/// 统计开始时间UTC
/// </summary>
public DateTime StartTimeUtc { get; set; }
/// <summary>
/// 统计结束时间UTC
/// </summary>
public DateTime EndTimeUtc { get; set; }
}
/// <summary>
/// 导出产品会话记录请求。
/// </summary>
public sealed class ExportProductionSessionsRequest
{
/// <summary>
/// 产品类型编码(可选)。
/// </summary>
public string? ProductTypeCode { get; set; }
/// <summary>
/// 工位ID可选
/// </summary>
public string? StationId { get; set; }
/// <summary>
/// 操作员ID可选
/// </summary>
public string? OperatorId { get; set; }
/// <summary>
/// 会话状态(可选)。
/// </summary>
public ProductionSessionStatus? Status { get; set; }
/// <summary>
/// 会话结果(可选)。
/// </summary>
public ProductionSessionResult? Result { get; set; }
/// <summary>
/// 开始时间UTC
/// </summary>
public DateTime? StartTimeUtc { get; set; }
/// <summary>
/// 结束时间UTC
/// </summary>
public DateTime? EndTimeUtc { get; set; }
/// <summary>
/// 导出格式。
/// </summary>
public ExportFormat Format { get; set; } = ExportFormat.Excel;
}
/// <summary>
/// 导出格式。
/// </summary>
public enum ExportFormat
{
/// <summary>
/// Excel格式。
/// </summary>
Excel = 0,
/// <summary>
/// CSV格式。
/// </summary>
Csv = 1,
/// <summary>
/// JSON格式。
/// </summary>
Json = 2
}
/// <summary>
/// 产品会话统计信息。
/// </summary>
public sealed class ProductionSessionStatistics
{
/// <summary>
/// 总会话数。
/// </summary>
public int TotalSessions { get; set; }
/// <summary>
/// OK会话数。
/// </summary>
public int OkSessions { get; set; }
/// <summary>
/// NG会话数。
/// </summary>
public int NgSessions { get; set; }
/// <summary>
/// 进行中会话数。
/// </summary>
public int InProgressSessions { get; set; }
/// <summary>
/// 取消会话数。
/// </summary>
public int CancelledSessions { get; set; }
/// <summary>
/// 暂停会话数。
/// </summary>
public int PausedSessions { get; set; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate { get; set; }
/// <summary>
/// 平均处理时间(秒)。
/// </summary>
public double AverageProcessingTimeSeconds { get; set; }
/// <summary>
/// 每小时处理量。
/// </summary>
public double ThroughputPerHour { get; set; }
/// <summary>
/// 按产品类型分组的统计。
/// </summary>
public List<ProductTypeStatistics> ByProductType { get; set; } = new();
/// <summary>
/// 按工位分组的统计。
/// </summary>
public List<StationStatistics> ByStation { get; set; } = new();
/// <summary>
/// 按操作员分组的统计。
/// </summary>
public List<OperatorStatistics> ByOperator { get; set; } = new();
/// <summary>
/// 按日期分组的统计。
/// </summary>
public List<DailyStatistics> ByDate { get; set; } = new();
}
/// <summary>
/// 产品类型统计。
/// </summary>
public sealed class ProductTypeStatistics
{
/// <summary>
/// 产品类型编码。
/// </summary>
public string ProductTypeCode { get; set; } = string.Empty;
/// <summary>
/// 产品类型名称。
/// </summary>
public string ProductTypeName { get; set; } = string.Empty;
/// <summary>
/// 总会话数。
/// </summary>
public int TotalSessions { get; set; }
/// <summary>
/// OK会话数。
/// </summary>
public int OkSessions { get; set; }
/// <summary>
/// NG会话数。
/// </summary>
public int NgSessions { get; set; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate { get; set; }
}
/// <summary>
/// 工位统计。
/// </summary>
public sealed class StationStatistics
{
/// <summary>
/// 工位ID。
/// </summary>
public string StationId { get; set; } = string.Empty;
/// <summary>
/// 工位名称。
/// </summary>
public string StationName { get; set; } = string.Empty;
/// <summary>
/// 总会话数。
/// </summary>
public int TotalSessions { get; set; }
/// <summary>
/// OK会话数。
/// </summary>
public int OkSessions { get; set; }
/// <summary>
/// NG会话数。
/// </summary>
public int NgSessions { get; set; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate { get; set; }
/// <summary>
/// 每小时处理量。
/// </summary>
public double ThroughputPerHour { get; set; }
}
/// <summary>
/// 操作员统计。
/// </summary>
public sealed class OperatorStatistics
{
/// <summary>
/// 操作员ID。
/// </summary>
public string OperatorId { get; set; } = string.Empty;
/// <summary>
/// 操作员姓名。
/// </summary>
public string OperatorName { get; set; } = string.Empty;
/// <summary>
/// 总会话数。
/// </summary>
public int TotalSessions { get; set; }
/// <summary>
/// OK会话数。
/// </summary>
public int OkSessions { get; set; }
/// <summary>
/// NG会话数。
/// </summary>
public int NgSessions { get; set; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate { get; set; }
/// <summary>
/// 平均处理时间(秒)。
/// </summary>
public double AverageProcessingTimeSeconds { get; set; }
}
/// <summary>
/// 日期统计。
/// </summary>
public sealed class DailyStatistics
{
/// <summary>
/// 日期UTC
/// </summary>
public DateTime DateUtc { get; set; }
/// <summary>
/// 总会话数。
/// </summary>
public int TotalSessions { get; set; }
/// <summary>
/// OK会话数。
/// </summary>
public int OkSessions { get; set; }
/// <summary>
/// NG会话数。
/// </summary>
public int NgSessions { get; set; }
/// <summary>
/// 合格率。
/// </summary>
public double PassRate { get; set; }
/// <summary>
/// 每小时处理量。
/// </summary>
public double ThroughputPerHour { get; set; }
}