| | |
| | | import com.vci.corba.omd.ltm.LinkType; |
| | | import com.vci.corba.omd.stm.StatePool; |
| | | import com.vci.corba.omd.vrm.VersionRule; |
| | | import com.vci.corba.portal.data.PLUILayout; |
| | | import com.vci.dto.OsBtmTypeDTO; |
| | | import com.vci.dto.OsBtmTypeLinkAttributesDTO; |
| | | import com.vci.model.IndexObject; |
| | |
| | | @Override |
| | | public List<OsBtmTypeVO> btmDO2VOs(Collection<BizType> btmItems,Map<String, OsAttributeVO> attributeVOMap) { |
| | | List<OsBtmTypeVO> VOS = new ArrayList<>(); |
| | | Optional.ofNullable(btmItems).orElseGet(() -> new ArrayList<>()).stream().forEach(btmItem -> { |
| | | Optional.ofNullable(btmItems).orElseGet(() -> new ArrayList<>()).parallelStream().forEach(btmItem -> { |
| | | OsBtmTypeVO vo = btmDO2VO(btmItem,attributeVOMap); |
| | | VOS.add(vo); |
| | | }); |
| | |
| | | vo.setDelimiter(btmItem.delimiter); |
| | | vo.setfName(btmItem.fName); |
| | | vo.setVersionRule(String.valueOf(btmItem.verRuleName)); |
| | | if (StringUtils.isNotBlank(vo.getRevisionRuleName()) || vo.isInputRevisionFlag()) { |
| | | if (StringUtils.isNotBlank(vo.getRevisionRuleId()) || vo.isInputRevisionFlag()) { |
| | | vo.setRevisionFlag(true); |
| | | } |
| | | vo.setLifeCycleIds(Arrays.stream(btmItem.lifeCycles).collect(Collectors.joining(","))); |
| | |
| | | if (CollectionUtils.isEmpty(btmIds)) { |
| | | return null; |
| | | } |
| | | Map<String, OsBtmTypeVO> btmTypeVOMap = self.selectAllBtmMap(); |
| | | //Map<String, OsBtmTypeVO> btmTypeVOMap = self.selectAllBtmMap(); |
| | | BtmDataFetcher btmDataFetcher = new BtmDataFetcher(); |
| | | List<OsBtmTypeVO> btmTypeVOS = new ArrayList<>(); |
| | | btmIds.stream().forEach(id -> { |
| | | if (btmTypeVOMap.containsKey(id.toLowerCase())) { |
| | | btmTypeVOS.add(btmTypeVOMap.get(id.toLowerCase())); |
| | | } |
| | | OsBtmTypeVO btmType = btmDataFetcher.getBtmType(id); |
| | | btmTypeVOS.add(btmType); |
| | | }); |
| | | return btmTypeVOS; |
| | | } |
| | |
| | | * @return 业务类型 |
| | | */ |
| | | @Override |
| | | public OsBtmTypeVO getBtmById(String id) { |
| | | public OsBtmTypeVO getBtmById(String id) throws PLException { |
| | | if (StringUtils.isBlank(id)) { |
| | | return null; |
| | | } |
| | | return self.selectAllBtmMap().getOrDefault(id.toLowerCase(), null); |
| | | BizType bizType = platformClientUtil.getBtmService().getBizTypeByName(id); |
| | | return btmDO2VO(bizType,null); |
| | | } |
| | | |
| | | /** |
| | | * 使用类型名获取业务类型,查不到直接报错 |
| | | * @param btmName 类型名 |
| | | * @return 业务类型 |
| | | * @throws |
| | | */ |
| | | @Override |
| | | public OsBtmTypeVO getBtmByName(String btmName) throws PLException{ |
| | | if(Func.isBlank(btmName)){ |
| | | throw new PLException("500",new String[]{"查询条件类型名不能为空!"}); |
| | | } |
| | | BizType bizType = platformClientUtil.getBtmService().getBizTypeByName(btmName); |
| | | if(Func.isEmpty(bizType) || Func.isBlank(bizType.oid)){ |
| | | throw new PLException("500",new String[]{"根据【"+btmName+"】未查询到对应业务类型!"}); |
| | | } |
| | | return btmDO2VO(bizType,null); |
| | | } |
| | | |
| | | /** |
| | | * 使用编号获取业务类型 |
| | | * |
| | |
| | | if (attrVOs == null) { |
| | | attrVOs = new ArrayList<>(); |
| | | } |
| | | if (!CollectionUtils.isEmpty(attributeService.getDefaultAttributeVOs())) { |
| | | List<OsAttributeVO> defaultAttributeVOs = attributeService.getDefaultAttributeVOs(); |
| | | if (!CollectionUtils.isEmpty(defaultAttributeVOs)) { |
| | | List<OsBtmTypeAttributeVO> finalAttrVOs = attrVOs; |
| | | attributeService.getDefaultAttributeVOs().stream().forEach(attr -> { |
| | | defaultAttributeVOs.stream().forEach(attr -> { |
| | | OsBtmTypeAttributeVO attributeVO = new OsBtmTypeAttributeVO(); |
| | | BeanUtil.convert(attr, attributeVO); |
| | | attributeVO.setAttributeDataType(attr.getAttributeDataType()); |
| | |
| | | |
| | | /** |
| | | * 判断该属性是否已经在业务类型中产生了数据 |
| | | * |
| | | * @param abName |
| | | * @return |
| | | * @throws PLException |
| | |
| | | * @return 枚举的名称 |
| | | */ |
| | | @Override |
| | | public String getNameById(String id) { |
| | | public String getNameById(String id) throws PLException { |
| | | OsBtmTypeVO btmTypeVO = getBtmById(id); |
| | | if (btmTypeVO == null) { |
| | | throw new VciBaseException("业务类型[{0}]在系统里不存在", new String[]{id}); |
| | |
| | | * @param btmId 业务类型主键 |
| | | */ |
| | | @Override |
| | | public OsERVO createERDiagram(String btmId) { |
| | | public OsERVO createERDiagram(String btmId) throws PLException { |
| | | VciBaseUtil.alertNotNull(btmId, "业务类型编号"); |
| | | OsBtmTypeVO btmTypeVO = getBtmById(btmId); |
| | | List<OsERNodeVO> nodeVOList = new ArrayList<>(); |
| | |
| | | * @return 执行结果 |
| | | */ |
| | | @Override |
| | | public OsERVO createERUsed(String btmId) { |
| | | public OsERVO createERUsed(String btmId) throws PLException { |
| | | VciBaseUtil.alertNotNull(btmId, "业务类型编号"); |
| | | OsBtmTypeVO btmTypeVO = getBtmById(btmId); |
| | | //获取使用当前类型的属性 |
| | |
| | | rootTreeList.add(tree); |
| | | } |
| | | } |
| | | |
| | | rootTreeList = rootTreeList.stream().sorted((o1, o2) -> o1.getId().compareTo(o2.getId())).collect(Collectors.toList()); |
| | | return rootTreeList; |
| | | } |
| | | |
| | |
| | | String[] unRemovableFields = null; |
| | | List<String> unRemovableFields_ = null; |
| | | //需要移除的属性 |
| | | List<String> removableFields = null; |
| | | List<String> removableFields = new ArrayList<>(); |
| | | //修改前业务类型在数据库中已存在的所有属性 |
| | | String[] apNameArray = btmTypeDTO.getApNameArray().split(","); |
| | | List<String> apNameArray = Func.toStrList(btmTypeDTO.getApNameArray()); |
| | | Set<String> dbApNameArray = Arrays.stream(dbBizType.apNameArray) |
| | | .collect(Collectors.toSet()); |
| | | //过滤出需要移除的属性 |
| | | removableFields = Arrays.stream(apNameArray) |
| | | .filter(ap -> !dbApNameArray.contains(ap)) // 过滤不在 dbApSet 中的元素 |
| | | removableFields = dbApNameArray.stream() |
| | | .filter(ap -> !apNameArray.contains(ap)) // 过滤不在 dbApSet 中的元素 |
| | | .collect(Collectors.toList()); |
| | | // 当业务类型表中某属性已经有值, 不删除该属性, 将已经移除的属性添加回来 |
| | | unRemovableFields = platformClientUtil.getBtmService().getUnRemovableFields(id, removableFields.toArray(new String[0])); |
| | |
| | | if (this.hasInstanceByBtmName(id)) { |
| | | //业务类型已有实例, 只能删除没有数据的列 |
| | | if (unRemovableFields != null && unRemovableFields.length > 0) { |
| | | unRemovableFields_ = Arrays.asList(unRemovableFields); |
| | | //移除了不可修改的属性直接报错,就不往下执行了 |
| | | throw new VciBaseException("业务类型已有实例, 只能删除没有数据的列"); |
| | | /*unRemovableFields_ = Arrays.asList(unRemovableFields); |
| | | for (int i = 0; i < removableFields.size(); i++) { |
| | | String abName = removableFields.get(i); |
| | | if (unRemovableFields_.contains(abName)) { |
| | |
| | | lastAttrList.add(abName); |
| | | } |
| | | } |
| | | } |
| | | }*/ |
| | | } |
| | | } |
| | | } |
| | |
| | | //boolean flag = DDLToolClient.getService().hasInstanceOralce(tableName); |
| | | boolean flag = false; |
| | | try { |
| | | flag = ClientServiceProvider.getOMDService().getBTMService().hasData(btmName); |
| | | flag = platformClientUtil.getBtmService().hasData(btmName); |
| | | } catch (PLException e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | |
| | | itemList.add(nodePropertyVO); |
| | | //判断参照 |
| | | if (hasRefer) { |
| | | selectReferenceBtmType(attribute, btmTypeVO, nodeVOList, relationVOList); |
| | | try { |
| | | selectReferenceBtmType(attribute, btmTypeVO, nodeVOList, relationVOList); |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | String exceptionMessage = "判断业务类型的属性是不是参照类型时出现错误,原因:"+VciBaseUtil.getExceptionMessage(e); |
| | | logger.error(exceptionMessage); |
| | | throw new VciBaseException(exceptionMessage); |
| | | } |
| | | } |
| | | }); |
| | | nodeVO.setItems(itemList); |
| | |
| | | * @param relationVOList 关系信息 |
| | | */ |
| | | private void selectReferenceBtmType(OsBtmTypeAttributeVO attribute, OsBtmTypeVO btmTypeVO, |
| | | List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList) { |
| | | List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList) throws PLException { |
| | | if (StringUtils.isNotBlank(attribute.getReferBtmTypeId())) { |
| | | //是参照类型的 |
| | | OsBtmTypeVO referenceBtmType = getBtmById(attribute.getReferBtmTypeId()); |
| | |
| | | items.add(nodePropertyVO); |
| | | //判断参照 |
| | | if (!used) { |
| | | selectReferenceLinkType(attr, link, nodeVOList, relationVOList); |
| | | try { |
| | | selectReferenceLinkType(attr, link, nodeVOList, relationVOList); |
| | | } catch (PLException e) { |
| | | e.printStackTrace(); |
| | | String exceptionMessage = "断链接类型的属性是不是参照类型时出现错误,原因:"+VciBaseUtil.getExceptionMessage(e); |
| | | logger.error(exceptionMessage); |
| | | throw new VciBaseException(exceptionMessage); |
| | | } |
| | | } |
| | | }); |
| | | nodeVO.setItems(items); |
| | |
| | | * @param nodeVOList 节点对象 |
| | | * @param relationVOList 关系对象 |
| | | */ |
| | | private void selectReferenceLinkType(OsLinkTypeAttributeVO attr, OsLinkTypeVO linkTypeVO, List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList) { |
| | | private void selectReferenceLinkType(OsLinkTypeAttributeVO attr, OsLinkTypeVO linkTypeVO, List<OsERNodeVO> nodeVOList, List<OsERRelationVO> relationVOList) throws PLException { |
| | | if (StringUtils.isNotBlank(attr.getReferBtmTypeId())) { |
| | | //是参照类型的 |
| | | OsBtmTypeVO referenceBtmType = getBtmById(attr.getReferBtmTypeId()); |
| | |
| | | |
| | | } |
| | | |
| | | private class BtmDataFetcher { |
| | | |
| | | //业务类型 |
| | | private Map<String, BizType> btmTypeVOMap = new HashMap<String, BizType>(); |
| | | |
| | | public BtmDataFetcher() { |
| | | initBtmDataFetcher(); |
| | | } |
| | | |
| | | private void initBtmDataFetcher(){ |
| | | try { |
| | | BizType[] bizTypes = platformClientUtil.getBtmService().getBizTypes(""); |
| | | //List<OsBtmTypeVO> osBtmTypeVOS = btmDO2VOs(Arrays.asList(bizTypes), null); |
| | | if(Func.isNotEmpty(bizTypes)){ |
| | | btmTypeVOMap = Arrays.stream(bizTypes).collect(Collectors.toMap(btm -> btm.name, btm -> btm)); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取业务类型 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public OsBtmTypeVO getBtmType(String id) { |
| | | BizType bizType = btmTypeVOMap.get(id); |
| | | if(Func.isEmpty(bizType)){ |
| | | return null; |
| | | } |
| | | //获取的时候才赚VO对象,这样避免一次性全部Btm转VO太慢的问题 |
| | | return btmDO2VO(bizType,null); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |