美文网首页
Activiti7的使用(二)

Activiti7的使用(二)

作者: 傻明蚕豆 | 来源:发表于2019-08-18 14:50 被阅读0次

    一个请假流程:

    先画一个流程图,打开IDEA(已经安装Activiti Designer 流程设计器),在resources下新建文件夹diagram,在diagram下新建一个holiday.pbmn,画板中包括以下结点:

    Connection—连接

    Event---事件

    Task---任务

    Gateway---网关

    Container—容器

    Boundary event—边界事件

    Intermediate event- -中间事件

    画好如下图:

    然后将该图另存为png图片,具体操作:先复制holiday.pbmn为holiday.xml文件,然后右击holiday.xml,

    选择Diagrams,再选择Show BPMN 2.0 Designer,最后选择Export to file

    下面写代码开始使用流程:

    package com.lxm.activiti;

    import org.activiti.engine.*;

    import org.activiti.engine.repository.Deployment;

    import org.activiti.engine.runtime.ProcessInstance;

    import org.activiti.engine.task.Task;

    import java.io.InputStream;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.zip.ZipInputStream;

    public class ActivitiDeployment {

        public static void main(String[] args){

            //1.创建ProcessEngineConfiguration对象  第一个参数:配置文件名称  第二个参数是配置文件processEngineConfiguration的bean的id

            ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");

            //创建ProcesEngine对象

            ProcessEngine processEngine = configuration.buildProcessEngine();

            //流程部署

    //processDeployment(processEngine);

    //启动一个流程实例

    //startProcess(processEngine);

    //任务查询

    //List list=searchTask(processEngine);

    //处理任务

    //disposeTask(processEngine,list);

        }

        //流程部署

        public static void processDeployment(ProcessEngine processEngine){

            //部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流程引擎 activiti 中

    //2.得到RepositoryService实例

            RepositoryService repositoryService = processEngine.getRepositoryService();

            //3.进行部署

            Deployment deployment=repositoryService.createDeployment()

                    .addClasspathResource("diagram/holiday.bpmn")

                    .addClasspathResource("diagram/holiday.png")

                    .name("请假申请流程")

                    .deploy();

            //执行此操作后 activiti 会将上边代码中指定的 bpm 文件和图片文件保存在 activiti 数据库。

    //        受影响的表有:

    //        act_re_deployment  部署信息

    //        act_re_procdef    流程定义的一些信息

    //        act_ge_bytearray  流程定义的bpmn文件及png文件

    //4.输出部署的一些信息

            System.out.println(deployment.getName());

            System.out.println(deployment.getId());

        }

        //流程部署压缩包方式,把holiday.bpmn和holiday.png打包成holiday.zip

        public static void processDeploymentByZip(ProcessEngine processEngine){

            InputStream inputStream=ActivitiDeployment.class.getClassLoader().getResourceAsStream("diagram/holiday.zip");

            ZipInputStream zipInputStream=new ZipInputStream(inputStream);

            //2.得到RepositoryService实例

            RepositoryService repositoryService = processEngine.getRepositoryService();

            //3.进行部署

            Deployment deployment=repositoryService.createDeployment()

                    .addZipInputStream(zipInputStream)

                    .name("请假申请流程")

                    .deploy();

            //执行此操作后 activiti 会将上边代码中指定的 bpm 文件和图片文件保存在 activiti 数据库。

        }

        //启动一个流程实例

        public static void startProcess(ProcessEngine processEngine){

            //流程定义部署在 activiti 后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了。

    //针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于 java 类与 java 对象的关系,类定义好后需要 new 创建一个对象使用,当然可以 new 多个对象

            RuntimeService runtimeService=processEngine.getRuntimeService();

            ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_1");

            System.out.println(processInstance.getDeploymentId());

            System.out.println(processInstance.getDescription());

            System.out.println(processInstance.getName());

            System.out.println(processInstance.getProcessInstanceId());

            System.out.println(processInstance.getId());

        }

        //任务查询

        public static List<String> searchTask(ProcessEngine processEngine){

            //流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。

            TaskService taskService=processEngine.getTaskService();

            List<Task> list=taskService.createTaskQuery()

                    .processDefinitionKey("myProcess_1")//流程实例key

    //.taskAssignee("")//查询谁的任务

                    .list();

            List<String> idList=new ArrayList<String>();

            for(Task task:list){

                idList.add(task.getId());

                System.out.println(task.getId());

                System.out.println(task.getName());

                System.out.println(task.getProcessInstanceId());

            }

            return idList;

        }

        //处理任务

        public static void disposeTask(ProcessEngine processEngine,List<String> list){

            //任务负责人查询待办任务,选择任务进行处理,完成任务。

            TaskService taskService=processEngine.getTaskService();

            for(String id:list){

                taskService.complete(id);//任务id

                System.out.println("处理任务id:"+id);

            }

    }

    }


    相关文章

      网友评论

          本文标题:Activiti7的使用(二)

          本文链接:https://www.haomeiwen.com/subject/myursctx.html