关于工作流:Activiti工作流入门筑基下篇养性

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

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

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

        @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、创立ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    //2、获取RunTimeService
    RuntimeService 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("<==========================>");
            }
    
        }
    

    运行截图:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理