| | |
| | | package com.vci.web.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.vci.common.utility.ObjectUtility; |
| | | import com.vci.corba.common.PLException; |
| | | import com.vci.corba.common.data.UserEntityInfo; |
| | |
| | | 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 com.vci.web.utility.UIDataFetcher; |
| | | 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 javax.swing.tree.TreePath; |
| | | 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 |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据上下文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】范围内。"); |
| | | } |
| | |
| | | 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); |
| | | List<Tree> treeList=new ArrayList<>(); |
| | |
| | | rootNode.setExpanded(true); |
| | | List<Tree> childList=new ArrayList<>(); |
| | | |
| | | //long startTime = System.currentTimeMillis(); |
| | | 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.setParentId(rootNode.getOid()); |
| | | bizTypeTree.setParentName(rootNode.getText()); |
| | | bizTypeTree.setParentBtmName(bizTypes[i].name); |
| | | //long startTime1 = System.currentTimeMillis(); |
| | | List<PLUILayout> contextList = uiDataFetcher.getContext(bizTypes[i].name/*+context*/); |
| | | //long endTime1 = System.currentTimeMillis(); |
| | | //System.out.println("============================================获取UI定义数据引擎耗时:"+((endTime1-startTime1)/1000)+"s"); |
| | | |
| | | List<Tree> btmChildList = new ArrayList<>(); |
| | | btmChildList.add(bizTypeTree); |
| | | setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox); |
| | | childList.add(bizTypeTree); |
| | | } |
| | | //long endTime = System.currentTimeMillis(); |
| | | //System.out.println("============================================UI定义树计算完毕耗时:"+((endTime-startTime)/1000)+"s"); |
| | | rootNode.setChildren(childList); |
| | | treeList.add(rootNode); |
| | | return treeList; |
| | |
| | | |
| | | /** |
| | | * 根据角色主键获取已授权的信息 |
| | | * @param roleId |
| | | * @param roleId 如果roleId不传,就会获取当前登录的用户的名称查询权限 |
| | | * @return |
| | | * @throws PLException |
| | | */ |
| | | /* @Override |
| | | public Map<String,RoleRightVO> getRightListByRoleId(String roleId) throws PLException { |
| | | VciBaseUtil.alertNotNull(roleId,"查询条件角色主键"); |
| | | String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); |
| | | RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); |
| | | List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); |
| | | Map<String,RoleRightVO> roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue)); |
| | | return roleRightVOMap; |
| | | }*/ |
| | | @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(); |
| | |
| | | * @param contextList |
| | | * @param isShowCheckBox |
| | | */ |
| | | private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap, boolean 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<>(); |
| | |
| | | PLTabButton plTabButton = (PLTabButton) funcObj; |
| | | String id = plTabButton.plTableOId; |
| | | if(roleRightVOMap.containsKey(id)){ |
| | | RoleRightVO roleRightVO = roleRightVOMap.get(id); |
| | | Long rightValue = roleRightVO.getRightValue(); |
| | | 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; |
| | |
| | | */ |
| | | 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; |