flowable显⽰流程图,路径和节点beautiful
背景:在正常的flowable就是显⽰当前节点,路径需要我们⾃⼰获取,特别是来回的驳回会导致节点混乱,这⾥主要就是如何正确的显⽰流程图
效果:
已经结束的流程
bi是什么正在执⾏的流程
代码:1、⽣成图⽚
public byte[] createImage2(String processInstanceId) {
//1.获取当前的流程实例
ProcessInstance processInstance = ateProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
端午节英语怎么说
String processDefinitionId = null;
List<String> activeActivityIds = null;
//2.获取所有的历史轨迹对象
待到梦醒时分List<HistoricActivityInstance> list = ateHistoricActivityInstanceQuery()
.processInstanceId(processInstanceId).list();
Map<String, HistoricActivityInstance> hisActivityMap = new HashMap<>();
list.forEach(historicActivityInstance -> {
if (!ActivityId())) {
hisActivityMap.ActivityId(), historicActivityInstance);
}
富兰克林自传下载});
//3. 获取流程定义id和⾼亮的节点id
if (processInstance != null) {tsp
//3.1. 正在运⾏的流程实例
processDefinitionId = ProcessDefinitionId();
activeActivityIds = ActiveActivityIds(processInstanceId);
} el {
avastin//3.2. 已经结束的流程实例
HistoricProcessInstance historicProcessInstance = ateHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); processDefinitionId = ProcessDefinitionId();
activeActivityIds = new ArrayList<>();
List<EndEvent> endEvents = bpmnModelService.findEndFlowElement(processDefinitionId);
List<String> finalActiveActivityIds = activeActivityIds;
endEvents.forEach(endEvent -> {
if (Id())) {
finalActiveActivityIds.Id());
做鬼脸 英文}
});
}
//4. 获取流程定义的所有节点信息
List<FlowNode> flowNodes = bpmnModelService.findFlowNodes(processDefinitionId);
Map<String, FlowNode> activityMap = flowNodes.stream().Map(FlowNode::getId, flowNode -> flowNode));
List<String> highLightedFlows = new ArrayList<>();
//5. 递归得到⾼亮线
东莞外国语学校>mein
activeActivityIds.forEach(activeActivityId -> HighLightedFlows(activityMap, hisActivityMap, activeActivityId, highLightedFlows, activeActivityId));
//6. 获取bpmnModel对象
BpmnModel bpmnModel = BpmnModelByProcessDefId(processDefinitionId);
//7. ⽣成图⽚流
InputStream inputStream = ateDiagram(bpmnModel, activeActivityIds, highLightedFlows);
//8. 转化成byte便于⽹络传输
byte[] datas = adInputStream(inputStream, "image inputStream name");
return datas;
}
2、递归获取⾼private void getHighLightedFlows(
Map<String, FlowNode> flowNodeMap,
Map<String, HistoricActivityInstance> hisActivityMap,
String activeActivityId,
List<String> highLightedFlows,
String oldActivityId) {
FlowNode flowNode = (activeActivityId);
List<SequenceFlow> incomingFlows = IncomingFlows();
for (SequenceFlow quenceFlow : incomingFlows) {
String sourceRefId = SourceRef();
if (ainsKey(sourceRefId) && !oldActivityId.equals(sourceRefId)) {
highLightedFlows.Id());
} el {
if (ainsKey(sourceRefId)){
highLightedFlows.Id());
}
break;
} } }
如果有什么不懂的,可以随时问我,也可以加⼊我们633168411,⾥⾯都是flowable爱好者,不搞虚的,只讲实的。