




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025十堰市郧阳区白桑关镇社区工作者考试真题
- 2025三明市清流县龙津镇社区工作者考试真题
- 2025年江西省景德镇市中考二模语文试题含答案
- 办公室开放式工作区规划方案
- 2025年企业员工安全培训考试试题答案能力提升
- 2025年部门安全培训考试试题及参考答案【研优卷】
- 2024-2025管理人员安全培训考试试题审定
- 25年企业安全管理人员安全培训考试试题及答案往年题考
- 2025工厂员工安全培训考试试题附完整答案(名校卷)
- 2025年公司及项目部安全培训考试试题及参考答案【夺分金卷】
- 景墙的施工技术方案
- 石油化工设备维护检修规程设备完好标准SHS010012004-副本
- 施工标准化九牌一图
- 单角子宫疾病演示课件
- 义务教育物理课程标准(2022年版)测试题文本版(附答案)
- FSSC22000V6.0体系文件清单
- 贾玲春晚搞笑公司年会小品《真假老师》台词剧本完整版
- 23S519 小型排水构筑物(带书签)
- 第三章扫描电子显微镜【完整版】PPT
- SL631-637-2012-水利水电工程单元工程施工质量验收评定标准
- 胸腔穿刺术课件
评论
0/150
提交评论