二、眉头一皱退到众人身后

身子养好了,开始脱离凡尘做筹备

  • 第六步:流程部署
    (一)流程部署形式一、

        @Test    public void GenActivitiTables2() {        //    创立流程引擎ProcessEngine        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();        //2、获取RepositoryServcie(re表的服务层)        RepositoryService repositoryService = processEngine.getRepositoryService();        //3、应用service进行流程的部署,部署bpmn和png        Deployment deploy = repositoryService.createDeployment().name("出差申请流程")                .addClasspathResource("bpmn/holiday.bpmn20.xml")                .addClasspathResource("bpmn/holiday.bpmn20.png")                .deploy();            }

    (二)、流程部署形式二、

    //1、将png和bpmn打包成zip包//2、创立(流程引擎)ProcessEngine        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//3、获取RepositoryServcie(re表的服务层)\        RepositoryService repositoryService = processEngine.getRepositoryService();//读取资源包文件,结构成inputStream        InputStream inputStream = this.getClass()                .getClassLoader()                .getResourceAsStream("bpmn/holiday.zip");//用inputStream 结构ZipInputStream        ZipInputStream zipInputStream = new ZipInputStream(inputStream);//应用压缩包的流进行流程的部署        Deployment deploy = repositoryService.createDeployment()                .addZipInputStream(zipInputStream)                .deploy();

    部署去数据库查看,原来没有日期的体现在有了日期的,点击进去能够查看具体数据

  • 第七步:启动流程实例

    //1、创立ProcessEngineProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2、获取RunTimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();//3、依据流程定义的id启动流程ProcessInstance instance = runtimeService.startProcessInstanceByKey("就是bpmn文件中的process  id");

    启动后发现有新的表数据:
    act_hi_taskinst(历史工作实例数据表)
    act_hi_procinst(历史流程实例数据表,正在执行的工作也在其中)
    act_hi_actinst(历史节点数据,图片上的节点信息)
    act_hi_identitylink(历史流程用户信息数据表)
    act_ru_execution运行时流程执行实例数据表,一条是开始事件的执行实例,这个始终存在,只到流程完结后才会主动删除,is_active字段示意是否正在执行实例)
    act_ru_task(运行时工作信息数据信息表)

  • 第八步:查问集体代办工作

    @Test    public void getActiv(){        //1、获取流程引擎        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();        //2、获取taskService        TaskService taskService = processEngine.getTaskService();        //3、依据流程key 和 工作的负责人 查问工作        List<Task> taskList = taskService.createTaskQuery().processDefinitionKey("holiday").taskAssignee("zhangsan").list();        //4、输入        for (org.activiti.engine.task.Task task : taskList) {            System.out.println("流程实例id="+task.getProcessInstanceId());            System.out.println("工作Id="+task.getId());            System.out.println("工作负责人="+task.getAssignee());            System.out.println("工作名称="+task.getName());        }    }

    执行后果:

    进入数据库也能够查看到信息:

    select distinct RES.* from ACT_RU_TASK RES inner join ACT_RE_PROCDEF D on RES.PROC_DEF_ID_ = D.ID_ WHERE RES.ASSIGNEE_ = 'zhangsan' and D.KEY_ = 'holiday' order by RES.ID_ asc LIMIT 2147483647 OFFSET 0;
  • 第九步:实现集体工作

    • 第一种形式:间接实现整个流程,找整个流程的创立负责人

      //    实现集体工作    @Test    public void finshActivity(){        //获取引擎        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//获取操作工作的服务 TaskService        TaskService taskService = processEngine.getTaskService();//实现工作,参数:工作id,实现zhangsan的工作,2505是ACT_RU_TASK表的id        taskService.complete("2505");    }

      代码运行后,数据库表ACT_HI_TASKINST(历史的工作实例表)会有endtime数据

    • 第二种形式:将整个流程走完,每个阶段负责人实现每个阶段工作

         从流程来看先实现经理审批     @Test//    实现其余角色的工作    public void finshotherActivity(){        //实现经理jerry的工作//获取引擎        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//获取操作工作的服务 TaskService        TaskService taskService = processEngine.getTaskService();//获取jerry - myEvection 对应的工作        Task task = taskService.createTaskQuery()                .processDefinitionKey("holiday")                .taskAssignee("jerry")                .singleResult();//实现jerry的工作        taskService.complete(task.getId());        System.out.println("流程实例id="+task.getProcessInstanceId());        System.out.println("工作Id="+task.getId());        System.out.println("工作负责人="+task.getAssignee());        System.out.println("工作名称="+task.getName());                执行后:        流程实例id=2501        工作Id=5002        工作负责人=jerry        工作名称=经理审批        

      执行后数据库表act_ru_task数据整体发生变化

      从jerry的信息变成了jack的信息,也就意味着jerry经理审批这一步曾经走完,开始走jack的阶段,运行后到财务信息

      //实现jack的工作        Task taskjack = taskService.createTaskQuery()                .processDefinitionKey("holiday")                .taskAssignee("jack")                .singleResult();        System.out.println("流程实例id="+taskjack .getProcessInstanceId());        System.out.println("工作Id="+taskjack .getId());        System.out.println("工作负责人="+taskjack .getAssignee());        System.out.println("工作名称="+taskjack .getName());//实现jack的工作        taskService.complete(taskjack.getId());

      数据库:

      财务:

      ////实现rose的工作        Task taskrose = taskService.createTaskQuery()                .processDefinitionKey("holiday")                .taskAssignee("rose")                .singleResult();        System.out.println("流程实例id="+taskrose .getProcessInstanceId());        System.out.println("工作Id="+taskrose .getId());        System.out.println("工作负责人="+taskrose .getAssignee());        System.out.println("工作名称="+taskrose .getName());//实现工作        taskService.complete(taskrose.getId());

      act_ru_task表显示:

      act_hi_taskinst表显示:到这里就意味着流程走完了,endtime有了数值

  • 第十步:查看历史流程

      //获取历史信息    @Test    public void hostiry() {        //获取引擎        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//获取HistoryService        HistoryService historyService = processEngine.getHistoryService();//获取 actinst表的查问对象        HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();//查问 actinst表,条件:依据 InstanceId 查问//instanceQuery.processInstanceId("2501");//查问 actinst表,条件:依据 DefinitionId 查问        instanceQuery.processDefinitionId("holiday:1:4");//减少排序操作,orderByHistoricActivityInstanceStartTime 依据开始工夫排序 asc 升序        instanceQuery.orderByHistoricActivityInstanceStartTime().asc();//查问所有内容        List<HistoricActivityInstance> activityInstanceList = instanceQuery.list();//输入        for(HistoricActivityInstance hi : activityInstanceList) {            System.out.println(hi.getActivityId());            System.out.println(hi.getActivityName());            System.out.println(hi.getProcessDefinitionId());            System.out.println(hi.getProcessInstanceId());            System.out.println("<==========================>");        }    }

    运行截图: