Activiti介绍
1.概述
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架
2.工作引擎
ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
3.BPM
业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)
4.Activiti中数据表的介绍
ACT_RE_* 表示reposity,该前缀表包含了流程定义和流程静态资源。
ACT_RU_* 表示runtime,该前缀表示运行时表,包含咯流程实例、任务、变量、任务等数据。在流程进行过程中这些数据将会暂时保存,流程结束就会删除这些数据。
ACT_RE_* 表示history,该前缀表示历史数据。如历史审批数据等。
ACT_GE_* 表示general,该前缀表示通用数据。
ACT_ID_* 表示identity,该前缀的表表示用户、组的身份信息。
5.Activiti中比较重要的数据表
act_re_procdef 流程定义数据表
act_re_deployment 部署信息表
act_re_model 流程设计模型部署表
act_ru_execution 运行时流程执行实例表
act_ru_task 运行时任务节点表
act_ru_variable 运行时流程变量数据表
act_hi_detail 历史详情表,提供历史变量的查询
act_hi_actinst 历史节点表
act_hi_comment 历史意见表
act_hi_procinst 历史流程实例表
act_hi_taskinst 历史任务实例表
act_id_group 用户组信息表
6.实际开发中的应用
1>首先在idea中安装插件actiBPM
如果找不到插件这里有 链接: https://pan.baidu.com/s/1UHOotwpHO7pAo_f0itae5w 提取码: 2dwq
2>搭建springcloud项目(这里不再赘述,有需要的小伙伴参考https://blog.csdn.net/myITliveAAA/article/details/108314939)
3>在springcloud父项目下新建activitidemo(参考https://blog.csdn.net/myITliveAAA/article/details/108314939)
4>在resource下新建processes
5>右击processes文件新建demo.bpmn文件
6>画如下流程图
7>复制activitidemo.bpmn并重命名为activitidemo.xml
8>部分代码展示
接口
@RequestMapping("/ac")
public interface ActivitiService {
/*
* 开启流程
* */
@GetMapping(value = "/start")
String startActiviti();
/*
* 进行一步审核
* */
@PostMapping(value = "/complete")
void completeActiviti(String processId,int flug,int days,int role);
/*
* 查询神审批历史
* */
@GetMapping(value = "/activitHosity")
void queryHistoricInstance(String processId);
/*
* 查询某个人或者某个角色的任务
* */
@GetMapping(value = "/activitTask")
void queryActivitTask(String username);
/*
* 部署流程
* */
@GetMapping(value = "deployActiviti")
void deployActiviti();
}
实现类
```java
@RestController
@Slf4j
public class ActivitiServiceImpl implements ActivitiService {
@Resource
private RepositoryService repositoryService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Resource
ProcessEngine processEngine;
@Resource
HistoryService historyService;
//启动流程
@Override
public String startActiviti() {
Map<String, Object> variable = new HashMap<>();
variable.put("username", "用户提交");
//启动流程
ProcessInstance pi = runtimeService
.startProcessInstanceByKey("demo_activiti",variable);
//获取流程Id
String processId = pi.getProcessInstanceId();
//根据流程ID查询任务流程
Task task = taskService.createTaskQuery()
.processInstanceId(processId)
.singleResult();
//执行一步流程
Map<String, Object> variables = new HashMap<>();
variables.put("username", "组长审核");
taskService.complete(task.getId(), variables);
return processId;
}
//执行一步流程
@Override
public void completeActiviti(String processId, int flug,int days,int role) {//role 0提交人 1组长 2班长 3主任 4总监
//查询流程
Task task = taskService.createTaskQuery()
.processInstanceId(processId)
.singleResult();
//获取流程执行任务
/* List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery().processInstanceId(processId).orderByTaskCreateTime().desc().list();
HistoricTaskInstance historicTaskInstance = taskList.get(0);
if (historicTaskInstance.getAssignee().equals("预正则")) {
taskService.setAssignee(task.getId(), "测试");
} else {
taskService.setAssignee(task.getId(), "王菲");
}*/
Map<String, Object> variables = new HashMap<>();
switch (role){
case 1:
if (flug == 1){
if (days > 0 && days < 3){
variables.put("username","班长审核");
}
if (days >=3 && days < 6){
variables.put("username","主任审核");
}
if (days >= 6){
variables.put("username","总监审核");
}
}else {
variables.put("username", "用户提交");
}
break;
case 0:
variables.put("username", "组长审核");
break;
}
variables.put("days",days);
variables.put("flug", flug);
taskService.complete(task.getId(), variables);
}
@Override
public void queryHistoricInstance(String processId) {
/* List<HistoricProcessInstance> list = processEngine.getHistoryService()
.createHistoricProcessInstanceQuery()
.processInstanceId("50005")
.orderByProcessInstanceStartTime().asc()//排序
.list();
if (list != null && list.size() > 0) {
for (HistoricProcessInstance hpi : list) {
System.out.println("流程实例ID:" + hpi.getId());
System.out.println("=======================================");
}
}*/
//查询某个流程的审批历史
List<HistoricTaskInstance> list = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery()
.processInstanceId(processId)
.list();
if (list != null && list.size() > 0) {
for (HistoricTaskInstance hvi : list) {
System.out.println(hvi.getId() + " " + hvi.getName() + " " + hvi.getProcessDefinitionId() + " " + hvi.getAssignee());
}
}
}
@Override
public void queryActivitTask(String username) {
TaskService taskService = processEngine.getTaskService();
List<Task> taskList = taskService.createTaskQuery().taskAssignee(username).list();
if (taskList != null && taskList.size() > 0){
for (Task task:taskList){
System.out.println(task.getId() + " " + task.getName() + " " + task.getAssignee() + " " + task.getProcessInstanceId());
}
}
}
//部署流程
@Override
public void deployActiviti() {
//部署流程
Deployment deployment = repositoryService
.createDeployment()
.addClasspathResource("processes/demo.bpmn")
.name("流程")
.deploy();
}
}
9>执行后的数据库结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200908153442678.png#pic_center)