一、工作流 Activiti7-7.任务处理Task

1.概念

image.png

上面有很多任务,但其中最常用的就是第一个-用户任务。

image.png
  • 执行人就是当前的处理人
  • 候选人就是一堆人,多个人逗号隔开
  • 候选组 可以理解为用户组
  • 任务到期时间:一个时间,到了之后就会执行下一个逻辑,相当于定时器,例如:请假流程到班主任,到期时间3天,如果3天班主任都没有审批,就认为可以执行拒绝的操作。

2.执行任务实战

  • 我们首先创建一个新的审核流程,从开始先到老师然后到校长的最后结束的一个流程,因为在IDEA的插件BPMActiviti,我发现没法保存,所以用了另外一种方式做了bpmn的流程,大家可以参考这个系列的专门讲 如果使用bpmnjs的一个帖子。


    image.png

做好之后我们就可以像之前的步骤一样,首先部署创建流程,然后再创建一个流程实例,下面就直接贴出图片供参考了:

image.png

然后是创建流程实例的代码:


 //初始化流程实例
    @Test
    public void initProcessInstance(){
        //1.你的业务数据生成之后,这条业务的id就是bkey
        //2.然后将流程数据与业务数据进行关联
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("task_process1","b-key001");
        System.out.print("流程实例id:"+processInstance.getProcessInstanceId());
    }

做完之后就可以在数据库中查看我们创建的数据了:


image.png

image.png
  • 那么现在我们就可以查询任务列表和属于相应人员的任务:
//任务查询
    @Test
    public void findTasks(){
        List<Task> list = taskService.createTaskQuery().list();
        for(Task task:list){
            System.out.println("id:"+task.getId());
            System.out.println("name:"+task.getName());
            System.out.println("assignee:"+task.getAssignee());
        }
    }

    // 查询自己的任务
    @Test
    public void findTasksByAssignee(){
        List<Task> list = taskService.createTaskQuery().taskAssignee("老师").list();
        for(Task task:list){
            System.out.println("id:"+task.getId());
            System.out.println("name:"+task.getName());
            System.out.println("assignee:"+task.getAssignee());
        }
    }

第一个任务是到老师那儿,我们查询到老师的任务id之后,试下完成任务的接口:

// 执行任务
    @Test
    public void completeTask(){
        taskService.complete("db1ccfd8-8803-11eb-b37e-8eeb3d902084");
        System.out.println("执行完成任务");
    }

之后在人员表中就多了校长的信息了:


image.png
image.png

然后下一步我们在使用校长任务的id,再次执行完成,在看数据库会发现这三个表的数据都没了,最后是到历史表了。

image.png

3.拾取任务实战

拾取任务是需要多个候选人的,所以我们得再画一个BPMN的流程图:


image.png

其中候选人写的是两个id


image.png

拾取任务是使用claim方法,第一个参数是任务id,第二个任务是userid,归还候选任务是setAssignee,意思就是设置办理人,如果为null则意味着重新把任务交给了候选人,如果设置为人,则相当于交办任务了。

// 拾取任务
    @Test
    public void claimTask(){
        taskService.claim("a02364ff-8a46-11eb-b158-acde48001122","wang");


        //归还候选任务
        taskService.setAssignee("a02364ff-8a46-11eb-b158-acde48001122",null);


        //交办任务
        taskService.setAssignee("a02364ff-8a46-11eb-b158-acde48001122","li");

    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容