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