1. 候选人
(1)流程图
候选人设置方式:
直接指定
通过表达式设置(当不清楚具体是谁来审批时)
(2)部署和启动流程
package com.sw.camundademo;
import org.camunda.bpm.engine.*;
import org.camunda.bpm.engine.repository.Deployment;
import org.camunda.bpm.engine.task.IdentityLink;
import org.camunda.bpm.engine.task.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author Suaxi
* @Date 2024/7/8 21:52
* @Description
*/
@SpringBootTest
public class FlowCandidateTest {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Test
public void deploy() {
Deployment deploy = repositoryService.createDeployment()
.name("财务审批-候选人")
.addClasspathResource("flow/07.财务审批-候选人.bpmn")
.deploy();
System.out.println(deploy.getId());
}
@Test
public void startProcess() {
String processId = "Process_1su8y7i:1:7f77bcb5-3d31-11ef-933e-a8a1592cf182";
runtimeService.startProcessInstanceById(processId);
}
}
(3)拾取任务
在候选人流程中,组要通过拾取行为把候选人转换为处理人
通过GUI操作
- 通过API操作
/**
* 查询当前登录用户可拾取的任务
*/
@Test
public void getUserCandidateUserTask() {
List<Task> currentUserTaskList = taskService.createTaskQuery()
.taskCandidateUser("admin")
.list();
if (currentUserTaskList != null && currentUserTaskList.size() > 0) {
for (Task task : currentUserTaskList) {
System.out.println("task.getId() = " + task.getId());
System.out.println("task.getName() = " + task.getName());
System.out.println("====================================");
}
} else {
System.out.println("当前登录用户没有可候选的task");
}
}
@Test
public void claimTask() {
Task task = taskService.createTaskQuery()
.taskCandidateUser("admin")
.singleResult();
if (task != null) {
taskService.claim(task.getId(), "admin");
}
}
注:已经拾取过的任务不能被其他候选人强行拾取,且拾取后其他候选人查不到该任务
(4)归还任务
拾取后的任务如果因为一些原因不想/不能操作,可以归还
通过GUI操作
通过API操作
@Test public void unClaimTak() { Task task = taskService.createTaskQuery() .taskAssignee("admin") .singleResult(); if (task != null) { //只需把任务处理人设置为空即可 taskService.claim(task.getId(), null); } else { System.out.println("没有需要归还的任务!"); } }
(5)交接任务
拾取后的任务如果不想处理也不想归还,则可以交接/指派给其他用户处理
@Test
public void setAssignee() {
Task task = taskService.createTaskQuery()
.taskAssignee("admin")
.singleResult();
if (task != null) {
taskService.setAssignee(task.getId(), "zhangsan");
System.out.println("任务交接/指派给了zhangsan!");
} else {
System.out.println("未查询到待处理的任务!");
}
}
(6)完成任务
@Test
public void completeTask() {
String taskId = "a50080d7-3d31-11ef-a0f6-a8a1592cf182";
//当前流程的下一个节点需要通过表达式设置候选人,此处需要设置候选人变量
Map<String, Object> map = new HashMap<>(2);
map.put("user1", "admin");
map.put("user2", "lisi");
taskService.complete(taskId, map);
}
2. 候选人组
(1)用户管理
package com.sw.camundademo;
import org.camunda.bpm.engine.IdentityService;
import org.camunda.bpm.engine.identity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @Author Suaxi
* @Date 2024/7/9 21:54
* @Description
*/
@SpringBootTest
public class FlowCandidateGroupTest {
@Autowired
private IdentityService identityService;
/**
* 创建用户
*/
@Test
public void createUser() {
User user = identityService.newUser("zhangsan");
user.setPassword("123456");
user.setEmail("zhangsan@qq.com");
user.setFirstName("zhang");
user.setLastName("san");
identityService.saveUser(user);
}
/**
* 删除用户
*/
@Test
public void deleteUser() {
identityService.deleteUser("zhangsan");
}
/**
* 更新用户
*/
@Test
public void updateUser() {
User user = identityService.createUserQuery().userId("zhangsan").singleResult();
user.setLastName("777");
//saveUser包含保存和更新的操作
identityService.saveUser(user);
}
}
(2)Group管理
/**
* 创建组
*/
@Test
public void createGroup() {
Group group = identityService.newGroup("userGroup");
group.setName("用户组");
group.setType("user");
identityService.saveGroup(group);
}
/**
* 更新组
*/
@Test
public void updateGroup() {
Group group = identityService.createGroupQuery().groupId("userGroup").singleResult();
group.setName("用户组");
group.setType("USER");
identityService.saveGroup(group);
}
/**
* 删除组
*/
@Test
public void deleteGroup() {
identityService.deleteGroup("userGroup");
}
(3)用户、组关联关系管理
/**
* 建立 user 和 group 的关联关系
*/
@Test
public void createMemberShip() {
identityService.createMembership("zhangsan", "userGroup");
}
/**
* 更新 user 和 group 的关联关系
*/
@Test
public void updateMemberShip() {
//camunda未提供直接更新memberShip的api,此处采用先删除再插入的方法
identityService.deleteMembership("zhangsan", "userGroup");
identityService.createMembership("zhangsan", "userGroup1");
}
(4)应用
流程图
测试
@Test
public void deploy() {
Deployment deploy = repositoryService.createDeployment()
.name("财务审批-候选人组")
.addClasspathResource("flow/08.财务审批-候选人组.bpmn")
.deploy();
System.out.println(deploy.getId());
}
@Test
public void startProcess() {
String processId = "Process_10u33as:1:2cc72548-3e02-11ef-b682-a8a1592cf182";
Map<String, Object> variables = new HashMap<>();
variables.put("group1", "userGroup1");
runtimeService.startProcessInstanceById(processId, variables);
}
@Test
public void queryCandidateGroupTask() {
String processDefinitionId = "Process_10u33as:1:2cc72548-3e02-11ef-b682-a8a1592cf182";
//根据当前登录用户查询对应的group
List<Group> groupList = identityService.createGroupQuery().groupMember("zhangsan").list();
if (groupList != null && groupList.size() > 0) {
for (Group group : groupList) {
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionId(processDefinitionId)
.taskCandidateGroup(group.getId())
.list();
if (taskList != null && taskList.size() > 0) {
for (Task task : taskList) {
System.out.println("task.getName() = " + task.getName());
}
} else {
System.out.println("未查询到待审批的任务!");
}
}
}
}
@Test
public void claimTask() {
String processDefinitionId = "Process_10u33as:1:2cc72548-3e02-11ef-b682-a8a1592cf182";
//根据当前登录用户查询对应的group
List<Group> groupList = identityService.createGroupQuery().groupMember("zhangsan").list();
if (groupList != null && groupList.size() > 0) {
for (Group group : groupList) {
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionId(processDefinitionId)
.taskCandidateGroup(group.getId())
.list();
if (taskList != null && taskList.size() > 0) {
for (Task task : taskList) {
taskService.claim(task.getId(), "zhangsan");
}
} else {
System.out.println("未查询到待审批的任务!");
}
}
}
}
评论 (0)