SpringBoot整合Activiti工作流实现基本功能

				@[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>
<!--        &lt;!&ndash;添加Activiti工作流对Spring的支持&ndash;&gt;-->
        <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&amp;useUnicode=true&amp;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的版本看上面依赖,版本不同,对应的版本号要做出相应的改变

基础功能应该差不多了,就先写到这吧,后续看心情再继续 ~ ~ ~ 哈哈哈

还是那句老话:如有错请指出,错了看我心情再改。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值