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

下载本文档

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

文档简介

[应用]Activiti流程跟踪监控图路径线和节点高亮显示流程图高亮显示继承的方式扩展它的画图类。闲话少说我们切入正题。由于这是公司完整项目上的一个小模块,而最近公司不再做进一步的开发,只希望对大家有所协助。。。1,先晒一下,我做出来的效果。2,详细实现步骤:,Action/**经过指定的流程实例id生成流程监控图*@parammapping@paramform@paramrequest@paramresponse@return*/publicActionForwardinstanceDiagram(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){/**ID*/StringinstanceId=StringUtils.trimToEmpty(request.getParameter("instanceId"));//设置页面不缓存response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires",0);try{HistoricProcessInstancehistoricProcessInstance=historyService.createHistoricProcessInstanceQuery().processInstanceId(instanceId).singleResult();if(historicProcessInstance==null){thrownewRuntimeException("取得流程图异样!");}else{BpmnModelbpmnModel=repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());List<HistoricActivityInstance>activityInstances=historyService.createHistoricActivityInstanceQuery().processInstanceId(instanceId).orderByHistoricActivityInstanceId().asc()取得流程走过的节点,并依据节点生成先后挨次排序List<String>activitiIds=newArrayList<String>();List<String>flowIds=newArrayList<String>();List<String>currentFlowIds=newArrayList<String>();ProcessDefinitionEntityprocessDefinition=(ProcessDefinitionEntity)((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(historicProcessInstance.getProcessDefinitionId());flowIds=flowMoniService.getHighLightedFlows(processDefinition,activityInstances);currentFlowIds=flowMoniService.getCurrentHighLightedFlows(processDefinition,activityInstances);for(HistoricActivityInstancehai:activityInstances){activitiIds.add(hai.getActivityId());}List<Map<String,Boolean>>highLightedActivities=flowMoniService.getHighLightedActivities(processDefinition,activityInstances);ProcessEngineImpldefaultProcessEngine=(ProcessEngineImpl)ProcessEngines.getDefaultProcessEngine();Context.setProcessEngineConfiguration(defaultProcessEngine.getProcessEngineConfiguration());Context.setProcessEngineConfiguration(processEngineFactoryBean.getProcessEngineConfiguration());InputStreamimageStream=BlazerProcessDiagramGenerator.generateDiagram2(bpmnModel,"png",highLightedActivities,flowIds,currentFlowIds);response.setContentType("image/png");OutputStreamos=response.getOutputStream();intbytesRead=0;byte[]buffer=newbyte[8192];while((bytesRead=imageStream.read(buffer,0,8192))!=-1){os.write(buffer,0,bytesRead);}os.close();imageStream.close();}}catch(Exceptione){logger.error("e);thrownewRuntimeException("取得流程图异样!");}returnnull;},Serviceid继续加强)@OverridepublicList<String>getHighLightedFlows(ProcessDefinitionEntityprocessDefinitionEntity,List<HistoricActivityInstance>historicActivityInstances){List<String>highFlowsnewArrayList<String>();//flowIdfor(inti=0;i<historicActivityInstances.size()1;i++){//ActivityImplactivityImpl=processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId());//信息List<ActivityImpl>sameStartTimeNodes=newArrayList<ActivityImpl>();//ActivityImplsameActivityImpl1=processDefinitionEntity.findActivity(historicActivityInstances.get(i+1).getActivityId());//将后面第一个节点放在时间相同节点的集合里sameStartTimeNodes.add(sameActivityImpl1);for(intj=i+1;j<historicActivityInstances.size()-1;j++){HistoricActivityInstanceactivityImpl1=historicActivityInstances.get(j);//后续第一个节点HistoricActivityInstanceactivityImpl2=historicActivityInstances.get(j+1);//后续第二个节点if(activityImpl1.getStartTime().equals(activityImpl2.getStartTime())){//一个节点和第二个节点开头时间相同保存ActivityImplsameActivityImpl2=processDefinitionEntity.findActivity(activityImpl2.getActivityId());sameStartTimeNodes.add(sameActivityImpl2);else{//break;}}List<PvmTransition>pvmTransitions=activityImpl.getOutgoingTransitions();//去的线for(PvmTransitionpvmTransitionpvmTransitions){//行遍历ActivityImplpvmActivityImpl=(ActivityImpl)pvmTransition.getDestination();//假若取出的线的目标节点进行高亮显示if(sameStartTimeNodes.contains(pvmActivityImpl)){highFlows.add(pvmTransition.getId());}}}returnhighFlows;}@OverridepublicList<Map<String,Boolean>>getHighLightedActivities(ProcessDefinitionEntityprocessDefinition,List<HistoricActivityInstance>historicActivityInstances){List<Map<String,Boolean>>highLightedActivities=newArrayList<Map<String,Boolean>>();intactivityCount=historicActivityInstances.size();Map<String,Boolean>activityMap=newHashMap<String,Boolean>();activityMap.put(historicActivityInstances.get(historicActivityInstances.size()-1).getActivityId(),true);highLightedActivities.add(activityMap);booleanfindCurrActivity=true;//是否查询并发任务节点for(intjactivityCount2;j0;j--){//推断前面节点是否与Map<String,Boolean>activityMap2=newHashMap<String,Boolean>();HistoricActivityInstanceactivityImpl1=historicActivityInstances.get(j);//if(findCurrActivity){HistoricActivityInstanceactivityImpl2=historicActivityInstances.get(j+1);//当前节点if(activityImpl1.getStartTime().equals(activityImpl2.getStartTime())){Stringtype=activityImpl1.getActivityType();//排除系统自动执行节点if("userTask".equals(type)||"endEvent".equals(type)){activityMap2.put(activityImpl1.getActivityId(),false);}else{activityMap2.put(activityImpl1.getActivityId(),false);}}else{activityMap2.put(activityImpl1.getActivityId(),false);findCurrActivity=false;}highLightedActivities.add(activityMap2);}else{activityMap2.put(activityImpl1.getAct

温馨提示

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

评论

0/150

提交评论