package jnpf.permission.util; import jnpf.permission.entity.OrganizeEntity; import jnpf.permission.service.OrganizeService; import jnpf.util.StringUtil; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * 类功能 * * @author JNPF开发平台组 YanYu * @version V3.2.0 * @copyright 引迈信息技术有限公司 * @date 2022/1/27 */ public class PermissionUtil { PermissionUtil() { } /** * 递归取组织结构id * * @param organizeInfo 组织信息集合 * @param organizeId 组织id * @param infoType 信息类型 1:id 2:fullName */ private static LinkedList getOrganizeInfos(LinkedList organizeInfo, String organizeId, Integer infoType, OrganizeService organizeService) { OrganizeEntity infoEntity = organizeService.getInfo(organizeId); if (infoEntity != null) { organizeInfo.add(infoType.equals(1) ? organizeId : infoEntity.getFullName()); // -1 为顶级节点 if (!"-1".equals(infoEntity.getParentId())) { getOrganizeInfos(organizeInfo, infoEntity.getParentId(), infoType, organizeService); } else { // 结束时,进行倒序排列 Collections.reverse(organizeInfo); } } return organizeInfo; } public static List> getOrgIdsTree(List organizeIds, Integer infoType, OrganizeService organizeService) { List> organizeIdsTree = new ArrayList<>(); organizeIds.forEach(id -> organizeIdsTree.add(getOrganizeInfos(new LinkedList<>(), id, infoType, organizeService))); return organizeIdsTree; } /** * 获取组名连接信息 * * @param organizeIds 组织id集合 * @return 组织链式信息 */ public static String getLinkInfoByOrgId(List organizeIds, OrganizeService organizeService) { StringBuilder organizeInfoVo = new StringBuilder(); for (String id : organizeIds) { if (id != null) { StringBuilder organizeInfo = new StringBuilder(); for (String name : getOrganizeInfos(new LinkedList<>(), id, 2, organizeService)) { organizeInfo.append(name).append("/"); } // 去除最后一个斜杠 if (organizeInfo.length() > 0) { organizeInfo = new StringBuilder(organizeInfo.substring(0, organizeInfo.length() - 1)); } organizeInfo.append(","); organizeInfoVo.append(organizeInfo); } } return organizeInfoVo.toString(); } /** * 获取组名连接信息 * * @param organizeId 组织id * @return 组织链式信息 */ public static String getLinkInfoByOrgId(String organizeId, OrganizeService organizeService) { return getLinkInfoByOrgId(Collections.singletonList(organizeId), organizeService); } /** * 去掉尾部的封号 */ public static String getLinkInfoByOrgId(String organizeId, OrganizeService organizeService, boolean separateFlag) { String linkInfo = getLinkInfoByOrgId(organizeId, organizeService); if (StringUtil.isEmpty(linkInfo)) { return linkInfo; } if (!separateFlag) { linkInfo = linkInfo.substring(0, linkInfo.length() - 1); } return linkInfo; } }