RobotStatusChangedDomainEventHandler.cs
3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using Microsoft.Extensions.Logging;
using Rcs.Domain.Entities.DomainEvents;
namespace Rcs.Infrastructure.MessageBus.Handlers.Events
{
/// <summary>
/// 机器人状态变更领域事件处理器
/// </summary>
public class RobotStatusChangedDomainEventHandler
{
private readonly ILogger<RobotStatusChangedDomainEventHandler> _logger;
public RobotStatusChangedDomainEventHandler(ILogger<RobotStatusChangedDomainEventHandler> logger)
{
_logger = logger;
}
public async Task Handle(RobotStatusChangedDomainEvent domainEvent)
{
_logger.LogInformation(
"处理机器人状态变更领域事件 - 机器人ID: {RobotId}, 编码: {RobotCode}, 旧状态: {OldStatus}, 新状态: {NewStatus}, 在线状态: {OnlineStatus}",
domainEvent.RobotId,
domainEvent.RobotCode,
domainEvent.OldStatus,
domainEvent.NewStatus,
domainEvent.OnlineStatus);
try
{
// 在这里处理机器人状态变更事件
// 例如:
// 1. 监听电量变化
// 2. 监听任务状态变化,根据状态触发相应的业务逻辑
//
// 位置、方向、错误信息等高苏同步信息直接更新缓存,而不更新数据库,有程序的定时同步同步到数据库。
// 特殊处理:状态变为错误
if (domainEvent.NewStatus == Domain.Entities.RobotStatus.Error)
{
_logger.LogWarning(
"机器人进入错误状态 - 机器人ID: {RobotId}, 编码: {RobotCode}",
domainEvent.RobotId,
domainEvent.RobotCode);
// 触发告警流程
}
// 特殊处理:电量低
if (domainEvent.BatteryLevel.HasValue && domainEvent.BatteryLevel.Value < 20)
{
_logger.LogWarning(
"机器人电量过低 - 机器人ID: {RobotId}, 编码: {RobotCode}, 电量: {BatteryLevel}%",
domainEvent.RobotId,
domainEvent.RobotCode,
domainEvent.BatteryLevel.Value);
// 触发低电量处理流程
}
await Task.CompletedTask;
_logger.LogInformation(
"机器人状态变更领域事件处理完成 - 机器人ID: {RobotId}, 编码: {RobotCode}",
domainEvent.RobotId,
domainEvent.RobotCode);
}
catch (Exception ex)
{
_logger.LogError(ex,
"处理机器人状态变更领域事件失败 - 机器人ID: {RobotId}, 编码: {RobotCode}",
domainEvent.RobotId,
domainEvent.RobotCode);
throw;
}
}
}
}