springboot+vue 审批工作流集成flowable(springboot实现工作流) 您所在的位置:网站首页 vue实现流程 springboot+vue 审批工作流集成flowable(springboot实现工作流)

springboot+vue 审批工作流集成flowable(springboot实现工作流)

2023-08-13 12:27| 来源: 网络整理| 查看: 265

仿钉钉审批流程图在线绘制、业务申请、审批、流转、委托、催办,springboot集成工作流基础框架

前言 目前市场上有很多开源平台没有整合工作流,即使有,也是价格不菲的商业版,这次推荐的是在一个基础开发平台系统基础功能(用户管理,部门管理…)上整合了flowable工作流,你可以直接用来开发ERP,OA,CRM等企业级应用,不用再担心如何再去花大量的时间集成工作流进来,目前表单支持自定义拖拽,具体功能下面我们来探索吧。

一、项目形式 springboot+vue+flowable 集成了仿钉钉拖拽设计流程编辑器,快速开发平台,可插拔工作流服务。

二、项目介绍 本项目拥有用户管理,部门管理,岗位管理,系统监管,IM聊天,自定义问卷调查,网络拓扑图设计,业务审批等功能。功能太强大,只能大致介绍,所见即所得,体验一下吧。

项目预览

预览地址:http://demo.duojuhe.com

本次我们主要来了解项目中的工作流部分模块

三、工作流

 

 

/** * 查询可退回的节点 * @param taskId * @return */ private List getWorkFlowToBackNodeRes(String taskId){ // 初始化返回结果列表 List result = new ArrayList(); if (StringUtils.isBlank(taskId)){ return result; } Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task == null){ return result; } // 任务定义key 等于 当前任务节点id String taskDefinitionKey = task.getTaskDefinitionKey(); BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); Process mainProcess = bpmnModel.getMainProcess(); // 当前节点 FlowNode currentFlowElement = (FlowNode) mainProcess.getFlowElement(taskDefinitionKey, true); // 查询历史节点实例 List activityInstanceList = historyService.createHistoricActivityInstanceQuery() .processInstanceId(task.getProcessInstanceId()) .finished() .orderByHistoricActivityInstanceEndTime().asc().list(); List activityIdList = activityInstanceList.stream() .filter(activityInstance -> BpmnXMLConstants.ELEMENT_TASK_USER.equals(activityInstance.getActivityType()) || BpmnXMLConstants.ELEMENT_EVENT_START.equals(activityInstance.getActivityType())) .map(HistoricActivityInstance::getActivityId) .filter(activityId -> !taskDefinitionKey.equals(activityId)) .distinct() .collect(Collectors.toList()); for (String activityId : activityIdList) { // 回退到主流程的节点 FlowNode toBackFlowElement = (FlowNode) mainProcess.getFlowElement(activityId, true); // 判断 【工具类判断是否可以从源节点 到 目标节点】 Set set = new HashSet(); if (toBackFlowElement != null && ExecutionGraphUtil.isReachable(mainProcess,toBackFlowElement,currentFlowElement, set)) { QueryWorkFlowToBackNodeRes workFlowNodeDTO = new QueryWorkFlowToBackNodeRes(); workFlowNodeDTO.setTaskNodeId(activityId); workFlowNodeDTO.setTaskNodeName(toBackFlowElement.getName()); result.add(workFlowNodeDTO); } } return result; }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有