Grails4.0.0-整合Activiti6.0.0

本文介绍了如何在Spring Boot应用中通过Gradle添加Activiti依赖,并详细讲解了如何配置流程引擎、部署流程定义、启动流程实例和处理任务。通过实例展示了如何使用Activiti进行业务流程管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、build.gradle添加依赖

    implementation group: 'org.activiti', name: 'activiti-engine', version: '6.0.0'
    implementation group: 'org.activiti', name: 'activiti-spring', version: '6.0.0'
    implementation group: 'org.activiti', name: 'activiti-bpmn-model', version: '6.0.0'
    implementation group: 'org.activiti', name: 'activiti-bpmn-converter', version: '6.0.0'
    implementation group: 'org.activiti', name: 'activiti-bpmn-layout', version: '6.0.0'

2、resouces.groovy启动注入

     processEngineConfig(SpringProcessEngineConfiguration) {
          dataSource = ref("dataSource")
          transactionManager = ref("transactionManager")
          databaseType = "mysql"
          databaseSchema = "DATABASE"
          databaseSchemaUpdate = "true"
     }
     processEngine(ProcessEngineFactoryBean) {
          processEngineConfiguration = ref("processEngineConfig")
     }
     runtimeService(processEngine: "getRuntimeService")
     repositoryService(processEngine: "getRepositoryService")
     taskService(processEngine: "getTaskService")
     managementService(processEngine: "getManagementService")
     historyService(processEngine: "getHistoryService")
     formService(processEngine: "getFormService")

3、测试用例

package rediscachetest

import RedisCache.RedisCacheEntity
import cn.hutool.core.convert.Convert
import cn.hutool.core.util.IdUtil
import grails.gorm.transactions.Transactional
import grails.plugins.redis.RedisService
import groovy.sql.Sql
import org.activiti.engine.ProcessEngine
import org.activiti.engine.RepositoryService
import org.activiti.engine.RuntimeService
import org.activiti.engine.TaskService
import org.activiti.engine.repository.Deployment
import org.activiti.engine.runtime.ProcessInstance
import org.activiti.engine.task.Task
import swagger.grails4.openapi.ApiDoc

@Transactional
class TestController { 
    ProcessEngine processEngine
    ActivitiService activitiService
    def dataSource
    @ApiDoc(tag = {"User API"})
    def index() {
        String  bpmnPath="bpms/Test/TestGebt.bpmn20.xml"
        String  bpmnPngPath="bpms/Test/TestGebt.png"
        String  processName="TestGebt"
        String  user="苍井空" 
        activitiService.publishProcess(bpmnPath,bpmnPngPath)
        activitiService.startProcessInstance( processName)
        activitiService.queryPersonPendingTask(processName,user)
        activitiService.handleTask(null)
    }

}
package rediscachetest

import grails.gorm.transactions.Transactional
import org.activiti.engine.ProcessEngine
import org.activiti.engine.RepositoryService
import org.activiti.engine.RuntimeService
import org.activiti.engine.TaskService
import org.activiti.engine.repository.Deployment
import org.activiti.engine.runtime.ProcessInstance
import org.activiti.engine.task.Task

@Transactional
class ActivitiService {
    ProcessEngine processEngine
    def serviceMethod() {

    }
    /**
     * 部署过程使用的表:
         1、act_hi_actinst:流程部署表,每部署一次会增加有一条记录
         2、act_re_procdef:流程定义表,这张表里面会有多条记录
         3、act_ge_bytearray:流程资源表,存放的时候每次部署之后的bpmn.xml文件和png文件
         4、act_ge_property:
     * @param bpmnPath
     * @param bpmnPngPath
     * @return
     */
    Deployment publishProcess(String bpmnPath,String bpmnPngPath){
        //流程部署
       //第一步:获取ProcessEngine processEngine,已经在resouces.groovy文件中注入了到了容器中,可以直接使用
       //第二步:repositoryService
       RepositoryService repositoryService= processEngine.getRepositoryService()
       //第三步:使用repositoryService部署流程
       Deployment deploy= repositoryService.createDeployment().name("Test")
               .addClasspathResource("bpms/Test/TestGebt.bpmn20.xml")
               .addClasspathResource("bpms/Test/TestGebt.png")
               .deploy()
       //第四步:测试部署结果
       println "流程部署ID:"+ deploy.getId()
       println "流程部署Name:"+ deploy.getName()
       return deploy
   }
    /**
         =====console=====
         流程部署ID:7519
         流程部署Name:Test
         流程定义ID:TestGebt:4:7522
         流程实例ID:7523
         当前活动的ID:null
         =====console=====
         启动过程使用的表:
         1、act_hi_actinst:流程实例执行历史
         2、act_hi_identitylink:流程的参与用户信息历史
         3、act_hi_procinst:流程实例历史信息
         4、act_hi_taskinst:流程任务历史信息
         5、act_ru_execution:流程正在执行信息
         6、act_ru_identitylink:流程的参与用户信息
         7、act_ru_task:任务信息
     * @param s
     * @return
     */
    ProcessInstance startProcessInstance(String processName) {
        //启动流程实例
        //第一步:获取ProcessEngine processEngine,已经在resouces.groovy文件中注入了到了容器中,可以直接使用
        //第二步:RuntimeService用于启动流程
        RuntimeService runtimeService= processEngine.getRuntimeService()
        //第三步:使用runtimeService启动流程
        ProcessInstance instance=runtimeService.startProcessInstanceByKey(processName)
        //第四步:启动:测试结果
        println "流程定义ID:"+ instance.getProcessDefinitionId()
        println "流程实例ID:"+ instance.getId()
        println "当前活动的ID:"+ instance.getActivityId()
        return instance
    }
    /**
     *
     * @param s1
     * @param s2
     * @return
     */
    List<Task> queryPersonPendingTask(String processName, String user) {
        //查询个人待审批流程
        //第一步:获取ProcessEngine processEngine,已经在resouces.groovy文件中注入了到了容器中,可以直接使用
        //第二步:TaskService用于获取任务服务类
        TaskService taskService= processEngine.getTaskService()
        //第三步:使用runtimeService启动流程
        List<Task> taskList=taskService.createTaskQuery()
                .processDefinitionKey(processName)
                .taskAssignee(user)
                .list()
                //.singleResult() //获取单个任务
        //第四步:启动:测试结果
        for(Task task in  taskList){
            println "流程实例ID:"+ task.getProcessDefinitionId()
            println "任务ID:"+ task.getId()
            println "任务负责人:"+ task.getAssignee()
            println "任务名称:"+ task.getName()
        }
        return taskList
    }
    /**
     * 处理任务
     * @param task
     */
    def  handleTask(Task task) {
        TaskService taskService= processEngine.getTaskService()
        taskService.complete(task.getId())
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值