-
Notifications
You must be signed in to change notification settings - Fork 19
/
parking.puml
225 lines (185 loc) · 3.74 KB
/
parking.puml
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
@startuml
!include lib_eventstorming.puml
DomainEvent("CheckedIn")[
车辆已进场
--
车牌号
]
DomainEvent("CheckedOut")[
车辆已出场
--
车牌号
]
DomainEvent("ParkingPaid")[
车辆已付费
--
车牌号
金额
支付时间
]
DomainEvent("CheckedInFailed")[
入场失败
--
车牌号
]
DomainEvent("CheckedOutFailed")[
出场失败
--
车牌号
]
DomainEvent("CarAddedToBlackList")[
车辆加入黑名单
--
车牌号
]
DomainEvent("CarRemoveFromBlackList")[
车辆移除黑名单
--
车牌号
]
Command("AddCarToBlackList")[
添加车辆到黑名单
--
车牌号
--
1.不要重复添加
]
Command("RemoveCarFromBlackList")[
从黑名单移除车钠
--
车牌号
--
1.车辆必须在黑名单中
]
Command("CheckIn")[
车辆入场
--
车牌号
--
1.车辆当前必须不在场才能入场,否则出错,发布入场失败事件
2.入场成功,发布车辆已入场事件
]
Command("CheckOut")[
车辆出场
--
车牌号
--
1.车辆当前必须任场才能出场,否则出错,发布出场失败事件
2.当前必须费用已结清,或者在结清后的15分钟内,否则返回不允许出场
3.成功出场后,发布出场成功事件
]
Command("CalculateCurrentFee")[
计算当前费用
--
车牌号
--
1.车辆如果不在场,返回车辆不在场
2.按照业务算法计算费用
]
Command("PayParking")[
付费
--
车牌号
费用
付费时间
--
1.车辆必须在场,且未结清,否则操作失败
2.执行成功,则发布停车已付费事件工
]
Aggregate("CarParking") [
停车
--
id:车牌号
--
入场时间
累计付费金额
最后付款时间
]
CheckIn -down-> CarParking
CheckOut -down-> CarParking
PayParking -down-> CarParking
CalculateCurrentFee -down-> CarParking
CarParking -down-> CheckedIn
CarParking -down-> CheckedInFailed
CarParking -down-> CheckedOut
CarParking -down-> CheckedOutFailed
CarParking -down-> ParkingPaid
ReadModel("ParkingRecord")[
停午记录
--
id:自増序列
--
车牌号
入场时间
出场时间
支付时间
支付費用
]
ReadModel("InParkCount")[
在场数量
--
数量
]
ReadModel("DailyAvenue")[
每日收入
--
id:日期
--
总收入
]
CheckedIn -down-> ParkingRecord
CheckedOut -down-> ParkingRecord
ParkingPaid -down-> ParkingRecord
CheckedIn -down-> InParkCount
CheckedOut -down-> InParkCount
ParkingPaid -down-> DailyAvenue
Service("AlarmService") [
报警服务
--
车牌号
报警信息
]
Policy("AlarmPolicy")[
报警策略
--
入场或出场失败时要报警
]
CheckedInFailed -down-> AlarmPolicy
CheckedOutFailed -down-> AlarmPolicy
AlarmPolicy -down-> AlarmService
actor 闸机 as Gate
Gate -down-> CheckOut
actor 车主 as CarOwner
CarOwner -down-> CalculateCurrentFee
actor 支付系统 as PaySystem
PaySystem -down-> PayParking
actor 停车场管理员 as Admin
Admin -up-> ParkingRecord
Admin -up-> InParkCount
Admin -up-> DailyAvenue
Aggregate("CarBlackList")[
黑名单
--
id:车牌号
--
是否在黑名单
]
AddCarToBlackList -down-> CarBlackList
RemoveCarFromBlackList -down-> CarBlackList
CarBlackList -down-> CarAddedToBlackList
CarBlackList -down-> CarRemoveFromBlackList
Service("CarParkingService")[
停车服务
--
1.如果车辆在黑名单中,则禁止入场
]
FacadeCommand("CarCheckIn")[
车辆入场
--
车牌号
]
CarCheckIn -down-> CarParkingService
CarParkingService -down-> CheckIn
CarParkingService -down-> CarBlackList
Gate -down-> CarCheckIn
@enduml