Jbpm 分派任务的几种方式

1、在图里直接指定:assigne=”王经理”
这里写图片描述

2、设定变量:assigne=${manager}
这里写图片描述

给变量设值

Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("manager", "王经理");
        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("task",variables);

3、使用AssignmentHandlerImpl

public class AssignmentHandlerImpl implements AssignmentHandler{

    private static final long serialVersionUID = 1L;

    //计算此任务的办理人,并分配任务
    @Override
    public void assign(Assignable assignable, OpenExecution execution) throws Exception {
        System.out.println("AssignmentHandlerImpl============");
        //计算办理人
        String userId = "李经理";
        //分派任务
        assignable.setAssignee(userId);
    }

}

然后在流程文件.xml

<?xml version="1.0" encoding="UTF-8"?>

<process name="task" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="38,16,48,48" name="start1">
      <transition name="to 审批2" to="审批2" g="-52,-22"/>
   </start>

   <task assignee="${manager}" g="16,180,92,52" name="审批">
      <transition g="-50,-22" name="to end1" to="end1"/>
   </task>
   <task name="审批2" g="16,96,92,52">
      **<assignment-handler class="com.itcast.h_task.AssignmentHandlerImpl"></assignment-handler>**
      <transition name="to 审批" to="审批" g="-45,-22"/>
   </task>

   <end g="38,264,48,48" name="end1"/>
</process>

4、把原来指派给李经理的,又重新分配给王经理:

/**
 * 任务指派
 * @author Administrator
 *
 */
public class ProcessDecisition {
    private static ProcessEngine processEngine = Configuration.getProcessEngine();

    /*{
        //从src下开始查找
        this.getClass().getResourceAsStream("/test.txt");
        //从当前类的包中
        this.getClass().getResourceAsStream("test.txt");
        //从src下开始查找
        this.getClass().getClassLoader().getResourceAsStream("test.txt");
    }
    */
    @Test
    public void testProcess() throws Exception {
        //部署
        String deployId = processEngine.getRepositoryService()
        .createDeployment()
        .addResourceFromClasspath("task/task.jpdl.xml")
        .addResourceFromClasspath("task/task.png")
        .deploy();
        System.out.println("部署完毕:deployId=="+deployId);

        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("manager", "王经理");
        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("task",variables);
        System.out.println("启动完毕:processInstanceId=="+pi.getId());
        System.out.println("正在执行的活动名称=="+pi.findActiveActivityNames());

    }

    /**
     * 分配任务, 把李经理的任务给王经理
     * @throws Exception
     */
    @Test
    public void testAssignTask() throws Exception {
        String taskId = "330010";
        String userId = "王经理";
        processEngine.getTaskService().assignTask(taskId, userId);
    }
}

5、组任务:
这里写图片描述
这里写图片描述

/**
 * 组任务指派
 * @author Administrator
 *
 */
public class ProcessDecisition {
    private static ProcessEngine processEngine = Configuration.getProcessEngine();

    /*{
        //从src下开始查找
        this.getClass().getResourceAsStream("/test.txt");
        //从当前类的包中
        this.getClass().getResourceAsStream("test.txt");
        //从src下开始查找
        this.getClass().getClassLoader().getResourceAsStream("test.txt");
    }
    */
    @Test
    public void testProcess() throws Exception {
        //部署
        String deployId = processEngine.getRepositoryService()
        .createDeployment()
        .addResourceFromClasspath("task/group.jpdl.xml")
        .addResourceFromClasspath("task/group.png")
        .deploy();
        System.out.println("部署完毕:deployId=="+deployId);

        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("manager", "王经理");
        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("group",variables);
        System.out.println("启动完毕:processInstanceId=="+pi.getId());
        System.out.println("正在执行的活动名称=="+pi.findActiveActivityNames());

    }

    //查询个人任务列表
    @Test
    public void findGroupTaskList() throws Exception {
        String userId = "陈工";
        //List<Task> tasks = processEngine.getTaskService().findGroupTasks(userId);
        List<Task> tasks = processEngine.getTaskService()
                .createTaskQuery()
                .candidate(userId)
                .page(0, 100)
                .list();
        for(Task task : tasks){
            System.out.println("任务信息:taskId=="+task.getId() 
                    + ", Assignee=="+task.getAssignee()
                    + ",name=="+task.getName()
                    + ",createTime=="+task.getCreateTime()
                    + ",ExecutionId=="+task.getExecutionId()

                    );
        }
    }

    //查询个人任务列表
    @Test
    public void findPersonalTaskList() throws Exception {
        String userId = "陈工";
        //List<Task> tasks = processEngine.getTaskService().findPersonalTasks(userId);
        List<Task> tasks = processEngine.getTaskService()
                .createTaskQuery()
                .assignee(userId)
                //.page(0, 100)
                .list();
                //.findPersonalTasks(userId);
        for(Task task : tasks){
            System.out.println("任务信息:taskId=="+task.getId() 
                    + ", Assignee=="+task.getAssignee()
                    + ",name=="+task.getName()
                    + ",createTime=="+task.getCreateTime()
                    + ",ExecutionId=="+task.getExecutionId()

                    );
        }
    }

    //拾取任务,,拾取之后,其它工程师就看不到
    @Test
    public void testTakeTask() throws Exception {
        String taskId = "340010";
        String userId = "陈工";
        processEngine.getTaskService().takeTask(taskId, userId);
    }
}

6、组任务使用变量:
这里写图片描述

Map<String, Object> variables = new HashMap<String, Object>();
        //variables.put("manager", "王经理");
        variables.put("userIds", "a陈工,a李工,a旷工,a苏工,a曾工");
        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("group",variables);

7、组任务使用AssignmentHandlerImpl

public class AssignmentHandlerImpl implements AssignmentHandler{

    private static final long serialVersionUID = 1L;

    //计算此任务的办理人,并分配任务
    @Override
    public void assign(Assignable assignable, OpenExecution execution) throws Exception {
        System.out.println("AssignmentHandlerImpl============");
        //计算办理人
        //String userId = "李经理";
        //分派任务
        //assignable.setAssignee(userId);
        assignable.setAssignee("aa");
        assignable.setAssignee("bb");
        assignable.setAssignee("cc");
        assignable.setAssignee("dd");
    }

}

配置文件

<process name="group" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="38,16,48,48" name="start1">
      <transition name="to 维修2" to="维修2" g="-52,-22"/>
   </start>
   <!-- <task candidate-users="陈工,李工,钱工,牛工" g="16,180,92,52" name="维修">
      <assignment-handler class="com.itcast.h_task.AssignmentHandlerImpl"></assignment-handler> 
      <transition g="-50,-22" name="to end1" to="end1"/>
   </task> -->
   <task  g="16,180,92,52" name="维修">
      <assignment-handler class="com.itcast.h_task.AssignmentHandlerImpl"></assignment-handler> 
      <transition g="-50,-22" name="to end1" to="end1"/>
   </task>
   <end g="38,264,48,48" name="end1"/>
   <task name="维修2" g="16,96,92,52" candidate-users="${userIds}">
      <transition name="to 维修" to="维修" g="-45,-22"/>
   </task>
</process>

8、总结:
这里写图片描述

—————————————————–
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
请先拍 购买地址, 下载请用百度盘
目录如下:
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)

01高级架构师四十二个阶段高内容:
这里写图片描述
这里写图片描述
—————————————————–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值