/*** * 根据bpmnmodel获取流程节点的顺序信息 * @param processInstanceId * @param taskList * @param flowElements * @param workflowRequestFormData * @param curFlowElement */ private void getTaskList(String processInstanceId, List<Object> taskList, Collection<FlowElement> flowElements, Map<String, Object> workflowRequestFormData, FlowElement curFlowElement) { if (curFlowElement == null && taskList.size() == 0) { // 获取第一个UserTask FlowElement startElement = flowElements.stream().filter(flowElement -> flowElement instanceof StartEvent).collect(Collectors.toList()).get(0); List<SequenceFlow> outgoingFlows = ((StartEvent) startElement).getOutgoingFlows(); String targetRef = outgoingFlows.get(0).getTargetRef(); // 根据ID找到FlowElement FlowElement targetElementOfStartElement = getFlowElement(flowElements, targetRef); if (targetElementOfStartElement instanceof UserTask) { this.getTaskList(processInstanceId, taskList, flowElements, workflowRequestFormData, targetElementOfStartElement); } } else if (curFlowElement instanceof UserTask) { // 只有Usertask才添加到列表中 taskList.add(curFlowElement); String targetRef = ""; List<SequenceFlow> outgoingFlows = ((UserTask) curFlowElement).getOutgoingFlows(); if (outgoingFlows.size() == 1) { targetRef = outgoingFlows.get(0).getTargetRef(); } else { // 找到表达式成立的sequenceFlow的 SequenceFlow sequenceFlow = getSequenceFlow(workflowRequestFormData, outgoingFlows); if (sequenceFlow != null) { targetRef = sequenceFlow.getTargetRef(); } } // 根据ID找到FlowElement FlowElement targetElement = getFlowElement(flowElements, targetRef); this.getTaskList(processInstanceId, taskList, flowElements, workflowRequestFormData, targetElement); } else if (curFlowElement instanceof ExclusiveGateway) { String targetRef = ""; // 如果为排他网关,获取符合条件的sequenceFlow的目标FlowElement List<SequenceFlow> exclusiveGatewayOutgoingFlows = ((ExclusiveGateway) curFlowElement).getOutgoingFlows(); // 找到表达式成立的sequenceFlow的 SequenceFlow sequenceFlow = getSequenceFlow(workflowRequestFormData, exclusiveGatewayOutgoingFlows); if (sequenceFlow != null) { targetRef = sequenceFlow.getTargetRef(); } // 根据ID找到FlowElement FlowElement targetElement = getFlowElement(flowElements, targetRef); this.getTaskList(processInstanceId, taskList, flowElements, workflowRequestFormData, targetElement); } }/*** * 根据ID找到FlowElement * @param flowElements * @param targetRef * @return */ private FlowElement getFlowElement(Collection<FlowElement> flowElements, String targetRef) { List<FlowElement> targetFlowElements = flowElements.stream().filter( flowElement -> !StringUtils.isEmpty(flowElement.getId()) && flowElement.getId().equals(targetRef) ).collect(Collectors.toList()); if (targetFlowElements.size() > 0) { return targetFlowElements.get(0); } return null; } /*** * 找到表达式成立的sequenceFlow的 * @param workflowRequestFormData * @param outgoingFlows * @return */ private SequenceFlow getSequenceFlow(Map workflowRequestFormData, List<SequenceFlow> outgoingFlows) { List<SequenceFlow> sequenceFlows = outgoingFlows.stream().filter(item -> { Object execConditionExpressionResult = null; boolean re = false; try { execConditionExpressionResult = this.getElValue(item.getConditionExpression(), workflowRequestFormData); } catch (Exception e) { e.printStackTrace(); } if (execConditionExpressionResult.equals("true")) { re = true; } return (Boolean) execConditionExpressionResult; }).collect(Collectors.toList()); if (sequenceFlows.size() > 0) { return sequenceFlows.get(0); } return null; }
flowable获取流程节点的顺序数据
来源:网站目录 浏览:532次 时间:2020-12-09
- 上一篇: 5G/4G工业智能网关在工业物联网的必要性
- 下一篇: HostEase主机日志文件怎么查看
推荐资讯
- PHP - Manual: event_base_new
- PHP - Manual: magic_quotes_runtime
- PHP - Manual: HaruPage::setLineCap
- PHP - Manual: MysqlndUhConnection::killConnection
- PHP - Manual: dbplus_xunlockrel
- PHP - Manual: gupnp_root_device_start
- PHP - Manual: MysqlndUhConnection::getStatistics
- PHP - Manual: MysqlndUhConnection::connect
- PHP - Manual: Beyond TTL: user-defined storage
- PHP - Manual: CairoStatus
推荐站点
- At-lib分类目录
At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家
www.at-lib.cn - 中国链接目录
中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。
www.cnlink.org - 35目录网
35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。
www.35mulu.com - 就要爱网站目录
就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。
www.912219.com - 伍佰目录
伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。
www.wbwb.net