activiti5.17完美输出流程图片
2015-03-17 16:25
246 查看
/** * 流程是否已经结束 * * @param processInstanceId 流程实例ID * @return */ public boolean isFinished(String processInstanceId) { return historyService.createHistoricProcessInstanceQuery().finished() .processInstanceId(processInstanceId).count() > 0; } /** * 流程跟踪图片 * * @param processDefinitionId * 流程定义ID * @param executionId * 流程运行ID * @param out * 输出流 * @throws Exception */ public void processTracking(String processDefinitionId, String executionId, OutputStream out) throws Exception { // 当前活动节点、活动线 List<String> activeActivityIds = new ArrayList<String>(), highLightedFlows = new ArrayList<String>(); /** * 获得当前活动的节点 */ if (this.isFinished(executionId)) {// 如果流程已经结束,则得到结束节点 activeActivityIds.add(historyService .createHistoricActivityInstanceQuery() .executionId(executionId).activityType("endEvent") .singleResult().getActivityId()); } else {// 如果流程没有结束,则取当前活动节点 // 根据流程实例ID获得当前处于活动状态的ActivityId合集 activeActivityIds = runtimeService .getActiveActivityIds(executionId); } /** * 获得当前活动的节点-结束 */ /** * 获得活动的线 */ // 获得历史活动记录实体(通过启动时间正序排序,不然有的线可以绘制不出来) List<HistoricActivityInstance> historicActivityInstances = historyService .createHistoricActivityInstanceQuery().executionId(executionId) .orderByHistoricActivityInstanceStartTime().asc().list(); // 计算活动线 highLightedFlows = this .getHighLightedFlows( (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService) .getDeployedProcessDefinition(processDefinitionId), historicActivityInstances); /** * 获得活动的线-结束 */ /** * 绘制图形 */ if (null != activeActivityIds) { InputStream imageStream = null; try { // 获得流程引擎配置 ProcessEngineConfiguration processEngineConfiguration = processEngine .getProcessEngineConfiguration(); // 根据流程定义ID获得BpmnModel BpmnModel bpmnModel = repositoryService .getBpmnModel(processDefinitionId); // 输出资源内容到相应对象 imageStream = new DefaultProcessDiagramGenerator() .generateDiagram(bpmnModel, "png", activeActivityIds, highLightedFlows, processEngineConfiguration .getActivityFontName(), processEngineConfiguration.getLabelFontName(), processEngineConfiguration.getClassLoader(), 1.0); IOUtils.copy(imageStream, out); } finally { IOUtils.closeQuietly(imageStream); } } } /** * 获得高亮线 * * @param processDefinitionEntity * 流程定义实体 * @param historicActivityInstances * 历史活动实体 * @return 线ID集合 */ public List<String> getHighLightedFlows( ProcessDefinitionEntity processDefinitionEntity, List<HistoricActivityInstance> historicActivityInstances) { List<String> highFlows = new ArrayList<String>();// 用以保存高亮的线flowId for (int i = 0; i < historicActivityInstances.size(); i++) {// 对历史流程节点进行遍历 ActivityImpl activityImpl = processDefinitionEntity .findActivity(historicActivityInstances.get(i) .getActivityId());// 得 到节点定义的详细信息 List<ActivityImpl> sameStartTimeNodes = new ArrayList<ActivityImpl>();// 用以保存后需开始时间相同的节点 if ((i + 1) >= historicActivityInstances.size()) { break; } ActivityImpl sameActivityImpl1 = processDefinitionEntity .findActivity(historicActivityInstances.get(i + 1) .getActivityId());// 将后面第一个节点放在时间相同节点的集合里 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 (activityImpl1.getStartTime().equals( activityImpl2.getStartTime())) {// 如果第一个节点和第二个节点开始时间相同保存 ActivityImpl sameActivityImpl2 = processDefinitionEntity .findActivity(activityImpl2.getActivityId()); sameStartTimeNodes.add(sameActivityImpl2); } else {// 有不相同跳出循环 break; } } List<PvmTransition> pvmTransitions = activityImpl .getOutgoingTransitions();// 取出节点的所有出去的线 for (PvmTransition pvmTransition : pvmTransitions) {// 对所有的线进行遍历 ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition .getDestination();// 如果取出的线的目标节点存在时间相同的节点里,保存该线的id,进行高亮显示 if (sameStartTimeNodes.contains(pvmActivityImpl)) { highFlows.add(pvmTransition.getId()); } } } return highFlows; }
相关文章推荐
- activiti自动生成流程图片配置,按下图操作,然后保存时会自动生成流程图片。(设置完要重启eclipse)
- ACTIVITI在LINUX下查看流程图片中文字体出现乱码的解决方案
- Activiti Modeler整合之后,部署之后流程图片显示乱码问题分析与解决
- eclipse 搭建activiti5.17项目生成流程过程
- Activiti基础教程--04管理流程定义(流程定义部署ZIP/classpath)、查看(获取流程定义图图片)、删除,不能修改
- activiti5.13.1在线流程设计器生成图片中文乱码
- (五)Activiti之获取流程定义图片和流程定义删除
- Activiti查看流程图片
- Activiti 5.17 流程配置文件以及配置类的继承关系
- Activiti 5.16 流程图片生成的各种问题
- activiti获取启动流程的图片和xml
- springmvc+activiti 完美整合- 流程在线设计+代码生成器+UI快速开发库,提高一半的开发效率
- activiti5.19.0.2 task图片输出中文乱码
- Activiti基础教程--04管理流程定义(流程定义部署ZIP/classpath)、查看(获取流程定义图图片)、删除,不能修改
- 集成activiti-modeler 到 自己的业务系统(集成流程跟踪-完美支持IE)
- ACTIVITI在LINUX下查看流程图片中文字体出现乱码的解决方案
- Activiti 工作流 获取流程定义的图片 04
- Activiti 5.16 流程图片生成的中文乱码问题
- Activiti部署流程时图片中文乱码解决方法
- activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败