ludc
2024-09-13 8c9f15cc8a3c3e6f4a4404574d39732b624289a6
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -1,16 +1,20 @@
package com.vci.web.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.corba.framework.data.RoleRightInfo;
import com.vci.corba.omd.btm.BizType;
import com.vci.corba.portal.PortalService;
import com.vci.corba.portal.data.*;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.UIAuthorDTO;
import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
import com.vci.model.PLDefination;
import com.vci.pagemodel.*;
import com.vci.starter.poi.bo.SheetDataSet;
import com.vci.starter.poi.bo.WriteExcelData;
import com.vci.starter.poi.bo.WriteExcelOption;
import com.vci.starter.poi.util.ExcelUtil;
@@ -31,14 +35,23 @@
import com.vci.web.util.UITools;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.swing.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.regex.Pattern;
@@ -57,6 +70,11 @@
    @Resource
    private PlatformClientUtil platformClientUtil;
    /**
     * 角色
     */
    @Resource
    private SmRoleQueryServiceI smRoleQueryServiceI;
    /***
     * 是否是管理员
     */
@@ -136,7 +154,7 @@
    public List<PLUILayout> getUIContextDataByBtName(String btemName,String context) throws PLException {
        VciBaseUtil.alertNotNull(btemName,"业务类型");
        List<PLUILayout> pluiLayoutList=new ArrayList<>();
        List<String> contextList= VciBaseUtil.str2List(context);
        List<String> contextList= new ArrayList<>();
        if(StringUtils.isNotBlank(context)){
            contextList=VciBaseUtil.str2List(context);
        }else{
@@ -372,11 +390,11 @@
        //界面没传名称,使用默认导出名称
        String exportFileName = "UI上下文导出_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss");
        //设置列名
        List<String> columns = Arrays.asList(
        /*List<String> columns = Arrays.asList(
                "所属业务类型","名称", "UI上下文", "导航区", "控制区","操作区",
                "页签序号","区域编码","区域名称","是否启用","显示表达式", "UI解析类",
                "扩展属性", "描述","页面设计信息","页面下配置的按钮"
        );
        );*/
        //写excel
        String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
@@ -386,58 +404,114 @@
            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
        }
        //设置列
        List<WriteExcelData> excelDataList = new ArrayList<>();
        List<WriteExcelData> pldDataList = new ArrayList<>();
        List<WriteExcelData> tpDataList = new ArrayList<>();
        List<WriteExcelData> pdDataList = new ArrayList<>();
        List<WriteExcelData> tbDataList = new ArrayList<>();
        List<WriteExcelData> cpDataList = new ArrayList<>();
        //设置列头
        for (int index = 0; index < columns.size(); index++) {
        /*for (int index = 0; index < columns.size(); index++) {
            excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
        }
        AtomicInteger row = new AtomicInteger(1);
        }*/
        AtomicInteger pldRow = new AtomicInteger(0);
        AtomicInteger tpRow = new AtomicInteger(0);
        AtomicInteger pdRow = new AtomicInteger(0);
        AtomicInteger tbRow = new AtomicInteger(0);
        AtomicInteger cpRow = new AtomicInteger(0);
        expConditionMap.entrySet().stream().forEach(item->{
            //key存放的ui上下文的id
            try {
                PLUILayout pluiLayout = platformClientUtil.getUIService().getPLUILayoutById(item.getKey());
                pldDataList.add(new WriteExcelData(pldRow.get(),0, pluiLayout.plOId));
                pldDataList.add(new WriteExcelData(pldRow.get(),1, pluiLayout.plCode));
                pldDataList.add(new WriteExcelData(pldRow.get(),2, pluiLayout.plName));
                pldDataList.add(new WriteExcelData(pldRow.get(),3, pluiLayout.plRelatedType));
                pldDataList.add(new WriteExcelData(pldRow.get(),4, pluiLayout.plIsShowForm));
                pldDataList.add(new WriteExcelData(pldRow.get(),5, pluiLayout.plIsShowNavigator));
                pldDataList.add(new WriteExcelData(pldRow.get(),6, pluiLayout.plIsShowTab));
                pldRow.getAndIncrement();
                //value中存放的多个以逗号间隔的页签id,通过这个id查询出其下的页面设计和按钮配置
                List<String> plTabPageOIds = Arrays.asList(item.getValue().split(","));
                if(Func.isNotEmpty(pluiLayout) && Func.isNotBlank(pluiLayout.plOId) && Func.isNotEmpty(plTabPageOIds)){
                    PLTabPage[] plTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(pluiLayout.plOId);
                    List<PLTabPage> filterTabPages = Arrays.stream(plTabPages).filter(plTabPage -> plTabPageOIds.contains(plTabPage.plOId)).collect(Collectors.toList());
                    filterTabPages.stream().forEach(tabPage->{
                        excelDataList.add(new WriteExcelData(row.get(),0, pluiLayout.plRelatedType));
                        excelDataList.add(new WriteExcelData(row.get(),1, pluiLayout.plName));
                        excelDataList.add(new WriteExcelData(row.get(),2, pluiLayout.plCode));
                        excelDataList.add(new WriteExcelData(row.get(),3, pluiLayout.plIsShowForm));
                        excelDataList.add(new WriteExcelData(row.get(),4, pluiLayout.plIsShowNavigator));
                        excelDataList.add(new WriteExcelData(row.get(),5, pluiLayout.plIsShowTab));
                        excelDataList.add(new WriteExcelData(row.get(),6, tabPage.plSeq));
                        excelDataList.add(new WriteExcelData(row.get(),7, tabPage.plLabel));
                        excelDataList.add(new WriteExcelData(row.get(),8, tabPage.plName));
                        excelDataList.add(new WriteExcelData(row.get(),9, tabPage.plIsOpen));
                        excelDataList.add(new WriteExcelData(row.get(),10, tabPage.plOpenExpression));
                        excelDataList.add(new WriteExcelData(row.get(),11, tabPage.plUIParser));
                        excelDataList.add(new WriteExcelData(row.get(),12, tabPage.plExtAttr));
                        excelDataList.add(new WriteExcelData(row.get(),13, tabPage.plDesc));
                        //区域定义
                        tpDataList.add(new WriteExcelData(tpRow.get(),0, tabPage.plOId));
                        tpDataList.add(new WriteExcelData(tpRow.get(),1, tabPage.plSeq));
                        tpDataList.add(new WriteExcelData(tpRow.get(),2, tabPage.plLabel));
                        tpDataList.add(new WriteExcelData(tpRow.get(),3, tabPage.plName));
                        tpDataList.add(new WriteExcelData(tpRow.get(),4, tabPage.plContextOId));
                        tpDataList.add(new WriteExcelData(tpRow.get(),5, tabPage.plIsOpen));
                        tpDataList.add(new WriteExcelData(tpRow.get(),6, tabPage.plOpenExpression));
                        tpDataList.add(new WriteExcelData(tpRow.get(),7, tabPage.plUIParser));
                        tpDataList.add(new WriteExcelData(tpRow.get(),8, tabPage.plExtAttr));
                        tpDataList.add(new WriteExcelData(tpRow.get(),9, tabPage.plDesc));
                        tpRow.getAndIncrement();
                        try {
                            PLPageDefination[] plPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(tabPage.plOId);
                            if(Func.isNotEmpty(plPageDefinations)){
                                excelDataList.add(new WriteExcelData(row.get(),14, JSON.toJSONString(plPageDefinations)));
                                List<PLTabButtonVO> tabButtonsTotal = new ArrayList<>();
                                //List<PLTabButtonVO> tabButtonsTotal = new ArrayList<>();
                                Arrays.stream(plPageDefinations).forEach(plPageDefination->{
                                    List<PLTabButtonVO> tabButtons = this.getTabButtons(plPageDefination.plOId);
                                    tabButtonsTotal.addAll(tabButtons);
                                    pdDataList.add(new WriteExcelData(pdRow.get(),0, plPageDefination.plOId));
                                    pdDataList.add(new WriteExcelData(pdRow.get(),1, plPageDefination.plTabPageOId));
                                    pdDataList.add(new WriteExcelData(pdRow.get(),2, plPageDefination.plType));
                                    pdDataList.add(new WriteExcelData(pdRow.get(),3, plPageDefination.name));
                                    pdDataList.add(new WriteExcelData(pdRow.get(),4, plPageDefination.desc));
                                    pdDataList.add(new WriteExcelData(pdRow.get(),5, plPageDefination.seq));
                                    pdDataList.add(new WriteExcelData(pdRow.get(),6, plPageDefination.plDefination));
                                    pdRow.getAndIncrement();
                                    //查询按钮
                                    try {
                                        PLTabButton[] tabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId);
                                        for (PLTabButton tabButton:tabButtons){
                                            tbDataList.add(new WriteExcelData(tbRow.get(),0, tabButton.plOId));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),1, tabButton.plTableOId));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),2, tabButton.plPageOId));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),3, tabButton.plActionOId));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),4, tabButton.plLabel));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),5, tabButton.plAreaType));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),6, tabButton.plDesc));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),7, tabButton.plSeq));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),8, tabButton.plParentOid));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),9, tabButton.displayMode));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),10, tabButton.iconPath));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),11, tabButton.authorization));
                                            tbDataList.add(new WriteExcelData(tbRow.get(),12, tabButton.show));
                                            tbRow.getAndIncrement();
                                            PLCommandParameter[] parameters = platformClientUtil.getUIService().getPLCommandParametersByCommandOId(tabButton.plOId);
                                            if(Func.isNotEmpty(parameters)){
                                                Arrays.stream(parameters).forEach(param->{
                                                    cpDataList.add(new WriteExcelData(cpRow.get(),0, param.plOId));
                                                    cpDataList.add(new WriteExcelData(cpRow.get(),1, param.plCommandOId));
                                                    cpDataList.add(new WriteExcelData(cpRow.get(),2, param.plKey));
                                                    cpDataList.add(new WriteExcelData(cpRow.get(),3, param.plValue));
                                                    cpRow.getAndIncrement();
                                                });
                                            }
                                        }
                                    } catch (PLException e) {
                                        e.printStackTrace();
                                    }
                                });
                                excelDataList.add(new WriteExcelData(row.get(),15, JSON.toJSONString(tabButtonsTotal)));
                            }
                        } catch (PLException e) {
                            e.printStackTrace();
                        }
                        row.getAndIncrement();
                    });
                }
            } catch (PLException e) {
                e.printStackTrace();
            }
        });
        WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
        WriteExcelOption excelOption = new WriteExcelOption();
        excelOption.addSheetDataList("PlpageLayoutDefnation",pldDataList);
        excelOption.addSheetDataList("Pltabpage",tpDataList);
        excelOption.addSheetDataList("Plpagedefination",pdDataList);
        excelOption.addSheetDataList("Pltabbutton",tbDataList);
        excelOption.addSheetDataList("PlcommondParam",cpDataList);
        ExcelUtil.writeDataToFile(excelPath, excelOption);
        return excelPath;
    }
@@ -445,13 +519,358 @@
    /**
     * 导入UI上下文
     * @param file
     * @param isCovered 是否覆盖
     * @param selectBtm 选择的业务类型
     * @return
     */
    @Override
    public BaseResult impUIContextData(MultipartFile file) {
    public BaseResult impUIContextData(File file,boolean isCovered,String selectBtm) {
        /*VciBaseUtil.alertNotNull(file,"excel文件");
        if(!file.exists()){
            throw new VciBaseException("导入的excel文件不存在,{0}",new String[]{file.getPath()});
        }
        //读取excel表
        List<SheetDataSet> sheetDataSets = ExcelUtil.readDataObjectFromExcel(file);
        try {
            PLUILayout[] plpagelayoutdefinations = null;
            try {
                SheetDataSet plpagelayoutdefnationsheet = sheetDataSets.get(0);
                SheetDataSet pltabpagesheet = sheetDataSets.get(1);
                SheetDataSet plpagedefinationsheet = sheetDataSets.get(2);
                SheetDataSet pltabbuttonsheet = sheetDataSets.get(3);
                SheetDataSet plcommondparamsheet = sheetDataSets.get(4);
                *//*HSSFSheet plpagelayoutdefnationsheet = readworkbook.getSheet("PlpageLayoutDefnation");
                HSSFSheet pltabpagesheet = readworkbook.getSheet("Pltabpage");
                HSSFSheet plpagedefinationsheet = readworkbook.getSheet("Plpagedefination");
                HSSFSheet pltabbuttonsheet = readworkbook.getSheet("Pltabbutton");
                HSSFSheet plcommondparamsheet = readworkbook.getSheet("PlcommondParam");*//*
                SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
                Map<PLUILayout,List<PLTabPage>> pdMap = new HashMap<>();
                Map<PLTabPage,List<PLPageDefination>> tdMap = new HashMap<>();
                Map<PLPageDefination,List<PLTabButton>> dbMap = new HashMap<>();
                Map<PLTabButton,List<PLCommandParameter>> bcMap = new HashMap<>();
                List<PLUILayout> plpagelayoutdefinationList = new ArrayList<PLUILayout>();
                List<PLTabPage> pltabpagelist = new ArrayList<PLTabPage>();
                List<PLPageDefination> plpagedefinationlist = new ArrayList<PLPageDefination>();
                List<PLTabButton> pltabbuttonlist = new ArrayList<PLTabButton>();
                List<PLCommandParameter> plcommandparameterlist = new ArrayList<PLCommandParameter>();
                StringBuffer checkplpagelayoutdefination = new StringBuffer();
                StringBuffer checkplpagelayoutdefinationPlcode = new StringBuffer();
                StringBuffer plActionIDNulls = new StringBuffer();
                //add by caill start 初始化标记
                int count=0;
                int preCount=0;
                String preOID="";
                String doublePreOID="";
                //add by caill end
                PLAction[] allPLAction = platformClientUtil.getUIService().getAllPLAction();
                Map<String,String> relation = null;
                for(int i=0;i<=plpagelayoutdefnationsheet.getLastRowNum();i++){
                    pltabpagelist = new ArrayList<PLTabPage>();
                    PLUILayout p = new PLUILayout();
                    HSSFRow readrow = plpagelayoutdefnationsheet.getRow(i);
                    if(readrow==null){
                        break;
                    }
                    plpagelayoutdefinations = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(btmName);
                    p.plOId = ObjectUtility.getNewObjectID36();
                    HSSFCell readcell = readrow.getCell(0);
                    p.plName = readcell.getStringCellValue();
                    readcell = readrow.getCell(1);
                    p.plCode = readcell.getStringCellValue();
                    //add by caill start
                    //遍历UI名称
                    for(PLUILayout pd : plpagelayoutdefinations){
                        if(pd.plName.equals(p.plName) && isCovered){
                            throw new VciBaseException(pd.plName+"名称已经存在,是否覆盖?");
                        }
                        //根据UI上下文做判断
                        if(pd.plCode.equals(p.plCode)){
                            count=1;
                            preOID=pd.plOId;  //如果UI上下文相同,就把系统中的id赋值给新导入的id
                            p.plOId=pd.plOId;
                        }
                    }
                    //add by caill end
                    readcell = readrow.getCell(2);
                    plpageLayoutDefinationId = readcell.getStringCellValue();
                    readcell = readrow.getCell(3);
                    String name = readcell.getStringCellValue();
                    readcell = readrow.getCell(4);
                    p.plRelatedType = readcell.getStringCellValue();
                    readcell = readrow.getCell(5);
                    p.plIsShowNavigator = (short) readcell.getNumericCellValue();
                    readcell = readrow.getCell(6);
                    p.plIsShowTab = (short) readcell.getNumericCellValue();
                    readcell = readrow.getCell(7);
                    p.plIsShowForm = (short) readcell.getNumericCellValue();
                    //选择的和导入的业务类型节点不一致
                    if(!selectBtm.equals(name)){
                        throw new VciBaseException("请选择要导入的类型节点名称!");
                    }
                    plpagelayoutdefinationList.add(p);
                    for(int j=0;j<=pltabpagesheet.getLastRowNum();j++){
                        plpagedefinationlist = new ArrayList<PLPageDefination>();
                        PLTabPage pt = new PLTabPage();
                        HSSFRow readrow1 = pltabpagesheet.getRow(j);
                        if(readrow1==null){
                            break;
                        }
                        pt.plOId = ObjectUtility.getNewObjectID36();
                        HSSFCell readcell1 = readrow1.getCell(0);
                        pt.plName = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(1);
                        pt.plCode = readcell1.getStringCellValue();
                        //add by caill start
                        if(count==1) {
                            PLTabPage[] PLTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(preOID);
                            //遍历控制区表格
                            for(PLTabPage pl : PLTabPages){
                                if(pl.plCode.equals(pt.plCode)){
                                    pt.plOId=pl.plOId; //如果控制区表格的编码和导入的编码一样,就把控制区id赋值给新导入的id
                                    preCount=1;
                                    doublePreOID=pl.plOId;
                                }
                            }
                        }
                        //add by caill end
                        readcell1 = readrow1.getCell(2);
                        pt.plSeq = (short) readcell1.getNumericCellValue();
                        readcell1 = readrow1.getCell(3);
                        pt.plContextOId = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(4);
                        pt.plDesc = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(5);
                        pt.plIsOpen = (short) readcell1.getNumericCellValue();
                        readcell1 = readrow1.getCell(6);
                        pt.plAreaType = (short) readcell1.getNumericCellValue();
                        readcell1 = readrow1.getCell(7);
                        pt.plOpenExpression = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(8);
                        pt.plLicensOrs = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(9);
                        pt.plLabel = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(10);
                        String plPageContextOId = readcell1.getStringCellValue();
                        if(pt.plContextOId.equals(plpageLayoutDefinationId)){
                            pt.plContextOId = p.plOId;
                            pltabpagelist.add(pt);
                            for(int k=0;k<=plpagedefinationsheet.getLastRowNum();k++){
                                pltabbuttonlist = new ArrayList<PLTabButton>();
                                PLPageDefination plpagedefination  = new PLPageDefination();
                                HSSFRow readrow2 = plpagedefinationsheet.getRow(k);
                                if(readrow2==null){
                                    break;
                                }
                                plpagedefination.plOId = ObjectUtility.getNewObjectID36();
                                HSSFCell readcell2 = readrow2.getCell(0);
                                plpagedefination.name = readcell2.getStringCellValue();
                                //add by caill start
                                //最后一级的判断
                                if(preCount==1) {
                                    PLPageDefination[] PLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(doublePreOID);
                                    for(PLPageDefination plp : PLPageDefinations) {
                                        if(plp.name.equals(plpagedefination.name)) {
                                            plpagedefination.plOId=plp.plOId;
                                        }
                                    }
                                }
                                //add by caill end
                                readcell2 = readrow2.getCell(1);
                                plpagedefination.plDefination = readcell2.getStringCellValue();
                                readcell2 = readrow2.getCell(2);
                                plpagedefination.seq = (short) readcell2.getNumericCellValue();
                                readcell2 = readrow2.getCell(3);
                                plpagedefination.plTabPageOId = readcell2.getStringCellValue();
                                readcell2 = readrow2.getCell(4);
                                plpagedefination.desc = readcell2.getStringCellValue();
                                readcell2 = readrow2.getCell(5);
                                plpagedefination.plType = (short) readcell2.getNumericCellValue();
                                readcell2 = readrow2.getCell(6);
                                plTableOId = readcell2.getStringCellValue();
                                if(plpagedefination.plTabPageOId.equals(plPageContextOId)){
                                    plpagedefination.plTabPageOId = pt.plOId;
                                    plpagedefinationlist.add(plpagedefination);
                                    //保存新旧oid的关系,在确定层级关系时使用
                                    relation = new HashMap<String,String>();
                                    for(int a=0;a<=pltabbuttonsheet.getLastRowNum();a++){
                                        HSSFRow readrow3 = pltabbuttonsheet.getRow(a);
                                        if(readrow3!=null){
                                            HSSFCell readcell3 = readrow3.getCell(7);
                                            plCommandOId = readcell3.getStringCellValue();
                                            String newOId = ObjectUtility.getNewObjectID36();
                                            relation.put(plCommandOId, newOId);
                                        }
                                    }
                                    for(int a=0;a<=pltabbuttonsheet.getLastRowNum();a++){
                                        plcommandparameterlist = new ArrayList<PLCommandParameter>();
                                        PLTabButton plTabButton = new PLTabButton();
                                        HSSFRow readrow3 = pltabbuttonsheet.getRow(a);
                                        if(readrow3==null){
                                            break;
                                        }
                                        plTabButton.plOId = ObjectUtility.getNewObjectID36();
                                        HSSFCell readcell3 = readrow3.getCell(0);
                                        plTabButton.plLabel = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(1);
                                        plTabButton.plAreaType = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(2);
                                        plTabButton.plTableOId = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(3);
                                        plTabButton.plSeq = (short) readcell3.getNumericCellValue();
                                        String plActionId = "";
                                        //PLAction[] allPLAction = Tool.getService().getAllPLAction();
                                        for(PLAction action : allPLAction){
                                            if((readrow3.getCell(4).getStringCellValue()!=null&&!"".equals(readrow3.getCell(4).getStringCellValue())
                                            )&&(readrow3.getCell(4).getStringCellValue().trim().equals(action.plCode.trim()))
                                            ){
                                                plActionId = action.plOId;
                                                break;
                                            }
                                        }
                                        if(plActionId==null||"".equals(plActionId)){
                                            if(!plActionIDNulls.toString().contains(readrow3.getCell(4).getStringCellValue())){
                                                plActionIDNulls.append("\n\tAction编号:"+readrow3.getCell(4).getStringCellValue());
                                            }
                                        }
                                        plTabButton.plActionOId = plActionId;
                                        readcell3 = readrow3.getCell(5);
                                        plTabButton.plAreaType = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(6);
                                        plTabButton.plDesc = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(8);
                                        String parentOid = readcell3.getStringCellValue();//父oid
                                        readcell3 = readrow3.getCell(7);
                                        plCommandOId = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(9);
                                        if(readcell3 != null) {
                                            plTabButton.displayMode = readcell3.getStringCellValue();
                                        }
                                        readcell3 = readrow3.getCell(10);
                                        if(readcell3 != null) {
                                            plTabButton.iconPath = readcell3.getStringCellValue();
                                        }
                                        readcell3 = readrow3.getCell(11);
                                        if(readcell3 != null) {
                                            plTabButton.authorization = readcell3.getStringCellValue();
                                        }
                                        readcell3 = readrow3.getCell(12);
                                        if(readcell3 != null) {
                                            plTabButton.show = readcell3.getStringCellValue();
                                        }
                                        //赋予保存好的值,来保证层级关系不会丢失
                                        plTabButton.plOId = relation.get(plCommandOId);
                                        if(parentOid != null && parentOid.length() > 0) {
                                            plTabButton.plParentOid =
                                                    relation.get(parentOid) == null ? "" : relation.get(parentOid);
                                        }
                                        if(plTabButton.plTableOId.equals(plTableOId)){
                                            plTabButton.plTableOId = plpagedefination.plOId;
                                            pltabbuttonlist.add(plTabButton);
                                            for(int b=0;b<=plcommondparamsheet.getLastRowNum();b++){
                                                PLCommandParameter plCommandParameter = new PLCommandParameter();
                                                HSSFRow readrow4 = plcommondparamsheet.getRow(b);
                                                if(readrow4==null){
                                                    break;
                                                }
                                                plCommandParameter.plOId = ObjectUtility.getNewObjectID36();
                                                HSSFCell readcell4 = readrow4.getCell(0);
                                                plCommandParameter.plCommandOId = readcell4.getStringCellValue();
                                                readcell4 = readrow4.getCell(1);
                                                plCommandParameter.plKey = readcell4.getStringCellValue();
                                                readcell4 = readrow4.getCell(2);
                                                plCommandParameter.plValue = readcell4.getStringCellValue();
                                                if(plCommandParameter.plCommandOId.equals(plCommandOId)){
                                                    plCommandParameter.plCommandOId = plTabButton.plOId;
                                                    plcommandparameterlist.add(plCommandParameter);
                                                }
                                            }
                                            bcMap.put(plTabButton, plcommandparameterlist);
                                        }
                                    }
                                    dbMap.put(plpagedefination, pltabbuttonlist);
                                }
                            }
                            tdMap.put(pt, plpagedefinationlist);
                        }
                    }
                    pdMap.put(p, pltabpagelist);
                }
                if(plActionIDNulls.length()>0){
                    VCIOptionPane.showMessage(PLTApplication.frame, plActionIDNulls.toString()+"不存在!");
                    return false;
                }
                //删除原有button数据
                if(tdMap.size() > 0) {
                    for(List<PLPageDefination> list : tdMap.values()) {
                        for(PLPageDefination ppd : list) {
                            if(ppd.plOId != null && ppd.plOId.length() > 0) {
                                PLTabButton[] buttons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(ppd.plOId);
                                if(buttons != null && buttons.length > 0) {
                                    for(PLTabButton ptb : buttons) {
                                        platformClientUtil.getUIService().deletePLTabButtonByID(ptb.plOId);
                                    }
                                }
                            }
                        }
                    }
                }
                for(PLUILayout plPageLayoutDefination : plpagelayoutdefinationList){
                    List<PLTabPage> pltabpagelists = pdMap.get(plPageLayoutDefination);
                    for(PLTabPage pltabpage:pltabpagelists){
                        List<PLPageDefination> plpagedefinationlists = tdMap.get(pltabpage);
                        for(PLPageDefination plpagedefination : plpagedefinationlists){
                            List<PLTabButton> pltabbuttons = dbMap.get(plpagedefination);
                            for(PLTabButton pltabbutton : pltabbuttons){
                                List<PLCommandParameter> plcommandParams = bcMap.get(pltabbutton);
                                for(PLCommandParameter plcommandparameter : plcommandParams){
                                    plcommandparameter.plCreateUser = sessionInfo.getUserId();
                                    plcommandparameter.plModifyUser = sessionInfo.getUserId();
                                    platformClientUtil.getUIService().savePLCommandParameter(plcommandparameter);
                                }
                                pltabbutton.plCreateUser = sessionInfo.getUserId();
                                pltabbutton.plModifyUser = sessionInfo.getUserId();
                                platformClientUtil.getUIService().savePLTabButton(pltabbutton);
                            }
                            platformClientUtil.getUIService().savePLPageDefination(plpagedefination);
                        }
                        pltabpage.plCreateUser = sessionInfo.getUserId();
                        pltabpage.plModifyUser = sessionInfo.getUserId();
                        platformClientUtil.getUIService().savePLTabPage(pltabpage);
                    }
                    plPageLayoutDefination.plCreateUser = sessionInfo.getUserId();
                    plPageLayoutDefination.plModifyUser = sessionInfo.getUserId();
                    platformClientUtil.getUIService().savePLUILayout(plPageLayoutDefination);
                }
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } catch (PLException e) {
                e.printStackTrace();
                return false;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }
*/
        return null;
    }
@@ -1298,7 +1717,7 @@
          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));
            roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue));
        }
        BizType[] bizTypes=osBtmServiceI.getBizTypes(type);
        List<Tree> treeList=new ArrayList<>();
@@ -1316,12 +1735,10 @@
            bizTypeTree.setShowCheckbox(true);
            bizTypeTree.setParentBtmName(bizTypes[i].name);
            childList.add(bizTypeTree);
            if(roleRightVOMap.containsKey(bizTypes[i].oid)){
                List<PLUILayout>contextList=getUIContextDataByBtName(bizTypes[i].name,context);
                List<Tree> btmChildList=new ArrayList<>();
                btmChildList.add(bizTypeTree);
                setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox);
            }
            List<PLUILayout>contextList=getUIContextDataByBtName(bizTypes[i].name,context);
            List<Tree> btmChildList=new ArrayList<>();
            btmChildList.add(bizTypeTree);
            setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox);
        }
        rootNode.setChildren(childList);
        treeList.add(rootNode);
@@ -1349,48 +1766,96 @@
        treeQueryObject.setConditionMap(conditionMap);
        List<Tree> treeList=this.getUIAuthor(treeQueryObject);
        HashMap<String,Tree> allTreeMap=new HashMap<>();
        Map<String,RoleRightVO> roleRightVOMap=new HashMap<>();
        Map<String,RoleRightDTO> roleRightVOMap=new HashMap<>();
        if(!CollectionUtil.isEmpty(treeList)){
            if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){
                String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
                RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(uiAuthorDTO.getRoleId(),userName);
                List<RoleRightVO>  roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos));
                roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO));
                roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVOO2DTO(roleRightVO),(oldValue,newValue)->oldValue));
            }
            convertTreeDOO2Map(treeList,allTreeMap);
            List<RoleRightDTO> roleRightDTOList=new ArrayList<>();
            List<Tree>  selectTreeList= uiAuthorDTO.getSelectTreeList();
            getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightDTOList);
            getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightVOMap,roleRightDTOList);
            SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
            String currentUserName = sessionInfo.getUserId();
            boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
            List<RoleRightInfo>  roleRightInfoList= roleRightDTOO2InfoS(roleRightDTOList);
            UserEntityInfo info=new UserEntityInfo();
            info.modules="UI授权";
            info.userName=currentUserName;
            try {
             res= platformClientUtil.getFrameworkService().saveRoleRight(roleRightInfoList.toArray(new RoleRightInfo[]{}),uiAuthorDTO.getRoleId(),currentUserName,info);
            }catch (PLException e){
                throw  new Exception("保存失败:"+e.getMessage());
            }
        }
        return res;
    }
    /**
     *
     *根据权限计算上下权限
     * @param roleOid
     * @param selectTreeList
     * @param allTreeMap
     * @param roleRightDTOList
     */
    private void getSelectedRoleRightObjs(String roleOid,List<Tree>  selectTreeList,HashMap<String,Tree> allTreeMap,  List<RoleRightDTO> roleRightDTOList){
    private void getSelectedRoleRightObjs(String roleOid,List<Tree>  selectTreeList,HashMap<String,Tree> allTreeMap,Map<String,RoleRightDTO> allRoleRightDTOMap,  List<RoleRightDTO> roleRightDTOList){
        Date date=new Date();
        Map<String,RoleRightDTO> roleRightDTOMap=new HashMap<>();
        selectTreeList.stream().forEach(tree -> {
            RoleRightDTO roleRightDTO=new RoleRightDTO();
            String id=ObjectUtility.getNewObjectID36();
            Object data=  tree.getData();
            if(data instanceof String){
                getRightValue(roleOid,tree,allTreeMap,false,roleRightDTOMap);//向下获取所有模块的权限值
            }else if (!(data instanceof PLTabButton)) {//业务类型
                getRightValue(roleOid,tree,allTreeMap,true,roleRightDTOMap);//向上处理
                getRightValue(roleOid,tree,allTreeMap,false,roleRightDTOMap);//向下处理(包含当前节点)
            }else if (data instanceof PLTabButton) {//按钮
        if(!CollectionUtil.isEmpty(selectTreeList)){
            selectTreeList.stream().forEach(tree -> {
                String oid=tree.getOid();
                if(allTreeMap.containsKey(oid)){
                    tree=   allTreeMap.get(oid);
                   Object data= tree.getData();
                    if (data instanceof String) {
                        getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//向下获取所有模块的权限值
                    } else if (!(data instanceof PLTabButton)) {//业务类型
                        getRightValue(roleOid, tree, allTreeMap, true, roleRightDTOMap);//向上处理
                        getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//向下处理(包含当前节点)
                    } else if (data instanceof PLTabButton) {//按钮
                        String parrentId=tree.getParentId();
                        if(allTreeMap.containsKey(parrentId)){
                            SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
                            String currentUserName = sessionInfo.getUserId();
                            boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
                            Tree parentNode= allTreeMap.get(parrentId);
                            String funcId = parentNode.getOid();
                            getRightValue(roleOid,tree, allTreeMap, true, roleRightDTOMap);//向上处理该操作父级的上级模块权限(不包含父节点)
                            if(!roleRightDTOMap.containsKey(funcId)){
                                RoleRightDTO roleRightDTO = new RoleRightDTO();
                                roleRightDTO.setId(ObjectUtility.getNewObjectID36());//主键
                                roleRightDTO.setFuncId(funcId);
                                if(isDeveloper) {
                                    roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2
                                }else{
                                    roleRightDTO.setRightType((short) 2);
                                }
                                roleRightDTO.setRightValue(1);// 权限值,没有操作的模块权限值存储为0
                                roleRightDTO.setRoleId(roleOid);//角色ID
                                roleRightDTO.setCreateUser(currentUserName);//创建者
                                roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//创建时间
                                roleRightDTO.setModifyUser(currentUserName);//修改者
                                roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));//修改时间
                                roleRightDTO.setLicensor("");
                                if(!roleRightDTOMap.containsKey(funcId)){
                                    roleRightDTOMap.put(funcId, roleRightDTO);
                                }
                                roleRightDTOMap.put(funcId, roleRightDTO);
                            }
                        }
            }
        });
                    }
                }
            });
          /*  allRoleRightDTOMap.putAll(roleRightDTOMap.entrySet().stream()
                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::  getValue)));*/
         List<RoleRightDTO>    newRoleRightDTOList=Optional.ofNullable(roleRightDTOMap).orElseGet(()->new HashMap<String,RoleRightDTO>()).values().stream().collect(Collectors.toList());
            roleRightDTOList.addAll(newRoleRightDTOList);
        }
    }
    /**
@@ -1401,28 +1866,28 @@
        SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
        String currentUserName = sessionInfo.getUserId();
        boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
        String parentOid=node.getParentId();
        if(allTreeMap.containsKey(parentOid)){
            String id=ObjectUtility.getNewObjectID36();
            Tree parentNode =allTreeMap.get(parentOid);
            Object parentData=  parentNode.getData();
            if(isUp) {//向上获取,存储每个上级模块的权限值
                while (!"root".equals(parentNode.getData())){
        String id=ObjectUtility.getNewObjectID36();
        Object data=node.getData();
        if(isUp) {//向上获取,存储每个上级模块的权限值
            while (!"root".equals(node.getData())){
                data=node.getData();
               String oid=node.getOid();
                if(allTreeMap.containsKey(oid)){
                    String funcId = "";
                    if (parentData instanceof BizType) {
                        BizType bizType = (BizType) parentData;
                    if (data instanceof BizType) {
                        BizType bizType = (BizType) data;
                        funcId = bizType.name;
                    } else if (parentData instanceof PLUILayout) {
                        PLUILayout context = (PLUILayout)parentData;
                    } else if (data instanceof PLUILayout) {
                        PLUILayout context = (PLUILayout)data;
                        funcId = context.plOId;
                    } else if (parentData instanceof PLTabPage) {
                        PLTabPage tab = (PLTabPage) parentData;
                    } else if (data instanceof PLTabPage) {
                        PLTabPage tab = (PLTabPage) data;
                        funcId = tab.plOId;
                    } else if (parentData instanceof PLPageDefination){
                        PLPageDefination pageDef = (PLPageDefination) parentData;
                    } else if (data instanceof PLPageDefination){
                        PLPageDefination pageDef = (PLPageDefination) data;
                        funcId = pageDef.plOId;
                    } else if (parentData instanceof PLTabButton) {
                        PLTabButton but = (PLTabButton)parentData;
                    } else if (data instanceof PLTabButton) {
                        PLTabButton but = (PLTabButton)data;
                        funcId = but.plOId;
                    }
                    RoleRightDTO roleRightDTO = new RoleRightDTO();
@@ -1436,74 +1901,77 @@
                    roleRightDTO.setRightValue(1);// 权限值,没有操作的模块权限值存储为0
                    roleRightDTO.setRoleId(roleId);//角色ID
                    roleRightDTO.setCreateUser(currentUserName);//创建者
                    roleRightDTO.setCreateTime(new Date());//创建时间
                    roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//创建时间
                    roleRightDTO.setModifyUser(currentUserName);//修改者
                    roleRightDTO.setModifyTime(new Date());//修改时间
                    roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));//修改时间
                    roleRightDTO.setLicensor("");
                    if(!rightMap.containsKey(funcId)){
                        rightMap.put(funcId, roleRightDTO);
                    }
                }
            }else{
                String funcId = "";
                if(parentData instanceof String){
                    funcId = (String)parentData;
                } else if (parentData instanceof BizType) {
                    BizType bizType = (BizType)parentData;
                    funcId = bizType.name;
                } else if (parentData instanceof PLUILayout) {
                    PLUILayout context = (PLUILayout)parentData;
                    funcId = context.plOId;
                } else if (parentData instanceof PLTabPage) {
                    PLTabPage tab = (PLTabPage) parentData;
                    funcId = tab.plOId;
                } else if (parentData instanceof PLPageDefination){
                    PLPageDefination pageDef = (PLPageDefination) parentData;
                    funcId = pageDef.plOId;
                } else if (parentData instanceof PLTabButton) {
                    PLTabButton but = (PLTabButton)parentData;
                    funcId = but.plOId;
                }
                if(!(parentData instanceof PLPageDefination)) {//子节点不是操作
                    if(!rightMap.containsKey(funcId)&&!funcId.equals("root")){
                        RoleRightDTO roleRightDTO = new RoleRightDTO();
                        roleRightDTO.setFuncId(funcId);
                        if(isDeveloper) {
                            roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2
                        }else{
                            roleRightDTO.setRightType((short) 2);
                        }
                        roleRightDTO.setRightValue(0);//没有操作的模块权限值存储为0
                        roleRightDTO.setRoleId(roleId);
                        roleRightDTO.setCreateUser(currentUserName);
                        roleRightDTO.setCreateTime(new Date());
                        roleRightDTO.setModifyUser(currentUserName);
                        roleRightDTO.setModifyTime(new Date());
                        roleRightDTO.setLicensor("");
                        rightMap.put(funcId, roleRightDTO);
                    }
                    for(int i = 0;i < parentNode.getChildren().size();i++){
                        //对每个子向下递归遍历
                        getRightValue(roleId,parentNode.getChildren().get(i),allTreeMap,false,rightMap);
                    }
                }else {
                    if(!rightMap.containsKey(funcId)){
                        RoleRightDTO roleRightDTO = new RoleRightDTO();
                        roleRightDTO.setFuncId(funcId);
                        roleRightDTO.setRightType((short)2); // 设置UI权限
                        roleRightDTO.setRightValue(countRightValue(parentNode,true));//没有操作的模块权限值存储为0
                        roleRightDTO.setRoleId(roleId);
                        roleRightDTO.setCreateUser(currentUserName);
                        roleRightDTO.setCreateTime(new Date());
                        roleRightDTO.setModifyUser(currentUserName);
                        roleRightDTO.setModifyTime(new Date());
                        roleRightDTO.setLicensor("");
                        rightMap.put(funcId, roleRightDTO);
                    oid= node.getParentId();
                    if(allTreeMap.containsKey(oid)) {
                        node=allTreeMap.get(oid);
                    }
                }
            }
        }else {
            String funcId = "";
            if (data instanceof String) {
                funcId = (String) data;
            } else if (data instanceof BizType) {
                BizType bizType = (BizType) data;
                funcId = bizType.name;
            } else if (data instanceof PLUILayout) {
                PLUILayout context = (PLUILayout) data;
                funcId = context.plOId;
            } else if (data instanceof PLTabPage) {
                PLTabPage tab = (PLTabPage) data;
                funcId = tab.plOId;
            } else if (data instanceof PLPageDefination) {
                PLPageDefination pageDef = (PLPageDefination) data;
                funcId = pageDef.plOId;
            } else if (data instanceof PLTabButton) {
                PLTabButton but = (PLTabButton) data;
                funcId = but.plOId;
            }
            if (!(data instanceof PLPageDefination)) {//子节点不是操作
                if (!rightMap.containsKey(funcId) && !funcId.equals("root")) {
                    RoleRightDTO roleRightDTO = new RoleRightDTO();
                    roleRightDTO.setFuncId(funcId);
                    if (isDeveloper) {
                        roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2
                    } else {
                        roleRightDTO.setRightType((short) 2);
                    }
                    roleRightDTO.setRightValue(0);//没有操作的模块权限值存储为0
                    roleRightDTO.setRoleId(roleId);
                    roleRightDTO.setCreateUser(currentUserName);
                    roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));
                    roleRightDTO.setModifyUser(currentUserName);
                    roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));
                    roleRightDTO.setLicensor("");
                    rightMap.put(funcId, roleRightDTO);
                }
                for (int i = 0; i < node.getChildren().size(); i++) {
                    //对每个子向下递归遍历
                    getRightValue(roleId, node.getChildren().get(i), allTreeMap, false, rightMap);
                }
            } else {
                if (!rightMap.containsKey(funcId)) {
                    RoleRightDTO roleRightDTO = new RoleRightDTO();
                    roleRightDTO.setFuncId(funcId);
                    roleRightDTO.setRightType((short) 2); // 设置UI权限
                    roleRightDTO.setRightValue(countRightValue(node, true));//没有操作的模块权限值存储为0
                    roleRightDTO.setRoleId(roleId);
                    roleRightDTO.setCreateUser(currentUserName);
                    roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));
                    roleRightDTO.setModifyUser(currentUserName);
                    roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));
                    roleRightDTO.setLicensor("");
                    rightMap.put(funcId, roleRightDTO);
                }
            }
        }
    }
@@ -1540,6 +2008,13 @@
        });
    }
    /***
     * 遍历子节点
     * @param parentTree
     * @param contextList
     * @param roleRightVOMap
     * @param isShowCheckBox
     */
    private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){
        Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<Tree>()).stream().forEach(pTree -> {
            Object funcObj=  pTree.getData();
@@ -1657,6 +2132,24 @@
        });
    }
    /**
     * UI角色对象转换
     * @param vos
     * @return
     */
    private List<RoleRightDTO> roleRightVOO2DTOS(List<RoleRightVO> vos){
        List<RoleRightDTO> roleRightVOS=new ArrayList<>();
        Optional.ofNullable(vos).orElseGet(()->new ArrayList<>()).stream().forEach(vo -> {
            RoleRightDTO dto=roleRightVOO2DTO(vo);
            roleRightVOS.add(dto);
        });
        return roleRightVOS;
    }
    /**
     * UI角色对象转换
     * @param infos
@@ -1671,7 +2164,25 @@
        return roleRightVOS;
    }
    /**
     * UI角色对象转换
     * @param dtos
     * @return
     */
    private List<RoleRightInfo> roleRightDTOO2InfoS(List<RoleRightDTO> dtos){
        List<RoleRightInfo> roleRightInfoList=new ArrayList<>();
        Optional.ofNullable(dtos).orElseGet(()->new ArrayList<>()).stream().forEach(dto -> {
            RoleRightInfo info= null;
            try {
                info = roleRightDTOO2Info(dto);
            } catch (Exception e) {
                e.printStackTrace();
            }
            roleRightInfoList.add(info);
        });
        return roleRightInfoList;
    }
    /**
     * UI角色对象转换
     * @param info
@@ -1691,6 +2202,45 @@
        vo.setModifyUser(info.modifyUser);
        return vo;
    }
    /**
     * UI角色对象转换
     * @param vo
     * @return
     */
    private RoleRightDTO  roleRightVOO2DTO(RoleRightVO vo){
        RoleRightDTO dto=new RoleRightDTO();
        dto.setId(vo.getId());
        dto.setCreateTime(vo.getCreateTime());
        dto.setCreateUser(vo.getCreateUser());
        dto.setRoleId(vo.getRoleId());
        dto.setRightType(vo.getRightType());
        dto.setLicensor(vo.getLicensor());
        dto.setRightValue(vo.getRightValue());
        dto.setFuncId(vo.getFuncId());
        dto.setModifyTime(vo.getModifyTime());
        dto.setModifyUser(vo.getModifyUser());
        return dto;
    }
    /**
     * UI角色对象转换
     * @param dto
     * @return
     */
    private RoleRightInfo  roleRightDTOO2Info(RoleRightDTO dto) throws Exception {
        RoleRightInfo info=new RoleRightInfo();
        info.id=StringUtils.isBlank(dto.getId())?"":dto.getId();
        info.createTime=StringUtils.isBlank(dto.getCreateTime())?new Date().getTime():VciDateUtil.getTime(VciDateUtil.str2Date(dto.getCreateTime(),""));
        info.createUser=StringUtils.isBlank(dto.getCreateUser())?"":dto.getCreateUser();
        info.roleId=StringUtils.isBlank(dto.getRoleId())?"":dto.getRoleId();
        info.rightType=dto.getRightType();
        info.licensor =StringUtils.isBlank(dto.getLicensor())?"":dto.getLicensor();
        info.rightValue=dto.getRightValue();
        info.funcId=StringUtils.isBlank(dto.getFuncId())?"":dto.getFuncId();
        info.modifyTime=StringUtils.isBlank(dto.getModifyTime())? new Date().getTime() :VciDateUtil.getTime(VciDateUtil.str2Date(dto.getModifyTime(),""));
        info.modifyUser=StringUtils.isBlank(dto.getModifyUser())?"":dto.getModifyUser();
        return info;
    }
    /**
     * 控制区节点及其子节点的克隆