RobotStatusChangedDomainEvent.cs 3.05 KB
namespace Rcs.Domain.Entities.DomainEvents
{
    /// <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;
        }
    }
}