Activiti流程跟踪监控图路径线和节点高亮显示_第1页
Activiti流程跟踪监控图路径线和节点高亮显示_第2页
Activiti流程跟踪监控图路径线和节点高亮显示_第3页
Activiti流程跟踪监控图路径线和节点高亮显示_第4页
Activiti流程跟踪监控图路径线和节点高亮显示_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/*流程图咼亮显示该流程图示基于5.12的基础上改造的,由于涉及未来的升级问题,所以使用 继承的方式扩展它的画图类。闲话少说我们切入正题。由于这是公司完整项目上的一个小模块,而最近公司不再做进一步的开发, 只是优化,所以对于并行还不能支持,但方法有了,不过就是在做更一层次的处 理。希望对大家有所帮助。2,具体实现步骤:Action通过指定的流程实例id生成流程监控图* param mappi ng* param form* param request* param resp onse* return*/publicActio nFo rward in sta nceDiagram(Actio

2、nMappi ngmapp ing,ActionForm form, HttpServletRequest request, HttpServletResp onse resp on se) /*获取流程实例ID */trimToEmpty (request );Stri ng in sta nceld = Stri ngUtils.getParameter("in sta nceld"/设置页面不缓存response.setHeader("Pragma" , "No-cache" );response.setHeader("

3、;Cache-Control" , "no-cache" );response.setDateHeader( "Expires" , 0);try HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(instanceId).singleResult();if (historicProcessInstance = null ) throw new Runtime

4、Exception( " 获取流程图异常 !" ); else BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId();List<HistoricActivityInstance>activityInstances = historyService.createHistoricActivityInstanceQuery() .processInstanceId(instanceId).orderByHistoricA

5、ctivityInstanceId().asc().list();/ 获取流程走过的节点,并按照节点生成先后顺序排序List<String> activitiIds = newArrayList<String>();List<String> flowIds = new ArrayList<String>();List<String> currentFlowIds = newArrayList<String>();ProcessDefinitionEntity processDefinition =(ProcessDefin

6、itionEntity) (RepositoryServiceImpl)repositoryService ).getDeployedProcessDefinition(historicProcessInstance.getProcessDefinitionId();flowIds =flowMoniService .getHighLightedFlows(processDefinition, activityInstances);currentFlowIds =flowMoniService .getCurrentHighLightedFlows(processDefinition, act

7、ivityInstances);for (HistoricActivityInstance hai :activityInstances) activitiIds.add(hai.getActivityId();List<Map<String, Boolean>>highLightedActivities =flowMoniService.getHighLightedActivities(processDefinition,activityInstances);ProcessEngineImpl defaultProcessEngine =(ProcessEngineI

8、mpl) ProcessEngines. getDefaultProcessEngine ();Context. setProcessEngineConfiguration (defaultProcessEn gine.getProcessEngineConfiguration();Context. setProcessEngineConfiguration ( processEngineFac toryBean.getProcessEngineConfiguration();InputStream imageStream = BlazerProcessDiagramGenerator. ge

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

10、(buffer, 0, bytesRead);os.close(); imageStream.close(); catch (Exception e) logger .error( " 获取流程图异常 !" , e);throw new RuntimeException(" 获取流程图异常 !" );return null ;Service 获取高亮显示的线的 id注(这里我在代码里想对并发做些处理,但由于时间原因并没解决,希望高手继续加强)Overridepublic ListvStri ng> getHighLightedFlows(Proce

11、ssDefi niti onEn tity processDefi niti onEn tity,List<HistoricActivityl nsta nce>historicActivity In sta nces) List<String>highFlows = new ArrayList<String>();/用以保存高亮的线flowIdfor ( int i = 0; i < historicActivityInstances.size()-1; i+) /对历史流程节点进行遍历ActivityImpl activityImpl =proce

12、ssDefi niti onEn tity.fin dActivity(historicActivityl nsta nces.get(i).getActivityld();/ 得到节点定义的详细信息List<Activitylmpl> sameStartTimeNodes =newArrayList<Activitylmpl>();/用以保存后需开始时间相同的节点ActivityImpl sameActivityImpl1 =processDefi niti onEn tity.fin dActivity(historicActivityI nsta nces.get

13、(i + 1).getActivityId();/ 将后面第一个节点放在时间相同节点的集合里sameStartTimeNodes.add(sameActivitylmpl1);for (int j = i + 1; j <historicActivityl nsta nces.size() - 1; j+) HistoricActivitylnstance activitylmpl1 =historicActivityl nsta nces.get(j); /后续第一个节点HistoricActivitylnstance activitylmpl2 =historicActivityl

14、nsta nces.get(j + 1);/后续第二个节点if (activitylmpl1.getStartTime().equals(activityImpl2.getStartTime() / 如果第一个节点和第二个节点开始时间相同保存ActivityImpl sameActivityImpl2 = processDefinitionEntity.findActivity(activityImpl2.getActivityId(); sameStartTimeNodes.add(sameActivityImpl2); else / 有不相同跳出循环break ;List<PvmTr

15、ansition> pvmTransitions = activityImpl.getOutgoingTransitions(); / 取出节点的所有出去的线for (PvmTransition pvmTransition : pvmTransitions) / 对所有的线进行遍历ActivityImpl pvmActivityImpl = (ActivityImpl)pvmTransition.getDestination(); / 如果取出的线的目标节点存在时间相同的节点里,保存该线的 id ,进行高亮显示if(sameStartTimeNodes.contains(pvmActiv

16、ityImpl) highFlows.add(pvmTransition.getId();return highFlows;Overridepublic List<Map<String, Boolean>> getHighLightedActivities(ProcessDefinitionEntity processDefinition, List<HistoricActivityInstance>historicActivityInstances) List<Map<String, Boolean>> highLightedAct

17、ivities = new ArrayList<Map<String, Boolean>>();int activityCount = historicActivityInstances.size();Map<String, Boolean> activityMap = new HashMap<String, Boolean>();activityMap.put(historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(),true );hi

18、ghLightedActivities.add(activityMap);boolean findCurrActivity = true ; / 是否查询并发任务节点 for ( int j = activityCount - 2; j >= 0; j-) / 判断前面节点是否与Map<String, Boolean> activityMap2 =newHashMap<String, Boolean>();HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j); / 前面第

19、一个节点if (findCurrActivity) HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);/ 当前节点if (activityImpl1.getStartTime().equals(activityImpl2.getStartTime() String type =activityImpl1.getActivityType();/ 排除系统自动执行节点 if ( "userTask" .equals(type) |"endEvent" .equals(type) activityM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论