田源
2025-01-16 a13255b4129ee8a7a7b7e1ecd8e02dd2c78f7c17
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 @@
    }
    /**
     * 根据上下文ID和区域类型,按顺序获取当前区域的tab页
     * 根据上下文ID和区域(页签)类型,按顺序获取当前区域的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
     */
@@ -1469,7 +1465,7 @@
                    platformClientUtil.getUIService().savePLCommandParameter(plCommandParameter);
                } catch (PLException e) {
                    e.printStackTrace();
                    throw new VciBaseException("保存按钮信息时发生异常:"+ e.getMessage());
                    throw new VciBaseException("保存按钮参数时发生异常:"+ e.getMessage());
                }
            }
        }
@@ -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());
@@ -3724,7 +3718,7 @@
                return res;
            }
            // 链接类型不为空时,需要同时检查链接类型及链接类型下的查询模板是否有效
            if(Func.isBlank(linkType)){
            if(Func.isNotBlank(linkType)){
                if(!(super.checkLinkTypeTxtIsOk("链接类型", linkType,false))){
                    res = false;
                    return res;