| | |
| | | import com.vci.starter.poi.util.ExcelUtil; |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.pagemodel.*; |
| | | import com.vci.starter.web.pagemodel.BaseQueryObject; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.starter.web.pagemodel.DataGrid; |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | import com.vci.starter.web.util.*; |
| | | import com.vci.starter.web.redis.RedisService; |
| | | import com.vci.starter.web.util.*; |
| | | import com.vci.starter.web.util.Lcm.BeanUtil; |
| | | import com.vci.starter.web.util.Lcm.CollectionUtil; |
| | | import com.vci.starter.web.util.Lcm.Func; |
| | | import com.vci.web.service.OsBtmServiceI; |
| | | import com.vci.web.service.UIManagerServiceI; |
| | | import com.vci.web.util.*; |
| | | import com.vci.web.util.BeanUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import com.vci.web.util.Func; |
| | | import com.vci.web.util.PlatformClientUtil; |
| | | import com.vci.web.util.RightControlUtil; |
| | | import com.vci.web.util.UITools; |
| | | import com.vci.web.utility.UIDataFetcher; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.NoArgsConstructor; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.stream.Collectors; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Stream; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * UI定义服务界面相关接口 |
| | | * UI定义管理服务界面相关接口 |
| | | * @author ludc |
| | | * @date 2024/8/28 17:05 |
| | | */ |
| | |
| | | private final String IMPORTUIKEY = "importUIKey:"; |
| | | |
| | | /** |
| | | * 当前登录用户的信息 |
| | | * ui定义数据引擎 |
| | | */ |
| | | private SessionInfo sessionInfo = null; |
| | | private UIDataFetcher uiDataFetcher = null; |
| | | |
| | | /** |
| | | * 排序比较器 |
| | |
| | | @Override |
| | | public int compare(PLUILayout o1, PLUILayout o2) { |
| | | return o1.plCode.compareTo(o2.plCode); |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * 排序比较器 |
| | | */ |
| | | private Comparator<PLDefinationVO> pageDefinationComparator = new Comparator<PLDefinationVO>() { |
| | | @Override |
| | | public int compare(PLDefinationVO o1, PLDefinationVO o2) { |
| | | return new Integer(o1.getSeq()).compareTo(new Integer(o2.getSeq())); |
| | | } |
| | | }; |
| | | |
| | |
| | | contextList.add(""); |
| | | } |
| | | contextList.stream().forEach(code->{ |
| | | PLUILayout[] pluiLayouts= new PLUILayout[0]; |
| | | PLUILayout[] pluiLayouts= new PLUILayout[0]; |
| | | try { |
| | | pluiLayouts = platformClientUtil.getUIService().getPLUILayoutEntityByTypeAndCode(btemName,code); |
| | | } catch (PLException e) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据上下文ID和区域类型,按顺序获取当前区域的tab页 |
| | | * 根据上下文ID和区域(页签)类型,按顺序获取当前区域的tab页 |
| | | */ |
| | | @Override |
| | | public DataGrid getTabByContextIdAndType(String contextId, int areaType) throws PLException { |
| | | VciBaseUtil.alertNotNull(contextId,"上下文主键",areaType,"区域类型"); |
| | | PLTabPage[] plTabPages = platformClientUtil.getUIService().getTabPagesByContextIdAndType(contextId, (short) areaType); |
| | | List<PLTabPage> tabPageList = Arrays.stream(plTabPages).sorted(((o1, o2) -> Math.toIntExact(o1.plSeq - o2.plSeq))) |
| | | .collect(Collectors.toList()); |
| | | DataGrid dataGrid = new DataGrid(); |
| | | dataGrid.setTotal(plTabPages.length); |
| | | dataGrid.setData(Arrays.asList(plTabPages)); |
| | | dataGrid.setData(tabPageList); |
| | | return dataGrid; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 修改区域数据 |
| | | * 修改区域(页签)数据 |
| | | * @param plTabPage |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除区域数据 |
| | | * 删除区域(页签)数据 |
| | | * @param oids |
| | | * @return |
| | | */ |
| | |
| | | break; |
| | | } |
| | | |
| | | d.setNavigatorType(pdVO.getNavigatorType()); |
| | | d = setEventDataToPLDefination(d,pdVO); |
| | | //转xml赋值到plDefination中 |
| | | pd.plDefination = UITools.getPLDefinationText(d); |
| | |
| | | d = ulci.getNewPLDefination(d); |
| | | break; |
| | | } |
| | | |
| | | d.setNavigatorType(pdVO.getNavigatorType()); |
| | | d = setEventDataToPLDefination(d,pdVO); |
| | | pd.plDefination = UITools.getPLDefinationText(d); |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public BaseResult addTabButton(PLTabButtonVO tabButtonVO) { |
| | | boolean res = this.saveOrUpdateTapButton(tabButtonVO, true); |
| | | boolean res = this.saveOrUpdateTabButton(tabButtonVO, true); |
| | | return res ? BaseResult.success("按钮配置添加成功!"):BaseResult.success("按钮配置添加失败!"); |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public BaseResult updateTabButton(PLTabButtonVO tabButtonVO) { |
| | | boolean res = this.saveOrUpdateTapButton(tabButtonVO, false); |
| | | boolean res = this.saveOrUpdateTabButton(tabButtonVO, false); |
| | | return res ? BaseResult.success("按钮配置修改成功!"):BaseResult.success("按钮配置修改失败!"); |
| | | } |
| | | |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public boolean saveOrUpdateTapButton(PLTabButtonVO tabButtonVO,boolean isAdd){ |
| | | VciBaseUtil.alertNotNull(tabButtonVO,"按钮配置对象",tabButtonVO.getLabel(),"参数名称"); |
| | | public boolean saveOrUpdateTabButton(PLTabButtonVO tabButtonVO,boolean isAdd){ |
| | | VciBaseUtil.alertNotNull(tabButtonVO,"按钮配置对象",tabButtonVO.getLabel(),"参数名称",tabButtonVO.getTableOId(),"页面定义主键"); |
| | | //检查当前添加的列表是否重复,但是这儿只支持单条数据保存,所有当前列表判重可以前端来做 |
| | | //String btnParamValidate = this.geCheckRes(); |
| | | |
| | | if (tabButtonVO.getSeq() < 1 || tabButtonVO.getSeq() > 63) { |
| | | throw new VciBaseException("按序号超出范围,请修改,按钮【编号】只能在【1-63】范围内。"); |
| | | } |
| | |
| | | */ |
| | | private void saveButtonParams(LinkedHashMap<String, String> buttonParams,String tabButtonOid) throws VciBaseException{ |
| | | if(Func.isNotEmpty(buttonParams)) { |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | Iterator<Map.Entry<String, String>> iterator = buttonParams.entrySet().iterator(); |
| | | while(iterator.hasNext()){ |
| | | Map.Entry<String, String> next = iterator.next(); |
| | |
| | | platformClientUtil.getUIService().savePLCommandParameter(plCommandParameter); |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | throw new VciBaseException("保存按钮信息时发生异常:"+ e.getMessage()); |
| | | throw new VciBaseException("保存按钮参数时发生异常:"+ e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | |
| | | String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type"); |
| | | String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context"); |
| | | boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox")); |
| | | Map<String,RoleRightVO> roleRightVOMap=new HashMap<>(); |
| | | Map<String, List<RoleRightVO>> roleRightVOMap = new HashMap<>(); |
| | | if(StringUtils.isNotBlank(roleId)){ |
| | | String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); |
| | | RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); |
| | | List<RoleRightVO> roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos)); |
| | | roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue)); |
| | | roleRightVOMap = this.getRoleRightMap(roleId); |
| | | } |
| | | BizType[] bizTypes=osBtmServiceI.getBizTypes(type); |
| | | BizType[] bizTypes = osBtmServiceI.getBizTypes(type); |
| | | List<Tree> treeList=new ArrayList<>(); |
| | | Tree rootNode =new Tree("root","功能模块","root"); |
| | | rootNode.setLevel(0); |
| | | rootNode.setShowCheckbox(true); |
| | | rootNode.setExpanded(true); |
| | | List<Tree> childList=new ArrayList<>(); |
| | | |
| | | uiDataFetcher = new UIDataFetcher(); |
| | | for (int i = 0; i < bizTypes.length; i++) { |
| | | Tree bizTypeTree = new Tree(bizTypes[i].oid,bizTypes[i].name,bizTypes[i]);//(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]); |
| | | bizTypeTree.setLevel(1); |
| | | bizTypeTree.setShowCheckbox(true); |
| | | bizTypeTree.setParentId(rootNode.getOid()); |
| | | bizTypeTree.setParentName(rootNode.getText()); |
| | | bizTypeTree.setShowCheckbox(true); |
| | | bizTypeTree.setParentBtmName(bizTypes[i].name); |
| | | childList.add(bizTypeTree); |
| | | List<PLUILayout>contextList=getUIContextDataByBtName(bizTypes[i].name,context); |
| | | List<Tree> btmChildList=new ArrayList<>(); |
| | | List<PLUILayout> contextList = uiDataFetcher.getContext(bizTypes[i].name/*+context*/); |
| | | List<Tree> btmChildList = new ArrayList<>(); |
| | | btmChildList.add(bizTypeTree); |
| | | setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox); |
| | | childList.add(bizTypeTree); |
| | | } |
| | | rootNode.setChildren(childList); |
| | | treeList.add(rootNode); |
| | | return treeList; |
| | | } |
| | | |
| | | /*** |
| | | /** |
| | | * 根据角色主键获取已授权的信息 |
| | | * @param roleId 如果roleId不传,就会获取当前登录的用户的名称查询权限 |
| | | * @return |
| | | * @throws PLException |
| | | */ |
| | | @Override |
| | | public Map<String, List<RoleRightVO>> getRoleRightMap(String roleId) throws PLException { |
| | | RoleRightInfo[] rightInfos = null; |
| | | String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); |
| | | if(Func.isBlank(roleId)){ |
| | | rightInfos = platformClientUtil.getFrameworkService().getRoleRightByUserName(userName); |
| | | }else{ |
| | | rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); |
| | | } |
| | | List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); |
| | | //分组操作 |
| | | Map<String, List<RoleRightVO>> roleRightVOMap = roleRightVOList.stream().collect(Collectors.groupingBy(RoleRightVO::getFuncId, |
| | | Collectors.mapping(e ->e, Collectors.toList()))); |
| | | return roleRightVOMap; |
| | | } |
| | | |
| | | /** |
| | | * UI授权 |
| | | * @param uiAuthorDTO |
| | | * @return |
| | |
| | | @Override |
| | | public boolean authorizedUI(UIAuthorDTO uiAuthorDTO) throws Exception { |
| | | boolean res=false; |
| | | if(uiAuthorDTO==null||CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){ |
| | | if(uiAuthorDTO==null|| CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){ |
| | | throw new VciBaseException("请选择节点进行授权!"); |
| | | } |
| | | BaseQueryObject treeQueryObject=new BaseQueryObject(); |
| | |
| | | conditionMap.put("context",uiAuthorDTO.getContext()); |
| | | conditionMap.put("showCheckBox","true"); |
| | | treeQueryObject.setConditionMap(conditionMap); |
| | | List<Tree> treeList=this.getUIAuthor(treeQueryObject); |
| | | HashMap<String,Tree> allTreeMap=new HashMap<>(); |
| | | Map<String,RoleRightDTO> roleRightVOMap=new HashMap<>(); |
| | | List<Tree> treeList = this.getUIAuthor(treeQueryObject); |
| | | HashMap<String,Tree> allTreeMap = new HashMap<>(); |
| | | //Map<String,RoleRightDTO> roleRightVOMap = new HashMap<>(); |
| | | if(!CollectionUtil.isEmpty(treeList)){ |
| | | if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){ |
| | | String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); |
| | | RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(uiAuthorDTO.getRoleId(),userName); |
| | | List<RoleRightVO> roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos)); |
| | | roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVOO2DTO(roleRightVO),(oldValue,newValue)->oldValue)); |
| | | } |
| | | /*if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){ |
| | | String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); |
| | | RoleRightInfo[] rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(uiAuthorDTO.getRoleId(),userName); |
| | | List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); |
| | | roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVOO2DTO(roleRightVO),(oldValue,newValue)->oldValue)); |
| | | }*/ |
| | | |
| | | convertTreeDOO2Map(treeList,allTreeMap); |
| | | List<RoleRightDTO> roleRightDTOList=new ArrayList<>(); |
| | | List<Tree> selectTreeList= uiAuthorDTO.getSelectTreeList(); |
| | | getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightVOMap,roleRightDTOList); |
| | | List<RoleRightDTO> roleRightDTOList = new ArrayList<>(); |
| | | List<Tree> selectTreeList = uiAuthorDTO.getSelectTreeList(); |
| | | List<Tree> filterSelectTreeList = this.authTreeListConvert(selectTreeList); |
| | | //过滤出选择的按钮 |
| | | List<String> checkButtonList = selectTreeList.stream() |
| | | .filter(item -> item.getData() instanceof PLTabButton || item.isLeaf()) |
| | | .map(item -> item.getOid()).collect(Collectors.toList()); |
| | | |
| | | getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),filterSelectTreeList,checkButtonList,allTreeMap,roleRightDTOList); |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | String currentUserName = sessionInfo.getUserId(); |
| | | boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName); |
| | | List<RoleRightInfo> roleRightInfoList= roleRightDTOO2InfoS(roleRightDTOList); |
| | | UserEntityInfo info=new UserEntityInfo(); |
| | | //boolean isDeveloper = rightControlUtil.isDeveloper(currentUserName); |
| | | List<RoleRightInfo> roleRightInfoList = roleRightDTOO2InfoS(roleRightDTOList); |
| | | UserEntityInfo info = new UserEntityInfo(); |
| | | info.modules="UI授权"; |
| | | info.userName=currentUserName; |
| | | info.userName = currentUserName; |
| | | try { |
| | | res= platformClientUtil.getFrameworkService().saveRoleRight(roleRightInfoList.toArray(new RoleRightInfo[]{}),uiAuthorDTO.getRoleId(),currentUserName,info); |
| | | res = platformClientUtil.getFrameworkService().saveRoleRight(roleRightInfoList.toArray(new RoleRightInfo[]{}),uiAuthorDTO.getRoleId(),currentUserName,info); |
| | | }catch (PLException e){ |
| | | throw new Exception("保存失败:"+e.getMessage()); |
| | | throw new Exception("保存失败:" + e.getMessage()); |
| | | } |
| | | } |
| | | return res; |
| | | } |
| | | |
| | | /** |
| | | * 获取筛选后的数据 |
| | | * @param selectTreeList |
| | | */ |
| | | private List<Tree> authTreeListConvert(List<Tree> selectTreeList){ |
| | | // 创建一个包含另一个集合中满足条件的 oid 的集合 |
| | | List<String> validOids = selectTreeList.stream() |
| | | .filter(Tree::isChecked) // checked 为 true |
| | | .map(Tree::getOid) // 提取 oid |
| | | .collect(Collectors.toList()); |
| | | |
| | | return selectTreeList.stream() |
| | | .filter(tree -> tree.isChecked() && !validOids.contains(tree.getParentId())) // 过滤条件 |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param allTreeMap |
| | | * @param roleRightDTOList |
| | | */ |
| | | private void getSelectedRoleRightObjs(String roleOid,List<Tree> selectTreeList,HashMap<String,Tree> allTreeMap,Map<String,RoleRightDTO> allRoleRightDTOMap, List<RoleRightDTO> roleRightDTOList){ |
| | | Date date=new Date(); |
| | | Map<String,RoleRightDTO> roleRightDTOMap=new HashMap<>(); |
| | | private void getSelectedRoleRightObjs(String roleOid, List<Tree> selectTreeList, List<String> checkButtonList, HashMap<String,Tree> allTreeMap, List<RoleRightDTO> roleRightDTOList){ |
| | | Map<String,RoleRightDTO> roleRightDTOMap = new HashMap<>(); |
| | | |
| | | if(!CollectionUtil.isEmpty(selectTreeList)){ |
| | | selectTreeList.stream().forEach(tree -> { |
| | | String oid=tree.getOid(); |
| | | String oid = tree.getOid(); |
| | | if(allTreeMap.containsKey(oid)){ |
| | | tree= allTreeMap.get(oid); |
| | | Object data= tree.getData(); |
| | | tree = allTreeMap.get(oid); |
| | | Object data = tree.getData(); |
| | | if (data instanceof String) { |
| | | getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//向下获取所有模块的权限值 |
| | | getRightValue(roleOid, tree, allTreeMap, checkButtonList,false, roleRightDTOMap);//向下获取所有模块的权限值 |
| | | } else if (!(data instanceof PLTabButton)) {//业务类型 |
| | | getRightValue(roleOid, tree, allTreeMap, true, roleRightDTOMap);//向上处理 |
| | | getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//向下处理(包含当前节点) |
| | | getRightValue(roleOid, tree, allTreeMap, checkButtonList, true, roleRightDTOMap);//向上处理 |
| | | getRightValue(roleOid, tree, allTreeMap, checkButtonList, false, roleRightDTOMap);//向下处理(包含当前节点) |
| | | } else if (data instanceof PLTabButton) {//按钮 |
| | | String parrentId=tree.getParentId(); |
| | | if(allTreeMap.containsKey(parrentId)){ |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | String currentUserName = sessionInfo.getUserId(); |
| | | boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName); |
| | | boolean isDeveloper = rightControlUtil.isDeveloper(currentUserName); |
| | | Tree parentNode= allTreeMap.get(parrentId); |
| | | String funcId = parentNode.getOid(); |
| | | getRightValue(roleOid,tree, allTreeMap, true, roleRightDTOMap);//向上处理该操作父级的上级模块权限(不包含父节点) |
| | | getRightValue(roleOid, parentNode, allTreeMap, checkButtonList, true, roleRightDTOMap);//向上处理该操作父级的上级模块权限(不包含父节点) |
| | | if(!roleRightDTOMap.containsKey(funcId)){ |
| | | RoleRightDTO roleRightDTO = new RoleRightDTO(); |
| | | roleRightDTO.setId(ObjectUtility.getNewObjectID36());//主键 |
| | | roleRightDTO.setFuncId(funcId); |
| | | if(isDeveloper) { |
| | | roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2 |
| | | //权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2 |
| | | roleRightDTO.setRightType((short) 1); |
| | | }else{ |
| | | roleRightDTO.setRightType((short) 2); |
| | | } |
| | | roleRightDTO.setRightValue(1);// 权限值,没有操作的模块权限值存储为0 |
| | | roleRightDTO.setRightValue(countRightValue(parentNode,checkButtonList,false));// 权限值,没有操作的模块权限值存储为0 |
| | | roleRightDTO.setRoleId(roleOid);//角色ID |
| | | roleRightDTO.setCreateUser(currentUserName);//创建者 |
| | | roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//创建时间 |
| | |
| | | }); |
| | | /* allRoleRightDTOMap.putAll(roleRightDTOMap.entrySet().stream() |
| | | .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry:: getValue)));*/ |
| | | List<RoleRightDTO> newRoleRightDTOList=Optional.ofNullable(roleRightDTOMap).orElseGet(()->new HashMap<String,RoleRightDTO>()).values().stream().collect(Collectors.toList()); |
| | | List<RoleRightDTO> newRoleRightDTOList = Optional.ofNullable(roleRightDTOMap).orElseGet(()->new HashMap<String,RoleRightDTO>()).values().stream().collect(Collectors.toList()); |
| | | roleRightDTOList.addAll(newRoleRightDTOList); |
| | | } |
| | | } |
| | |
| | | * 获取权限 |
| | | * @param isUp 是否是向上获取,如果是向上获取,传进来的必然是模块节点,且上级模块必然是没有选中 |
| | | */ |
| | | private void getRightValue(String roleId,Tree node,HashMap<String,Tree> allTreeMap,boolean isUp,Map<String,RoleRightDTO> rightMap){ |
| | | private void getRightValue(String roleId,Tree node,Map<String,Tree> allTreeMap,List<String> checkButton,boolean isUp,Map<String,RoleRightDTO> rightMap){ |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | String currentUserName = sessionInfo.getUserId(); |
| | | boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName); |
| | | String id=ObjectUtility.getNewObjectID36(); |
| | | Object data=node.getData(); |
| | | if(isUp) {//向上获取,存储每个上级模块的权限值 |
| | | while (!"root".equals(node.getData())){ |
| | | data=node.getData(); |
| | | String oid=node.getOid(); |
| | | String parentId = node.getParentId(); |
| | | Tree parentNode = allTreeMap.get(parentId); |
| | | while (!"root".equals(parentNode.getData())){ |
| | | data=parentNode.getData(); |
| | | String oid=parentNode.getOid(); |
| | | if(allTreeMap.containsKey(oid)){ |
| | | String funcId = ""; |
| | | if (data instanceof BizType) { |
| | |
| | | if(!rightMap.containsKey(funcId)){ |
| | | rightMap.put(funcId, roleRightDTO); |
| | | } |
| | | oid= node.getParentId(); |
| | | oid = parentNode.getParentId(); |
| | | if(allTreeMap.containsKey(oid)) { |
| | | node=allTreeMap.get(oid); |
| | | parentNode = allTreeMap.get(oid); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | for (int i = 0; i < node.getChildren().size(); i++) { |
| | | //对每个子向下递归遍历 |
| | | getRightValue(roleId, node.getChildren().get(i), allTreeMap, false, rightMap); |
| | | getRightValue(roleId, node.getChildren().get(i), allTreeMap, checkButton,false, rightMap); |
| | | } |
| | | } else { |
| | | if (!rightMap.containsKey(funcId)) { |
| | | RoleRightDTO roleRightDTO = new RoleRightDTO(); |
| | | roleRightDTO.setFuncId(funcId); |
| | | roleRightDTO.setRightType((short) 2); // 设置UI权限 |
| | | roleRightDTO.setRightValue(countRightValue(node, true));//没有操作的模块权限值存储为0 |
| | | roleRightDTO.setRightValue(countRightValue(node, checkButton,true));//没有操作的模块权限值存储为0 |
| | | roleRightDTO.setRoleId(roleId); |
| | | |
| | | roleRightDTO.setCreateUser(currentUserName); |
| | |
| | | * @param isAll 是否子级全部选中 |
| | | * @return |
| | | */ |
| | | private long countRightValue(Tree node,boolean isAll){ |
| | | private long countRightValue(Tree node,List<String> checkButton,boolean isAll){ |
| | | long value = 0; |
| | | for(int i = 0;i < node.getChildren().size();i++){ |
| | | for(int i = 0; i < node.getChildren().size(); i++){ |
| | | Tree childNode = (Tree)node.getChildren().get(i); |
| | | if(isAll && node.getData() instanceof PLTabButton ){ |
| | | PLTabButton obj = (PLTabButton)node.getData(); |
| | | //node.getData() instanceof PLTabButton这儿应该换成是否是选中的按钮节点 |
| | | if(isAll || checkButton.contains(node.getOid())){ |
| | | PLTabButton obj = (PLTabButton)childNode.getData(); |
| | | value += (long)Math.pow(2, obj.plSeq);//累计加上各个操作的权限值 |
| | | } |
| | | } |
| | |
| | | }); |
| | | } |
| | | |
| | | /*** |
| | | /** |
| | | * 遍历子节点 |
| | | * @param parentTree |
| | | * @param contextList |
| | | * @param roleRightVOMap |
| | | * @param isShowCheckBox |
| | | */ |
| | | private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){ |
| | | Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<Tree>()).stream().forEach(pTree -> { |
| | | Object funcObj= pTree.getData(); |
| | | List<Tree> chiledTreeList=new ArrayList<>(); |
| | | private void setChildNode_old(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){ |
| | | Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> { |
| | | Object funcObj = pTree.getData(); |
| | | List<Tree> chiledTreeList = new ArrayList<>(); |
| | | if (funcObj instanceof BizType) {//业务类型 |
| | | BizType bizType = (BizType) funcObj; |
| | | if(!CollectionUtil.isEmpty(contextList)) { |
| | | contextList.stream().forEach(context->{ |
| | | Tree childTree=new Tree(context.plOId,context.plName+"("+context.plCode+")",context); |
| | | Tree childTree = new Tree(context.plOId,context.plName+"("+context.plCode+")",context); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setParentId(pTree.getOid()); |
| | |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | } |
| | | }else if (funcObj instanceof PLUILayout){//UI |
| | | PLUILayout context = (PLUILayout) funcObj; |
| | | PLTabPage[] pages = new PLTabPage[0]; |
| | | try { |
| | | pages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(context.plOId); |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | if(pages!=null&&pages.length>0){ |
| | | List<PLTabPage> plTabPageList= Arrays.stream(pages).collect(Collectors.toList()); |
| | | plTabPageList.stream().forEach(plTabPage -> { |
| | | List<PLTabPage> pageList = uiDataFetcher.getTabs(context.plOId); |
| | | if(Func.isNotEmpty(pageList)){ |
| | | pageList.stream().forEach(plTabPage -> { |
| | | Tree childTree=new Tree(plTabPage.plOId,plTabPage.plName,plTabPage); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | } |
| | | pTree.setChildren(chiledTreeList); |
| | | }else if (funcObj instanceof PLTabPage) {//上下文 |
| | | PLTabPage plTabPage = (PLTabPage) funcObj; |
| | | List<PLPageDefination> pageDefinationList = uiDataFetcher.getComopnent(plTabPage.plOId); |
| | | if(Func.isNotEmpty(pageDefinationList)){ |
| | | pageDefinationList.stream().forEach(plPageDefination -> { |
| | | Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | } |
| | | |
| | | }else if (funcObj instanceof PLTabPage) {//上下文 |
| | | PLTabPage plTabPage = (PLTabPage) funcObj; |
| | | List<PLPageDefination>plPageDefinationList=new ArrayList<>(); |
| | | try { |
| | | PLPageDefination[] pLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(plTabPage.plOId); |
| | | if(pLPageDefinations!=null&&pLPageDefinations.length>0){ |
| | | plPageDefinationList= Arrays.stream(pLPageDefinations).collect(Collectors.toList()); |
| | | plPageDefinationList.stream().forEach(plPageDefination -> { |
| | | Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | } |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | }else if (funcObj instanceof PLPageDefination) {// |
| | | }else if (funcObj instanceof PLPageDefination) { |
| | | PLPageDefination plPageDefination = (PLPageDefination) funcObj; |
| | | try { |
| | | List<PLTabButton>plTabButtonList=new ArrayList<>(); |
| | | PLTabButton[] pLTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId); |
| | | if(pLTabButtons!=null&&pLTabButtons.length>0){ |
| | | plTabButtonList= Arrays.stream(pLTabButtons).collect(Collectors.toList()); |
| | | plTabButtonList.stream().forEach(plTabButton -> { |
| | | Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | childTree.setLeaf(true); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | } |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | List<PLTabButton> pLTabButtonList = uiDataFetcher.getButtons(plPageDefination.plOId); |
| | | if(Func.isNotEmpty(pLTabButtonList)){ |
| | | pLTabButtonList.stream().forEach(plTabButton -> { |
| | | Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | childTree.setLeaf(true); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode_old(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox); |
| | | } |
| | | }else if (funcObj instanceof PLTabButton) {//按钮 |
| | | PLTabButton plTabButton= (PLTabButton) funcObj; |
| | | String id =plTabButton.plTableOId; |
| | | PLTabButton plTabButton = (PLTabButton) funcObj; |
| | | String id = plTabButton.plTableOId; |
| | | if(roleRightVOMap.containsKey(id)){ |
| | | RoleRightVO roleRightVO = roleRightVOMap.get(id); |
| | | Long rightValue = roleRightVO.getRightValue(); |
| | | int nodeValue = plTabButton.plSeq; |
| | | if (nodeValue >= 0 && nodeValue <= 63) { |
| | | long preValue = (rightValue >> nodeValue) & 1; |
| | | if (preValue == 1) { |
| | | pTree.setChecked(true); |
| | | } |
| | | } |
| | | }else{ |
| | | pTree.setChecked(false); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 遍历子节点 |
| | | * @param parentTree |
| | | * @param contextList |
| | | * @param isShowCheckBox |
| | | */ |
| | | private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String, List<RoleRightVO>> roleRightVOMap, boolean isShowCheckBox){ |
| | | Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> { |
| | | Object funcObj = pTree.getData(); |
| | | List<Tree> chiledTreeList = new ArrayList<>(); |
| | | if (funcObj instanceof BizType) {//业务类型 |
| | | if(!CollectionUtil.isEmpty(contextList)) { |
| | | contextList.stream().forEach(context->{ |
| | | Tree childTree = new Tree(context.plOId,context.plName+"("+context.plCode+")",context); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); |
| | | } |
| | | }else if (funcObj instanceof PLUILayout){//UI |
| | | PLUILayout context = (PLUILayout) funcObj; |
| | | List<PLTabPage> pageList = uiDataFetcher.getTabs(context.plOId); |
| | | if(Func.isNotEmpty(pageList)){ |
| | | pageList.stream().forEach(plTabPage -> { |
| | | Tree childTree=new Tree(plTabPage.plOId,plTabPage.plName,plTabPage); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); |
| | | } |
| | | pTree.setChildren(chiledTreeList); |
| | | }else if (funcObj instanceof PLTabPage) {//上下文 |
| | | PLTabPage plTabPage = (PLTabPage) funcObj; |
| | | List<PLPageDefination> pageDefinationList = uiDataFetcher.getComopnent(plTabPage.plOId); |
| | | if(Func.isNotEmpty(pageDefinationList)){ |
| | | pageDefinationList.stream().forEach(plPageDefination -> { |
| | | Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); |
| | | } |
| | | }else if (funcObj instanceof PLPageDefination) { |
| | | PLPageDefination plPageDefination = (PLPageDefination) funcObj; |
| | | List<PLTabButton> pLTabButtonList = uiDataFetcher.getButtons(plPageDefination.plOId); |
| | | if(Func.isNotEmpty(pLTabButtonList)){ |
| | | pLTabButtonList.stream().forEach(plTabButton -> { |
| | | Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton); |
| | | childTree.setParentName(pTree.getText()); |
| | | childTree.setParentId(pTree.getOid()); |
| | | childTree.setParentBtmName(pTree.getParentBtmName()); |
| | | childTree.setLevel(pTree.getLevel()+1); |
| | | childTree.setShowCheckbox(isShowCheckBox); |
| | | childTree.setLeaf(true); |
| | | chiledTreeList.add(childTree); |
| | | }); |
| | | pTree.setChildren(chiledTreeList); |
| | | } |
| | | if(!CollectionUtil.isEmpty(chiledTreeList)) { |
| | | setChildNode(chiledTreeList, contextList,roleRightVOMap, isShowCheckBox); |
| | | } |
| | | }else if (funcObj instanceof PLTabButton) {//按钮 |
| | | PLTabButton plTabButton = (PLTabButton) funcObj; |
| | | String id = plTabButton.plTableOId; |
| | | if(roleRightVOMap.containsKey(id)){ |
| | | RoleRightVO roleRightVO = roleRightVOMap.get(id).get(0); |
| | | Long rightValue = roleRightVO.getRightValue(); |
| | | int nodeValue = plTabButton.plSeq; |
| | | if (nodeValue >= 0 && nodeValue <= 63) { |
| | | long preValue = (rightValue >> nodeValue) & 1; |
| | |
| | | tabPage.plName = copyObjName; |
| | | tabPage.plCode = copyObjCode; |
| | | tabPage.plSeq = Short.parseShort(copyObjSeq); |
| | | if(Func.isEmpty(sessionInfo)){ |
| | | sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | } |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | tabPage.plCreateUser = sessionInfo.getUserId(); |
| | | tabPage.plModifyUser = sessionInfo.getUserId(); |
| | | long currentTimeMillis = System.currentTimeMillis(); |
| | |
| | | return BaseResult.success("页面定义克隆成功!!"); |
| | | } |
| | | //初始化sessionInfo属性 |
| | | if(Func.isEmpty(sessionInfo)){ |
| | | sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | } |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | //循环克隆按钮(同时会对按钮的父子级关系和按钮下的参数进行保存) |
| | | tabButtonVOS.stream().forEach(buttonVO->{ |
| | | try { |
| | |
| | | if(Func.isEmpty(filterTabButton)){ |
| | | return BaseResult.fail("根据源对象主键未查询到源对象,请刷新后重试!!"); |
| | | } |
| | | if(Func.isEmpty(sessionInfo)){ |
| | | sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | } |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | |
| | | //改变button对象的oid和parentOId |
| | | this.modifyButtonOIdsAndCopy(filterTabButton,toOId,ObjectUtility.getNewObjectID36()); |
| | |
| | | |
| | | // 修改当前节点的oId |
| | | button.setOId(newOId); |
| | | SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); |
| | | //开始保存按钮和参数 |
| | | button.setCreateUser(sessionInfo.getUserId()); |
| | | button.setModifyUser(sessionInfo.getUserId()); |
| | |
| | | */ |
| | | protected boolean checkQTIsExist(String tip, String txtQTName, String txtType) throws PLException { |
| | | boolean res = false; |
| | | |
| | | String sql = "select count(1) count_ from PL_QTEMPLATE qt " + |
| | | "where qt.btmname ='" + txtType.trim() + "' " + |
| | | "and qt.qtname='" + txtQTName.trim() + "'"; |
| | | |
| | | res = checkCountNotEqualZero(sql); |
| | | if(!res){ |
| | | throw new PLException("500", |
| | | new String[]{String.format("%s %s 无效!", tip, txtQTName)}); |
| | |
| | | */ |
| | | private boolean checkLinkTypeInputIsOk(String txtVIName/*选择的模板*/,String txtQTName/*查询模板*/,String btmType) throws PLException { |
| | | boolean res = false; |
| | | if(!(this.checkBtmTypeTxtIsOk("目标对象", linkType,true))){ |
| | | if(!(this.checkLinkTypeTxtIsOk("目标对象", linkType,true))){ |
| | | res = false; |
| | | } else if(!(this.checkPortalVITxtIsOk("选择模板", txtVIName, linkType,true))){ |
| | | res = false; |
| | |
| | | d.setSearchTarger(searchTarger); |
| | | d.setShowType(btmType); |
| | | d.setTemplateId(txtVIName); |
| | | d.setOrientation("positive"); |
| | | d.setQueryTemplateName(txtQTName); |
| | | d.setExpandCols(expandCols); |
| | | d.setExpandMode(expandMode); |
| | |
| | | d.setShowType(btmType); |
| | | d.setLinkType(linkType); |
| | | d.setTemplateId(queryTemplateName); |
| | | d.setOrientation("positive"); |
| | | d.setRootContent(showExpressionRoot.trim()); |
| | | d.setShowAbs(showExpression.trim()); |
| | | d.setShowLinkAbs(refTreeSet.trim()); |
| | |
| | | return res; |
| | | } |
| | | // 链接类型不为空时,需要同时检查链接类型及链接类型下的查询模板是否有效 |
| | | if(Func.isBlank(linkType)){ |
| | | if(Func.isNotBlank(linkType)){ |
| | | if(!(super.checkLinkTypeTxtIsOk("链接类型", linkType,false))){ |
| | | res = false; |
| | | return res; |