总结,运行
启动画图的软件。
然后画流程图。
最后配置。
细节+代码:
server:
port: 8989
spring:
datasource:
username: root
password: heima123
url: jdbc:mysql://192.168.200.146:3306/activiti-db?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
#日志的相关配置
activiti:
#是否让activiti自动创建所有的历史表
history-level: full
#是否需要使用历史表,默认false不使用,而配置true是使用历史表
db-history-used: true
#流程自动部署,关闭,需要手动部署流程 服务启动的时候自动检查resources目录下的bpmn文件 如果为true自动部署流程
check-process-definitions: false
#关闭启动服务自动框架部署
deployment-mode: never-fail
需要在自己的MySQL中创建一个新的数据库:activiti-db
重要的表:
-
运行实例表
-
ACT_RU_EVENT_SUBSCR 运行时事件
-
ACT_RU_EXECUTION 运行时流程执行实例
-
ACT_RU_IDENTITYLINK 运行时用户关系信息,存储任务节点与参与者的相关信息
-
ACT_RU_JOB 运行时作业
-
ACT_RU_TASK 运行时任务
-
ACT_RU_VARIABLE 运行时变量表
-
常见的api,也就是之后需要autoware的:
在activiti7框架内部,已经对25张表的数据操作,已经封装了对应的service,在我们业务进行集成的时候,一般情况下无需再开发针对activiti7相关表的操作进行开发,直接使用activiti7内部提供的api即可。
-
RepositoryService:用于部署流程定义,可以添加、删除、查询和管理流程定义。
-
RuntimeService:用于启动、查询和管理正在运行的流程实例。
-
TaskService:用于查询和管理当前用户可以操作的任务,以及完成任务。
-
HistoryService:用于查询历史数据,例如已完成的流程实例、已删除的流程实例、用户任务等。
eg:
/**
* @author sjqn
* @date 2023/9/16
*/
@SpringBootTest
public class SequenceTest {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
/**
* 流程部署
*/
@Test
public void deployProcess() {
String fileName = "bpmn/diagram-sequence.bpmn";
//定义流程
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource(fileName)
.name("Process_3")
.deploy();
//部署流程
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
@Test
public void initProcessInstanceWithArgs() {
//流程变量
Map<String,Object> variables = new HashMap<String,Object>();
variables.put("assingee0","张三");
variables.put("assingee1","李四");
variables.put("assingee2","王五");
//启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(
"Process_3",
"business_key_03",
variables);
//Process_2:1:2ca378d1-fe9b-11ed-b40d-5405db5be13e
System.out.println("流程实例ID: " + processInstance.getProcessDefinitionId());
}
//查询我的代办任务
@Test
public void getTasksByAssignee() {
String assingee = "张三";
String businessKey = "business_key_03";
Task task = taskService.createTaskQuery()
.processDefinitionKey("Process3") //流程Key
.taskAssignee(assingee) //要查询的负责人
.processInstanceBusinessKey(businessKey)
.singleResult();
System.out.println("Id: " + task.getId());
System.out.println("Name: " + task.getName());
System.out.println("Assignee: " + task.getAssignee());
}
//执行任务
@Test
public void completeTask() {
String assingee = "张三";
String businessKey = "business_key_03";
//根据流程key 和 任务的负责人 查询任务
//返回一个任务对象
Task task = taskService.createTaskQuery()
.processDefinitionKey("Process3") //流程Key
.taskAssignee(assingee) //要查询的负责人
.processInstanceBusinessKey(businessKey)
.singleResult();
if (task == null) {
System.out.println(assingee + ",没有任务可以执行...");
} else {
//执行任务
// 把张三填写的请假单中的数据,作为流程变量,设置到流程中
Map<String, Object> variables = new HashMap<>();
variables.put("userName", "张三");
variables.put("startDate", "2024-1-1");
variables.put("days", "5");
variables.put("reason", "元旦回家");
taskService.complete(task.getId(), variables);
System.out.println("完成任务");
}
}
}