1、主要优化业务类型加载过慢由于重复加载平台的属性、枚举数据,属性数据通过第一次加载全部进行传递解决,枚举数据通过新增枚举的本地线程工具类来进行实现。
已修改2个文件
已添加1个文件
57 ■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/AllOsEnumVOMapThreadLocal.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/AllOsEnumVOMapThreadLocal.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.vci.web.other;
import com.vci.pagemodel.OsEnumVO;
import java.util.Map;
/**
 * æ‰€æœ‰çˆ¶å­çº¿ç¨‹æžšä¸¾çš„æ˜¾ç¤ºå¯¹è±¡MAP
 */
public class AllOsEnumVOMapThreadLocal {
    //把构造函数私有,外面不能new,只能通过下面两个方法操作
    private AllOsEnumVOMapThreadLocal(){
    }
    private static final InheritableThreadLocal<Map<String, OsEnumVO>> LOCAL = new InheritableThreadLocal<>();
    public static void set(Map<String, OsEnumVO> data){
        LOCAL.set(data);
    }
    public static Map<String, OsEnumVO> get(){
        return LOCAL.get();
    }
    public static void remove(){
        LOCAL.remove();
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
@@ -44,6 +44,7 @@
import com.vci.starter.web.util.Lcm.ConcurrentDateFormat;
import com.vci.starter.web.util.Lcm.DateUtil;
import com.vci.starter.web.util.Lcm.Func;
import com.vci.web.other.AllOsEnumVOMapThreadLocal;
import com.vci.web.service.*;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
@@ -200,10 +201,14 @@
    @Override
    public List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems,Map<String, OsAttributeVO> attributeVOMap) {
        List<OsBtmTypeVO> VOS = new ArrayList<>();
        Optional.ofNullable(btmItems).orElseGet(() -> new ArrayList<>()).parallelStream().forEach(btmItem -> {
//        Optional.ofNullable(btmItems).orElseGet(() -> new ArrayList<>()).parallelStream().forEach(btmItem -> {
//            OsBtmTypeVO vo = btmDO2VO(btmItem,attributeVOMap);
//            VOS.add(vo);
//        });
        for (BizType btmItem : btmItems) {
            OsBtmTypeVO vo = btmDO2VO(btmItem,attributeVOMap);
            VOS.add(vo);
        });
        }
        return VOS;
    }
@@ -251,7 +256,8 @@
            vo.setApNameArray(btmItem.apNameArray);
            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 -> {
//            Optional.ofNullable(attributeVOS).orElseGet(() -> new ArrayList<>()).stream().forEach(attributeVO -> {
            for (OsAttributeVO attributeVO : attributeVOS) {
                OsBtmTypeAttributeVO btmTypeAttributeVO = new OsBtmTypeAttributeVO();
                BeanUtilForVCI.convert(attributeVO, btmTypeAttributeVO);
                btmTypeAttributeVO.setPkBtmType(vo.getOid());
@@ -271,7 +277,8 @@
                    btmTypeAttributeVO.setEnumItemMap(enumService.getEnumValueMap(btmTypeAttributeVO.getEnumId()));
                }
                btmTypeAttributeVOS.add(btmTypeAttributeVO);
            });
//            });
            }
            vo.setAttributes(btmTypeAttributeVOS);
        }
        return vo;
@@ -703,7 +710,13 @@
        List<Tree> rootTreeList = new ArrayList<>();
        BizType[] bizTypes = getBizTypes("");
        OsBtmTypeVO osBtmTypeVO = null;
        List<OsBtmTypeVO> osBtmTypeVOS = btmDO2VOs(Arrays.asList(bizTypes),null);
        Map<String, OsAttributeVO> attributeVOMap = null;
        if(bizTypes.length > 0){
            //先将所需要的属性、枚举数据全部加载出来,避免后续进行重复加载
            attributeVOMap = attributeService.selectAllAttributeMap();
            AllOsEnumVOMapThreadLocal.set(enumService.selectAllEnumMap());
        }
        List<OsBtmTypeVO> osBtmTypeVOS = btmDO2VOs(Arrays.asList(bizTypes),attributeVOMap);
        for (int i = 0; i < osBtmTypeVOS.size(); i++) {
            osBtmTypeVO = osBtmTypeVOS.get(i);
@@ -721,6 +734,7 @@
                rootTreeList.add(tree);
            }
        }
        AllOsEnumVOMapThreadLocal.remove();
        rootTreeList = rootTreeList.stream().sorted((o1, o2) -> o1.getId().compareTo(o2.getId())).collect(Collectors.toList());
        return rootTreeList;
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsEnumServiceImpl.java
@@ -26,6 +26,7 @@
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.util.*;
import com.vci.web.other.AllOsEnumVOMapThreadLocal;
import com.vci.web.service.OsEnumServiceI;
import com.vci.web.service.OsLifeCycleServiceI;
import com.vci.web.service.WebBoServiceI;
@@ -197,7 +198,10 @@
        if(StringUtils.isBlank(enumCode)){
            return  null;
        }
        Map<String, OsEnumVO> enumVOMap = self.selectAllEnumMap();
        Map<String, OsEnumVO> enumVOMap = AllOsEnumVOMapThreadLocal.get();
        if(enumVOMap == null){
            enumVOMap = self.selectAllEnumMap();
        }
        if(MY_DATA_SECRET.equalsIgnoreCase(enumCode)){
            //当前用户
            OsEnumVO enumVO = enumVOMap.getOrDefault(EnumIdConstant.DATASECRET_ENUMNAME, null);