RobotSubTask.cs
3.31 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Rcs.Domain.Entities.DomainEvents.RobotSubTask;
namespace Rcs.Domain.Entities;
/// <summary>
/// 子任务实体类
/// @author zzy
/// </summary>
[Table("robot_sub_tasks")]
public partial class RobotSubTask : Entity
{
/// <summary>
/// 子任务ID
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column("sub_task_id")]
public Guid SubTaskId { get; set; }
/// <summary>
/// 父任务ID(外键)
/// </summary>
[Required]
[Column("task_id")]
public Guid TaskId { get; set; }
/// <summary>
/// 机器人ID(外键)
/// </summary>
[Column("robot_id")]
public Guid? RobotId { get; set; }
/// <summary>
/// 起点NodeID(外键)
/// </summary>
[Required]
[Column("begin_node_id")]
public Guid BeginNodeId { get; set; }
/// <summary>
/// 终点NodeID(外键)
/// </summary>
[Required]
[Column("end_node_id")]
public Guid EndNodeId { get; set; }
/// <summary>
/// 执行顺序
/// </summary>
[Required]
[Column("sequence")]
public int Sequence { get; set; }
/// <summary>
/// 子任务状态
/// </summary>
[Column("status")]
public TaskStatus Status { get; set; }
/// <summary>
/// 执行次数(用于VDA5050协议OrderUpdateId)
/// 每次发送订单时递增,记录该子任务已下发的次数
/// @author zzy
/// </summary>
[Required]
[Column("execution_count")]
public int ExecutionCount { get; set; } = 0;
/// <summary>
/// 创建时间
/// </summary>
[Column("created_at", TypeName = "timestamp")]
public DateTime CreatedAt { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[Column("updated_at", TypeName = "timestamp")]
public DateTime? UpdatedAt { get; set; }
#region 外键 => 导航属性,ManyToOne/OneToOne
/// <summary>
/// 父任务导航属性
/// </summary>
[ForeignKey(nameof(TaskId))]
public virtual RobotTask? Task { get; set; }
/// <summary>
/// 机器人导航属性
/// </summary>
[ForeignKey(nameof(RobotId))]
public virtual Robot? Robot { get; set; }
/// <summary>
/// 起点Node导航属性
/// </summary>
[ForeignKey(nameof(BeginNodeId))]
public virtual MapNode? BeginNode { get; set; }
/// <summary>
/// 终点Node导航属性
/// </summary>
[ForeignKey(nameof(EndNodeId))]
public virtual MapNode? EndNode { get; set; }
#endregion
/// <summary>
/// 跳过子任务
/// @author zzy
/// </summary>
public void Skip()
{
Status = TaskStatus.Completed;
UpdatedAt = DateTime.Now;
AddDomainEvent(new SubTaskSkippedDomainEvent(SubTaskId, TaskId));
}
/// <summary>
/// 重新执行子任务
/// @author zzy
/// </summary>
public void Retry()
{
Status = TaskStatus.Pending;
UpdatedAt = DateTime.Now;
AddDomainEvent(new SubTaskRetryDomainEvent(SubTaskId, TaskId));
}
/// <summary>
/// 执行子任务
/// @author zzy
/// </summary>
public void Start()
{
Status = TaskStatus.InProgress;
UpdatedAt = DateTime.Now;
}
}