一、繪制流程圖頁面配置
?
1、指定固定審批角色+組織的實現
如上圖紅框部分,需要修改此處為需求對應。比如此時紅框不支持指定某個部門下的指定角色這種組合判斷的審批人。則需要修改頁面變成選完角色同時也選擇上部門統一生成一個group標識。
修改完后,生成類似 ROLE001DEPT130000 的group標識。
在xml中設置 CandidateGroup時,設置為固定值就可以。
2、指定審批人為發起人所在部門的指定角色
此時,用方式1顯然不支持,因為發起人是變化的,dept也會跟著變,只能在發起審批流程時讀取到傳入發起人信息后進行設置。
在xml中設置 CandidateGroup時,需要指定為可變參數,類似下圖這種
?設置這個參數有幾種方式:
2.1直接基于框架進行表單設置
?
?2.2 在后端代碼中發起流程這個步驟時,通過setVariable()的方式設置deptId這個參數
二、流程查詢時找到對應審批人
我們設置好對應審批人后,還需要在該查到的時候查到,比如 有一個部門d1,里面有 張三-員工 李四-部門領導 兩個人。張三發起了一個審批,審批人設置的是本部門領導角色。此時,在李四登錄時應該在待辦列表里看到這條審批。
查詢這塊包含了發起中所有情況,因為查的時候要遵循寧可把可能的群組都查,也不能漏掉。
直接上代碼吧:
// 定義的一些標識
public class TaskConstants {/*** 流程發起人*/public static final String PROCESS_INITIATOR = "initiator";/*** 角色候選組前綴*/public static final String ROLE_GROUP_PREFIX = "ROLE";/*** 部門候選組前綴*/public static final String DEPT_GROUP_PREFIX = "DEPT";/*** 分割符*/public static final String SPLIT = "-";
}
/*** 獲取用戶組信息,包含了當前所有組合:role、dept、role+dept作為群組** @return candidateGroup*/public static List<String> getCandidateGroup() {List<String> list = new ArrayList<>();
// 獲取當前登錄人信息,不同框架有不同的獲取方法,適當修改LoginUser user = LoginHelper.getLoginUser();if (ObjectUtil.isNotNull(user)) {if (ObjectUtil.isNotEmpty(user.getRoles())) {user.getRoles().forEach(role -> {list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId());list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId() + TaskConstants.SPLIT+ TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId());});}if (ObjectUtil.isNotNull(user.getDeptId())) {list.add(TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId());}}return list;}
// 查詢待辦事項列表
TaskQuery taskQuery = taskService.createTaskQuery().active().includeProcessVariables().taskCandidateOrAssigned(TaskUtils.getUserId()).taskCandidateGroupIn(TaskUtils.getCandidateGroup()).orderByTaskCreateTime().desc();