package com.an.processdeploy;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.util.zip.ZipInputStream;
public class ProcessDeploy {
    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
    @Test
    public void deployOne(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeployment().name("请假流程")
                .addClasspathResource("helloworld.bpmn")
                .addClasspathResource("helloworld.png")
                .deploy();
        System.out.println("流程部署成功!");
    }
    @Test
    public void deployTwo(){
        // helloworld.zip不加/  从当前包中找文件
        // helloworld.zip加/     从classpath中找文件
        InputStream inputStream = this.getClass().getResourceAsStream("/helloworld.zip");
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeployment().name("请假流程")
                .addZipInputStream(new ZipInputStream(inputStream))
        .deploy();
        System.out.println("流程部署成功!");
    }
    /**
     * 查询流程定义
     */
    @Test
    public void queryProcessDefinition(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createProcessDefinitionQuery()
        //条件
        .deploymentId("")
        .processDefinitionName("")
        //list
//        .list()
        //count()
//        .count()
        //排序
        .orderByDeploymentId().desc();
    }
    /**
     * 删除流程定义
     */
    @Test
    public void deleteProcessDefinition(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.deleteDeployment("");
    }
    /**
     * 需改流程定义
     *      修改流程图,重新部署;
     *      只要key不变,version会+1
     */
    public void updateProcessDefinition(){
    }
    /**
     * 查询流程图
     */
    @Test
    public void queryProcessPic(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //1、
        String processDefinitionId="";
        InputStream inputStream = repositoryService.getProcessDiagram(processDefinitionId);
        //
        String processDeploymentId="";
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(processDeploymentId).singleResult();
        InputStream inputStream1 = repositoryService.getProcessDiagram(processDefinition.getId());
    }
    /**
     * 查询最新版本流程定义
     */
    @Test
    public void queryLatestProcessDefinition(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createProcessDefinitionQuery()
                .orderByProcessDefinitionVersion().asc().list();
    }
    /**
     * 删除相同流程定义key
     */
    @Test
    public void deleteSameKeyProcessDefinition(){
        String processDefinitionKey="";
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey(processDefinitionKey).list();
    }
    /**
     * 查询流程部署信息
     */
    @Test
    public void queryProcessDeploy(){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeploymentQuery()
         //条件
        .deploymentId("")
        .deploymentName("")
        .deploymentNameLike("")
        //排序 asc()或desc() 必须和 orderBy...一起用
        .orderByDeploymentId().asc()
        .orderByDeploymentName().desc()
        //list
//        .list()
        //listPage
//        .listPage(1,3)
        //count
//        .count()
        //singleResult
        .singleResult();
    }
}