Activiti常用方法 启动流程

话不多说 直接贴代码我把这边的 文件路径写成了枚举

package cn.stack.activiti.bean.bpmn;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 所有Bpmn存储路径
 *
 * @author 7
 * @date 2022/9/15 14:38
 */
@AllArgsConstructor
@Getter
public enum FileLocation {
    /**
     * 新增发布仓储流程
     */
    WAREHOUSING_LOAD("流程1", "loadWarehousing", "processes/storage/warehousing-load-process.bpmn", "processes/storage/warehousing-load-process.bpmn.png"),


    /**
     * 退库流程
     */
    BACK_OUT_WAREHOUSING("流程2", "backout-warehousing", "processes/storage/warehousing-backOut-process.bpmn", "processes/storage/warehousing-backOut-process.bpmn.png");


    /**
     * 中文名称
     */
    private String name;
    /**
     * 唯一key
     */
    private String key;
    /**
     * 文件路径
     */
    private String bpmnPath;
    /**
     * 图片路径
     */
    private String pngPath;

}


    /**
     * 创建数据库表   存储
     */
    @Test
    public void contextLoads() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.err.println(processEngine);
    }


    /**
     * 单文件部署
     */
    @Test
    public void deploy() {
        //创建引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deployment = repositoryService.createDeployment().disableSchemaValidation()
                .addClasspathResource(FileLocation.BACK_OUT_WAREHOUSING.getBpmnPath())
                .addClasspathResource(FileLocation.BACK_OUT_WAREHOUSING.getPngPath())
                .name(FileLocation.BACK_OUT_WAREHOUSING.getName()).deploy();

        System.err.println("部署id" + deployment.getId());
        System.err.println("部署name" + deployment.getName());
    }

    /**
     * 压缩包部署审核
     */
    @Test
    public void zipDeploy() {
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("processes/processes.zip");
        //转换成压缩文件
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取 RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deploy = repositoryService.createDeployment().addZipInputStream(zipInputStream).disableSchemaValidation().deploy();
        System.err.println("部署id= " + deploy.getId());
        System.err.println("部署name= " + deploy.getName());

    }

    /**
     * 启动流程实例
     */
    @Test
    public void startProcessesInstance() {
        //创建processEngines
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取运行时 RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance myProcesses = runtimeService.startProcessInstanceByKey("myProcesses");

        System.out.println("流程定义id-" + myProcesses.getProcessDefinitionId());
        System.out.println("流程实例id-" + myProcesses.getId());
        System.out.println("当前活动Id-" + myProcesses.getActivityId());
    }


    /**
     * 查询该角色下的所有任务
     */
    @Test
    public void fndPersonalTaskList() {
        //角色名称
        String assignee = "worker";
        //创建processEngines
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取taskService
        TaskService taskService = processEngine.getTaskService();
        //获取当前角色所得任务
        List<Task> processesList = taskService.createTaskQuery().processDefinitionKey("myProcesses").taskAssignee(assignee).list();

        processesList.stream().forEach(item -> {
            System.err.println("流程实例id:" + item.getProcessInstanceId());
            System.err.println("任务id:" + item.getId());
            System.err.println("任务负责人:" + item.getAssignee());
            System.err.println("任务名称:" + item.getName());
        });
        System.err.println("长度为:{]" + processesList.size());
    }


    /**
     * 完成任务
     */
    @Test
    public void completTask() {
        //获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取TaskService
        TaskService taskService = processEngine.getTaskService();
        //查询角色下的任务
        List<Task> worker = taskService.createTaskQuery().taskAssignee("worker").list();

        worker.stream().forEach(item -> {
            //确认任务
            taskService.complete(item.getId());
        });

    }

    /**
     * 查询流程定义
     */
    @Test
    public void queryProcessDefinition() {
        //        获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
//        得到ProcessDefinitionQuery 对象
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
//          查询出当前所有的流程定义
//          条件:processDefinitionKey =evection
//          orderByProcessDefinitionVersion 按照版本排序
//        desc倒叙
//        list 返回集合
        List<ProcessDefinition> definitionList = processDefinitionQuery.processDefinitionKey("myProcesses")
                .orderByProcessDefinitionVersion()
                .desc()
                .list();
//      输出流程定义信息
        for (ProcessDefinition processDefinition : definitionList) {
            System.out.println("流程定义 id=" + processDefinition.getId());
            System.out.println("流程定义 name=" + processDefinition.getName());
            System.out.println("流程定义 key=" + processDefinition.getKey());
            System.out.println("流程定义 Version=" + processDefinition.getVersion());
            System.out.println("流程部署ID =" + processDefinition.getDeploymentId());
        }

    }

    /**
     * 流程删除
     */
    @Test
    public void delDeploy() {
        //流程部署id
        String deploymentId = "60005";
        //获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //删除流程定义,如果该流程定义已有流程实例启动则删除时出错
        repositoryService.deleteDeployment(deploymentId);
        //true代表级联删除可以理解为暴力删除
//        repositoryService.deleteDeployment(deploymentId, true);

    }

    /**
     * 查看历史信息
     */
    @Test
    public void findHistoryInfo() {
//      获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取HistoryService
        HistoryService historyService = processEngine.getHistoryService();
//        获取 actinst表的查询对象
        HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
//        查询 actinst表,条件:根据 InstanceId 查询
//        instanceQuery.processInstanceId("2501");
//        查询 actinst表,条件:根据 DefinitionId 查询
        instanceQuery.processDefinitionId("myProcesses:34:62504");
//        增加排序操作,orderByHistoricActivityInstanceStartTime 根据开始时间排序 asc 升序
        instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
//        查询所有内容
        List<HistoricActivityInstance> activityInstanceList = instanceQuery.list();
//        输出
        for (HistoricActivityInstance hi : activityInstanceList) {
            System.err.println(hi.getActivityId());
            System.err.println(hi.getActivityName());
            System.err.println(hi.getProcessDefinitionId());
            System.err.println(hi.getProcessInstanceId());
            System.err.println("<==========================>");
        }
    }


    /**
     * 下载png以及bpmn文件
     *
     * @throws Exception
     */
    @Test
    public void downloadBpmnFile() throws Exception {
        //获取引擎
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        //获取repositoryService
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        //通过流程信息获取部署id
        ProcessDefinition processDefinitions = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcesses").singleResult();
        //获取部署id
        String deploymentId = processDefinitions.getDeploymentId();
        //获取文件名称
        String diagramResourceName = processDefinitions.getDiagramResourceName();
        //获取png图片
        InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, diagramResourceName);
        //获取bpmn流
        String bpmnName = processDefinitions.getResourceName();
        //获取bpmn文件输出流
        InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, diagramResourceName);
        //构造output
        File bpmnPath = new File("E:/deploy/deploy.bpmn");
        File pngPath = new File("E:/deploy/deploy.png");

        FileOutputStream bpmnOutputStream = new FileOutputStream(bpmnPath);
        FileOutputStream pngOutputStream = new FileOutputStream(pngPath);
        //输入输出流转换
        IOUtils.copy(pngInput, pngOutputStream);
        IOUtils.copy(bpmnInput, bpmnOutputStream);
        //关闭流
        bpmnInput.close();
        pngInput.close();
        bpmnOutputStream.close();
        pngOutputStream.close();


    }


    /**
     * 历史记录查询
     */

    @Test
    public void getRecordInfo() {
        //获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取HistoryService 查询历史信息
        HistoryService historyService = processEngine.getHistoryService();
        //获取实例信息
        HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
        //ACT_HI_ACTINST 这个表的这个字段 PROC_INST_ID_ 实例id
        instanceQuery.processInstanceId("7506");
        //或者是根据流程id查询
//        instanceQuery.processDefinitionId("loadWarehousing:3:7505");
        //查询所有内容
        List<HistoricActivityInstance> list = instanceQuery.list();
        //根据时间排序 升序
        instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
        System.err.println(list);

        //查询所有的 历史记录
    }



    /**
     * 基类获取 ProcessEngine
     *
     * @return
     */
    public static ProcessEngine getProcessEngine() {
        return ProcessEngines.getDefaultProcessEngine();
    }


    /**
     * 添加一个业务key
     */
    @Test
    public void addBusinessKey() {
        //启动的时候添加一个businesskey 第一个参数 bpmn文件唯一key,第二个是业务key
        ProcessInstance instance = getProcessEngine().getRuntimeService().startProcessInstanceByKey("myProcesses", "10086");
        //获取业务key
        System.err.println("业务key=" + instance.getBusinessKey());
    }

    /**
     * 流程暂停激活
     */
    @Test
    public void suspendAllInstance() {
        //获取RepositoryService
        RepositoryService repositoryService = getProcessEngine().getRepositoryService();
        //获取所有的流程实例
        List<ProcessDefinition> definitionList = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcesses").list();
        definitionList.stream().forEach(item -> {
            //判断是否是挂起状态 挂起就激活 激活状态就挂起
            if (item.isSuspended()) {
                //挂起就激活 参数一 流程定义的id 参数二 是否要激活 参数三 激活的时间
                repositoryService.activateProcessDefinitionById(
                        item.getId(),
                        true,
                        null);
                System.err.println("流程定义id已激活" + item.getId());
            } else {
                //激活状态就挂起 参数一 流程定义的id 参数二 是否要暂停 参数三 暂停的时间
                repositoryService.suspendProcessDefinitionById(item.getId(), false, null);
                System.err.println("流程定义id挂起" + item.getId());
            }
        });
    }

    /**
     * 暂停单个流程实例
     */
    @Test
    public void suspendSingleInstance() {
        //获取运行服务
        RuntimeService runtimeService = getProcessEngine().getRuntimeService();
        //获取流程实例对象
        List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processInstanceId("30015").list();
        list.stream().forEach(iot -> {
            //判断是否是暂停操作 暂停就激活
            if (iot.isSuspended()) {
                //挂起就激活 参数一 流程定义的id 参数二 是否要激活 参数三 激活的时间
                runtimeService.activateProcessInstanceById(
                        iot.getId());
                System.err.println("单个流程定义id已激活" + iot.getId());
            } else {
                //激活状态就挂起 参数一 流程定义的id 参数二 是否要暂停 参数三 暂停的时间
                runtimeService.suspendProcessInstanceById(iot.getId());
                System.err.println("单个流程定义id挂起" + iot.getId());
            }
        });
    }


    /**
     * uel动态分配负责人  uelProcess   ass01 ass2
     */

    @Test
    public void assigneeuel() {

        //部署流程
        RepositoryService repositoryService = getProcessEngine().getRepositoryService();
        Deployment deploy = repositoryService.createDeployment().name("审核-uel").addClasspathResource("processes/storage/warehousing-process-uel.bpmn").deploy();
        System.err.println("流程部署id" + deploy.getId());
        System.err.println("流程部署名称" + deploy.getName());


        //=============================一下是启动流程
        //获取RuntimeService
        RuntimeService runtimeService = getProcessEngine().getRuntimeService();
        //设置负责人
        HashMap<String, Object> map = new HashMap<>();
        map.put("ass01", "人事");
        map.put("ass02", "财务");
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("uelProcess", map);
        System.err.println(instance);
    }


    /***
     * 根据业务id查询任务id
     * @param
     * @return
     */
    @Test
    public void getTaskId() {
        TaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();
        Task task = taskService.createTaskQuery().processInstanceBusinessKey("1572142206469427202").singleResult();
        System.err.println(task);
    }



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值