顾乔芝士网

持续更新的前后端开发技术栈

Springboot 整合flowable工作流引擎

直接上干货

1:引入相关包

我的环境是springboot3.X 所以引入的7.0版本

        <!--工作流 -->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>7.0.0</version>
        </dependency>


2:配置相关参数


flowable:
  database-schema-update: true  # 默认false 不自动创建表 true 自动创建表
  async-executor-activate: true #关闭定时任务


3:数据库也配置以下

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/xx?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: xx
    password: xx


4: 把流程配置文件放到目录下 如图

5:部署流程

    /**
     * 流程部署
     * @param processResource 流程文件地址
     */
    public void deployProcess(String processResource,String name) {
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource(processResource).name(name)
                .deploy();

        logger.info("部署的Id:"+deploy.getId());
    }

这里传入流程文件的地址 具体使用方法 控制器里调用

    @GetMapping("deploy")
    public void deploy(){
        flowableService.deployProcess("processess/leave1.bpmn20.xml","第一个简单流程图");
    }


6:启动流程

可以通过ID或则KEY启动流程

    /**
     * 执行流程 /启动流程 通过key启动
     * @param processKey
     * @return
     */
    public ProcessInstance startProcessInstanceByKey(String processKey) {
        return runtimeService.startProcessInstanceByKey(processKey);
    }

    /**
     *  执行流程 /启动流程 通过id启动
     * @param id
     * @return
     */
    public ProcessInstance startProcessInstanceById(String id) {
        return runtimeService.startProcessInstanceById(id);
    }

调用方法

这里通过ID启动 ID可以在数据库的act_re_procdef中找到

    @GetMapping("start")
    public String start(){
        String id = "leave1:1:ccdf3b3e-5485-11ef-8292-f67b09581d21";
        ProcessInstance processInstance = flowableService.startProcessInstanceById(id);
        return processInstance.getName();
    }

流程定义存储表


7:查找待审批流程

    /**
     * 等待审批的任务
     * @return
     */
    public List<Task> find() {

   
      List<Task> list =  taskService.createTaskQuery().list();
       list.forEach(task -> {
           System.out.println(task.getId()+"  "+task.getName());
       });
      if(list.size() >0){
          System.out.println("代办任务"+list.size());
      }else{
          System.out.println("没有任务");
      }
      return list;
    }

也可以查询某个用户的待审批

  List<Task> list =  taskService.createTaskQuery().taskAssignee("用户名").list();


8:审批

通过传入审批ID进行审批

 /**
     * 审批 根据ID(每次审批后ID会变化) 审批流程全部完成后会从run-task表中消失
     */
    public void finsh() {
       taskService.complete("b42f7b63-548c-11ef-9a41-f67b09581d21");
    }
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言