ludc
2024-09-09 62d87ef3f2ca154763020279f4eb0113fce81903
Merge remote-tracking branch 'origin/master'

# Conflicts:
# Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsQueryTemplateController.java
已修改10个文件
已删除1个文件
已添加1个文件
1434 ■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightParamDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/ISmFunctionQueryService.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmFunctionQueryServicePlatformImpl.java 359 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsQueryTemplateController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsQuereyTemplateServiceI.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsQueryTemplateImpl.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/queryTemplate/businessTypeQuery.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formQueryDialog.vue 728 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightParamDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.vci.dto;
import lombok.Data;
import java.io.Serializable;
/**
 * ä¿å­˜æƒé™ä¼ è¾“对象
 * @author yuxc
 * @date 2024-09-06
 */
@Data
public class RoleRightParamDTO implements Serializable {
    /**
     * ç¦æ­¢ä¿®æ”¹è¿™ä¸ªå€¼
     */
    private static final long serialVersionUID = 2492852474710986720L;
    /**
     * çˆ¶èŠ‚ç‚¹çš„ä¸»é”®
     */
    public String parentId;
    /**
     * ä¸»é”®
     */
    public String id;
    /**
     * å½“前节点的类型 1表示模块,2表示操作
     */
    public int type;
    public long number;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/ISmFunctionQueryService.java
@@ -2,14 +2,13 @@
import com.vci.common.exception.VciException;
import com.vci.corba.common.PLException;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.RoleRightParamDTO;
import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum;
import com.vci.pagemodel.MenuVO;
import com.vci.pagemodel.SmFunctionVO;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.PageHelper;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.starter.web.pagemodel.TreeQueryObject;
import com.vci.starter.web.pagemodel.*;
import com.vci.pagemodel.UIContentVO;
import com.vci.web.service.OsBaseServiceI;
@@ -64,13 +63,11 @@
    List<MenuVO> getSysModelTreeMenuByPID(String parentId,String modeType,boolean isAll) throws VciBaseException;
    /**
     * é€šè¿‡æ¨¡å—ID获取子级列表
     * @param parentId
     * @param modeType æ¨¡å—类型
     * @param isAll æ˜¯å¦åŒ…括无效的模块,true则包括
     * @return
     * @throws VciBaseException
     */
    List<MenuVO> getSysModelAuthTreeMenuByPID(String parentId,String modeType,boolean isAll) throws VciBaseException, PLException;
    List<MenuVO> getSysModelAuthTreeMenuByPID(boolean isAll) throws VciBaseException, PLException;
    int checkChildObject(String moduleId) throws VciException;
@@ -163,4 +160,20 @@
    DataGrid<SmFunctionVO> gridFunctionByRoleOids(Collection<String> roleOidCollection, Map<String, String> queryMap, PageHelper pageHelper, ResourceControlTypeEnum resourceControlTypeEnum);
    UIContentVO getUIContentByBtmTypeAndId(TreeQueryObject treeQueryObject, ResourceControlTypeEnum bs) throws PLException;
    /**
     * èŽ·å–æŽˆæƒçš„æ¨¡å—
     * @param roleId è§’色主键
     * @return æ‰€å…·æœ‰æƒé™çš„主键
     * @throws PLException
     */
    List<String> getSysModelAuth(String roleId) throws PLException;
    /**
     * ä¿å­˜æŽˆæƒçš„æ¨¡å—
     * @param roleRightDTOS ç”¨æˆ·é€‰æ‹©æŽˆæƒæ¨¡å—信息
     * @param roleId è§’色主键
     * @return æŽˆæƒç»“æžœ
     * @throws PLException
     */
    BaseResult saveRoleRight(List<RoleRightParamDTO> roleRightDTOS, String roleId) throws PLException;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmFunctionQueryServicePlatformImpl.java
@@ -8,11 +8,15 @@
import com.vci.common.exception.VciException;
import com.vci.common.locale.LocaleDisplay;
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.corba.framework.data.*;
import com.vci.corba.omd.data.BusinessObject;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.RoleRightParamDTO;
import com.vci.frameworkcore.compatibility.ISmFunctionQueryService;
import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum;
import com.vci.model.RoleRightDO;
import com.vci.model.SmFunctionForPlatform1;
import com.vci.model.SmRoleForPlatform1;
import com.vci.pagemodel.MenuVO;
@@ -567,6 +571,163 @@
    }
    /**
     * èŽ·å–æŽˆæƒçš„æ¨¡å—
     * @param roleId è§’色主键
     * @return æ‰€å…·æœ‰æƒé™çš„主键
     * @throws PLException
     */
    @Override
    public List<String> getSysModelAuth(String roleId) throws PLException {
        RoleRightInfo[] roleRightList = platformClientUtil.getFrameworkService().getRoleRightList(roleId, WebUtil.getCurrentUserId());
        Map<String, Long> authMap = Arrays.stream(roleRightList).collect(Collectors.toMap(e -> e.funcId, e -> e.rightValue));
        String parentId;
        SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException();
        boolean adminOrDeveloperOrRoot = rightControlUtil.isAdminOrDeveloperOrRoot(sessionInfo.getUserId());
        if (adminOrDeveloperOrRoot) {
            //系统菜单
            parentId = SYSTEMMANAGMENTNODE;
        } else if (rightControlUtil.isThreeAdminCurUser()) {
            //三员返回管理功能模块相关的菜单
            parentId = SYSTEMMANAGMENTNODE;
        } else {
            //普通用户只返回业务功能模块相关的菜单
            parentId = ROOT_MENU_ID;
        }
        FunctionInfo[] moduleListByParentId = getModuleListByParentId(parentId, false);
        List<String> authList = new ArrayList<>();
        for (FunctionInfo functionInfo : moduleListByParentId) {
            if(authMap.containsKey(functionInfo.id)){
                authList.add(functionInfo.id);
                getChildAuthNode(functionInfo, authMap, authList);
            }
        }
        return authList;
    }
    public BaseResult saveRoleRight(List<RoleRightParamDTO> roleRightDTOS, String roleId) throws PLException {
        /**
         * å­˜å‚¨éœ€è¦ä¿å­˜çš„æƒé™
         */
        Map<String,RoleRightInfo> rightMap = new HashMap<String,RoleRightInfo>();
        Map<String, List<RoleRightParamDTO>> parentMap = roleRightDTOS.stream().collect(Collectors.groupingBy(e -> e.parentId));
        for (RoleRightParamDTO dto : roleRightDTOS) {
            RoleRightInfo obj = null;
            //判断类型
            if(dto.getType() == 1 && !dto.getParentId().equals(ROOT_MENU_ID)
                    && !dto.getParentId().equals(SYSTEMMANAGMENTNODE)
                    && !dto.getParentId().equals(OPERATENODE)){
                if(!rightMap.containsKey(dto.getParentId())){
                    obj = new RoleRightInfo();
                    obj.funcId = dto.getParentId();
                    obj.rightType = (short)1;
                    obj.rightValue = 1;//没有操作的模块权限值存储为0
                    obj.roleId = roleId;
                    obj.createUser = WebUtil.getCurrentUserId();
                    obj.createTime = new Date().getTime();
                    obj.modifyUser = WebUtil.getCurrentUserId();
                    obj.modifyTime = new Date().getTime();
                    obj.licensor = "";
                }else{
                    obj = rightMap.get(dto.getParentId());
                    if (obj == null) {
                        obj = new RoleRightInfo();
                        obj.funcId = dto.getParentId();
                        obj.rightType = (short)1;
                        obj.rightValue = 1;//没有操作的模块权限值存储为0
                        obj.roleId = roleId;
                        obj.createUser = WebUtil.getCurrentUserId();
                        obj.createTime = new Date().getTime();
                        obj.modifyUser = WebUtil.getCurrentUserId();
                        obj.modifyTime = new Date().getTime();
                        obj.licensor = "";
                    }else {
                        obj.rightValue = 1;
                    }
                }
                rightMap.put(dto.getParentId(), obj);
            }else if (dto.getType() == 2){
//                RoleRightInfo roleRightObj = new RoleRightInfo();
                if(!rightMap.containsKey(dto.getParentId())) {
                    obj = new RoleRightInfo();
                    obj.funcId = dto.getParentId();
                    obj.rightType = (short)1;
                    obj.rightValue = countRightValue(parentMap.get(dto.getParentId()));//没有操作的模块权限值存储为0
                    obj.roleId = roleId;
                    obj.createUser = WebUtil.getCurrentUserId();
                    obj.createTime = new Date().getTime();
                    obj.modifyUser = WebUtil.getCurrentUserId();
                    obj.modifyTime = new Date().getTime();
                    obj.licensor = "";
                    rightMap.put(dto.getParentId(), obj);
                }
            }
        }
        /**上面处理完成后,循环遍历取出MAP里的对象进行保存**/
        RoleRightInfo[] roleRightObjs =    new RoleRightInfo[rightMap.size()];
        Set<String> objSet = rightMap.keySet();
        Iterator<String> it = objSet.iterator();
        int i = 0;
        while(it.hasNext()){
            roleRightObjs[i++] = rightMap.get(it.next());
        }
        UserEntityInfo userEntityInfo = new UserEntityInfo();
        userEntityInfo.setModules("com.vci.client.framework.rightdistribution.roleRight.RoleRightPanel");
        userEntityInfo.setUserName(WebUtil.getCurrentUserId());
        boolean res =  platformClientUtil.getFrameworkService()
                .saveRoleRight(roleRightObjs,roleId,WebUtil.getCurrentUserId(), userEntityInfo);
        if(!res){
            throw new PLException("500", new String[]{"功能模块授权失败!"});
        }
        return BaseResult.success();
    }
    private long countRightValue(List<RoleRightParamDTO> dtos){
        long value = 0;
        for (RoleRightParamDTO dto : dtos) {
            value += (long)Math.pow(2, dto.getNumber());//累计加上各个操作的权限值
        }
        return value;
    }
    /**
     *
     * @param funcObj æ¨¡å—对象
     * @param authMap è¯¥è§’色下所有的权限数据
     * @param authList è¯¥è§’色下所具有的权限
     * @throws PLException
     */
    private void getChildAuthNode(FunctionInfo funcObj, Map<String, Long> authMap, List<String> authList) throws PLException {
        /**0表示该模块下什么都没有,1表示有模块,2表示有操作**/
        long funcType = platformClientUtil.getFrameworkService().checkChildObject(funcObj.id);
        if(funcType == 1){
            FunctionInfo[] funcInfos = platformClientUtil.getFrameworkService().getModuleListByParentId(funcObj.id, false);
            for(int i=0;i<funcInfos.length;i++){
                if(authMap.containsKey(funcInfos[i].id)){
                    authList.add(funcInfos[i].id);
                    getChildAuthNode(funcInfos[i], authMap, authList);
                }
            }
        }else if(funcType == 2){
            FuncOperationInfo[] funcOperates = platformClientUtil.getFrameworkService().getFuncOperationByModule(funcObj.id, "", true);
            for (int j = 0; j < funcOperates.length; j++) {
                if(authMap.containsKey(funcOperates[j].funcId)){
                    long rightValue = authMap.get(funcOperates[j].funcId);
                    long nodeValue = funcOperates[j].number;
                    long preValue = (rightValue >> nodeValue) & 1;
                    //进行位与操作,如果相等则表示具有当前操作的权限
                    if (preValue == 1) {
                        authList.add(funcOperates[j].id);
                    }
                }
            }
        }
    }
    /**
     * èŽ·å–æ‰€æœ‰çš„åŠŸèƒ½èœå•
     *
     * @param treeQueryObject     æ ‘查询对象
@@ -903,20 +1064,15 @@
    /**
     * é€šè¿‡æ¨¡å—ID获取子级列表
     * @param parentId
     * @param modeType æ¨¡å—类型
     * @param isAll æ˜¯å¦åŒ…括无效的模块,true则包括
     * @return
     * @throws VciBaseException
     */
    @Override
    public List<MenuVO> getSysModelAuthTreeMenuByPID(String parentId,String modeType,boolean isAll) throws VciBaseException, PLException {
        List<MenuVO> menuVOList = new ArrayList<>();
//        if(Func.isBlank(parentId)){
//            return menuVOList;
//        }
    public List<MenuVO> getSysModelAuthTreeMenuByPID(boolean isAll) throws VciBaseException, PLException {
        SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException();
        boolean adminOrDeveloperOrRoot = rightControlUtil.isAdminOrDeveloperOrRoot(sessionInfo.getUserId());
        String parentId;
        if (adminOrDeveloperOrRoot) {
            //系统菜单
            parentId = SYSTEMMANAGMENTNODE;
@@ -928,7 +1084,7 @@
            parentId = ROOT_MENU_ID;
        }
        List<MenuVO> functionVOList = new ArrayList<>();
        FunctionInfo[] moduleListByParentId = getModuleListByParentId(parentId, false);
        FunctionInfo[] moduleListByParentId = getModuleListByParentId(parentId, isAll);
        for (FunctionInfo menu : moduleListByParentId) {
            if(!menu.isValid){
                continue;
@@ -944,14 +1100,6 @@
            functionVO.getMeta().put("keepAlive",false);
            functionVO.setSort((int) menu.seq);
            findChildAuthFunctionVO(functionVO, isAll);
//            try {
//                functionVO.setChildren(findChildAuthFunctionVO(menu.id));
//            } catch (PLException e) {
//                e.printStackTrace();
//                String errorMsg = "菜单查询时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
//                logger.error(errorMsg);
//                throw new VciBaseException(errorMsg);
//            }
            if(functionVO.getChildren().size() > 0){
                functionVO.setHasChildren(true);
            }else {
@@ -960,185 +1108,6 @@
            functionVOList.add(functionVO);
        }
        return functionVOList;
//        RoleRightInfo[] userRoleRights = rightControlUtil.getRoleRightByUserName(sessionInfo.getUserId());
//        Map<String, List<FunctionInfo>> map = rightControlUtil.getAllChildrenFunctionsByUserName(
//                parentId, sessionInfo.getUserId(), userRoleRights);
//
//        if(Func.isEmpty(map.get(parentId))) {
//            return functionVOList;
//        }
//        for (FunctionInfo menu : map.get(parentId)) {
//            if(!menu.isValid){
//                continue;
//            }
//            MenuVO functionVO = new MenuVO();
//            functionVO.setId(menu.id);
//            functionVO.setSource(menu.image);
//            //if(StringUtils.isBlank(menu.resourceB)){
//            //    continue;
//            //}
//            functionVO.setPath(menu.resourceB);
//            functionVO.setParentId(menu.parentId);
//            functionVO.setCode(menu.aliasName);
//            functionVO.setAlias(menu.aliasName);
//            functionVO.setName(menu.name);
//            functionVO.getMeta().put("keepAlive",false);
//            functionVO.setSort((int) menu.seq);
////            try {
////                functionVO.setChildren(findChildAuthFunctionVO(menu.id, map));
////            } catch (PLException e) {
////                e.printStackTrace();
////                String errorMsg = "菜单查询时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
////                logger.error(errorMsg);
////                throw new VciBaseException(errorMsg);
////            }
//            if(functionVO.getChildren().size() > 0){
//                functionVO.setHasChildren(true);
//            }else {
//                functionVO.setHasChildren(false);
//            }
//            functionVOList.add(functionVO);
//        }
//        //如果是开发或者测试用户,需哟获取系统模块配置菜单
//        if(adminOrDeveloperOrRoot){
//            //获取首页系统模块配置菜单
//            MenuVO menuVO = JsonConfigReader.getSysModuleConf().getSysModuleNode();
//            if(Func.isNotEmpty(menuVO)){
//                functionVOList.add(menuVO);
//            }
//        }
//        return functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList());
//
//
//
//
//        boolean isFunctionObject = Func.isNotBlank(modeType) && modeType.equalsIgnoreCase("FunctionObject");
//        if(parentId.equals("systemManagmentNode") || parentId.equals("modelManagmentNode") || isFunctionObject){
//            int childType = this.checkChildObject(parentId);
//            if(isFunctionObject){
//                try {
//                    /**判断该模块下子对象是模块还是操作,0表示无子节点,1表示是模块,2表示是操作**/
//                    if(childType == 2){
//                        try{
//                            FuncOperationInfo[] infos = platformClientUtil.getFrameworkService().getFuncOperationByModule(parentId, "", false);
//                            if(Func.isNotEmpty(infos.length)){
//                                childType = this.checkChildObject(infos[0].id); //都是同一层所以取第一个即可查询是什么类型
//                                for(int i = 0;i < infos.length ;i++){
//                                    FuncOperationInfo info = infos[i];
//                                    MenuVO menuVO = new MenuVO();
//                                    menuVO.setChildType(childType);
//                                    menuVO.setId(info.id);
//                                    menuVO.setFuncId(info.funcId);
//                                    menuVO.setCode(info.operIndentify);
//                                    menuVO.setOperId(info.operId);
//                                    menuVO.setName(info.operName);
//                                    menuVO.setAlias(info.operAlias);
//                                    menuVO.setRemark(info.operDesc);
//                                    menuVO.setSort((int) info.number);
//                                    menuVO.setModeType("FunctionObject");
//                                    menuVO.setIsValid(info.isValid);
//                                    menuVO.setHasChildren(false);
//                                    menuVOList.add(menuVO);
//                                }
//                            }
//                        }catch (PLException e) {
//                            e.printStackTrace();
//                            throw new VciBaseException(String.valueOf(e.code), e.messages);
//                        }
//                    }else if(childType == 1){
//                        try{
//                            FunctionInfo[] funcInfos = platformClientUtil.getFrameworkService().getModuleListByParentId(parentId, isAll);
//                            if(Func.isNotEmpty(funcInfos.length)){
//                                childType = this.checkChildObject(funcInfos[0].id); //都是同一层所以取第一个即可查询是什么类型
//                                for(int i = 0;i < funcInfos.length; i++){
//                                    FunctionInfo funcInfo = funcInfos[i];
//                                    MenuVO menuVO = this.functionInfoToMenuVO(funcInfo);
//                                    menuVO.setChildType(childType);
//                                    menuVO.setModeType("FunctionObject");
//                                    menuVOList.add(menuVO);
//                                }
//                            }
//                        }catch (PLException e) {
//                            e.printStackTrace();
//                            throw new VciBaseException(String.valueOf(e.code),e.messages);
//                        }
//                    }
//                } catch (Exception e) {
//                    e.printStackTrace();
//                    throw new VciBaseException("模块查询时出现错误,原因:"+VciBaseUtil.getExceptionMessage(e));
//                }
//            }else{
//                try{
//                    MenuVO parentNode = null;
//                    //将返回的节点外层套上当前父节点
//                    if("systemManagmentNode".equals(parentId)){
//                        parentNode = JsonConfigReader.getSysModuleConf().getSystemManagmentNode();
//                    }else if("modelManagmentNode".equals(parentId)){
//                        parentNode = JsonConfigReader.getSysModuleConf().getModelManagmentNode();
//                    }
//                    //如果查询的是第一层节点就需要直接返回systemManagmentNode或modelManagmentNode节点
//                    if(Func.isNotBlank(modeType) && modeType.equals("firstNode")){
//                        menuVOList.add(parentNode);
//                        return menuVOList;
//                    }
//                    //查询的三级节点
//                    FunctionInfo[] funcInfos = platformClientUtil.getFrameworkService().getModuleListByParentId(parentId, isAll);
//                    for(int i = 0;i < funcInfos.length; i++){
//                        FunctionInfo funcInfo = funcInfos[i];
//                        MenuVO menuVO = this.functionInfoToMenuVO(funcInfo);
//                        menuVO.setModeType("FunctionObject");
//                        menuVO.setChildType(childType);
//                        menuVOList.add(menuVO);
//                    }
//                    return menuVOList;
//                }catch (PLException e) {
//                    e.printStackTrace();
//                    throw new VciBaseException(String.valueOf(e.code),e.messages);
//                }
//            }
//        }
//        else if(parentId.equals("operateNode")){
//            //加载所有操作
//            try{
//                //将返回的节点外层套上当前父节点
//                MenuVO parentNode = JsonConfigReader.getSysModuleConf().getOperateNode();
//                //如果查询的是第一层节点就需要直接返回sysOptionNode节点
//                if(Func.isNotBlank(modeType) && modeType.equals("firstNode")){
//                    menuVOList.add(parentNode);
//                    return menuVOList;
//                }
//                OperateInfo[] operateInfos = platformClientUtil.getFrameworkService().getOperateTreeList(parentId);
//                for(int i = 0; i < operateInfos.length;i++ ){
//                    OperateInfo operateInfo = operateInfos[i];
//                    MenuVO menuVO = new MenuVO();
//                    menuVO.setId(operateInfo.id);
//                    menuVO.setName(operateInfo.name);
//                    menuVO.setCode(operateInfo.identify);
//                    menuVO.setAlias(operateInfo.alias);
//                    menuVO.setCategory(2);
//                    menuVO.setChildType(0);
//                    menuVO.setRemark(operateInfo.desc);
//                    menuVO.getMeta().put("keepAlive",false);
//                    menuVO.setSort((int) operateInfo.seq);
//                    menuVO.setModeType("operateObject");
//                    menuVO.setHasChildren(false);
//                    menuVOList.add(menuVO);
//                }
//            }catch (PLException e) {
//                e.printStackTrace();
//                throw new VciBaseException(String.valueOf(e.code),new String[]{VciBaseUtil.getExceptionMessage(e)});
//            }
//        }
//        return null;
//        return menuVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList());
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
@@ -1,8 +1,11 @@
package com.vci.web.controller;
import com.vci.constant.FrameWorkLangCodeConstant;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.FuncOperationInfo;
import com.vci.corba.framework.data.OperateInfo;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.RoleRightParamDTO;
import com.vci.frameworkcore.compatibility.ISmFunctionQueryService;
import com.vci.frameworkcore.compatibility.SmHMSysModConfigServiceI;
import com.vci.pagemodel.AppConfigDetailInfoVO;
@@ -75,14 +78,12 @@
    /**
     * èŽ·å–å½“å‰æ¨¡å—ä¸‹çš„å­æ¨¡å—
     * @param parentId
     * @param modeType
     * @return
     */
    @GetMapping("/getSysModelAuthTreeMenuByPID")
    public BaseResult<List<MenuVO>> getSysModelAuthTreeMenuByPID(String parentId, String modeType) {
    public BaseResult<List<MenuVO>> getSysModelAuthTreeMenuByPID() {
        try {
            return BaseResult.dataList(functionQueryService.getSysModelAuthTreeMenuByPID(parentId,modeType,true));
            return BaseResult.dataList(functionQueryService.getSysModelAuthTreeMenuByPID(false));
        }catch (Exception e){
            e.printStackTrace();
            String errorMsg = "查询子模块时出现错误,原因:"+ VciBaseUtil.getExceptionMessage(e);
@@ -92,6 +93,42 @@
    }
    /**
     * èŽ·å–æ‰€æŽˆæƒçš„æ¨¡å—æƒé™
     * @param roleId è§’色
     * @return
     */
    @GetMapping("/getSysModelAuth")
    public BaseResult<List<String>> getSysModelAuth(String roleId) {
        try {
            return BaseResult.dataList(functionQueryService.getSysModelAuth(roleId));
        }catch (Exception e){
            e.printStackTrace();
            String errorMsg = "查询子模块时出现错误,原因:"+ VciBaseUtil.getExceptionMessage(e);
            logger.error(errorMsg);
            throw new VciBaseException(errorMsg);
        }
    }
    /**
     * ä¿å­˜æŽˆæƒçš„æ¨¡å—
     * @param roleRightDTOS ç”¨æˆ·é€‰æ‹©æŽˆæƒæ¨¡å—信息
     * @param roleId è§’色主键
     * @return æŽˆæƒç»“æžœ
     * @throws PLException
     */
    @PostMapping("/saveRoleRight")
    public BaseResult<List<String>> saveRoleRight(@RequestBody List<RoleRightParamDTO> roleRightDTOS, String roleId) {
        try {
            return functionQueryService.saveRoleRight(roleRightDTOS, roleId);
        }catch (Exception e){
            e.printStackTrace();
            String errorMsg = "保存模块时出现错误,原因:"+ VciBaseUtil.getExceptionMessage(e);
            logger.error(errorMsg);
            throw new VciBaseException(errorMsg);
        }
    }
    /**
     * æ·»åŠ æ¨¡å—
     * @param menuVO
     * @return
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsQueryTemplateController.java
@@ -1,18 +1,12 @@
package com.vci.web.controller;
import cn.hutool.core.io.FileUtil;
import com.vci.corba.common.PLException;
import com.vci.corba.omd.qtm.QTD;
import com.vci.dto.QTInfoDTO;
import com.vci.pagemodel.QtQueryVO;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.util.ControllerUtil;
import com.vci.starter.web.util.LocalFileUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.service.OsQuereyTemplateServiceI;
import com.vci.web.util.Func;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.DocumentException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -23,7 +17,9 @@
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
 * æŸ¥è¯¢æ¨¡æ¿çš„æŽ§åˆ¶å™¨
@@ -269,8 +265,8 @@
     * @return
     */
    @PostMapping("/expLinkTemplate")
    public void expLinkTemplate(@RequestBody List<String> names,HttpServletResponse response) throws PLException, IOException {
        quereyTemplateServiceI.expLinkTemplate(names, response);
    public void expLinkTemplate(@RequestBody Map qtNames, HttpServletResponse response) throws PLException, IOException {
        quereyTemplateServiceI.expLinkTemplate(String.valueOf(qtNames.get("qtNames")), response);
    }
    /**
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsQuereyTemplateServiceI.java
@@ -93,7 +93,7 @@
     * names æŸ¥è¯¢æ¨¡æ¿å
     * @return
     */
    void expLinkTemplate(List<String> names, HttpServletResponse response) throws PLException, IOException ;
    void expLinkTemplate(String names, HttpServletResponse response) throws PLException, IOException ;
    /**
     * å¯¼å…¥é“¾æŽ¥ç±»åž‹æŸ¥è¯¢æ¨¡æ¿
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsQueryTemplateImpl.java
@@ -265,6 +265,9 @@
                if(column.contains(".")){
                    column = StringUtils.substringAfterLast(column, ".");
                }
                if(column.contains(" ")){
                    column = StringUtils.substringBefore(column, " ");
                }
                AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(column);
                if(att == null || "".equals(att.oid)){
                    att = allSysAttr.get(column.toLowerCase());
@@ -321,6 +324,7 @@
                HashMap<String, String> data = new HashMap<>();
                data.put("column",child.getText().trim());
                data.put("type",att.vtDataType);
                childList.add(data);
            }
        }
        treeMap.put("child",childList);
@@ -998,34 +1002,6 @@
        return qt;
    }
//    /**
//     * ç»„装查询模板
//     * @return
//     */
//    public QueryTemplate getQT(HashMap<String,Object> dataMap){
//        QueryTemplate qt = new QueryTemplate();
//        qt.setType(QTConstants.TYPE_LINK);
//        //TODO String qtId =
//        qt.setLinkType((String) dataMap.get("linkTypeName"));
//        qt.setDirection( (Boolean)dataMap.get("rdPositive") ? QTConstants.DIRECTION_POSITIVE : QTConstants.DIRECTION_OPPOSITE);
//        qt.setBtmType((String) dataMap.get("btmName"));
//        if("所有类型".equals(dataMap.get("combRelaType"))){
//            qt.setBtmType("*");
//        }
//        qt.setVersion(getVersion((String) dataMap.get("versionValue")));
//        qt.setQueryISLeaf((Boolean) dataMap.get("isQueryIsLeaf"));
//        qt.setLevel(StringUtils.isBlank((CharSequence) dataMap.get("level")) ? 1 : Integer.valueOf(String.valueOf(dataMap.get("level"))));
//        List<String> clauseList = new ArrayList<String>();
//        //TODO æŸ¥è¯¢åˆ— æ˜¾ç¤ºåˆ—
//        clauseList.add("*");
//        qt.setClauseList(clauseList);
//        Condition con = new Condition();
//        qt.setCondition(con);
//        HashMap<String, ConditionItem> ciMap = getCIMap();
//        con.setCIMap(ciMap);
//        con.setRootCIName(con.getRootCINameByCIMap(ciMap));
//        return qt;
//    }
    /**
     * è¿”回查询的版本
@@ -1074,11 +1050,12 @@
     * @return
     */
    @Override
    public void expLinkTemplate(List<String> names, HttpServletResponse response) throws PLException, IOException {
    public void expLinkTemplate(String names, HttpServletResponse response) throws PLException, IOException {
        String defaultTempFolder = LocalFileUtil.getDefaultTempFolder();
        String vciqtmfFileName = defaultTempFolder + File.separator + "LinkTemplateExp" + new Date().getTime() + ".vciqtf";
        LinkQTExportData exportData = new LinkQTExportData();
        for (String name : names) {
        String[] splits = names.split(",");
        for (String name : splits) {
            QTInfo qt = platformClientUtil.getQTDService().getQT(name);
            exportData.getAllQTs().put(qt.qtName,qt);
            LinkType linkType = platformClientUtil.getLinkTypeService().getLinkType(qt.btmName);
@@ -1703,12 +1680,14 @@
                if(direction != null) {
                    if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
                        if(att == null ){
                            throw new PLException("500",new String[]{"属性字段:"+ abName +"未查询到,请确认!"});
                            continue;
//                            throw new PLException("500",new String[]{"属性字段:"+ abName +"未查询到,请确认!"});
                        }
                        att.name = "T_OID." + abName;
                    } else if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
                        if(att == null ){
                            throw new PLException("500",new String[]{"属性字段:"+ abName +"未查询到,请确认!"});
                            continue;
//                            throw new PLException("500",new String[]{"属性字段:"+ abName +"未查询到,请确认!"});
                        }
                        att.name = "F_OID." + abName;
                    }
Source/plt-web/plt-web-ui/src/api/queryTemplate/businessTypeQuery.js
@@ -1,9 +1,9 @@
import request from '@/router/axios';
//业务类型查询模板
// åˆ›å»º
export function linkSave(params) {
export function btmSave(params) {
  return request({
    url: "/api/templateController/linkSave",
    url: "/api/templateController/btmSave",
    method: "post",
    data:params
  });
@@ -17,9 +17,9 @@
  });
}
// æŸ¥è¯¢æ¡ä»¶çš„æŸ¥è¯¢æŽ¥å£ï¼ŒæŽ¥å£æ–¹å¼POST,参数与保存接口传参一致
export function getCriteria(params) {
export function getCriteriaBtm(params) {
  return request({
    url: "/api/templateController/getCriteria",
    url: "/api/templateController/getCriteriaBtm",
    method: "post",
    data:params
  });
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue
@@ -60,6 +60,7 @@
                               :queryCondition="queryCondition"
                               :queryTree="queryTree"
                               :levelFlag.sync="form.levelFlag"
                               @queryHandler="queryHandler"
            ></form-query-dialog>
          </fieldset>
        </el-main>
@@ -73,10 +74,10 @@
</template>
<script>
import {linkSave,getBizTypeQTDs} from "@/api/queryTemplate/businessTypeQuery";
import {btmSave,getBizTypeQTDs,getCriteriaBtm} from "@/api/queryTemplate/businessTypeQuery";
import basicOption from "@/util/basic-option";
import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
import formQueryDialog from "./formQueryDialog.vue";
import formQueryDialog from "@/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue";
export default {
  name: "formDialog",
  components:{formQueryDialog},
@@ -201,9 +202,18 @@
        allowDrop: () => {
          return false;
        },
        allowDrag: () => {
          return true;
        allowDrag: (dropNode) => {
          if (dropNode.data.attrs && dropNode.data.attrs.length>0) {
            return false;
          } else {
            return true;
          }
        },
        props:{
          label:'name',
          value:'name',
          children:'attrs'
        }
      },
      businessQueryDefineForm:'',//业务类型查询模板定义选中值
      businessQueryDefineDic:[],//业务类型查询模板定义下拉数据
@@ -227,7 +237,6 @@
      if (data.selectData) {
        this.selectData = data.selectData;
        this.form.qtName = this.selectData.qtName;
        this.form.level = this.selectData.queryTemplate.level;
        if (data.selectData.queryTemplate.orderInfoList && data.selectData.queryTemplate.orderInfoList.length > 0) {
          this.orderInfoList = JSON.parse(JSON.stringify(data.selectData.queryTemplate.orderInfoList));//已有排序
        }
@@ -244,6 +253,7 @@
        };
      }
      this.dialog.showDialog = true;
      this.treeOption.defaultExpandedKeys=[data.treeData.label]
      this.getTemp(data.treeData.label)
      this.getAllAttr();
    },
@@ -268,7 +278,7 @@
        if (valid) {
          const formData=this.initFormData();
          console.log(formData)
          linkSave(formData).then(res => {
          btmSave(formData).then(res => {
            if (res.data.success) {
              this.$message.success("保存成功");
              this.cancelDialog();
@@ -288,16 +298,7 @@
        qtName: this.form.qtName,
        levelFlag: this.form.levelFlag,
        queryTemplate: {
          clauseList: ['*'],
          direction: this.form.direction,
          id: this.form.qtName,
          linkType: this.form.btmName,
          orderInfoList: this.orderInfoList,
          recReturnMode: 1,//递归返回数据模式:1:RECRETURNMODE_FLAT, 2:RECRETURNMODE_FILTER
          rightFlag: true,
          secretFlag: true,
          type: 'link',
          version: this.form.version
        }
      }
      if (formData.levelFlag == 1) {
@@ -341,7 +342,6 @@
    },
    // è¡Œåˆ é™¤
    rowDeleteHandler(data) {
      debugger;
      this.orderInfoList.splice(data.index,1);
      this.orderFieldList.unshift({
        id: data.row.orderField
@@ -390,31 +390,22 @@
    //获取查询模板定义下拉
    getTemp(btmName) {
      if (btmName) {
        queryTemplateListByAttr({btmName: btmName}).then(res => {
        queryTemplateListByAttr({btmName: btmName,linkFlag:false}).then(res => {
          const data = res.data.data.map(item => {
            item.label = item.name + '-' + (item.linkTypeName || item.btmName);
            item.label = item.name + '-' + item.btmName;
            item.value = item.name;
            return item;
          });
            this.businessQueryDefineDic=data;
            data.length>0 && (this.businessQueryDefineForm= data[0].value);
        })
      }
    },
    businessQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.attrs.map(item => {
          return {
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.businessTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
          name: data.value,
          attrs: data.item.attrs
        }]
      }
    },
@@ -430,7 +421,25 @@
      if(this.form.levelFlag==1) {
        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-end', ev);
      }
    }
    },
    //查询
    queryHandler(){
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.$refs.formQuery.queryResultDialog.loading=true;
          const formData=this.initFormData();
          getCriteriaBtm(formData).then(res => {
            if (res.data.success) {
              this.resultData=res.data.data;
              this.$refs.formQuery.queryResultDialog.showDialog=true;
              this.$refs.formQuery.queryResultDialog.loading=false;
            }
          });
        } else {
          return false;
        }
      });
    },
  },
}
</script>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formQueryDialog.vue
ÎļþÒÑɾ³ý
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
@@ -60,6 +60,7 @@
                               :queryCondition="queryCondition"
                               :queryTree="queryTree"
                               :levelFlag.sync="form.levelFlag"
                               @queryHandler="queryHandler"
            ></form-query-dialog>
          </fieldset>
        </el-main>
@@ -85,7 +86,7 @@
<script>
import {getAllOrderbyAttributeByLink} from "@/api/modeling/linkType/api";
import {linkSave} from "@/api/queryTemplate/linkTypeQuery";
import {linkSave,getCriteria} from "@/api/queryTemplate/linkTypeQuery";
import basicOption from "@/util/basic-option";
import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
import formQueryDialog from "./formQueryDialog.vue";
@@ -268,12 +269,21 @@
        addBtn: false,
        filter:false,
        draggable: true,
        allowDrop: () => {
        allowDrop: (node) => {
          return false;
        },
        allowDrag: () => {
          return true;
        allowDrag: (dropNode) => {
          if (dropNode.data.attrs && dropNode.data.attrs.length>0) {
            return false;
          } else {
            return true;
          }
        },
        props:{
          label:'name',
          value:'name',
          children:'attrs'
        }
      },
      linkQueryDefineForm:'',//链接类型查询模板定义选中值
      linkQueryDefineDic:[],//链接类型查询模板定义下拉数据
@@ -369,7 +379,9 @@
        };
      }
      this.dialog.showDialog = true;
      this.treeOption.defaultExpandedKeys=[data.treeData.label]
      this.getTemp(data.treeData.label, true)
    },
    cancelDialog() {
      this.dialog.loading = false;
@@ -534,33 +546,17 @@
    },
    linkQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.attrs.map(item => {
          return {
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.linkTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
          name: data.value,
          attrs: data.item.attrs
        }]
      }
    },
    businessQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.attrs.map(item => {
          return {
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.businessTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
          name: data.value,
          attrs: data.item.attrs
        }]
      }
    },
@@ -576,7 +572,25 @@
      if(this.form.levelFlag==1) {
        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-end', ev);
      }
    }
    },
    //查询
    queryHandler(){
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.$refs.formQuery.queryResultDialog.loading=true;
          const formData=this.initFormData();
          getCriteria(formData).then(res => {
            if (res.data.success) {
              this.resultData=res.data.data;
              this.$refs.formQuery.queryResultDialog.showDialog=true;
              this.$refs.formQuery.queryResultDialog.loading=false;
            }
          });
        } else {
          return false;
        }
      });
    },
  },
}
</script>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue
@@ -94,6 +94,7 @@
        <el-button size="small" @click="cancleQueryDialog">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <!--查询-->
    <el-dialog v-dialogDrag
               :title="queryResultDialog.title"
               :visible.sync="queryResultDialog.showDialog"
@@ -102,7 +103,7 @@
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="queryResultDialog.showDialog='false'">
               @close="queryResultDialog.showDialog=false">
      <div class="el-input--small">
        <avue-crud  ref="crud" :data="resultData" :option="resultOption"
                    :table-loading="queryResultDialog.loading">
@@ -453,18 +454,18 @@
      const data = JSON.parse(event.dataTransfer.getData('item'));
      if (this.radioForm == 0) {
        const params = {
          clause: data.value,
          clause: data.name,
          operator: '=',
          ordinaryValue: ''
        }
        if (data.atttributes.vtDataType == 'VTInteger' || data.atttributes.vtDataType == 'VTDouble' || data.atttributes.vtDataType == 'VTLong') {
        if (data.vtDataType == 'VTInteger' || data.vtDataType == 'VTDouble' || data.vtDataType == 'VTLong') {
          params.operatorDic =JSON.parse(JSON.stringify(this.operatorIntDic)) ;
        } else if (data.atttributes.vtDataType == 'VTDateTime' || data.atttributes.vtDataType == 'VTDate' || data.atttributes.vtDataType == 'VTTime') {
        } else if (data.vtDataType == 'VTDateTime' || data.vtDataType == 'VTDate' || data.vtDataType == 'VTTime') {
          params.operatorDic = JSON.parse(JSON.stringify(this.operatorDateDic))
        } else {
          params.operatorDic = JSON.parse(JSON.stringify(this.operatorDic))
        }
        params.type=data.atttributes.vtDataType;
        params.type=data.vtDataType;
        this.conditionList.push(params)
      }else {
        if (this.clickNode.label != '并且' && this.clickNode.label != '或者') {
@@ -477,21 +478,21 @@
    initItem(data){
      this.treeIndex++;
      let item={
        label: data.value,
        value: data.value + this.treeIndex,
        label: data.name,
        value: data.name + this.treeIndex,
        valueIndex: 'v' + this.treeIndex,
        type:data.vtDataType,
        children: [],
        inputValue:data.value,
        inputValue:'',
        operator:'=',
        showLabel:data.value
        showLabel:data.name
      };
      let showLabel='';
      if(data.value.indexOf('.')!=-1){
        const labels=data.value.split('.')
      if(data.name.indexOf('.')!=-1){
        const labels=data.name.split('.')
        showLabel=labels[labels.length-1];
      }else {
        showLabel=data.value;
        showLabel=data.name;
      }
      item.showLabel=showLabel;
      return item
@@ -615,21 +616,7 @@
    },
    //查询
    queryHandler(){
      this.$parent.$parent.$parent.$parent.$refs.form.validate((valid) => {
        if (valid) {
          this.queryResultDialog.loading=true;
          const formData=this.$parent.$parent.$parent.$parent.initFormData();
          getCriteria(formData).then(res => {
            if (res.data.success) {
              this.resultData=res.data.data;
              this.queryResultDialog.showDialog=true;
              this.queryResultDialog.loading=false;
            }
          });
        } else {
          return false;
        }
      });
      this.$emit('queryHandler');
    },
    //选择查询模板
    checkTemp(index) {