You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
2.9 KiB

using X1.Domain.Entities.TestCase;
using X1.Domain.Events;
using X1.Domain.Models;
namespace X1.Application.Features.TaskExecution.Events.NodeExecutionEvents;
/// <summary>
/// 节点执行事件基类
/// 提供通用的事件属性和工厂方法,减少重复代码
/// </summary>
public abstract class BaseNodeExecutionEvent : INodeExecutionEvent
{
/// <summary>
/// 事件ID
/// </summary>
public string EventId { get; set; } = Guid.NewGuid().ToString();
/// <summary>
/// 任务执行ID
/// </summary>
public string TaskExecutionId { get; set; } = null!;
/// <summary>
/// 执行人/执行终端ID
/// </summary>
public string ExecutorId { get; set; } = null!;
/// <summary>
/// 蜂窝设备运行时编码
/// </summary>
public string RuntimeCode { get; set; } = null!;
/// <summary>
/// 测试场景编码
/// </summary>
public string ScenarioCode { get; set; } = null!;
/// <summary>
/// 测试场景ID
/// </summary>
public string ScenarioId { get; set; } = null!;
/// <summary>
/// 测试用例流程名称
/// </summary>
public string FlowName { get; set; } = null!;
/// <summary>
/// 测试用例流程ID
/// </summary>
public string FlowId { get; set; } = null!;
/// <summary>
/// 设备编码(来自TestScenarioTask)
/// </summary>
public string DeviceCode { get; set; } = null!;
/// <summary>
/// 终端设备集合
/// </summary>
public IReadOnlyList<TerminalDeviceDto> TerminalDevices { get; set; } = new List<TerminalDeviceDto>();
/// <summary>
/// 事件时间戳
/// </summary>
public DateTime Timestamp { get; set; } = DateTime.UtcNow;
/// <summary>
/// 下一个节点信息
/// </summary>
public NextNodeInfo NextNodeInfo { get; set; } = null!;
/// <summary>
/// 静态工厂方法:从 NodeExecutionStartedEvent 创建具体事件实例
/// </summary>
/// <typeparam name="T">具体的事件类型</typeparam>
/// <param name="notification">原始事件通知</param>
/// <returns>具体事件实例</returns>
public static T CreateFrom<T>(NodeExecutionStartedEvent notification) where T : BaseNodeExecutionEvent, new()
{
return new T
{
EventId = Guid.NewGuid().ToString(),
TaskExecutionId = notification.TaskExecutionId,
ExecutorId = notification.ExecutorId,
RuntimeCode = notification.RuntimeCode,
ScenarioCode = notification.ScenarioCode,
ScenarioId = notification.ScenarioId,
FlowName = notification.FlowName,
FlowId = notification.FlowId,
DeviceCode = notification.DeviceCode,
TerminalDevices = notification.TerminalDevices,
NextNodeInfo = notification.NextNodeInfo,
Timestamp = DateTime.UtcNow
};
}
}