PlantUML是一个可以快速编写UML图的组件,画出来的图感觉比visio好看且专业;
可以内置Java开发工具IDEA插件,使用代码画图,逻辑更符合程序员思维;
如下:
1. 安装
插件在线下载地址:PlantUML Integration - IntelliJ IDEs Plugin | Marketplace
运行库地址:Download | Graphviz
配置方式:
IDEA的插件market:
2. 使用示例
安装好后邮件新增文件可选:
2.1 一般时序图
样式1:
代码:
@startuml
participant 联运客户端 order 1
participant 支付服务端 order 2
participant 大会员服务端 order 3 #99FF99
'skinparam responseMessageBelowArrow true
联运客户端 -> 支付服务端: 1.[HTTP]查询收银台信息
支付服务端 -> 大会员服务端: 2.[DUBBO]查询大会员产品信息及收银台样式
大会员服务端 -> 大会员服务端: 3.条件过滤/组装信息
支付服务端 <-- 大会员服务端: [DUBBO]返回收银台大会员产品渲染信息
联运客户端 <-- 支付服务端: [HTTP]返回收银台信息
@enduml
样式2:
代码:
@startuml
participant 游戏CP order 1 #99FF99
participant 开平API order 2
participant 数据库 order 3
autonumber
游戏CP -> 开平API: 创建测试计划 填写信息 保存
开平API -> 数据库: 查询是否存在流程中计划
开平API <-[#0000FF]- 数据库: 返回结果
alt 不存在流程中计划
开平API -> 数据库: 入库内测游戏测试计划表
开平API <-- 数据库: 返回测试计划ID
游戏CP -> 开平API: 继续填写问卷 提交保存
开平API -> 数据库: 入库问卷表
开平API <-- 数据库: 返回问卷ID
activate 开平API
开平API --> 开平API: 测试计划关联问卷ID
开平API -> 数据库: 更新内测游戏测试计划表记录
deactivate 开平API
开平API <-- 数据库: 更新成功
游戏CP <-- 开平API: 返回测试计划提交成功
autonumber stop
else 存在流程中计划
autonumber 5
游戏CP <-- 开平API: 返回测试计划提交失败
end
@enduml
2.2 活动图
样式1:
代码:
@startuml
(*) --> "byType-按照类型装配Bean"
If "" then
note right
是否找到bean?
end note
--> [Yes] If "" then
note right
是否使用@Qualifier?
end note
--> [Yes] "根据@Qualifier的名称找bean"
--> If "" then
note right
是否找到对应名称的bean?
end note
--> [Yes] "装配成功" #99FF99
else
--> [No] "装配失败" #9fc5e8
Endif
else
--> [No] If "" then
note right
是否仅找到1个bean?
end note
--> [Yes] "装配成功"
else
--> [No 找到多个] If "" then
note right
是否有配置@Primary的bean?
end note
---> [Yes] "装配成功"
else
---> [No] "装配失败"
Endif
Endif
Endif
"装配成功"-->(*)
"装配失败"-->(*)
Endif
@enduml
样式2:
代码:
@startuml
(*) --> "byName-@Resource默认按照名称装配Bean"
--> [4种配置方式] "@Resource属性配置" #f4cccc
"@Resource属性配置" --> [case1:未配置] "默认使用name查找bean"
if "" then
note left
通过name找到bean?
end note
--> [yes] "装配成功" #99FF99
else
--> [No] if "" then
note left
通过type找到bean?
end note
--> [yes] "装配成功" #99FF99
else
--> [No] "装配失败" #9fc5e8
Endif
Endif
"@Resource属性配置" --> [case2:配置type和name] "使用name和type一起查找bean"
if "" then
note left
通过name和type找到bean?
end note
--> [yes] "装配成功" #99FF99
else
--> [No] "装配失败" #9fc5e8
Endif
"@Resource属性配置" --> [case3:仅配置name] "仅使用name查找bean"
if "" then
note left
通过name找到bean?
end note
---> [yes] "装配成功" #99FF99
else
---> [No] "装配失败" #9fc5e8
Endif
"@Resource属性配置" --> [case4:仅配置type] "仅使用type查找bean"
if "" then
note left
通过type找到bean?
end note
---> [yes] "装配成功" #99FF99
else
---> [No] "装配失败" #9fc5e8
Endif
"装配成功"-->(*)
"装配失败"-->(*)
@enduml
样式3:
代码:
@startuml
note right #cc3333
[起始]
end note
(*) --> "扫描新游内测申请表"
partition LOOP所有有效记录 #CCDDEE {
--> "通过内测新游包名查询(游戏中心)上下架状态"
If "" then
note right #99EE99
是否与当前上下架状态不一致?
end note
--> [Yes] "更新该条记录"
--> If "" then
note right #99EE99
上架变更/下架变更?
end note
--> [上架变更] "通知用户运营平台创建通知II计划(幂等)"
else
--> [下架变更] "V消息告知运营"
Endif
If "" then
note right #99EE99
内测计划是否已经开始?
end note
--> [Yes] "不做处理"
else
--> [No] "通知用户运营平台取消通知II计划(幂等)"
Endif
else
}
-------> [No] ===B1===
Endif
"不做处理" --> ===B1===
"通知用户运营平台创建通知II计划(幂等)" ---> ===B1===
"通知用户运营平台取消通知II计划(幂等)" ---> ===B1===
===B1=== -->"任务结束"
-->(*)
note right #cc3333
[终止]
end note
@enduml
样式4:
代码:
@startuml
note right #cc3333
[起始]
end note
(*) --> "已提交审核的测试计划列表"
"已提交审核的测试计划列表"--> "查看已提交审核的测试计划详情"
note right
角色:游戏运营
end note
If "" then
note right #99EE99
是否审核通过?
end note
partition 通知 #CCDDEE {
--> [Yes]===B1===
---> [通知CP]"(站内信)通知CP该计划审核通过"
--->===B2===
===B1=== ---> [通知下游]"1.通知C端-同步测试计划物料 2.通知用户运营平台-创建问卷通知计划"
--->===B2===
}
--->(*)
note right #cc3333
[终止]
end note
else
--> [No] "(站内信)通知CP审核不通过及原因"
If "" then
note right #99EE99
当前审核计划是否过期(不可编辑)?
end note
--> [Yes](*)
else
-----> [No] "重新提交"
note right
角色:游戏CP
end note
"重新提交" ---> "已提交审核的测试计划列表"
Endif
@enduml
样式5:
代码:
@startuml
(*) --> "收银台支付结果消息"
note right #99EE99
[入参]:
用户openid
扣减金额deductAmount
订单号orderNo
业务类型bizType
end note
If "" then
note left
deductAmount = 0?
end note
partition "收银台未使用预支礼券" {
--> [Yes] "[ 现有逻辑 ]\n1. 用户身份信息更新 (立即成为会员/延长1个月周期)\n2. member_period记录状态为'1-待发放'\n3. 当前购买的会员月 发放N张无门槛券"
-->(*)
}
else
partition "收银台使用预支礼券" {
--> [No] If "" then
note left
deductAmount等于bizType配置下无门槛券面额?
end note
--> [Yes] If "" then
note left
用户是否已经是大会员生效状态? (如跳转H5开通)
end note
--> [Yes] "1. 监控异常用户行为\n2. member_period记录状态为'6-待发放-已用虚拟礼券'\n3. 当前购买的会员月到来时由定时任务发放N-1张无门槛券"
-->(*)
else
--> [No] "[ 现有逻辑 ]\n1. 用户身份信息更新成为会员\n2. member_period记录状态为'1-待发放'\n3. 立即发放N-1张无门槛券"
-->(*)
end if
else
--> [No] "1. 监控异常数据\n2. 系统告警"
"1. 监控异常数据\n2. 系统告警"-->"[ 现有逻辑 ]\n1. 用户身份信息更新 (立即成为会员/延长1个月周期)\n2. member_period记录状态为'1-待发放'\n3. 当前购买的会员月 不发放门槛券(告警) 仅发放其他会员权益"
-->(*)
}
end if
end if
@enduml
样式6:
代码:
@startuml
(*) --> "下单请求"
note right
入参:
用户openid
产品id productId
end note
If "" then
note left
用户身份满足下单条件?
end note
partition 下单成功 {
--> [Yes] If "" then
note left
根据productId判断是否签约订单?
end note
--> [Yes] "返回订单号+签约单号(签约标识)"
--> "返回下单成功"
else
--> [No] "返回订单号"
}
Endif
--> "返回下单成功"
-->(*)
else
--> [No] "返回因身份互斥导致下单失败的状态码"
--> "返回下单失败"
-->(*)
Endif
@enduml
导出
建议导出格式为svg格式,可以使用浏览器打开,也可以使用visio打开继续编辑,不失真;