版本260406

This commit is contained in:
2026-04-06 22:04:05 +08:00
parent 7dc5e73af7
commit 0b150470be
216 changed files with 98993 additions and 33 deletions

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