| | |
| | | package com.vci.frameworkcore.compatibility.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.vci.client.common.providers.ServiceProvider; |
| | | import com.alibaba.fastjson.JSONReader; |
| | | import com.vci.client.ClientSession; |
| | | import com.vci.client.common.objects.RoleObject; |
| | | import com.vci.common.exception.VciException; |
| | | import com.vci.common.locale.LocaleDisplay; |
| | | import com.vci.corba.common.PLException; |
| | | import com.vci.corba.framework.data.FunctionInfo; |
| | | 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.RoleInfoDTO; |
| | | 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.frameworkcore.model.SmFunctionForPlatform1; |
| | | import com.vci.frameworkcore.model.SmRoleForPlatform1; |
| | | import com.vci.frameworkcore.pagemodel.MenuVO; |
| | | import com.vci.frameworkcore.pagemodel.SmFunctionVO; |
| | | import com.vci.model.RoleRightDO; |
| | | import com.vci.model.SmFunctionForPlatform1; |
| | | import com.vci.model.SmRoleForPlatform1; |
| | | import com.vci.pagemodel.MenuVO; |
| | | import com.vci.pagemodel.SmFunctionVO; |
| | | import com.vci.omd.utils.ObjectTool; |
| | | import com.vci.starter.web.constant.QueryOptionConstant; |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.pagemodel.*; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.wrapper.VciQueryWrapperForDO; |
| | | import com.vci.web.pageModel.UIContentVO; |
| | | import com.vci.pagemodel.UIContentVO; |
| | | import com.vci.web.properties.JsonConfigReader; |
| | | import com.vci.web.service.UIEngineServiceI; |
| | | import com.vci.web.service.WebBoServiceI; |
| | | import com.vci.web.util.Func; |
| | | import com.vci.web.util.PlatformClientUtil; |
| | | import com.vci.web.util.RightControlUtil; |
| | | import com.vci.web.util.WebUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.el.stream.Stream; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.cache.annotation.CacheEvict; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.vci.web.constant.CacheKeyConstant.ALL_FUNCTION; |
| | | import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE; |
| | | |
| | | /** |
| | | * 老平台的权限服务 |
| | |
| | | /** |
| | | * 菜单的根节点主键,这个是平台定义的 |
| | | */ |
| | | private final String ROOT_MENU_Id = "modelManagmentNode"; |
| | | private final String ROOT_MENU_ID = "modelManagmentNode"; |
| | | |
| | | /** |
| | | * 管理功能模块菜单根节点 |
| | | */ |
| | | private final String SYSTEMMANAGMENTNODE = "systemManagmentNode"; |
| | | |
| | | /** |
| | | * 操作类型管理菜单根节点 |
| | | */ |
| | | private final String OPERATENODE = "operateNode"; |
| | | |
| | | /** |
| | | * 使用用户查询 |
| | |
| | | @Autowired |
| | | private UIEngineServiceI uiEngineServiceI; |
| | | |
| | | @Autowired |
| | | private PlatformClientUtil platformClientUtil; |
| | | |
| | | @Autowired |
| | | RightControlUtil rightControlUtil; |
| | | |
| | | /** |
| | | * 查询所有的功能 |
| | | * |
| | |
| | | * @return 功能的显示对象 |
| | | */ |
| | | @Override |
| | | @Cacheable(value = VCI_OBJECT_SERVICE,key = ALL_FUNCTION,unless = "#result == null") |
| | | public Map<String, SmFunctionVO> selectAllFunctionMap() { |
| | | return Optional.ofNullable(self.selectAllFunction()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)); |
| | | } |
| | |
| | | private SmFunctionVO functionForPlatform1ToFunctionVO(SmFunctionForPlatform1 functionForPlatform1){ |
| | | SmFunctionVO functionVO = new SmFunctionVO(); |
| | | functionVO.setOid(functionForPlatform1.getPloid()); |
| | | functionVO.setId(String.valueOf(functionForPlatform1.getPlmoduleno())); |
| | | //functionVO.setId(String.valueOf(functionForPlatform1.getPlmoduleno())); |
| | | functionVO.setName(functionForPlatform1.getPlname()); |
| | | functionVO.setLogName(functionForPlatform1.getPlaliasname()); |
| | | if(StringUtils.isNotBlank(functionForPlatform1.getPlresourceb())){ |
| | |
| | | functionVO.setDescription(functionForPlatform1.getPldesc()); |
| | | } |
| | | } |
| | | |
| | | |
| | | functionVO.setBtmname("function"); |
| | | //老的数据里创建人,最后修改人等都没有 |
| | | return functionVO; |
| | | } |
| | | |
| | | // /** |
| | | // * 获取当前角色的菜单 |
| | | // * |
| | | // * @param treeQueryObject 属性查询对象 |
| | | // * @param resourceControlTypeEnum 角色控制区域,也是功能控制的区域 |
| | | // * @return 菜单,包含上下级 |
| | | // */ |
| | | // @Override |
| | | // public List<Tree> treeCurrentUserMenu(TreeQueryObject treeQueryObject, ResourceControlTypeEnum resourceControlTypeEnum) { |
| | | // SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException(); |
| | | // if(sessionInfo == null || CollectionUtils.isEmpty(sessionInfo.getFunctionOids())){ |
| | | // return new ArrayList<Tree>(); |
| | | // } |
| | | // if(resourceControlTypeEnum == null){ |
| | | // resourceControlTypeEnum = ResourceControlTypeEnum.BS; |
| | | // } |
| | | // Map<String, SmFunctionVO> functionVOMap = selectAllFunctionMap(); |
| | | // List<SmFunctionVO> functionVOList = new ArrayList<>(); |
| | | // for(String oid : sessionInfo.getFunctionOids()) { |
| | | // SmFunctionVO functionVO = functionVOMap.get(oid); |
| | | // if(functionVO !=null && resourceControlTypeEnum.getValue().equals(functionVO.getResourceControlType()) && functionVO.isDisplayFlag()) { |
| | | // functionVOList.add(functionVO); |
| | | // } |
| | | // } |
| | | // return dos2Trees(functionVOList.stream().sorted(Comparator.comparing(s -> s.getOrderNum())).collect(Collectors.toList()),treeQueryObject == null?null:treeQueryObject.getParentOid()); |
| | | // } |
| | | |
| | | /** |
| | | * 获取当前角色的菜单 |
| | |
| | | @Override |
| | | public List<MenuVO> treeCurrentUserMenu(TreeQueryObject treeQueryObject, ResourceControlTypeEnum resourceControlTypeEnum) throws PLException { |
| | | SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException(); |
| | | // if(sessionInfo == null || CollectionUtils.isEmpty(sessionInfo.getFunctionOids())){ |
| | | // return new ArrayList<Tree>(); |
| | | // } |
| | | if(resourceControlTypeEnum == null){ |
| | | resourceControlTypeEnum = ResourceControlTypeEnum.BS; |
| | | String parentId; |
| | | boolean adminOrDeveloperOrRoot = rightControlUtil.isAdminOrDeveloperOrRoot(sessionInfo.getUserId()); |
| | | if (adminOrDeveloperOrRoot) { |
| | | //系统菜单 |
| | | parentId = SYSTEMMANAGMENTNODE; |
| | | } else if (rightControlUtil.isThreeAdminCurUser()) { |
| | | //三员返回管理功能模块相关的菜单 |
| | | parentId = SYSTEMMANAGMENTNODE; |
| | | } else { |
| | | //普通用户只返回业务功能模块相关的菜单 |
| | | parentId = ROOT_MENU_ID; |
| | | } |
| | | // PortalServicePrx uiService = ServiceProvider.getUIService(); |
| | | // FrameworkServicePrx frameService = ServiceProvider.getFrameService(); |
| | | FunctionInfo[] menus = ServiceProvider.getFrameService().getModuleListByParentId("modelManagmentNode", true); |
| | | // FunctionInfo[] menus = ServiceProvider.getFrameService().("modelManagmentNode", true); |
| | | RoleRightInfo[] userRoleRights = rightControlUtil.getRoleRightByUserName(sessionInfo.getUserId()); |
| | | Map<String, List<FunctionInfo>> map = rightControlUtil.getAllChildrenFunctionsByUserName( |
| | | parentId, sessionInfo.getUserId(), userRoleRights); |
| | | |
| | | // PLAction[] allPLAction = uiService.getAllPLAction(); |
| | | List<MenuVO> functionVOList = new ArrayList<>(); |
| | | // Map<String, SmFunctionVO> functionVOMap = selectAllFunctionMap(); |
| | | for (FunctionInfo menu : menus) { |
| | | 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; |
| | | } |
| | | //if(StringUtils.isBlank(menu.resourceB)){ |
| | | // continue; |
| | | //} |
| | | functionVO.setPath(menu.resourceB); |
| | | // if(menu.resourceB.contains("type=") || menu.resourceB.contains("context=")){ |
| | | // String[] split = menu.resourceB.split("\\?")[0].split("="); |
| | | // functionVO.setPath((split.length>1 && split[1].equals("test") ? "/custom-ui/" :"/base/UIContentViewer") + menu.resourceB.substring(3)); |
| | | // }else{ |
| | | // functionVO.setPath("/views/" + menu.id); |
| | | //// functionVO.setPath("/" + menu.resourceB + menu.aliasName); |
| | | // } |
| | | 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); |
| | | functionVO.setChildren(findChildFunctionVO(menu.id)); |
| | | try { |
| | | functionVO.setChildren(findChildFunctionVO(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 { |
| | |
| | | } |
| | | functionVOList.add(functionVO); |
| | | } |
| | | // return dos2Trees(functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList()),treeQueryObject == null?null:treeQueryObject.getParentOid()); |
| | | //如果是开发或者测试用户,需哟获取系统模块配置菜单 |
| | | 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()); |
| | | } |
| | | |
| | | public List<MenuVO> findChildFunctionVO(String parentOid) throws PLException { |
| | | FunctionInfo[] menus = ServiceProvider.getFrameService().getModuleListByParentId(parentOid, true); |
| | | /** |
| | | * 通过模块ID获取子级列表 |
| | | * @param parentId |
| | | * @param modeType 模块类型 |
| | | * @param isAll 是否包括无效的模块,true则包括 |
| | | * @return |
| | | * @throws VciBaseException |
| | | */ |
| | | @Override |
| | | public List<MenuVO> getSysModelTreeMenuByPID(String parentId,String modeType,boolean isAll) throws VciBaseException{ |
| | | List<MenuVO> menuVOList = new ArrayList<>(); |
| | | if(Func.isBlank(parentId)){ |
| | | return menuVOList; |
| | | } |
| | | 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 menuVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList()); |
| | | } |
| | | |
| | | /** |
| | | * functionInfo转VO对象 |
| | | * @param funcInfo |
| | | * @return |
| | | */ |
| | | private MenuVO functionInfoToMenuVO(FunctionInfo funcInfo){ |
| | | MenuVO menuVO = new MenuVO(); |
| | | menuVO.setId(funcInfo.id); |
| | | menuVO.setValid(funcInfo.isValid); |
| | | menuVO.setSource(funcInfo.image); |
| | | menuVO.setPathC(funcInfo.resourceC); |
| | | menuVO.setResourceDotNet(funcInfo.resourceDotNet); |
| | | menuVO.setResourceMobile(funcInfo.resourceMobile); |
| | | menuVO.setPath(funcInfo.resourceB); |
| | | menuVO.setParentId(funcInfo.parentId); |
| | | menuVO.setCode(funcInfo.aliasName); |
| | | menuVO.setAlias(funcInfo.aliasName); |
| | | menuVO.setName(funcInfo.name); |
| | | menuVO.getMeta().put("keepAlive",false); |
| | | menuVO.setSort((int) funcInfo.seq); |
| | | if(this.checkChildObject(menuVO.getId()) == 0){ |
| | | menuVO.setHasChildren(false); |
| | | }else{ |
| | | menuVO.setHasChildren(true); |
| | | } |
| | | return menuVO; |
| | | } |
| | | |
| | | /** |
| | | * 通过模块ID检查该模块子级对象是模块还是操作 |
| | | * @param moduleId |
| | | * @return 0表示没有模块也没有操作,1表示有模块,2表示有操作 |
| | | * @throws VciException |
| | | */ |
| | | @Override |
| | | public int checkChildObject(String moduleId) throws VciBaseException { |
| | | long res = 0; |
| | | try{//20D63A69-C6BC-8519-8B2B-E5ACFEA62394 |
| | | res = platformClientUtil.getFrameworkService().checkChildObject(moduleId); |
| | | }catch (PLException e) { |
| | | e.printStackTrace(); |
| | | throw new VciBaseException(String.valueOf(e.code),e.messages); |
| | | } |
| | | return (int)res; |
| | | } |
| | | |
| | | public List<MenuVO> findChildFunctionVO(String parentOid,Map<String, List<FunctionInfo>> map) throws PLException { |
| | | List<FunctionInfo> menus = map.get(parentOid); |
| | | List<MenuVO> functionVOList = new ArrayList<>(); |
| | | if(menus == null){ |
| | | return functionVOList; |
| | | } |
| | | for (FunctionInfo menu : menus) { |
| | | 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); |
| | | // if(menu.resourceB.contains("type=") || menu.resourceB.contains("context=")){ |
| | | // String[] split = menu.resourceB.split("\\?")[0].split("="); |
| | | // functionVO.setPath((split.length>1 && split[1].equals("test") ? "/custom-ui/" :"/base/UIContentViewer") + menu.resourceB.substring(3)); |
| | | // }else{ |
| | | // functionVO.setPath("/views/" + menu.id); |
| | | //// functionVO.setPath("/" + menu.resourceB + menu.aliasName); |
| | | // if(StringUtils.isBlank(menu.resourceB) ){ |
| | | // continue; |
| | | // } |
| | | functionVO.setPath(menu.resourceB); |
| | | functionVO.setCode(menu.aliasName); |
| | | functionVO.setAlias(menu.aliasName); |
| | | functionVO.setParentId(menu.parentId); |
| | | functionVO.setName(menu.name); |
| | | functionVO.getMeta().put("keepAlive",false); |
| | | functionVO.setSort((int) menu.seq); |
| | | functionVO.setChildren(findChildFunctionVO(menu.id)); |
| | | functionVO.setChildren(findChildFunctionVO(menu.id,map)); |
| | | if(functionVO.getChildren().size() > 0){ |
| | | functionVO.setHasChildren(true); |
| | | }else { |
| | |
| | | return functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList()); |
| | | } |
| | | |
| | | public void findChildAuthFunctionVO(MenuVO functionVO, boolean isAll) throws PLException { |
| | | //0表示没有模块也没有操作,1表示有模块,2表示有操作 |
| | | long type = platformClientUtil.getFrameworkService().checkChildObject(functionVO.getId()); |
| | | if(type == 1){ |
| | | FunctionInfo[] funcObjs = platformClientUtil.getFrameworkService().getModuleListByParentId(functionVO.getId(), isAll); |
| | | for (FunctionInfo funcObj : funcObjs) { |
| | | MenuVO menuVO = new MenuVO(); |
| | | menuVO.setId(funcObj.id); |
| | | menuVO.setSource(funcObj.image); |
| | | menuVO.setPath(funcObj.resourceB); |
| | | menuVO.setCode(funcObj.aliasName); |
| | | menuVO.setAlias(funcObj.aliasName); |
| | | menuVO.setParentId(funcObj.parentId); |
| | | menuVO.setChildType((int) type); |
| | | menuVO.setName(funcObj.name); |
| | | menuVO.getMeta().put("keepAlive",false); |
| | | menuVO.setSort((int) funcObj.seq); |
| | | findChildAuthFunctionVO(menuVO, isAll); |
| | | functionVO.getChildren().add(menuVO); |
| | | functionVO.setHasChildren(true); |
| | | } |
| | | }else if(type == 2){ |
| | | FuncOperationInfo[] infos = platformClientUtil.getFrameworkService().getFuncOperationByModule(functionVO.getId(), "", true); |
| | | for (FuncOperationInfo info : infos) { |
| | | MenuVO menuVO = new MenuVO(); |
| | | menuVO.setChildType((int) type); |
| | | 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); |
| | | functionVO.getChildren().add(menuVO); |
| | | functionVO.setHasChildren(true); |
| | | } |
| | | }else{ |
| | | functionVO.setHasChildren(false); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public UIContentVO getUIContentByBtmTypeAndId(TreeQueryObject treeQueryObject, ResourceControlTypeEnum resourceControlTypeEnum) throws PLException { |
| | | SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException(); |
| | | // if(sessionInfo == null || CollectionUtils.isEmpty(sessionInfo.getFunctionOids())){ |
| | | // return new ArrayList<Tree>(); |
| | | // } |
| | | if(resourceControlTypeEnum == null){ |
| | | resourceControlTypeEnum = ResourceControlTypeEnum.BS; |
| | | } |
| | | for (PLUILayout allPLUILayout : ServiceProvider.getUIService().getAllPLUILayouts()) { |
| | | for (PLUILayout allPLUILayout : platformClientUtil.getUIService().getAllPLUILayouts()) { |
| | | if(treeQueryObject.getConditionMap().getOrDefault("type","").equals(allPLUILayout.plRelatedType) |
| | | && treeQueryObject.getConditionMap().getOrDefault("context","").equals(allPLUILayout.plCode)){ |
| | | return uiEngineServiceI.UIContentDO2VO(allPLUILayout,true); |
| | |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 获取授权的模块 |
| | | * @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, |
| | | (existing, replacement) -> existing)); |
| | | String parentId; |
| | | SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException(); |
| | | boolean adminOrDeveloperOrRoot = rightControlUtil.isAdminOrDeveloperOrRoot(sessionInfo.getUserId()); |
| | | if (adminOrDeveloperOrRoot) { |
| | | //系统菜单 |
| | | 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(); |
| | | } |
| | | |
| | | /** |
| | | * 获取所授权的模块权限 |
| | | * @param roleName 搜索的角色 |
| | | * @return 角色列表 |
| | | */ |
| | | @Override |
| | | public List<RoleInfoDTO> getRoleList(String roleName) throws PLException { |
| | | RoleInfo[] roleInfos = platformClientUtil.getFrameworkService().fetchRoleInfoByUserType(WebUtil.getCurrentUserId()); |
| | | List<RoleInfoDTO> dtos = new ArrayList<>(); |
| | | for (RoleInfo roleInfo : roleInfos) { |
| | | if(StringUtils.isBlank(roleName) || roleInfo.name.indexOf(roleName) != -1) { |
| | | RoleInfoDTO dto = new RoleInfoDTO(); |
| | | dto.setName(roleInfo.name); |
| | | dto.setDescription(roleInfo.description); |
| | | dto.setId(roleInfo.id); |
| | | dto.setGrantor(roleInfo.grantor); |
| | | dto.setType(roleInfo.type); |
| | | dto.setCreateTime(roleInfo.createTime); |
| | | dto.setCreateUser(roleInfo.createUser); |
| | | dto.setUpdateTime(roleInfo.updateTime); |
| | | dto.setUpdateUser(roleInfo.updateUser); |
| | | dtos.add(dto); |
| | | } |
| | | } |
| | | return dtos; |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取所有的功能菜单 |
| | |
| | | public List<Tree> treeAllMenu(TreeQueryObject treeQueryObject, ResourceControlTypeEnum resourceControlTypeEnum) { |
| | | List<SmFunctionVO> functionVOList = self.selectAllFunction().stream().filter(s -> s.isDisplayFlag() && resourceControlTypeEnum.getValue().equalsIgnoreCase(s.getResourceControlType())).collect(Collectors.toList()); |
| | | if(!treeQueryObject.isQueryAllLevel() && StringUtils.isNotBlank(treeQueryObject.getParentOid())){ |
| | | functionVOList = functionVOList.stream().filter(s->treeQueryObject.getParentOid().equalsIgnoreCase(s.getParentFunctionId())).collect(Collectors.toList()); |
| | | functionVOList = functionVOList.stream().filter(s->treeQueryObject.getParentOid().equalsIgnoreCase(s.getParentFunctionId())).collect(Collectors.toList()); |
| | | } |
| | | return dos2Trees(functionVOList.stream().sorted(Comparator.comparing(s -> s.getOrderNum())).collect(Collectors.toList()),treeQueryObject == null?null:treeQueryObject.getParentOid()); |
| | | } |
| | |
| | | List<Tree> childList = new ArrayList<>(); |
| | | functionVOList.stream().forEach(s -> { |
| | | Tree tree = DO2Tree(s); |
| | | if (tree.getParentId() == null || tree.getParentId().equals(rootId) || ROOT_MENU_Id.equalsIgnoreCase(tree.getParentId())) { |
| | | if (tree.getParentId() == null || tree.getParentId().equals(rootId) || ROOT_MENU_ID.equalsIgnoreCase(tree.getParentId())) { |
| | | rootList.add(tree); |
| | | } else { |
| | | childList.add(tree); |
| | |
| | | public List<Tree> treeFunctionByParent(TreeQueryObject treeQueryObject, ResourceControlTypeEnum resourceControlTypeEnum) { |
| | | List<SmFunctionVO> functionVOList = self.selectAllFunction().stream().filter(s -> s.isDisplayFlag() && resourceControlTypeEnum.getValue().equalsIgnoreCase(s.getResourceControlType())).collect(Collectors.toList()); |
| | | if(!treeQueryObject.isQueryAllLevel() && StringUtils.isNotBlank(treeQueryObject.getParentOid())){ |
| | | functionVOList = functionVOList.stream().filter(s->treeQueryObject.getParentOid().equalsIgnoreCase(s.getParentFunctionId())).collect(Collectors.toList()); |
| | | functionVOList = functionVOList.stream().filter(s->treeQueryObject.getParentOid().equalsIgnoreCase(s.getParentFunctionId())).collect(Collectors.toList()); |
| | | } |
| | | return dos2Trees(functionVOList,treeQueryObject == null?null:treeQueryObject.getParentOid()); |
| | | } |
| | |
| | | public List<Tree> treeCurrentFunctionByParent(TreeQueryObject treeQueryObject, ResourceControlTypeEnum resourceControlTypeEnum) { |
| | | SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfo(); |
| | | List<SmFunctionVO> functionVOList =self.selectAllFunction().stream().filter(s -> s.isDisplayFlag() |
| | | && resourceControlTypeEnum.getValue().equalsIgnoreCase(s.getResourceControlType()) |
| | | && resourceControlTypeEnum.getValue().equalsIgnoreCase(s.getResourceControlType()) |
| | | && !CollectionUtils.isEmpty(sessionInfo.getFunctionOids()) |
| | | && sessionInfo.getFunctionOids().contains(s.getOid()) |
| | | ).collect(Collectors.toList()); |
| | | if(!treeQueryObject.isQueryAllLevel() && StringUtils.isNotBlank(treeQueryObject.getParentOid())){ |
| | | functionVOList = functionVOList.stream().filter(s->treeQueryObject.getParentOid().equalsIgnoreCase(s.getParentFunctionId())).collect(Collectors.toList()); |
| | | functionVOList = functionVOList.stream().filter(s->treeQueryObject.getParentOid().equalsIgnoreCase(s.getParentFunctionId())).collect(Collectors.toList()); |
| | | } |
| | | return dos2Trees(functionVOList,treeQueryObject == null?null:treeQueryObject.getParentOid()); |
| | | } |
| | |
| | | conditionMap.put(key,value); |
| | | }); |
| | | conditionMap.put("ploid", notIn ? QueryOptionConstant.NOTIN : QueryOptionConstant.IN + "select plfuncoid from plroleright where plroleoid in (" + WebUtil.toInSql(roleOids.toArray(new String[0])) + ")"); |
| | | VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap,SmRoleForPlatform1.class); |
| | | VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(conditionMap, SmRoleForPlatform1.class); |
| | | List<SmFunctionForPlatform1> functionForPlatform1s = boService.selectByQueryWrapper(queryWrapper, SmFunctionForPlatform1.class); |
| | | if(!CollectionUtils.isEmpty(functionForPlatform1s)){ |
| | | functions.addAll(functionForPlatform1s); |
| | |
| | | if(!CollectionUtils.isEmpty(functionVOS)){ |
| | | functionVOList.addAll(functionVOS); |
| | | String sql = "select plfuncoid,plroleoid from plroleright where plroleoid in (" + WebUtil.toInSql(roleOids.toArray(new String[0])) + ")"; |
| | | List<com.vci.client.bof.ClientBusinessObject> cbos = boService.queryBySql(sql, null); |
| | | List<BusinessObject> cbos = boService.queryBySql(sql, null); |
| | | if(!CollectionUtils.isEmpty(cbos)){ |
| | | cbos.stream().forEach(cbo->{ |
| | | String roleOid = cbo.getAttributeValue("plroleoid"); |
| | | String roleOid = ObjectTool.getBOAttributeValue(cbo,"plroleoid"); |
| | | List<String> functionOids = roleFunctionOidMap.getOrDefault(roleOid,new ArrayList<>()); |
| | | functionOids.add(cbo.getAttributeValue("plfuncoid")); |
| | | functionOids.add(ObjectTool.getBOAttributeValue(cbo,"plfuncoid")); |
| | | roleFunctionOidMap.put(roleOid,functionOids); |
| | | }); |
| | | } |
| | |
| | | } |
| | | return dataGrid(queryMap,pageHelper); |
| | | } |
| | | |
| | | /** |
| | | * 批量根据角色的主键获取关联的权限 |
| | | * |
| | |
| | | return gridFunctionByRoleOid(roleOidCollection.stream().collect(Collectors.joining(",")), queryMap,pageHelper,resourceControlTypeEnum,false); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 清除缓存 |
| | | */ |
| | | @Override |
| | | @CacheEvict(value = VCI_OBJECT_SERVICE,key = ALL_FUNCTION) |
| | | public void clearCache() { |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 通过模块ID获取子级列表 |
| | | * @param isAll 是否包括无效的模块,true则包括 |
| | | * @return |
| | | * @throws VciBaseException |
| | | */ |
| | | @Override |
| | | 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; |
| | | } else { |
| | | //普通用户只返回业务功能模块相关的菜单 |
| | | parentId = ROOT_MENU_ID; |
| | | } |
| | | List<MenuVO> functionVOList = new ArrayList<>(); |
| | | FunctionInfo[] moduleListByParentId = getModuleListByParentId(parentId, isAll); |
| | | for (FunctionInfo menu : moduleListByParentId) { |
| | | if(!menu.isValid){ |
| | | continue; |
| | | } |
| | | MenuVO functionVO = new MenuVO(); |
| | | functionVO.setId(menu.id); |
| | | functionVO.setSource(menu.image); |
| | | 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); |
| | | findChildAuthFunctionVO(functionVO, isAll); |
| | | if(functionVO.getChildren().size() > 0){ |
| | | functionVO.setHasChildren(true); |
| | | }else { |
| | | functionVO.setHasChildren(false); |
| | | } |
| | | functionVOList.add(functionVO); |
| | | } |
| | | return functionVOList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 通过模块ID获取子级列表 |
| | | * @param parentId |
| | | * @param isAll 是否包括无效的模块,true则包括 |
| | | * @return |
| | | * @throws VciException |
| | | */ |
| | | public FunctionInfo[] getModuleListByParentId(String parentId,boolean isAll) throws PLException { |
| | | FunctionInfo[] funcInfos = null; |
| | | funcInfos = platformClientUtil.getFrameworkService().getModuleListByParentId(parentId, isAll); |
| | | return funcInfos; |
| | | } |
| | | } |