RobotStatusChangedDomainEvent.cs 2.67 KB
namespace Rcs.Domain.Entities.DomainEvents.Robot;

/// <summary>
/// 机器人状态变更领域事件
/// </summary>
public sealed record RobotStatusChangedDomainEvent : IDomainEvent
{
    /// <summary>
    /// 机器人系统ID
    /// </summary>
    public Guid RobotId { get; init; }

    /// <summary>
    /// 机器人编码
    /// </summary>
    public string RobotCode { get; init; }

    /// <summary>
    /// 机器人名称
    /// </summary>
    public string RobotName { get; init; }

    /// <summary>
    /// 旧状态
    /// </summary>
    public RobotStatus OldStatus { get; init; }

    /// <summary>
    /// 新状态
    /// </summary>
    public RobotStatus NewStatus { get; init; }

    /// <summary>
    /// 在线状态
    /// </summary>
    public OnlineStatus OnlineStatus { get; init; }

    /// <summary>
    /// 电池电量
    /// </summary>
    public double? BatteryLevel { get; init; }

    /// <summary>
    /// 当前位置X
    /// </summary>
    public double? CurrentX { get; init; }

    /// <summary>
    /// 当前位置Y
    /// </summary>
    public double? CurrentY { get; init; }

    /// <summary>
    /// 当前角度
    /// </summary>
    public double? CurrentTheta { get; init; }

    /// <summary>
    /// 当前地图ID
    /// </summary>
    public Guid? CurrentMapCodeId { get; init; }

    /// <summary>
    /// 是否正在行驶
    /// </summary>
    public bool Driving { get; init; }

    /// <summary>
    /// 是否充电
    /// </summary>
    public bool Charging { get; init; }

    /// <summary>
    /// 是否暂停
    /// </summary>
    public bool Paused { get; init; }

    /// <summary>
    /// 事件发生时间
    /// </summary>
    public DateTime OccurredAt { get; init; }

    public RobotStatusChangedDomainEvent(
        Guid robotId,
        string robotCode,
        string robotName,
        RobotStatus oldStatus,
        RobotStatus newStatus,
        OnlineStatus onlineStatus,
        double? batteryLevel = null,
        double? currentX = null,
        double? currentY = null,
        double? currentTheta = null,
        Guid? currentMapCodeId = null,
        bool driving = false,
        bool charging = false,
        bool paused = false)
    {
        RobotId = robotId;
        RobotCode = robotCode;
        RobotName = robotName;
        OldStatus = oldStatus;
        NewStatus = newStatus;
        OnlineStatus = onlineStatus;
        BatteryLevel = batteryLevel;
        CurrentX = currentX;
        CurrentY = currentY;
        CurrentTheta = currentTheta;
        CurrentMapCodeId = currentMapCodeId;
        Driving = driving;
        Charging = charging;
        Paused = paused;
        OccurredAt = DateTime.Now;
    }
}