From a899eae792897cb014b9291562f32f5786cfb1f4 Mon Sep 17 00:00:00 2001
From: yuxc <yuxc@vci-tech.com>
Date: 星期四, 16 一月 2025 15:51:13 +0800
Subject: [PATCH] UI授权后,由于一个用户拥有多个角色问题,没有权限的角色可能会把有权限的角色数据替换,进行修改

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java |   88 ++++++++++++++++++++-----------------------
 1 files changed, 41 insertions(+), 47 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
index 15dda69..e6b6c33 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -1,7 +1,5 @@
 package com.vci.web.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.vci.common.utility.ObjectUtility;
 import com.vci.corba.common.PLException;
 import com.vci.corba.common.data.UserEntityInfo;
@@ -19,39 +17,35 @@
 import com.vci.starter.poi.util.ExcelUtil;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.*;
-import com.vci.starter.web.pagemodel.BaseQueryObject;
-import com.vci.starter.web.pagemodel.BaseResult;
-import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.pagemodel.SessionInfo;
-import com.vci.starter.web.util.*;
 import com.vci.starter.web.redis.RedisService;
+import com.vci.starter.web.util.*;
+import com.vci.starter.web.util.Lcm.BeanUtil;
+import com.vci.starter.web.util.Lcm.CollectionUtil;
+import com.vci.starter.web.util.Lcm.Func;
 import com.vci.web.service.OsBtmServiceI;
 import com.vci.web.service.UIManagerServiceI;
-import com.vci.web.util.*;
-import com.vci.web.util.BeanUtil;
-import com.vci.web.utility.UIDataFetcher;
-import org.apache.commons.lang3.StringUtils;
-import com.vci.web.util.Func;
 import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.RightControlUtil;
 import com.vci.web.util.UITools;
+import com.vci.web.utility.UIDataFetcher;
 import lombok.AllArgsConstructor;
 import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
-import javax.swing.tree.TreePath;
 import java.io.File;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
 import java.util.regex.Pattern;
-import java.util.stream.Stream;
+import java.util.stream.Collectors;
 
 /**
- * UI瀹氫箟鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛
+ * UI瀹氫箟绠$悊鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛
  * @author ludc
  * @date 2024/8/28 17:05
  */
@@ -849,15 +843,17 @@
     }
 
     /**
-     * 鏍规嵁涓婁笅鏂嘔D鍜屽尯鍩熺被鍨嬶紝鎸夐『搴忚幏鍙栧綋鍓嶅尯鍩熺殑tab椤�
+     * 鏍规嵁涓婁笅鏂嘔D鍜屽尯鍩燂紙椤电锛夌被鍨嬶紝鎸夐『搴忚幏鍙栧綋鍓嶅尯鍩熺殑tab椤�
      */
     @Override
     public DataGrid getTabByContextIdAndType(String contextId, int areaType) throws PLException {
         VciBaseUtil.alertNotNull(contextId,"涓婁笅鏂囦富閿�",areaType,"鍖哄煙绫诲瀷");
         PLTabPage[] plTabPages = platformClientUtil.getUIService().getTabPagesByContextIdAndType(contextId, (short) areaType);
+        List<PLTabPage> tabPageList = Arrays.stream(plTabPages).sorted(((o1, o2) -> Math.toIntExact(o1.plSeq - o2.plSeq)))
+                .collect(Collectors.toList());
         DataGrid dataGrid = new DataGrid();
         dataGrid.setTotal(plTabPages.length);
-        dataGrid.setData(Arrays.asList(plTabPages));
+        dataGrid.setData(tabPageList);
         return dataGrid;
     }
 
@@ -880,7 +876,7 @@
     }
 
     /**
-     * 淇敼鍖哄煙鏁版嵁
+     * 淇敼鍖哄煙锛堥〉绛撅級鏁版嵁
      * @param plTabPage
      * @return
      */
@@ -897,7 +893,7 @@
     }
 
     /**
-     * 鍒犻櫎鍖哄煙鏁版嵁
+     * 鍒犻櫎鍖哄煙锛堥〉绛撅級鏁版嵁
      * @param oids
      * @return
      */
@@ -1700,12 +1696,9 @@
         String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type");
         String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context");
         boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox"));
-        Map<String,RoleRightVO> roleRightVOMap = new HashMap<>();
+        Map<String, List<RoleRightVO>> roleRightVOMap = new HashMap<>();
         if(StringUtils.isNotBlank(roleId)){
-            String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
-            RoleRightInfo[] rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName);
-            List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos));
-            roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue));
+            roleRightVOMap = this.getRoleRightMap(roleId);
         }
         BizType[] bizTypes = osBtmServiceI.getBizTypes(type);
         List<Tree> treeList=new ArrayList<>();
@@ -1715,7 +1708,6 @@
         rootNode.setExpanded(true);
         List<Tree> childList=new ArrayList<>();
 
-        //long startTime = System.currentTimeMillis();
         uiDataFetcher = new UIDataFetcher();
         for (int i = 0; i < bizTypes.length; i++) {
             Tree bizTypeTree = new Tree(bizTypes[i].oid,bizTypes[i].name,bizTypes[i]);//(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]);
@@ -1724,18 +1716,12 @@
             bizTypeTree.setParentId(rootNode.getOid());
             bizTypeTree.setParentName(rootNode.getText());
             bizTypeTree.setParentBtmName(bizTypes[i].name);
-            //long startTime1 = System.currentTimeMillis();
             List<PLUILayout> contextList = uiDataFetcher.getContext(bizTypes[i].name/*+context*/);
-            //long endTime1 = System.currentTimeMillis();
-            //System.out.println("============================================鑾峰彇UI瀹氫箟鏁版嵁寮曟搸鑰楁椂锛�"+((endTime1-startTime1)/1000)+"s");
-
             List<Tree> btmChildList = new ArrayList<>();
             btmChildList.add(bizTypeTree);
             setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox);
             childList.add(bizTypeTree);
         }
-        //long endTime = System.currentTimeMillis();
-        //System.out.println("============================================UI瀹氫箟鏍戣绠楀畬姣曡�楁椂锛�"+((endTime-startTime)/1000)+"s");
         rootNode.setChildren(childList);
         treeList.add(rootNode);
         return treeList;
@@ -1743,21 +1729,27 @@
 
     /**
      * 鏍规嵁瑙掕壊涓婚敭鑾峰彇宸叉巿鏉冪殑淇℃伅
-     * @param roleId
+     * @param roleId 濡傛灉roleId涓嶄紶锛屽氨浼氳幏鍙栧綋鍓嶇櫥褰曠殑鐢ㄦ埛鐨勫悕绉版煡璇㈡潈闄�
      * @return
      * @throws PLException
      */
-    /*    @Override
-        public Map<String,RoleRightVO> getRightListByRoleId(String roleId) throws PLException {
-            VciBaseUtil.alertNotNull(roleId,"鏌ヨ鏉′欢瑙掕壊涓婚敭");
-            String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
-            RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName);
-            List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos));
-            Map<String,RoleRightVO> roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue));
-            return roleRightVOMap;
-        }*/
+    @Override
+    public Map<String, List<RoleRightVO>> getRoleRightMap(String roleId) throws PLException {
+        RoleRightInfo[] rightInfos = null;
+        String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
+        if(Func.isBlank(roleId)){
+            rightInfos = platformClientUtil.getFrameworkService().getRoleRightByUserName(userName);
+        }else{
+            rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName);
+        }
+        List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos));
+        //鍒嗙粍鎿嶄綔
+        Map<String, List<RoleRightVO>> roleRightVOMap = roleRightVOList.stream().collect(Collectors.groupingBy(RoleRightVO::getFuncId,
+                Collectors.mapping(e ->e, Collectors.toList())));
+        return roleRightVOMap;
+    }
 
-    /***
+    /**
      * UI鎺堟潈
      * @param uiAuthorDTO
      * @return
@@ -1766,7 +1758,7 @@
     @Override
     public boolean authorizedUI(UIAuthorDTO uiAuthorDTO) throws Exception {
         boolean res=false;
-        if(uiAuthorDTO==null||CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){
+        if(uiAuthorDTO==null|| CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){
             throw  new VciBaseException("璇烽�夋嫨鑺傜偣杩涜鎺堟潈!");
         }
         BaseQueryObject treeQueryObject=new BaseQueryObject();
@@ -2155,7 +2147,7 @@
      * @param contextList
      * @param isShowCheckBox
      */
-    private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap, boolean isShowCheckBox){
+    private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String, List<RoleRightVO>> roleRightVOMap, boolean isShowCheckBox){
         Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> {
             Object funcObj = pTree.getData();
             List<Tree> chiledTreeList = new ArrayList<>();
@@ -2234,8 +2226,8 @@
                 PLTabButton plTabButton = (PLTabButton) funcObj;
                 String id = plTabButton.plTableOId;
                 if(roleRightVOMap.containsKey(id)){
-                    RoleRightVO roleRightVO = roleRightVOMap.get(id);
-                    Long rightValue =  roleRightVO.getRightValue();
+                    RoleRightVO roleRightVO = roleRightVOMap.get(id).get(0);
+                    Long rightValue = roleRightVO.getRightValue();
                     int nodeValue = plTabButton.plSeq;
                     if (nodeValue >= 0 && nodeValue <= 63) {
                         long preValue = (rightValue >> nodeValue) & 1;
@@ -3612,6 +3604,7 @@
             d.setSearchTarger(searchTarger);
             d.setShowType(btmType);
             d.setTemplateId(txtVIName);
+            d.setOrientation("positive");
             d.setQueryTemplateName(txtQTName);
             d.setExpandCols(expandCols);
             d.setExpandMode(expandMode);
@@ -3709,6 +3702,7 @@
             d.setShowType(btmType);
             d.setLinkType(linkType);
             d.setTemplateId(queryTemplateName);
+            d.setOrientation("positive");
             d.setRootContent(showExpressionRoot.trim());
             d.setShowAbs(showExpression.trim());
             d.setShowLinkAbs(refTreeSet.trim());

--
Gitblit v1.9.3