获取flowable流程图资源

@PostMapping(value = "/flow/resource")
    public FlowResultVO getFlowResource(@RequestBody HashMap<String, String> map) throws IOException {
        String pId = map.get("pId");
        String instId = map.get("instId");
        List<String> highLightedActivities = new ArrayList<>();
        List<String> highLightedFlows = new ArrayList<>();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(pId);

        if (instId != null && instId != "") {
            List<HistoricActivityInstance> historyProcess = historyService // 历史相关Service
                    .createHistoricActivityInstanceQuery() // 创建历史活动实例查询
                    .processInstanceId(instId) // 执行流程实例id
                    .finished()
                    .list();
            for (HistoricActivityInstance hi : historyProcess) {
                String activityType = hi.getActivityType();
                if (activityType.equals("sequenceFlow") || activityType.equals("exclusiveGateway")) {
                    highLightedFlows.add(hi.getActivityId());
                } else if (activityType.equals("userTask") || activityType.equals("startEvent")) {
                    highLightedActivities.add(hi.getActivityId());
                }
            }
        }
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
        ProcessDiagramGenerator processDiagramGenerator = engConf.getProcessDiagramGenerator();
        runtimeService.createProcessInstanceQuery().processInstanceId(pId).singleResult();

        FlowResultVO flowResultVO = new FlowResultVO();
        InputStream in = processDiagramGenerator.generateDiagram(bpmnModel, "PNG", highLightedActivities,
                highLightedFlows,
                "宋体", "宋体", "宋体", null, 1.0D, true);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            byte[] b = new byte[1024];
            int len = -1;
            while ((len = in.read(b, 0, 1024)) != -1) {
                out.write(b, 0, len);
            }
            String resource = new BASE64Encoder().encode(out.toByteArray());
            flowResultVO.setRetCode(MetaStatus.BIZ_SUCCESS);
            flowResultVO.setRetMsg("获取流程资源成功");
            flowResultVO.setResource(resource);
        } catch (Exception e) {
            flowResultVO.setRetCode(MetaStatus.BIZ_FAIL);
            flowResultVO.setRetMsg("获取流程资源失败:" + e.getMessage());
            log.error("获取流程资源失败:" + e.getMessage());
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
        return flowResultVO;
    }
您可以使用Flowable的API来获取流程图。首先,您需要获取程定义的ID,可以通过Flowable的RepositoryService来查询。然后,使用Flowable的DiagramGenerator类来生成流程图。 下面是一个示例代码段,展示了如何获取程定义的ID并生成流程图: ```java import org.flowable.bpmn.model.BpmnModel; import org.flowable.dmn.api.DmnRepositoryService; import org.flowable.engine.RepositoryService; import org.flowable.image.ProcessDiagramGenerator; // 获取RepositoryService RepositoryService repositoryService = flowable.getRepositoryService(); // 通过程定义的Key查询最新版本的程定义 String processDefinitionKey = "yourProcessDefinitionKey"; String processDefinitionId = repositoryService.createProcessDefinitionQuery() .processDefinitionKey(processDefinitionKey) .latestVersion() .singleResult() .getId(); // 获取BpmnModel BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); // 获取ProcessDiagramGenerator ProcessDiagramGenerator diagramGenerator = flowable.getProcessEngineConfiguration() .getProcessDiagramGenerator(); // 生成流程图 InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), flowable.getProcessEngine().getProcessEngineConfiguration().getActivityFontName(), flowable.getProcessEngine().getProcessEngineConfiguration().getLabelFontName(), flowable.getProcessEngine().getProcessEngineConfiguration().getClassLoader(), 1.0); ``` 请注意,这只是一个简化的示例代码,并不包含完整的异常处理和其他细节。您可能需要根据您的实际情况进行适当的修改和扩展。 希望对您有所帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值