Activiti7-网关-包含网关

Myth丶恋晨 2024-03-30 10:33 184阅读 0赞

0f1023fb3c7e47b7aa450df7fd5a00ed.png

d7329810c7b0438cb92f144fbaf4294c.png

3e98438d30944430b364f7cb78568d70.png

设计的流程是:

大于三天是部门经理和人事经理审批,

小于三天是部门总监和人事经理审批。

cc0263371b414d39b8d315a1708e7926.png

e4e6a520495f48348a9edceced2b7c32.png

31f58166ed5747e681f27dd712512b91.png

f9fd74ee96b14bc7ae757af38ee353b5.png

387d4874339f458a90199a5981c44edd.png

张三发起请假申请:

cd5c2e85f9e2437887402a90410c0f31.png

查询任务:由于设置的是4天,所以是部门经理和人事经理审批

43e2a08adbe345c084878b192143d70f.png

部门经理审批:

b1ee5ab532684bfc84b1d20d1eb0efb0.png

查询任务:

8f06e302c32c42a88ecb8fbd6a78507f.png

人事经理审批:

10d17c5741a54ff9800e06f77480b418.png

查询任务:

a17d7b1160eb483b8c3485f98e77aa4f.png

由于连线设置了大于3天,总经理审批

1c8a8aeb59e24b71bc327ec9954073e3.png

所以周总经理审批:

bcc3737409bf47aabb58296694bf26c9.png

查询任务:没有任务,流程结束了

e5f4c3e66f184b6bb43d6da398275c0a.png

代码参考:

  1. package com.nanjing;
  2. import com.nanjing.pojo.Evection;
  3. import org.activiti.engine.*;
  4. import org.activiti.engine.repository.Deployment;
  5. import org.activiti.engine.runtime.ProcessInstance;
  6. import org.activiti.engine.task.Task;
  7. import org.junit.Test;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. public class ActivitiGatewayInclusive {
  12. /**
  13. * 部署流程定义
  14. */
  15. @Test
  16. public void testDeployment(){
  17. // 1、创建ProcessEngine
  18. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  19. // 2、得到RepositoryService实例
  20. RepositoryService repositoryService = processEngine.getRepositoryService();
  21. // 3、使用RepositoryService进行部署
  22. Deployment deployment = repositoryService.createDeployment()
  23. .addClasspathResource("leave15.bpmn20.xml") // 添加bpmn资源
  24. // .addClasspathResource("bpmn/evection.png") // 添加png资源
  25. .name("出差申请流程-包含网关")
  26. .deploy();
  27. // 4、输出部署信息
  28. System.out.println("流程部署id:" + deployment.getId());
  29. System.out.println("流程部署名称:" + deployment.getName());
  30. }
  31. /**
  32. * 启动流程实例,设置流程变量的值
  33. */
  34. @Test
  35. public void startProcess(){
  36. // 获取流程引擎
  37. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  38. // 获取RunTimeService
  39. RuntimeService runtimeService = processEngine.getRuntimeService();
  40. // 流程定义key
  41. String key = "myEvection15";
  42. // 创建变量集合
  43. Map<String, Object> map = new HashMap<>();
  44. // 创建出差pojo对象
  45. Evection evection = new Evection();
  46. // 设置出差天数
  47. evection.setNum(4d);
  48. // 定义流程变量,把出差pojo对象放入map
  49. map.put("evection",evection);
  50. map.put("assignee0","张三");
  51. map.put("assignee1","刘经理");
  52. map.put("assignee11","王总监");
  53. map.put("assignee12","人事经理");
  54. map.put("assignee2","周总经理");
  55. // 启动流程实例,并设置流程变量的值(把map传入)
  56. ProcessInstance processInstance = runtimeService
  57. .startProcessInstanceByKey(key, map);
  58. // 输出
  59. System.out.println("流程实例名称="+processInstance.getName());
  60. System.out.println("流程定义id=="+processInstance.getProcessDefinitionId());
  61. }
  62. @Test
  63. public void completTask(){
  64. // 流程定义的Key
  65. String key = "myEvection15";
  66. // 任务负责人
  67. String assingee = "周总经理";
  68. // 获取流程引擎
  69. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  70. // 获取taskservice
  71. TaskService taskService = processEngine.getTaskService();
  72. // 查询任务
  73. Task task = taskService.createTaskQuery()
  74. .processDefinitionKey(key)
  75. .taskAssignee(assingee)
  76. .singleResult();
  77. if(task != null){
  78. // 根据任务id来 完成任务
  79. taskService.complete(task.getId());
  80. }
  81. }
  82. @Test
  83. public void queryTask(){
  84. // 流程定义的Key
  85. String key = "myEvection15";
  86. // 任务负责人
  87. //String assingee = "周总经理";
  88. // 获取流程引擎
  89. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  90. // 获取taskservice
  91. TaskService taskService = processEngine.getTaskService();
  92. // 查询任务
  93. final List<Task> tasks = taskService.createTaskQuery()
  94. .processDefinitionKey(key)
  95. // .taskAssignee(assingee)
  96. .list();
  97. for(Task task:tasks){
  98. // 根据任务id来 完成任务
  99. System.out.println(task.getId());
  100. System.out.println(task.getName());
  101. System.out.println(task.getAssignee());
  102. }
  103. }
  104. }

发表评论

表情:
评论列表 (有 0 条评论,184人围观)

还没有评论,来说两句吧...

相关阅读

    相关 activity使用

    什么是网关 网关用来控制流程的流向,简而言之,当流程实例在运转过程中,从一个节点跳转到下一个节点时,需要人为的控制某些条件,即只有满足这些条件的时候才会触发节点的跳转时,

    相关 activiti7

    工作流 —activiti7网关 1. 排他网关     排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。    当流程执行到这个网关,

    相关 Activiti排他

    执行到该网关,根据条件只能走一条执行线路; ![Center][] 根据请假天数,来具体让谁来审批, 请假天数小于3天,项目组长审批; 请假天数小于7天,大于等于