技术标签:Activiti7
项目框架描述
项目基于springboot 2.1.1
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> </parent>
搭建环境
一、引入Activiti所需所需包
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M1</version> <exclusions> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </exclusion> </exclusions> </dependency>
二、配置Activit
# activiti #1.flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常 #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建 #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表) #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎) spring.activiti.database-schema-update=true #检测历史表是否存在 spring.activiti.db-history-used=true #记录历史等级 可配置的历史级别有none, activity, audit, full spring.activiti.history-level=full #校验流程文件,默认校验resources下的processes文件夹里的流程文件 spring.activiti.check-process-definitions=false security.basic.enabled=false
三、配置不使用springsecurity
@SpringBootApplication( exclude = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class } )
常用API
部署一个流程定义
@Test public void createDeploy() { RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deployment = repositoryService.createDeployment() .addClasspathResource("processes/ddsplc.bpmn")//添加bpmn资源 // .addClasspathResource("diagram/holiday.png") .name("销售订单发货流程") .deploy(); System.out.println("流程部署id:" + deployment.getName()); System.out.println("流程部署名称:" + deployment.getId()); }
根据任务ID查询下一步审核信息(按钮信息,如通过,驳回)
public List<String> queryOutComeByTaskId(String taskId) { List<String> outComeList = new ArrayList<>(); Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult(); if (task != null) { String processDefinitionId = task.getProcessDefinitionId(); BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); Process process = bpmnModel.getProcesses().get(0); String taskDefinitionKey = task.getTaskDefinitionKey(); UserTask userTask = (UserTask) process.getFlowElement(taskDefinitionKey); List<SequenceFlow> sequenceFlowList = userTask.getOutgoingFlows(); for (SequenceFlow sequenceFlow : sequenceFlowList) { String sequenceFlowName = sequenceFlow.getName(); outComeList.add(sequenceFlowName); } } return outComeList; }
开始任务
开始并完成任务
/** * processDefinitionKey 流程定义key ddsplc * businessKey 业务数据id * variables 参数 用以确定下一步的走向或者指定审核人是谁 */ runtimeService.startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables); ProcessInstance instance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables); List<Task> list = (this.taskService.createTaskQuery().processInstanceId(instance.getId())).active().list(); for (Task task : list) { taskService.complete(task.getId()); }
查询任务
List<ActFlowDto> actFlowDtos = new ArrayList<>(); List<Task> taskList = taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).taskAssignee(identifier).list(); if (taskList != null && !taskList.isEmpty()) { for (Task task : taskList) { ActFlowDto actFlowDto = new ActFlowDto(); String processInstanceId = task.getProcessInstanceId(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); actFlowDto.setBusinessKey(processInstance.getBusinessKey()); actFlowDto.setAssignee(task.getAssignee()); actFlowDto.setTaskId(task.getId()); actFlowDtos.add(actFlowDto); } } else { log.debug(String.format("task not found. processDefinitionKey=[%s], identifier=[%s]", processDefinitionKey, identifier)); }