版本260406
This commit is contained in:
495
OrpaonVision.Core/Abstractions/IProductionSessionService.cs
Normal file
495
OrpaonVision.Core/Abstractions/IProductionSessionService.cs
Normal file
@@ -0,0 +1,495 @@
|
||||
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; }
|
||||
}
|
||||
Reference in New Issue
Block a user