如何递归查找上级组织,设置组织负责人为工作流参与人原创
2人赞赏了该文章
994次浏览
编辑于2023年06月05日 09:42:29
关键词:工作流,参与人,组织
一、需求
向上查找当前组织的上级组织,并且这个组织是二级组织;
设置二级组织的负责人为工作流审核节点的参与人。
二、思路与方案
整体业务逻辑靠插件代码实现。
获取二级组织,可以使用OrgUnitServiceHelper获取一个二级组织列表,里面有全部的二级组织;
查找上级组织,可以使用OrgUnitServiceHelper递归查询上级组织;
如果向上查找的组织id,在二级组织列表集合里面存在,就找到了目标组织。
使用UserServiceHelper可以获取到组织负责人。
三、实现过程
1.工作流审核节点,配置参与人为插件
2.编写插件代码
在工作流插件的calcUserIds事件中,获取上级2级组织
@Override public List<Long> calcUserIds(AgentExecution execution) { // 入参2,表示获取上级2级组织 List<Long> mainUserForOrg = getSuperOrgManagers(2); return mainUserForOrg; }
获取上级2级组织的
private List<Long> getSuperOrgManagers (int orgIndex) { // 获取某一级组织 List<Long> levelOrg = OrgUnitServiceHelper.getOrgByLevel(OrgViewType.Admin, orgIndex,false,false); // 当前组织id long currentOrg = UserServiceHelper.getUserMainOrgId(UserServiceHelper.getCurrentUserId()); // 递归查找目标上级组织 Long superOrg = getSuperOrg(levelOrg, currentOrg); // 获取组织负责人 List<Long> mainUserForOrg = UserServiceHelper.getManagersOfOrg(superOrg); return mainUserForOrg; }
当组织id在levelOrg集合内时,退出递归,返回目标组织id。
// 递归查找 private Long getSuperOrg (List<Long> levelOrg, long currentOrg) { // 获取上级组织 Map<Long, Long> orgParentMap = OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.Admin, Collections.singletonList(currentOrg)); Long parentOrgId = orgParentMap.get(currentOrg); if (levelOrg.contains(parentOrgId)) { // 如果判断成立,表示当前获取到的上级组织属于这个级别的组织,将该上级组织返回 return parentOrgId; } else { // 递归调用,查找上上级组织 return getSuperOrg(levelOrg, parentOrgId); } }
四、效果图
如图,单据提交之后,流程走到了上级2级组织负责人进行审批。
五、开发环境版本
不限
六、参考资料
participant.zip(15.18KB)
赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0