@[TOC] >~啊哈又是我呀<
*上才艺*
Activiti的基本架构
ONE:导入依赖
<!-- 添加Activiti工作流的支持 一般需要exclusions,因为内置的mybatis可能会冲突-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.21.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- <!–添加Activiti工作流对Spring的支持–>-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.21.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>5.21.0</version>
</dependency>
//返回工作流的png图片
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>5.22.0</version>
</dependency>
TWO: activiti.cfg.xml配置文件
(数据库表会自动创建,有多种配置文件的方式,此文用xml配置)
注意文件的命名,默认会加载这个名字的配置文件
activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<property name="databaseSchemaUpdate" value="true"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost/database?useSSL=false&useUnicode=true&characterEncoding=utf8"/>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="password"/>
<!-- Databaseconfigurations -->
<!--<property name="databaseSchemaUpdate" value="true" />-->
<!-- jobexecutor configurations -->
<!--<property name="jobExecutorActivate" value="false" />-->
<property name="activityFontName" value="宋体" />
<property name="labelFontName" value="宋体" />
<property name="annotationFontName" value="宋体"/>
</bean>
</beans>
Three:创建工作流引擎
1. 创建activitiEngine,整个activiti工作流都需要用到这个engine
public static ProcessEngine getProcessEngine(){
if(processEngine==null){
processEngine=ProcessEngines.getDefaultProcessEngine();
return processEngine;
}else {
return processEngine;
}
}
Four: 创建bpmn文件(或xml格式的工作流程)作为工作流。(idea可以安装bpmn插件绘图生成工作流)
FIve:部署工作流
部署工作流:将工作流文件在act_ge_bytearray表生成二进制文件和png,通过字段deploymentId与act_re_deployment表相关联
//根据输入流部署
public static void deployByIn() throws FileNotFoundException {
String bpmnPath = "D:/test.bpmn";
//读取资源作为一个输入流
FileInputStream bpmnfileInputStream = new FileInputStream(bpmnPath);
Deployment deployment = getProcessEngine().getRepositoryService()//获取流程定义和部署对象相关的Service
.createDeployment()//创建部署对象
.addInputStream("test.bpmn",bpmnfileInputStream)
.deploy();//完成部署
}
Six:开启工作流
开启工作流:在act_re_procdef表中生成对应的工作流、act_ru_task表中动态生成对应的流程任务。同时可根据taskID来处理任务。
public static String startProcess(String processKey){
ProcessEngine cur_processEngine=getProcessEngine();
IdentityService identityService=getProcessEngine().getIdentityService();
identityService.setAuthenticatedUserId("userName");//实例发起人
RuntimeService runtimeService=cur_processEngine.getRuntimeService();
return runtimeService.startProcessInstanceByKey(processKey).getProcessInstanceId();//启动流程并返回流程实例ID
}
Seven:根据处理人assignee查询任务
public static List<ActivitiTask> queryTaskByAssignee(String assignee){
ProcessEngine cur_processEngine=getProcessEngine();
List<ActivitiTask> taskList=new ArrayList<>();
TaskService taskService=cur_processEngine.getTaskService();
List<Task> tasks=taskService.createTaskQuery().taskAssignee(assignee).list();
for (Task task:tasks) {
taskList.add(new ActivitiTask(task.getId(),task.getName(),task.getAssignee(),task.getCreateTime()));
}
return taskList;
}
根据任务id,处理任务
public static void completeTaskByTaskId(String taskId,String comment) {
ProcessEngine cur_processEngine=getProcessEngine();
TaskService taskService=cur_processEngine.getTaskService();
taskService.addComment(taskId, null, comment);
taskService.complete(taskId);
}
注意:springboot版本是2.4.1,activiti的版本看上面依赖,版本不同,对应的版本号要做出相应的改变
基础功能应该差不多了,就先写到这吧,后续看心情再继续 ~ ~ ~ 哈哈哈
还是那句老话:如有错请指出,错了看我心情再改。