标签:www span repo 参与 mic 处理 tar 动态 zab
一、上一篇入门学习的地址
https://www.cnblogs.com/yangk1996/p/10878449.html
二、单机演示Demo
12、使用UEL表达式动态增加流程处理人
从新创建一个流程,使其Assignee变成表达式的。然后从新创建流程。
* @Description: 启动流程实例,动态设置assignee * @date: 2019/6/23 20:28 */ public class AssigneeUel { public static void main(String[] args) { //创建ProcessEngine 对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //得到RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String,Object> map =new HashMap<String,Object>(); map.put("assignee","张三"); map.put("assignee1","李四"); map.put("assignee2","王五"); //启动流程实例,同时定义assignee的值 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday2", map); System.out.println(processEngine.getName()); } }
然后在执行流程
public class ActivitiCompleteTask { public static void main(String[] args) { //创建ProcessEngine 对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); Task task = taskService.createTaskQuery() .processDefinitionKey("holiday2") .taskAssignee("zhangsan") .singleResult(); taskService.complete(task.getId()); } }
13、流程变量
13.1什么是流程变量
流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti结合时少不了流程变量,流程变量就是 activiti 在管理工作流时根据管理需要而设置的变量。比如在请假流程流转时如果请假天数大于 3 天则由总经理审核,否则由人事直接审核,请假天数就可以设置为流程变量,在流程流转时使用。
13.2流程变量的类型
注意:如果使用的是pojo,必须实现serializable,需要生成serialVersionUID。
13.3流程变量的作用域
流程变量的作用域默认是一个流程实例(processInstance),也可以是一个execution),这三个作用域流程实例的范围最大,可以称为global变量,任一个任务和一个执行实例范围,范围没有流程实例大,称为local变量。
13.4学习使用流程变量
/**
* 请假单(zhangsan) 部门经理(lisi),总经理(wanwu) 人事(zhaoliu) * 请假实体类: * 注意POJO类型,一定要实现Serializable接口,否则在存储这个pojo时就会报异常 */ public class Holiday implements Serializable { private Integer id; private String holidayName;//申请人的名字 private Date beginDate;//开始时间 private Date endDate;//结束日期 private Float num;//请假天数 private String reason;//事由 private String type;//请假类型 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getHolidayName() { return holidayName; } public void setHolidayName(String holidayName) { this.holidayName = holidayName; } public Date getBeginDate() { return beginDate; } public void setBeginDate(Date beginDate) { this.beginDate = beginDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } public Float getNum() { return num; } public void setNum(Float num) { this.num = num; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
public static void main1(String[] args) { //1.得到ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RepositoryService对象 RepositoryService repositoryService = processEngine.getRepositoryService(); //3.部署 Deployment deploy = repositoryService.createDeployment() .addClasspathResource("diagram/holiday4.bpmn") .addClasspathResource("diagram/holiday4.png") .name("请假流程-流程变量") .deploy(); System.out.println(deploy.getId()); System.out.println(deploy.getName()); }
//启动流程实例,同时还要设置流程变量的值 // 影响的表 act_ge_bytearray,act_ru_variable public static void main(String[] args) { //1.得到ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); //3.流程定义的key String key = "myProcess_1"; Map<String ,Object> map = new HashMap<>(); Holiday holiday = new Holiday(); //定义的变量是holiday.num holiday.setNum(1F); map.put("holiday",holiday); //4.启动流程实例,并且设置流程变量的值 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, map); //5.输出实例信息 System.out.println(processInstance.getName()); System.out.println(processInstance.getProcessDefinitionId()); }
//依次执行,当部门经理审批完(lisi)会判断流程的请假天数,1天就是人事经理存档(zhaoliu) public static void main3(String[] args) { //1.得到ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService TaskService taskService = processEngine.getTaskService(); //3.查询当前用户是否有任务 String key = "myProcess_1"; Task task = taskService.createTaskQuery().processDefinitionKey(key) .taskAssignee("zhaoliu").singleResult(); //4.判断task!=null,说明当前用户有任务 if(task!=null){ taskService.complete(task.getId()); System.out.println("任务执行完毕"); } }
public static void main(String[] args) { //1.得到ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService TaskService taskService = processEngine.getTaskService(); //3.查询当前用户是否有任务 String key = "myProcess_1"; Task task = taskService.createTaskQuery().processDefinitionKey(key) .taskAssignee("zhangsan").singleResult(); //初始化一些参数 Map<String ,Object> map = new HashMap<>(); Holiday holiday = new Holiday(); holiday.setNum(5F); map.put("holiday",holiday); //4.判断task!=null,说明当前用户有任务 if(task!=null){ //完成任务时,设置流程变量的值 taskService.complete(task.getId(),map); System.out.println("任务执行完毕"); } }
public static void main(String[] args) { //1.得到ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); Holiday holiday = new Holiday(); holiday.setNum(5F); //4.通过实例id,来设置流程变量 //第一个参数:流程实例的id //第二个参数:流程变量名 //第三个变量:流程变量名,所对应的值 runtimeService.setVariable("2501","holiday",holiday); }
14、组任务
14.1什么是组任务
给任务设置多个候选人,可以从候选人中选择参与者来完成任务。
14.2组任务学习
在上面的基础上修改就OK了
//1.流程部署 public static void main(String[] args) { //1.创建ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RepositoryService实例 RepositoryService repositoryService = processEngine.getRepositoryService(); //3.进行部署 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("diagram/holiday5.bpmn") //添加bpmn资源 //这个不是必须的 // .addClasspathResource("diagram/holiday5.png") .name("请假申请单流程") .deploy(); //4.输出部署的一些信息 System.out.println(deployment.getName()); System.out.println(deployment.getId()); } //2.启动实例 public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RunService对象 RuntimeService runtimeService = processEngine.getRuntimeService(); //3.创建流程实例 流程定义的key需要知道 holiday ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1"); //4.输出实例的相关信息 System.out.println("流程定义ID"+processInstance.getProcessDefinitionId());//holiday:1:4 System.out.println("流程实例ID"+processInstance.getId());//2501 } //3.填写请假单的任务要执行完成 public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); //3.查询当前用户的任务 Task task = taskService.createTaskQuery() .processDefinitionKey("myProcess_1") .taskAssignee("xiaozhang") .singleResult(); //4.处理任务,结合当前用户任务列表的查询操作的话,任务ID:task.getId() if(task!=null){ taskService.complete(task.getId()); System.out.println("用户任务执行完毕..."); } //5.输出任务的id System.out.println(task.getId()); }
//4.查询候选用户的组任务 public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); //3.设置一些参数,流程定义的key,候选用户 String key = "myProcess_1"; String candidate_users="zhangsan"; //4.执行查询 List<Task> list = taskService.createTaskQuery() .processDefinitionKey(key) .taskCandidateUser(candidate_users)//设置候选用户 .list(); //5.输出 for(Task task :list){ System.out.println(task.getProcessInstanceId()); System.out.println(task.getId()); System.out.println(task.getName()); System.out.println(task.getAssignee());//为null,说明当前的zhangsan只是一个候选人,并不是任务的执行人 } } //抽取任务的过程就是将候选用户转化为真正任务的负责人(让任务的assignee有值) public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); //3.设置一些参数,流程定义的key,候选用户 String key = "myProcess_1"; String candidate_users="zhangsan"; //4.执行查询 Task task = taskService.createTaskQuery() .processDefinitionKey(key) .taskCandidateUser(candidate_users)//设置候选用户 .singleResult(); if(task!=null){ taskService.claim(task.getId(),candidate_users);//第一个参数任务ID,第二个参数为具体的候选用户名 System.out.println("任务拾取完毕!"); } } //6.当前的用户查询自己的任务 public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); //3.设置一些参数,流程定义的key,用户 String key = "myProcess_1"; String assignee="zhangsan"; //4.执行查询 List<Task> list = taskService.createTaskQuery() .processDefinitionKey(key) .taskAssignee(assignee) //设置任务的负责人 .list(); //5.输出 for(Task task :list){ System.out.println(task.getProcessInstanceId()); System.out.println(task.getId()); System.out.println(task.getName()); System.out.println(task.getAssignee());//任务的执行人 } } //7.当前用户完成自己的任务 public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); //3.设置一些参数,流程定义的key,用户 String key = "myProcess_1"; String assignee="zhangsan"; //4.执行查询 Task task = taskService.createTaskQuery() .processDefinitionKey(key) .taskAssignee(assignee) //设置任务的负责人 .singleResult(); //5.执行当前的任务 if(task!=null){ taskService.complete(task.getId()); System.out.println("任务执行完毕!"); } }
//步骤1-2-3-4-5 当前人不想做这个任务转交给别人 //8.任务交接,前提要保证当前用户是这个任务的负责人,这时候他才可以有权限去将任务交接给其他候选人 public static void main9(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); //3.设置一些参数,流程定义的key,用户 String key = "myProcess_1"; String assignee="zhangsan"; //4.执行查询 Task task = taskService.createTaskQuery() .processDefinitionKey(key) .taskAssignee(assignee) //设置任务的负责人 .singleResult(); //5.判断是否有这个任务 if(task!=null){ taskService.setAssignee(task.getId(),"lisi");//交接任务为lisi ,交接任务就是一个候选人拾取用户的过程 System.out.println("交接任务完成~!"); } }
public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象 TaskService taskService = processEngine.getTaskService(); // 当前待办任务 String taskId = "6004"; // 任务负责人 String userId = "zhangsan"; // 校验userId是否是taskId的负责人,如果是负责人才可以归还组任务 Task task = taskService.createTaskQuery().taskId(taskId) .taskAssignee(userId).singleResult(); if (task != null) { // 如果设置为null,归还组任务,该任务没有负责人 taskService.setAssignee(taskId, null); } }
标签:www span repo 参与 mic 处理 tar 动态 zab
原文地址:https://www.cnblogs.com/yangk1996/p/11107911.html