1 pom.xml
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
2 插件
actiBPM
3 配置文件
#Spring配置
spring:
activiti:
#设置为不校验
check-process-definitions: false
#false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果版本不匹配时,将在启动时抛出异常。
#true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。
#create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。
#drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。
database-schema-update: true
#保存历史数据级别设置为full最高级别,便于历史数据的追溯
#none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
#activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
#audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
#full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
history-level: full
4 bpmn文件创建
StartEvent
EndEvent
UserTask
ServiceTask
MailTask
ParallelGateway 并行
ExclusiveGateway 互斥
InclusiveGateway 包容
Assignee 办理人
CandidateUser
CandidateGroup
Claim 领取
5 部署 启动 结束 加入business
@Controller
@RequestMapping("api/test")
public class SzlTestController extends BaseController {
@Autowired
TaskService taskService;
@Autowired
RuntimeService runtimeService;
@Autowired
TestService testService;
@Autowired
RepositoryService repositoryService;
@RequestMapping("/getTasks")
@ResponseBody
public AjaxResult getTasks(String userId,int day) {
List<Task> resultTask = taskService.createTaskQuery().processDefinitionKey("firstProcess").taskCandidateOrAssigned(userId).list();
for (Task task:resultTask){
//2 通过任务对象获取流程实例
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
//3 通过流程实例获取“业务键”
String businessKey = pi.getBusinessKey();
System.out.println("业务key:"+businessKey);
if ("小明".equals(userId)){
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("day", day);
taskService.complete(task.getId(),variables);
}else {
//完成该任务
taskService.complete(task.getId());
}
}
return success(0,resultTask);
}
@RequestMapping("/start")
@ResponseBody
public AjaxResult start() {
String businessKey = "businessKey";//加入业务key
ProcessInstance pi = runtimeService.startProcessInstanceByKey("firstProcess", businessKey);
System.out.println("流程启动成功,流程id:"+pi.getId());
return success();
}
@RequestMapping("/deploy")
@ResponseBody
public AjaxResult deploy() {
//部署流程
repositoryService.createDeployment().addClasspathResource("processes/firstProcess.bpmn").deploy();
return success();
}
}