前言:
工欲善其事,必先利其器. 工作流开发,在日常开发中很常见. 但如何从0-1开发一个工作流对于开发人员来说是很关键的.
话不多说,进入正题
-
引入jar包
<dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter</artifactId> <version>6.3.0</version> </dependency>
-
application.yml 文件添加配置信息
flowable: # 是否主动更新创建flowable关联表 database-schema-update: true idm: enabled: true async-executor-activate: false
-
核心api组件介绍
-
RepositoryService 负责deploy部署 ACT_RE_DEPLOYMENT 存储部署信息
-
RuntimeService 工作流启动 ACT_RU_EXECUTION 存储流程实例
-
TaskService 流程节点管理 流程发起成功默认上传第一节点 ACT_RU_TASK(存储任务节点信息)
-
HistoryService 历史记录信息 获取操作对应删除操作 ACT_HI_* 历史信息
-
IdentityService 负责用户信息,组信息维护 ACT_ID_* 用户信息 用户组信息
-
-
核心 api (repositoryService)
-
创建流程部署 repositoryService.createDeployment
-
部署流程 Deployment : repositoryService.deploy
- 步骤同上,添加工作流文件信息后,调用deploy 就会生成流程(类似于请假审批,财务审批这种,具体的流程类型,当前还没有发起审批流程)
-
删除部署 repositoryService.deleteDeployment
-
repositoryService.deleteDeployment(deployId);// 删除流程 无需多言
-
-
暂停部署 suspendProcessDefinitionById
-
repositoryService.suspendProcessDefinitionById(id); // 中断流程,后续工作流无法重新发起
-
-
唤醒部署 activateProcessDefinitionById
-
repositoryService.activateProcessDefinitionById(id); // 唤醒操作,与中断对应
-
-
查询部署 createDeploymentQuery、
ListIterator<Deployment> list = repositoryService.createDeploymentQuery().orderByDeploymenTime().desc().listPage(pageNum, pageSize).listIterator(); // 查询部署信息,可添加一系列查询条件
-
-
核心 api (RuntimeService)
-
启动流程 runtimeService.createProcessInstanceBuilder .start()
-
HashMap<String, Object> param = new HashMap<>(); param.put("variable", param01); ProcessInstance start = runtimeService.createProcessInstanceBuilder() .processDefinitionId(deployId) .variables(param) // 节点执行人 .tenantId("bhz") .name("启动了") .start();
-
-
暂停流程 suspendProcessInstanceById()
-
runtimeService.suspendProcessInstanceById(processId);
-
-
唤醒流程 activateProcessInstanceById
-
runtimeService.activateProcessInstanceById(processId);
-
-
流程查询 createExecutionQuery
-
// 查询条件众多 不一一举例 Execution execution = runtimeService.createExecutionQuery().executionId(processId).singleResult();
-
-
删除流程 deleteProcessInstance
-
runtimeService.deleteProcessInstance(processId, userId);
-
-
获取流程参数 getVariables
-
Map<String, Object> variables = runtimeService.getVariables(task.getProcessInstanceId());
-
-
流程信息查询 createProcessInstanceQuery
-
// 同理,查询条件不一一列举. api大多见名知意 List<ProcessInstance> list = runtimeService.createProcessInstanceQuery()
-
-
-
核心api (TaskService)
-
领单 claim(taskId)
-
taskService.claim(taskId, userId); // 领单,当前流程指定执行人(可以直接在部署内容中,指定. 默认分发给部署文件中指定的操作人)
-
-
添加节点参数 setVariable(taskId,key,value)
-
taskService.setVariable(taskId, "param", "ssxxx");
-
-
获取节点参数 getVariable
-
Object param = runtimeService.getVariable(processId, "param");
-
-
任务提交
-
taskService.complete(taskId); // 流程流转到下一节点
-
-
节点信息查询 createTaskQuery
-
// 同理.查询节点见名知意. Task task = taskService.createTaskQuery().taskCandidateOrAssigned(username).singleResult();
-
-
-
核心api ( HistoryService ) 历史信息
-
节点历史信息 createHistoricTaskInstanceQuery
-
historyService.createHistoricTaskInstanceQuery();
-
-
流程历史信息 createHistoricProcessInstanceQuery
-
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult();
-
-
-
核心api (IdentityService) 用户管理
-
新建组 newGroup saveGroup
-
Group group = identityService.newGroup(identityGroupFormReq.getGroupId()); group.setId(identityGroupFormReq.getGroupId()); group.setName(identityGroupFormReq.getGroupName()); group.setType(identityGroupFormReq.getGroupType()); // 保存 identityService.saveGroup(group);
-
-
新建用户 newUser saveUser
-
User user = identityService.newUser(identityAddUserReq.getUserId()); user.setId(identityAddUserReq.getUserId()); user.setFirstName(identityAddUserReq.getUserName()); user.setPassword(identityAddUserReq.getPassword()); identityService.saveUser(user);
-
-
关联用户和组 createMembership
-
identityService.createMembership(user.getId(), identityAddUserReq.getGroupId());
-
-
查询组信息 createGroupQuery
-
GroupQuery groupQuery = identityService.createGroupQuery().orderByGroupId();
-
-
查询用户信息 createUserQuery
-
UserQuery userQuery = identityService.createUserQuery();
-
-
-
前端 vue整合flowable
-
npm install workflow-bpmn-modeler
-
<bpmnModeler @save="save" :groups="groups">
-
方法
-
save(data) { this.$axios.post('flowable/deploy/upload', data) .then(res => { console.log(res) }).catch(err => console.log(err)) console.log(data) }, doLoadGroup(){ this.$axios.post('doc/dept/listDistinctDept', null).then(res => this.groups = res.data).catch(err => console.log(err)) }
-