1、主要完成对获取UI上下文的定义接口的优化,优化的方向为对多次获取业务类型对象进行转换而导致耗时较久的问题继续修改,还有对多次获取属性对象进行转换对象导致耗时过长问题进行修改。
2、对树的数据查询接口的优化,对多次获取属性对象进行转换对象导致耗时过长问题进行修改。
已修改11个文件
212 ■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebUIController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebUIDataController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
@@ -95,7 +95,7 @@
     * @throws PLException
     */
    @VciBusinessLog(operateName="日志查询")
    @GetMapping(value = "/getLogListByContion")
    @PostMapping(value = "/getLogListByContion")
    @ResponseBody
    public BaseResult getLogListByContion(@RequestBody LogQueryCriteriaDTO dto){
        try {
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebUIController.java
@@ -1,5 +1,6 @@
package com.vci.web.controller;
import com.vci.corba.common.PLException;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.pagemodel.BaseResult;
@@ -66,7 +67,7 @@
     * @return 表单的定义
     */
    @GetMapping("/getTableDefineById")
    public UITableDefineVO getTableDefineById(String btmType,String id){
    public UITableDefineVO getTableDefineById(String btmType,String id) throws PLException {
        return uiService.getTableById(btmType,id);
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebUIDataController.java
@@ -46,7 +46,7 @@
    @PostMapping("/dataGridQuery")
    @VciUnCheckRight
    @VciBusinessLog(operateName = "列表数据的查询",description = "${param.btmname}里的${param.tableDefineId}")
    public DataGrid dataGrid(UIDataGridQuery dataGridQuery){
    public DataGrid dataGrid(UIDataGridQuery dataGridQuery) throws PLException {
        return uiDataService.getDataForGrid(dataGridQuery);
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsAttributeServiceI.java
@@ -104,6 +104,14 @@
    List<OsAttributeVO> listAttrByIds(Collection<String> attrCodes);
    /**
     * 使用属性编号获取对象--批量
     * @param attrCodes 属性的英文名称
     * @param attributeVOMap 属性对象
     * @return 属性的显示对象
     */
    List<OsAttributeVO> listAttrByIds(Collection<String> attrCodes, Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 批量添加属性
     * @param attribItemList 属性的列表
     */
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBtmServiceI.java
@@ -4,10 +4,7 @@
import com.vci.corba.omd.btm.BizType;
import com.vci.dto.OsBtmTypeDTO;
import com.vci.model.IndexObject;
import com.vci.pagemodel.OsBtmTypeAttributeVO;
import com.vci.pagemodel.OsBtmTypeVO;
import com.vci.pagemodel.OsERVO;
import com.vci.pagemodel.OsUsedAttributeVO;
import com.vci.pagemodel.*;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.PageHelper;
@@ -49,6 +46,11 @@
     * @return 业务类型对象
     */
    List<OsBtmTypeVO> selectAllBtm();
    /**
     * 查询所有的业务类型
     * @return 业务类型对象
     */
    List<OsBtmTypeVO> selectAllBtm(Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 获取名字以filter开始的业务类型(for 查询),主要用于属性池的业务类型选择对话框
@@ -74,18 +76,24 @@
    Map<String,OsBtmTypeVO> selectAllBtmMap();
    /**
     * 查询所有的业务类型映射
     * @return key 是业务的英文名称的小写
     */
    Map<String,OsBtmTypeVO> selectAllBtmMap(Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 数据对象转换为显示对象
     * @param btmItems 数据对象
     * @return 显示对象
     */
    List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems);
    List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems,Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 数据对象转换为显示对象
     * @param btmItem 数据对象
     * @return 显示对象
     */
    OsBtmTypeVO btmDO2VO(BizType btmItem);
    OsBtmTypeVO btmDO2VO(BizType btmItem, Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 使用编号获取业务类型
@@ -100,6 +108,12 @@
     * @return 业务类型
     */
    OsBtmTypeVO getBtmById(String id);
    /**
     * 使用编号获取业务类型
     * @param id 编号
     * @return 业务类型
     */
    OsBtmTypeVO getBtmById(String id, Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 获取业务类型的在哪个属性中使用
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIDataServiceI.java
@@ -34,7 +34,7 @@
     * @return DataGrid中data为Map<String,String>格式
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    DataGrid getDataForGrid(UIDataGridQuery dataGridQuery)  throws VciBaseException;
    DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws VciBaseException, PLException;
    /**
     * 获取表单的数据
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java
@@ -1,5 +1,6 @@
package com.vci.web.service;
import com.vci.corba.common.PLException;
import com.vci.corba.portal.data.PLTabButton;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.corba.portal.data.PortalVI;
@@ -90,7 +91,7 @@
     * @param queryDetail 查询明细
     * @return 显示对象
     */
    UITableDefineVO tableDO2VO(PortalVI prm,boolean queryDetail);
    UITableDefineVO tableDO2VO(PortalVI prm, boolean queryDetail, Map<String, OsAttributeVO> attributeVOMap) throws PLException;
    /**
     * 使用表格的英文名称获取表单
@@ -98,7 +99,7 @@
     * @param btmId 业务类型
     * @return 表单的定义
     */
    UITableDefineVO getTableById(String btmId,String id);
    UITableDefineVO getTableById(String btmId,String id) throws PLException;
    /**
     * 使用表格的英文名称获取表单
@@ -169,7 +170,7 @@
     * @param componentOid 组件的主键
     * @return 主键的显示对象
     */
    UIComponentVO getComponentByOid(String componentOid);
    UIComponentVO getComponentByOid(String componentOid, Map<String, OsAttributeVO> attributeVOMap);
    /**
     * 获取某个组件的按钮
@@ -190,7 +191,7 @@
     * @param button 按钮的数据对象
     * @return 显示对象
     */
    UIButtonDefineVO buttonDO2VO(PLTabButton button) ;
    UIButtonDefineVO buttonDO2VO(PLTabButton button,Map<String, UIActionVO> actionVOMap) ;
    /**
     * 查询所有的组件
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java
@@ -517,6 +517,32 @@
    }
    /**
     * 使用属性编号获取对象--批量
     *
     * @param attrCodes 属性的英文名称
     * @param attributeVOMap 属性对象
     * @return 属性的显示对象
     */
    @Override
    public List<OsAttributeVO> listAttrByIds(Collection<String> attrCodes,Map<String, OsAttributeVO> attributeVOMap) {
        if(CollectionUtils.isEmpty(attrCodes)){
            return null;
        }
        if(attributeVOMap == null){
            attributeVOMap = self.selectAllAttributeMap();
        }
        List<OsAttributeVO> attributeVOS = new ArrayList<>();
        Map<String, OsAttributeVO> finalAttributeVOMap = attributeVOMap;
        attrCodes.stream().forEach(attrCode->{
            OsAttributeVO attributeVO = finalAttributeVOMap.getOrDefault(attrCode.toLowerCase(),null);
            if(attributeVO!=null){
                attributeVOS.add(attributeVO);
            }
        });
        return attributeVOS;
    }
    /**
     * 批量添加属性
     *
     * @param attribItemList 属性的列表
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
@@ -152,7 +152,22 @@
    @VciUnLog
    public List<OsBtmTypeVO> selectAllBtm() {
        try {
            return btmDO2VOs(Arrays.stream(platformClientUtil.getBtmService().getBizTypes("")).collect(Collectors.toList()));
            return btmDO2VOs(Arrays.stream(platformClientUtil.getBtmService().getBizTypes("")).collect(Collectors.toList()),null);
        } catch (PLException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 查询所有的业务类型
     *
     * @return 业务类型对象
     */
    @Override
    @VciUnLog
    public List<OsBtmTypeVO> selectAllBtm(Map<String, OsAttributeVO> attributeVOMap) {
        try {
            return btmDO2VOs(Arrays.stream(platformClientUtil.getBtmService().getBizTypes("")).collect(Collectors.toList()),attributeVOMap);
        } catch (PLException e) {
            throw new RuntimeException(e);
        }
@@ -168,6 +183,16 @@
    public Map<String, OsBtmTypeVO> selectAllBtmMap() {
        return Optional.ofNullable(self.selectAllBtm()).orElseGet(() -> new ArrayList<OsBtmTypeVO>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(), t -> t, (o1, o2) -> o1));
    }
    /**
     * 查询所有的业务类型映射
     *
     * @return key 是业务的英文名称的小写
     */
    @Override
    @VciUnLog
    public Map<String, OsBtmTypeVO> selectAllBtmMap(Map<String, OsAttributeVO> attributeVOMap) {
        return Optional.ofNullable(self.selectAllBtm(attributeVOMap)).orElseGet(() -> new ArrayList<OsBtmTypeVO>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(), t -> t, (o1, o2) -> o1));
    }
    /**
     * 数据对象转换为显示对象
@@ -176,10 +201,10 @@
     * @return 显示对象
     */
    @Override
    public List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems) {
    public List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems,Map<String, OsAttributeVO> attributeVOMap) {
        List<OsBtmTypeVO> VOS = new ArrayList<>();
        Optional.ofNullable(btmItems).orElseGet(() -> new ArrayList<>()).stream().forEach(btmItem -> {
            OsBtmTypeVO vo = btmDO2VO(btmItem);
            OsBtmTypeVO vo = btmDO2VO(btmItem,attributeVOMap);
            VOS.add(vo);
        });
        return VOS;
@@ -192,7 +217,7 @@
     * @return 显示对象
     */
    @Override
    public OsBtmTypeVO btmDO2VO(BizType btmItem) {
    public OsBtmTypeVO btmDO2VO(BizType btmItem, Map<String, OsAttributeVO> attributeVOMap) {
        OsBtmTypeVO vo = new OsBtmTypeVO();
        if (btmItem != null) {
            vo.setOid(btmItem.oid);
@@ -226,7 +251,7 @@
            }
            vo.setLifeCycleIds(Arrays.stream(btmItem.lifeCycles).collect(Collectors.joining(",")));
            vo.setApNameArray(btmItem.apNameArray);
            List<OsAttributeVO> attributeVOS = attributeService.listAttrByIds(Arrays.stream(btmItem.apNameArray).collect(Collectors.toList()));
            List<OsAttributeVO> attributeVOS = attributeService.listAttrByIds(Arrays.stream(btmItem.apNameArray).collect(Collectors.toList()),attributeVOMap);
            List<OsBtmTypeAttributeVO> btmTypeAttributeVOS = new ArrayList<>();
            Optional.ofNullable(attributeVOS).orElseGet(() -> new ArrayList<>()).stream().forEach(attributeVO -> {
                OsBtmTypeAttributeVO btmTypeAttributeVO = new OsBtmTypeAttributeVO();
@@ -287,6 +312,19 @@
            return null;
        }
        return self.selectAllBtmMap().getOrDefault(id.toLowerCase(), null);
    }
    /**
     * 使用编号获取业务类型
     *
     * @param id 编号
     * @return 业务类型
     */
    @Override
    public OsBtmTypeVO getBtmById(String id,Map<String, OsAttributeVO> attributeVOMap) {
        if (StringUtils.isBlank(id)) {
            return null;
        }
        return self.selectAllBtmMap(attributeVOMap).getOrDefault(id.toLowerCase(), null);
    }
    /**
@@ -366,7 +404,7 @@
            return new ArrayList<>();
        }
        BizType bizType = bizTypes[0];
        OsBtmTypeVO btmTypeVO = btmDO2VO(bizType);
        OsBtmTypeVO btmTypeVO = btmDO2VO(bizType,null);
        List<OsBtmTypeAttributeVO> attributes = btmTypeVO.getAttributes();
        if (attributes == null) {
            attributes = new ArrayList<>();
@@ -646,7 +684,7 @@
        List<Tree> rootTreeList = new ArrayList<>();
        BizType[] bizTypes = getBizTypes("");
        OsBtmTypeVO osBtmTypeVO = null;
        List<OsBtmTypeVO> osBtmTypeVOS = btmDO2VOs(Arrays.asList(bizTypes));
        List<OsBtmTypeVO> osBtmTypeVOS = btmDO2VOs(Arrays.asList(bizTypes),null);
        for (int i = 0; i < osBtmTypeVOS.size(); i++) {
            osBtmTypeVO = osBtmTypeVOS.get(i);
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java
@@ -69,6 +69,11 @@
     */
    @Autowired
    private OsBtmServiceI btmService;
    /**
     * 属性服务
     */
    @Autowired
    private OsAttributeServiceI attrService;
    /**
     * 链接类型
@@ -130,10 +135,10 @@
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    @Override
    public DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws VciBaseException {
    public DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(dataGridQuery,"查询对象",dataGridQuery.getBtmname(),"业务类型",dataGridQuery.getTableDefineId());
        //先判断查询模板
        UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid()).getTableDefineVO();
        UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(),null).getTableDefineVO();
        String queryTemplate = !CollectionUtils.isEmpty(dataGridQuery.getSourceData())?dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()):tableDefineVO.getQueryTemplateName();
        if(StringUtils.isBlank(queryTemplate)){
            //说明没有设置查询模板,需要看看在这个表格所在的组件有没有设置
@@ -339,7 +344,8 @@
    @Override
    public List<Tree> getDataForTree(UITreeQuery treeQuery) throws VciBaseException {
        VciBaseUtil.alertNotNull(treeQuery,"表单的查询对象",treeQuery.getBtmname(),"业务类型的信息",treeQuery.getComponentOid(),"树所在的组件的主键");
        UIComponentVO componentVO = uiEngineService.getComponentByOid(treeQuery.getComponentOid());
        Map<String, OsAttributeVO> attributeVOMap = attrService.selectAllAttributeMap();
        UIComponentVO componentVO = uiEngineService.getComponentByOid(treeQuery.getComponentOid(),attributeVOMap);
        if(componentVO == null || StringUtils.isBlank(componentVO.getOid())){
            throw new VciBaseException("树的配置信息没有获取到");
        }
@@ -382,7 +388,7 @@
        if(StringUtils.isBlank(treeDefineVO.getLinkType())){
            //这个是业务类型的自参照
            //以前的平台没有对自参照这种有全部查询的
            OsBtmTypeVO btmTypeVO = btmService.getBtmById(treeDefineVO.getBtmType());
            OsBtmTypeVO btmTypeVO = btmService.getBtmById(treeDefineVO.getBtmType(),attributeVOMap);
            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
            queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
@@ -82,6 +82,12 @@
    private OsBtmServiceI btmService;
    /**
     * 属性的服务
     */
    @Autowired
    private OsAttributeServiceI attrService;
    /**
     * 业务类型的服务
     */
    @Autowired
@@ -315,7 +321,13 @@
                    //说明是链接类型
                    field = field.substring("t_oid.".length());
                }
                OsAttributeVO attributeVO = attributeService.getAttr(field);
//                OsAttributeVO attributeVO = attributeService.getAttr(field);
                OsAttributeVO attributeVO = null;
                try {
                    attributeVO = attributeService.attributeDO2VO(platformClientUtil.getAttributeService().getAttributeDefByName(field));
                } catch (PLException e) {
                    throw new RuntimeException(e);
                }
                UIFormReferVO referVO = new UIFormReferVO();
                if(attributeVO !=null && StringUtils.isNotBlank(attributeVO.getBtmTypeId())
                        && StringUtils.isBlank(itemXO.getRefer())
@@ -473,7 +485,12 @@
    public List<UITableDefineVO> tableDO2VOs(Collection<PortalVI> prms, boolean queryDetail) {
        List<UITableDefineVO> tableDefineVOList = new ArrayList<>();
        Optional.ofNullable(prms).orElseGet(()->new ArrayList<PortalVI>()).stream().forEach(portal->{
            UITableDefineVO defineVO = tableDO2VO(portal,queryDetail);
            UITableDefineVO defineVO = null;
            try {
                defineVO = tableDO2VO(portal,queryDetail,null);
            } catch (PLException e) {
                throw new RuntimeException(e);
            }
            tableDefineVOList.add(defineVO);
        });
        return tableDefineVOList;
@@ -488,7 +505,7 @@
     */
    @Override
    @VciUnLog
    public UITableDefineVO tableDO2VO(PortalVI portal, boolean queryDetail) {
    public UITableDefineVO tableDO2VO(PortalVI portal, boolean queryDetail, Map<String, OsAttributeVO> attributeVOMap) throws PLException {
        UITableDefineVO tableDefineVO = new UITableDefineVO();
        tableDefineVO.setOid(portal.id);
        tableDefineVO.setId(portal.viName);
@@ -593,7 +610,7 @@
                            fieldVO.setSortField(fieldName);
                            fieldVO.setEdit("combox");
                            //肯定是业务类型,因为链接类型没有这个字段
                            OsBtmTypeVO btmTypeVO = btmService.getBtmById(tableDefineVO.getBtmType());
                            OsBtmTypeVO btmTypeVO = btmService.btmDO2VO(platformClientUtil.getBtmService().getBizTypeByName(tableDefineVO.getBtmType()),attributeVOMap);
                            if(btmTypeVO!=null && StringUtils.isNotBlank(btmTypeVO.getLifeCycleId())){
                                fieldVO.setComboxKey(btmTypeVO.getLifeCycleId() + LC_STATUS_SUBFIX);
                            }
@@ -712,7 +729,7 @@
     * @return 表单的定义
     */
    @Override
    public UITableDefineVO getTableById(String btmId, String id) {
    public UITableDefineVO getTableById(String btmId, String id) throws PLException {
        if(StringUtils.isBlank(btmId) || StringUtils.isBlank(id)){
            return null;
        }
@@ -723,7 +740,7 @@
            } catch (PLException vciError) {
                throw WebUtil.getVciBaseException(vciError);
            }
            return tableDO2VO(portalVI,true);
            return tableDO2VO(portalVI,true,null);
        }
        return self.selectAllTableMap().getOrDefault(btmId.toLowerCase()+SEP+id.toLowerCase(),null);
    }
@@ -1060,8 +1077,14 @@
     */
    private List<UILayoutVO> UILayoutDO2VOs(Collection<PLTabPage> pages, boolean queryDetail){
        List<UILayoutVO> contentVOS = new ArrayList<>();
        Map<String, OsAttributeVO> attributeVOMap;
        if(pages != null && pages.size() > 0){
            attributeVOMap = attrService.selectAllAttributeMap();
        }else{
            attributeVOMap = null;
        }
        Optional.ofNullable(pages).orElseGet(()->new ArrayList<PLTabPage>()).stream().forEach(page->{
            UILayoutVO layoutVO = UILayoutDO2VO(page, queryDetail);
            UILayoutVO layoutVO = UILayoutDO2VO(page, queryDetail,attributeVOMap);
            if(layoutVO.isEnableStatus()) {
                contentVOS.add(layoutVO);
            }
@@ -1084,7 +1107,7 @@
     * @return 区域的显示对象
     */
    @VciUnLog
    private UILayoutVO UILayoutDO2VO(PLTabPage page, boolean queryDetail){
    private UILayoutVO UILayoutDO2VO(PLTabPage page, boolean queryDetail,Map<String, OsAttributeVO> attributeVOMap){
        UILayoutVO layoutVO = new UILayoutVO();
        if(page !=null ){
            layoutVO.setOid(page.plOId);
@@ -1124,7 +1147,7 @@
            if(queryDetail){
                //单个的,直接获取
                try {
                    layoutVO.setComponentVOs(uiComponentDO2VOs(Arrays.stream(platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(layoutVO.getOid())).collect(Collectors.toList()),true));
                    layoutVO.setComponentVOs(uiComponentDO2VOs(Arrays.stream(platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(layoutVO.getOid())).collect(Collectors.toList()),true,attributeVOMap));
                } catch (PLException vciError) {
                    throw WebUtil.getVciBaseException(vciError);
                }
@@ -1164,13 +1187,13 @@
     * @return 主键的显示对象
     */
    @Override
    public UIComponentVO getComponentByOid(String componentOid) {
    public UIComponentVO getComponentByOid(String componentOid, Map<String, OsAttributeVO> attributeVOMap) {
        if(StringUtils.isBlank(componentOid)){
            return null;
        }
        if(!QUERY_BY_CACHE){
            try {
                return uiComponentDO2VO(platformClientUtil.getUIService().getPLPageDefinationById(componentOid),true);
                return uiComponentDO2VO(platformClientUtil.getUIService().getPLPageDefinationById(componentOid),true,attributeVOMap);
            } catch (PLException vciError) {
                throw WebUtil.getVciBaseException(vciError);
            }
@@ -1189,10 +1212,10 @@
     * @param pages 数据对象
     * @return 显示对象
     */
    private List<UIComponentVO> uiComponentDO2VOs(Collection<com.vci.corba.portal.data.PLPageDefination> pages, boolean queryDetail){
    private List<UIComponentVO> uiComponentDO2VOs(Collection<com.vci.corba.portal.data.PLPageDefination> pages, boolean queryDetail,Map<String, OsAttributeVO> attributeVOMap){
        List<UIComponentVO> componentVOS = new ArrayList<>();
        pages.stream().forEach(page->{
            componentVOS.add(uiComponentDO2VO(page,queryDetail));
            componentVOS.add(uiComponentDO2VO(page,queryDetail,attributeVOMap));
        });
        return componentVOS;
    }
@@ -1203,7 +1226,7 @@
     * @return 显示对象
     */
    @VciUnLog
    private UIComponentVO uiComponentDO2VO(PLPageDefination page, boolean queryDetail){
    private UIComponentVO uiComponentDO2VO(PLPageDefination page, boolean queryDetail, Map<String, OsAttributeVO> attributeVOMap){
        UIComponentVO componentVO = new UIComponentVO();
        if(page !=null){
            componentVO.setOid(page.plOId);
@@ -1242,7 +1265,7 @@
                    componentVO.setTableDefineVO(tableDefineVOMap.get(key));
                }else{
                    try {
                        componentVO.setTableDefineVO(tableDO2VO(platformClientUtil.getUIService().getPortalVIByTypeNameAndVIName(btmType,componentDefineXO.getTemplateId()),true));
                        componentVO.setTableDefineVO(tableDO2VO(platformClientUtil.getUIService().getPortalVIByTypeNameAndVIName(btmType,componentDefineXO.getTemplateId()),true,attributeVOMap));
                    } catch (PLException vciError) {
                        throw WebUtil.getVciBaseException(vciError);
                    }
@@ -1278,7 +1301,7 @@
                    tableDefineVO= tableDefineVOMap.get(key);
                }else{
                    try {
                        tableDefineVO = tableDO2VO(platformClientUtil.getUIService().getPortalVIByTypeNameAndVIName(btmType,componentDefineXO.getTemplateId()),true);
                        tableDefineVO = tableDO2VO(platformClientUtil.getUIService().getPortalVIByTypeNameAndVIName(btmType,componentDefineXO.getTemplateId()),true,null);
                    } catch (PLException vciError) {
                        throw WebUtil.getVciBaseException(vciError);
                    }
@@ -1432,9 +1455,13 @@
    @Override
    public List<UIButtonDefineVO> buttonDO2VOs(Collection<com.vci.corba.portal.data.PLTabButton> buttons){
        List<UIButtonDefineVO> buttonDefineVOS = new ArrayList<>();
        Optional.ofNullable(buttons).orElseGet(()->new ArrayList<>()).stream().forEach(button->{
            buttonDefineVOS.add(buttonDO2VO(button));
        });
        if(buttons != null && buttons.size() > 0){
            Map<String, UIActionVO> actionVOMap = self.selectAllActionMap();
            Optional.ofNullable(buttons).orElseGet(()->new ArrayList<>()).stream().forEach(button->{
                buttonDefineVOS.add(buttonDO2VO(button, actionVOMap));
            });
        }
        return buttonDefineVOS;
    }
@@ -1444,9 +1471,8 @@
     * @return 显示对象
     */
    @Override
    public UIButtonDefineVO buttonDO2VO(com.vci.corba.portal.data.PLTabButton button)  {
    public UIButtonDefineVO buttonDO2VO(com.vci.corba.portal.data.PLTabButton button, Map<String, UIActionVO> actionVOMap)  {
        UIButtonDefineVO buttonVO = new UIButtonDefineVO();
        Map<String, UIActionVO> actionVOMap = self.selectAllActionMap();
//        Map<String, UIActionVO> actionVOMap = ServiceProvider.getUIService().getAllPLAction();
        if(button !=null){
            buttonVO.setOid(button.plOId);