Activiti流程跟踪监控图路径线和节点高亮显示

上传人:夏** 文档编号:563597592 上传时间:2023-12-06 格式:DOCX 页数:11 大小:16.94KB
返回 下载 相关 举报
Activiti流程跟踪监控图路径线和节点高亮显示_第1页
第1页 / 共11页
Activiti流程跟踪监控图路径线和节点高亮显示_第2页
第2页 / 共11页
Activiti流程跟踪监控图路径线和节点高亮显示_第3页
第3页 / 共11页
Activiti流程跟踪监控图路径线和节点高亮显示_第4页
第4页 / 共11页
Activiti流程跟踪监控图路径线和节点高亮显示_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Activiti流程跟踪监控图路径线和节点高亮显示》由会员分享,可在线阅读,更多相关《Activiti流程跟踪监控图路径线和节点高亮显示(11页珍藏版)》请在金锄头文库上搜索。

1、Activiti流程跟踪监控图路径线和节点高亮显示流程图高亮显示该流程图示基于5.12的基础上改造的,由于涉及未来的升级问题,所以使用继承的方式扩展它的画图类。闲话少说我们切入正题。由于这是公司完整项目上的一个小模块,而最近公司不再做进一步的开发,只是优化,所以对于并行还不能支持,但方法有了,不过就是在做更一层次的处理。希望对大家有所帮助。1,先晒一下,我做出来的效果。2,具体实现步骤:Action/* 通过指定的流程实例id生成流程监控图* param mapping* param form* param request* param response* return*/public Act

2、ionForward instanceDiagram(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) /* 获取流程实例ID */String instanceId = StringUtils.trimToEmpty(request .getParameter(instanceId);/ 设置页面不缓存response.setHeader(Pragma, No-cache);response.setHeader(Cache-Control, no-ca

3、che);response.setDateHeader(Expires, 0);try HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(instanceId).singleResult();if (historicProcessInstance = null) throw new RuntimeException(获取流程图异常!); else BpmnModel bpmnModel = reposito

4、ryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId();ListactivityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(instanceId).orderByHistoricActivityInstanceId().asc().list();/获取流程走过的节点,并按照节点生成先后顺序排序ListArrayListListListArrayListProcessDefinitionE

5、ntity processDefinition = (ProcessDefinitionEntity) (RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(historicProcessInstance.getProcessDefinitionId();flowIds = flowMoniService.getHighLightedFlows(processDefinition, activityInstances);currentFlowIds =flowMoniService.getCurrentH

6、ighLightedFlows(processDefinition, activityInstances);for (HistoricActivityInstance hai : activityInstances) activitiIds.add(hai.getActivityId();ListhighLightedActivities = flowMoniService.getHighLightedActivities(processDefinition,activityInstances);ProcessEngineImpl defaultProcessEngine = (Process

7、EngineImpl) ProcessEngines.getDefaultProcessEngine();Context.setProcessEngineConfiguration(defaultProcessEn gine.getProcessEngineConfiguration();Context.setProcessEngineConfiguration(processEngineFac toryBean.getProcessEngineConfiguration();InputStream imageStream = BlazerProcessDiagramGenerator.gen

8、erateDiagram2(bpmnModel, png,highLightedActivities, flowIds, currentFlowIds);response.setContentType(image/png);OutputStream os = response.getOutputStream();int bytesRead = 0;byte buffer = new byte8192;while(bytesRead = imageStream.read(buffer, 0, 8192) != -1) os.write(buffer, 0, bytesRead);os.close

9、();imageStream.close(); catch (Exception e) logger.error(获取流程图异常!, e);throw new RuntimeException(获取流程图异常!);return null;Service 获取高亮显示的线的id注(这里我在代码里想对并发做些处理,但由于时间原因并没解决,希望高手继续加强)Overridepublic ListProcessDefinitionEntity processDefinitionEntity,ListListfor (int i = 0; i - 1; i+) / 对历史流程节点进行遍历Activity

10、Impl activityImpl =processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId();/ 得到节点定义的详细信息List sameStartTimeNodes = newArrayList();/ 用以保存后需开始时间相同的节点ActivityImpl sameActivityImpl1 = processDefinitionEntity.findActivity(historicActivityInstances.get(i + 1).getActivityId();/

11、 将后面第一个节点放在时间相同节点的集合里sameStartTimeNodes.add(sameActivityImpl1);for (int j = i + 1; j historicActivityInstances.size() - 1; j+) HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j);/ 后续第一个节点HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);/ 后续第二个节点if

12、(activityImpl1.getStartTime().equals(activityImpl2.getStartTime() / 如果第一个节点和第二个节点开始时间相同保存ActivityImpl sameActivityImpl2 = processDefinitionEntity.findActivity(activityImpl2.getActivityId();sameStartTimeNodes.add(sameActivityImpl2); else / 有不相同跳出循环break;List去的线for(PvmTransition pvmTransition : pvmTra

13、nsitions) / 对所有的线进行遍历ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition.getDestination();/ 如果取出的线的目标节点存在时间相同的节点里,保存该线的id,进行高亮显示if(sameStartTimeNodes.contains(pvmActivityImpl) highFlows.add(pvmTransition.getId();return highFlows;Overridepublic ListgetHighLightedActivities(ProcessDefinitionEn

14、tity processDefinition,ListhistoricActivityInstances) Listint activityCount = historicActivityInstances.size();MapactivityMap.put(historicActivityInstances.get(historicActivityInstances.size() -1).getActivityId(),true);highLightedActivities.add(activityMap);boolean findCurrActivity = true;/ 是否查询并发任务

15、节点for (int j = activityCount - 2; j = 0; j-) / 判断前面节点是否与MapHashMapHistoricActivityInstance activityImpl1 = historicActivityInstances.get(j);/ 前面第一个节点if (findCurrActivity) HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);/ 当前节点if (activityImpl1.getStartTime().equals(activityImpl2.getStartTime() String type =activityImpl1.getActivityType();/ 排除系统自动执行节点if (userTask.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 机械理论及资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号