Activiti7使用

Activiti7

  • Activiti的表说明:

使用25张表
ACT_RE 流程定义和流程资源
ACT_RU 运行时,流程实例、任务、变量
ACT_HI 历史表
ACT_GE 通用表

  • 服务接口:

RepositoryService 资源管理类
RuntimeService 运行时管理类
TaskService 任务管理类
HistoryService 历史数据管理类
ManagementService 流程引擎管理类

  • 流程插件:

新版(我的是2021)idea安装Activiti BPMN visualizer

  • 流程符号:

事件event,活动activity,网关 gateway,流向

  • 部署流程

使用repositoryService
单文件部署 把bpmn文件和png文件一个一个处理
压缩包处理 把bpmn文件和png文件打成一个zip压缩包

@Test
    void deployProcessByZip() {
        InputStream inputStream = this.getClass()
                .getClassLoader()
                .getResourceAsStream("bpmn/evection.zip");
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        Deployment deploy = repositoryService.createDeployment()
                .name("部署流程通过zip")
                .addZipInputStream(zipInputStream)
                .deploy();
        System.out.println("流程ID:"+deploy.getId());
        System.out.println("流程名称:"+deploy.getName());
    }`

部署过程操作的表:
act_re_deployment 部署表
act_re_procdef 流程定义表
act_ge_bytearray 资源表

  • 启动流程实例

使用runtimeService 根据流程定义key
核心代码:

@Test
    void startProcess() {
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("myEvection");
        log.info("流程定义ID:{}",instance.getProcessDefinitionId());
        log.info("流程实例ID:{}",instance.getId());
        log.info("当前活动的ID:{}",instance.getActivityId());
    }`

myEvection是设计流程图的时候唯一的key
操作的表:
act_hi_actinst 流程实例执行历史信息
act_hi_indentitylink 流程参与用户的历史信息
act_hi_procinst 流程实例的历史信息
act_hi_taskinst 流程任务的历史信息
act_run_execution 流程执行信息
act_run_ndentitylink 流程正在参与用户信息
act_run_task 流程当前任务信息

  • 任务查询:
@Test
    void findPersonTaskList() {
        List<Task> list = taskService.createTaskQuery().processDefinitionKey("myEvection")
                .taskAssignee("zhangsan")
                .list();
        for (Task task : list) {
            log.info("流程实例id:{}",task.getProcessInstanceId());
            log.info("任务id:{}",task.getId());
            log.info("任务负责人:{}",task.getAssignee());
            log.info("任务名称:{}",task.getName());
        }
    }
  • 任务结束;
 @Test
    void completeTask() {
        taskService.complete("1f23ec23-ca8d-11ec-9b48-8e061b0cd255");
    }
    直接传入taskId
  • 流程定义查询

根据流程定义的key查询

@Test
    void queryProcessDefinition() {
        ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();
        List<ProcessDefinition> myEvection = definitionQuery.processDefinitionKey("myEvection")
                .orderByProcessDefinitionVersion()
                .desc()
                .list();
        myEvection.forEach(System.out::println);

    }`
 - 流程删除

根据流程部署的id

  @Test
    void deleteProcessDefinition() {
        repositoryService.deleteDeployment("34327582-ca96-11ec-b66f-8e061b0cd255",true);
    }
  • 流程资源下载

如果用户想要查看流程的资源文件,可以从数据库中吧资源下载到本地;

@Test
    void getProcessDefinitionResource() throws IOException {
        ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();
        ProcessDefinition myEvection = definitionQuery.processDefinitionKey("myEvection")
                .singleResult();
        String deploymentId = myEvection.getDeploymentId();

        String pngName = myEvection.getDiagramResourceName();
        String bpmnName = myEvection.getResourceName();

        InputStream pngAsStream = repositoryService.getResourceAsStream(deploymentId, pngName);
        InputStream bpmnAsStream = repositoryService.getResourceAsStream(deploymentId, bpmnName);

        String pngPath = "/Users/macos/IdeaProjects/actibiti7/src/main/resources/bpmn/pngOut.png";
        String bpmnPath = "/Users/macos/IdeaProjects/actibiti7/src/main/resources/bpmn/bpmnOut.bpmn";
        FileOutputStream pngOut = new FileOutputStream(pngPath);
        FileOutputStream bpmnOut = new FileOutputStream(bpmnPath);
        IOUtils.copy(pngAsStream,pngOut);
        IOUtils.copy(bpmnAsStream,bpmnOut);

        pngAsStream.close();
        bpmnAsStream.close();
        pngOut.close();
        bpmnOut.close();
    }

maven依赖:common-io :
		<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
  • 流程历史信息查询

historyService:

 @Test
    void findHistoryInfo() {
        HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
        HistoricActivityInstanceQuery historicActivityInstanceQuery = instanceQuery.processInstanceId("3d75da9e-ca9e-11ec-bd9d-8e061b0cd255").orderByHistoricActivityInstanceStartTime().asc();
        List<HistoricActivityInstance> list = historicActivityInstanceQuery.list();
        for (HistoricActivityInstance hi : list) {
            System.out.println(hi.getActivityId());
            System.out.println(hi.getActivityName());
            System.out.println(hi.getProcessDefinitionId());
            System.out.println(hi.getProcessInstanceId());
            System.out.println("=====================");
        }
    }
  • 流程定义和流程实例

一个流程定义可以对应多个流程实例
例如:公司有出差申请流程 流程定义
小郑可以申请出差 广州出差4天 流程实例
小李可以申请出差 北京出差4天 流程实例

  • 业务标识:businessKey
  • 可以查询自己的业务信息
  • activiti中不会保存业务信息,可以通过businessKey进行关联,字段在act_ru_execution表中;
    @Test
    void startProcess() {
        String businessKey = "1001";
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("myEvection",businessKey);
        log.info("流程定义ID:{}",instance.getProcessDefinitionId());
        log.info("流程实例ID:{}",instance.getId());
        log.info("当前活动的ID:{}",instance.getActivityId());
        log.info("流程实例bussinessKey:{}",instance.getBusinessKey());
    }
  • 流程挂起和激活
//通过流程定义id挂起或者激活(当前流程定义下的所有流程实例都会被执行该操作)
    @Test
    void suspendProcess() {
        ProcessDefinition myEvection = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("myEvection")
                .singleResult();
        boolean suspended = myEvection.isSuspended();
        if (suspended) {
            repositoryService.activateProcessDefinitionById(myEvection.getId(),true,null);
        }else {
            repositoryService.suspendProcessDefinitionById(myEvection.getId(),true,null);
        }

        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("myEvection")
                .singleResult();
        boolean result = processDefinition.isSuspended();
        log.info("流程状态:{}",result?"挂起":"激活");
    }

    //根据流程实例id执行该操作(只有当前流程实例生效)
    @Test
    void suspendProcessOneInstance() {
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("e0ec589a-caa6-11ec-b579-8e061b0cd255")
                .singleResult();
        boolean suspended = processInstance.isSuspended();
        if (suspended) {
            runtimeService.activateProcessInstanceById(processInstance.getId());
        }else {
            runtimeService.suspendProcessInstanceById(processInstance.getId());
        }

        ProcessInstance instance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("e0ec589a-caa6-11ec-b579-8e061b0cd255")
                .singleResult();
        boolean result = instance.isSuspended();
        log.info("流程状态:{}",result?"挂起":"激活");
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值