From 9d92bb1d5698690bfd06fb93c668d9ae73300426 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期五, 13 十二月 2024 13:05:09 +0800 Subject: [PATCH] 添加按钮权限查询接口。 修改UI页面定义的属性字段。 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 156 insertions(+), 11 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java index dc8ea53..9de09f6 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java @@ -150,6 +150,155 @@ } /** + * 鏍规嵁鐢ㄦ埛杩斿洖鎵�鏈夎彍鍗曚笅鐨勬寜閽紙鏍戝舰缁撴瀯锛� + * + * @param treeQueryObject + * @return + */ + @Override + public List<MenuVO> buttons(TreeQueryObject treeQueryObject) { + //1銆佸厛鏍规嵁session鍒ゆ柇褰撳墠鐢ㄦ埛绫诲瀷 + SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException(); + boolean adminOrDeveloperOrRoot = rightControlUtil.isAdminOrDeveloperOrRoot(sessionInfo.getUserId()); + String parentId; + //2銆佹牴鎹笉鍚岀敤鎴疯繑鍥炰笉鍚岀殑鑺傜偣涓嬬殑鑿滃崟鍜屾寜閽� + if (adminOrDeveloperOrRoot) { + //绯荤粺鑿滃崟 + parentId = SYSTEMMANAGMENTNODE; + } else if (rightControlUtil.isThreeAdminCurUser()) { + //涓夊憳杩斿洖绠$悊鍔熻兘妯″潡鐩稿叧鐨勮彍鍗� + parentId = SYSTEMMANAGMENTNODE; + } else { + // 鏅�氱敤鎴峰彧杩斿洖涓氬姟鍔熻兘妯″潡鐩稿叧鐨勮彍鍗曪紝 + // 浣嗗彲鑳藉瓨鍦ㄦ櫘閫氱敤鎴峰垎閰嶇郴缁熷姛鑳界殑鑿滃崟鍜屾寜閽潈闄愶紝涓嶈繃闇�瑕� + // 鍐嶄笟鍔″姛鑳芥ā鍧椾笅鍒涘缓瀵瑰簲鐨勭鐞嗗姛鑳芥ā鍧楃殑鑿滃崟骞惰繘琛屾巿鏉冦�� + parentId = ROOT_MENU_ID; + } + RoleRightInfo[] userRoleRights = rightControlUtil.getRoleRightByUserName(sessionInfo.getUserId()); + //3銆佹牴鎹鑹叉煡璇㈠嚭瀵瑰簲鐨勭埗鑺傜偣涓嬬殑鎵�鏈夌殑鑿滃崟锛岀劧鍚庡啀鑾峰彇鑿滃崟涓嬬殑鎵�鏈夋寜閽� + //List<FunctionInfo> menuList = rightControlUtil.getMenusByPIdAndPermission(parentId, sessionInfo.getUserId(),userRoleRights); + Map<String, List<FunctionInfo>> map = rightControlUtil.getAllChildrenFunctionsByUserName( + parentId, sessionInfo.getUserId(), userRoleRights); + List<MenuVO> functionVOList = new ArrayList<>(); + //4銆佸厛鑾峰彇parentid瀵瑰簲鐨勮彍鍗曪紝鍐嶈幏鍙栨瘡涓�灞傚瓙鑺傜偣锛屽悓鏃惰繃婊ゆ帀鎸夐挳鏈惎鐢ㄧ殑鍔熻兘妯″潡 + for (FunctionInfo menu : map.get(parentId)) { + if(!menu.isValid){ + continue; + } + MenuVO functionVO = new MenuVO(); + functionVO.setId(menu.id); + functionVO.setSource(menu.image); + functionVO.setPath(menu.resourceB); + functionVO.setParentId(menu.parentId); + functionVO.setCode(menu.aliasName); + functionVO.setAlias(menu.aliasName); + functionVO.setName(menu.name); + functionVO.setFunctionType(menu.functionType); + functionVO.setIsValid(menu.isValid); + functionVO.getMeta().put("keepAlive",false); + functionVO.setSort((int) menu.seq); + try { + functionVO.setChildren(findChildFunctionVO(menu.id, map)); + } catch (PLException e) { + e.printStackTrace(); + String errorMsg = "鑿滃崟鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e); + logger.error(errorMsg); + throw new VciBaseException(errorMsg); + } + if(functionVO.getChildren().size() > 0){ + functionVO.setHasChildren(true); + }else { + functionVO.setHasChildren(false); + } + functionVOList.add(functionVO); + } + //6銆佽繃婊ゅ嚭瀹為檯鐨勮彍鍗曡妭鐐� + List<MenuVO> menuVOList = new ArrayList<>(); + recursionFunction(functionVOList,menuVOList); + // 5銆佸鐞嗘瘡涓�涓彍鍗曚笅闇�瑕佽繑鍥炵殑鎸夐挳 + menuVOList.stream().forEach(menuVO -> { + try { + //6銆佽幏鍙栧綋鍓嶈彍鍗曚笅鐨勬寜閽� + Map<String, Long> authMap = Arrays.stream(userRoleRights).collect(Collectors.toMap(e -> e.funcId, e -> e.rightValue, + (existing, replacement) -> existing)); + menuVO.setChildren(getButtonsByAuth(menuVO.getId(),adminOrDeveloperOrRoot,authMap)); + } catch (PLException e) { + e.printStackTrace(); + String errorMsg = "鎸夐挳鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e); + logger.error(errorMsg); + throw new VciBaseException(errorMsg); + } + }); + return menuVOList; + } + + /** + * 杩囨护鍑鸿彍鍗曞彧杩斿洖鑿滃崟鑺傜偣 + * @param sourceList + * @param targetList + */ + private static void recursionFunction(List<MenuVO> sourceList, List<MenuVO> targetList) { + for (MenuVO menu : sourceList) { + // 妫�鏌unctionType鏄惁涓�0 + if (menu.getFunctionType() == 0) { + targetList.add(menu); + } + // 閫掑綊澶勭悊children + recursionFunction(menu.getChildren(), targetList); + } + } + + /** + * 鏍规嵁鑿滃崟涓婚敭鍜岃鑹叉潈闄愯幏鍙栧叾涓嬬殑鎸夐挳 + * @param parentOid + * @return + * @throws PLException + */ + private List<MenuVO> getButtonsByAuth(String parentOid,boolean adminOrDeveloperOrRoot,Map<String, Long> authMap) throws PLException { + List<MenuVO> buttonList = new ArrayList<>(); + if(Func.isBlank(parentOid)){ + return buttonList; + } + FuncOperationInfo[] funcOperates = platformClientUtil.getFrameworkService().getFuncOperationByModule(parentOid, "", true); + List<FuncOperationInfo> funcOperationList = new ArrayList<>(); + if(!adminOrDeveloperOrRoot){ + for (int i = 0; i < funcOperates.length; i++) { + if(authMap.containsKey(funcOperates[i].funcId)){ + long rightValue = authMap.get(funcOperates[i].funcId); + long nodeValue = funcOperates[i].number; + long preValue = (rightValue >> nodeValue) & 1; + //杩涜浣嶄笌鎿嶄綔锛屽鏋滅浉绛夊垯琛ㄧず鍏锋湁褰撳墠鎿嶄綔鐨勬潈闄� + if (preValue == 1) { + funcOperationList.add(funcOperates[i]); + } + } + } + }else{ + funcOperationList = Arrays.asList(funcOperates); + } + if(Func.isNotEmpty(funcOperationList)){ + for(FuncOperationInfo info: funcOperationList){ + MenuVO menuVO = new MenuVO(); + menuVO.setChildType(0); + menuVO.setId(info.id); + menuVO.setFuncId(info.funcId); + menuVO.setCode(info.operIndentify); + menuVO.setOperId(info.operId); + menuVO.setName(info.operName); + menuVO.setAlias(info.operAlias); + menuVO.setRemark(info.operDesc); + menuVO.setSort((int) info.number); + menuVO.setIsValid(info.isValid); + menuVO.setHasChildren(false); + menuVO.setCategory(1); + menuVO.setFunctionType(2); + buttonList.add(menuVO); + } + } + return buttonList; + } + + /** * 鍘熷钩鍙板姛鑳借浆鎹负鏂板钩鍙扮殑鍔熻兘 * @param functionForPlatform1List 鍘熷钩鍙板姛鑳藉璞″垪琛� * @return 鏂板钩鍙板姛鑳藉璞� @@ -281,7 +430,7 @@ } functionVOList.add(functionVO); } - //濡傛灉鏄紑鍙戞垨鑰呮祴璇曠敤鎴凤紝闇�鍝熻幏鍙栫郴缁熸ā鍧楅厤缃彍鍗� + //濡傛灉鏄紑鍙戞垨鑰呮祴璇曠敤鎴凤紝闇�瑕佽幏鍙栫郴缁熸ā鍧楅厤缃彍鍗� if(adminOrDeveloperOrRoot){ //鑾峰彇棣栭〉绯荤粺妯″潡閰嶇疆鑿滃崟 MenuVO menuVO = JsonConfigReader.getSysModuleConf().getSysModuleNode(); @@ -315,7 +464,7 @@ if(childType == 2){ try{ FuncOperationInfo[] infos = platformClientUtil.getFrameworkService().getFuncOperationByModule(parentId, "", false); - if(Func.isNotEmpty(infos.length)){ + if(Func.isNotEmpty(infos)){ childType = this.checkChildObject(infos[0].id); //閮芥槸鍚屼竴灞傛墍浠ュ彇绗竴涓嵆鍙煡璇㈡槸浠�涔堢被鍨� for(int i = 0;i < infos.length ;i++){ FuncOperationInfo info = infos[i]; @@ -333,7 +482,7 @@ menuVO.setIsValid(info.isValid); menuVO.setHasChildren(false); menuVO.setCategory(1); - menuVO.setFunctionType(2); + menuVO.setFunctionType(3); menuVOList.add(menuVO); } } @@ -436,8 +585,7 @@ * @param funcInfo * @return */ - private MenuVO functionInfoToMenuVO(FunctionInfo funcInfo) - { + private MenuVO functionInfoToMenuVO(FunctionInfo funcInfo) { MenuVO menuVO = new MenuVO(); menuVO.setId(funcInfo.id); menuVO.setIsValid(funcInfo.isValid); @@ -493,9 +641,7 @@ functionVO.setId(menu.id); functionVO.setSource(menu.image); functionVO.setFunctionType(menu.functionType); -// if(StringUtils.isBlank(menu.resourceB) ){ -// continue; -// } + functionVO.setIsValid(menu.isValid); functionVO.setPath(menu.resourceB); functionVO.setCode(menu.aliasName); functionVO.setAlias(menu.aliasName); @@ -600,7 +746,7 @@ List<String> authList = new ArrayList<>(); for (FunctionInfo functionInfo : moduleListByParentId) { if(authMap.containsKey(functionInfo.id)){ -// authList.add(functionInfo.id); + // authList.add(functionInfo.id); getChildAuthNode(functionInfo, authMap, authList); } } @@ -1090,7 +1236,6 @@ } - /** * 閫氳繃妯″潡ID鑾峰彇瀛愮骇鍒楄〃 * @param isAll 鏄惁鍖呮嫭鏃犳晥鐨勬ā鍧楋紝true鍒欏寘鎷� @@ -1136,7 +1281,6 @@ return functionVOList; } - /** * 閫氳繃妯″潡ID鑾峰彇瀛愮骇鍒楄〃 * @param parentId @@ -1149,4 +1293,5 @@ funcInfos = platformClientUtil.getFrameworkService().getModuleListByParentId(parentId, isAll); return funcInfos; } + } -- Gitblit v1.9.3