工作流 七月 12, 2020

acitivi(二) 流程部署

文章字数 11k 阅读约需 10 mins. 阅读次数 0

acitivi(二) 流程部署

名称解释

  • 流程: 对过程步骤的描述(请假流程)
  • 流程实例: 具体的一次流程执行(某人根据流程具体请假一次)

CRUD

流程文件部署(增)

通过classpath路径下的资源文件部署流程

// 系统属性表-存有next.dbid act_ge_property
// 资源表,相当于附近表 act_ge_bytearray
@Test
public void deploymentClassPath() {
    String bpmnNameAndKey = "first";
    Deployment deployment = repositoryService.createDeployment()
        .name("请假流程")
        .key(bpmnNameAndKey)
        .addClasspathResource("processes/" + bpmnNameAndKey + ".bpmn")
        //                .addClasspathResource("processes/" + bpmnNameAndKey + ".png")
        .category("HR")
        .deploy();
    System.out.println("部署ID\t"+deployment.getId());
    System.out.println("部署分类\t"+deployment.getCategory());
    System.out.println("部署名称\t"+deployment.getName());
}

通过zip压缩包部署流程

@Test
public void deploymentZip() {
    String bpmnNameAndKey = "first";
    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("processes/first.zip");
    ZipInputStream zipInputStream = new ZipInputStream(inputStream);
    Deployment deployment = repositoryService.createDeployment().name("请假流程")
            .addZipInputStream(zipInputStream)
            .category("HR")
            .deploy();

    System.out.println("部署ID\t"+deployment.getId());
    System.out.println("部署分类\t"+deployment.getCategory());
    System.out.println("部署名称\t"+deployment.getName());
}

通过输入流部署流程

@Test
    public void deploymentInputstream() {
        InputStream inputStreamBpmn = this.getClass().getClassLoader().getResourceAsStream("processes/first.bpmn");
        InputStream inputStreamPng = this.getClass().getClassLoader().getResourceAsStream("processes/first.png");
        Deployment deployment = repositoryService.createDeployment().name("请假流程")
                .addInputStream("first.bpmn",inputStreamBpmn)
                .addInputStream("first.png",inputStreamPng)
                .category("HR")
                .deploy();

        System.out.println("部署ID\t"+deployment.getId());
        System.out.println("部署分类\t"+deployment.getCategory());
        System.out.println("部署名称\t"+deployment.getName());
    }

通过BpmnModel部署流程

@Test
public void deploymentModel() {
    Deployment deployment = repositoryService.createDeployment().name("请假流程")
            .addBpmnModel("first", createBpmnModel())
            .category("HR")
            .deploy();

    System.out.println("部署ID\t"+deployment.getId());
    System.out.println("部署分类\t"+deployment.getCategory());
    System.out.println("部署名称\t"+deployment.getName());
}
public BpmnModel createBpmnModel(){
        BpmnModel bpmnModel = new BpmnModel();
        //流程定义
        Process process = new Process();
        process.setId("first");
        process.setName("firstProcess");
        bpmnModel.addProcess(process);
        //开始
        StartEvent startEvent = new StartEvent();
        startEvent.setId("startEvent");
        startEvent.setName("开始");
        process.addFlowElement(startEvent);
        //用户任务
        UserTask userTask = new UserTask();
        userTask.setId("usertask1");
        userTask.setName("审批【部门经理】");
        process.addFlowElement(userTask);
        //用户任务结束
        EndEvent endEvent = new EndEvent();
        startEvent.setId("endEvent");
        process.addFlowElement(startEvent);
        //连线
        process.addFlowElement(new SequenceFlow("startEvent", "usertask1"));
        process.addFlowElement(new SequenceFlow("usertask1", "endEvent"));
        return bpmnModel;

    }

启动流程

// 按照流程定义的key启动,则是启动最新版本
runtimeService.startProcessInstanceByKey("first");
runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey,variables);

部署对象查询

// 部署对象表 act_re_deployment
@Test
public void findDeployment() {
    Deployment deployment = repositoryService.createDeploymentQuery()
        // .processDefinitionKey("first")
        .deploymentKey("first")
        .latest()
        .singleResult();

    System.out.println("部署ID\t"+deployment.getId());
    System.out.println("部署名称\t"+deployment.getName());
    System.out.println("部署分类\t"+deployment.getCategory());
    System.out.println("部署KEY\t"+deployment.getKey());
    System.out.println("部署租户tenantID\t"+deployment.getTenantId());
    System.out.println("部署时间\t"+deployment.getDeploymentTime());
}

流程定义查询

// 流程定义表 act_re_procdef
// 获取流程的最新版本
@Test
public void findDefinition() {
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionKey("first")
            .latestVersion()
            .singleResult();

    System.out.println("流程定义ID\t"+processDefinition.getId());
    System.out.println("部署ID\t"+processDefinition.getDeploymentId());
    System.out.println("资源名称\t"+processDefinition.getResourceName());
    System.out.println("资源图片名称\t"+processDefinition.getDiagramResourceName());
}

删除流程

// 流程定义表 act_re_procdef
// 删除部署KEY为first的所有流程.
@Test
public void delete() {
    List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().processDefinitionKey("first").list();
    for (ProcessDefinition processDefinition : list) {
        repositoryService.deleteDeployment(processDefinition.getDeploymentId(), true);
    }
}

获取流程图

@Test
public void getPic() throws Exception {
    String deploymentId = "2501";
    String resourceName = "processes/first.png";
    InputStream inputStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
    FileCopyUtils.copy(inputStream, new FileOutputStream(new File("D:/first.png")));
}

获取每个流程最新的版本

@Test
public void findLatestVersion() {
    List<ProcessDefinition> definitions = repositoryService.createProcessDefinitionQuery()
            .orderByProcessDefinitionVersion().asc().list();

    LinkedHashMap<String, ProcessDefinition> map = new LinkedHashMap<>();
    if (!CollectionUtils.isEmpty(definitions)) {
        for (ProcessDefinition definition : definitions) {
            map.put(definition.getKey(), definition);
        }
    }
    ArrayList<ProcessDefinition> list = new ArrayList<>(map.values());
    for (ProcessDefinition processDefinition : list) {
        System.out.println("流程定义ID\t"+processDefinition.getId());
        System.out.println("部署ID\t"+processDefinition.getDeploymentId());
        System.out.println("资源名称\t"+processDefinition.getResourceName());
        System.out.println("资源图片名称\t"+processDefinition.getDiagramResourceName());
    }
}

流程挂起

@Test
public void suspend() {
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionKey("first")
            .latestVersion()
            .singleResult();
    boolean suspended = processDefinition.isSuspended();
    System.out.println(suspended ? "流程被暂停状态" : "流程激活状态");
    String processDefinitionId = processDefinition.getId();
    if(suspended){
        System.out.println("流程定义:"+processDefinitionId+"当前暂停");
    }else{
        repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
        System.out.println("流程定义:"+processDefinitionId+"挂起");
    }
}

流程激活

@Test
public void activate() {
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionKey(bpmnNameAndKey)
            .latestVersion()
            .singleResult();
    boolean suspended = processDefinition.isSuspended();
    System.out.println(suspended ? "流程被暂停状态" : "流程激活状态");
    String processDefinitionId = processDefinition.getId();
    if(!suspended){
        //说明是暂停,就可以激活操作
        System.out.println("流程定义:"+processDefinitionId+"已经激活");
    }else{
        repositoryService.activateProcessDefinitionById(processDefinitionId,true
                ,null);
        System.out.println("流程定义:"+processDefinitionId+"激活成功");
    }
}
0%