ludc
2023-11-20 5e449c8bba2273313fd25457cae653a0f340c910
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -4,29 +4,22 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.entity.*;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
import com.vci.ubcs.omd.service.IModifyAttributeService;
import com.vci.ubcs.omd.vo.BtmTypeTreeVO;
import com.vci.ubcs.omd.service.*;
import com.vci.ubcs.omd.vo.*;
import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
import com.vci.ubcs.omd.wrapper.ModifyAttributeWrapper;
import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.mapper.BtmTypeMapper;
import com.vci.ubcs.omd.service.IBtmTypeService;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
@@ -79,15 +72,27 @@
   private IModifyAttributeService modifyAttributeService;
   /**
    * 版本规则的服务
    */
   @Autowired
   private IRevisionRuleService revisionRuleService;
   /**
    * 属性的服务
    */
   @Autowired
   private IAttributeService attributeService;
   /**
    * 生命周期的服务
    */
   @Autowired
   private ILifeCycleService lifeCycleService;
   /**
    * 表名前缀
    */
   public static final String PL = "PL";
   public static final String PL = "PLBT";
   /**
    * 设置平台本身的业务类型
@@ -109,7 +114,11 @@
   @Override
   public BtmTypeVO getBtmTypeByOid(String pkBtmType) throws ServiceException {
      Func.requireNotNull(pkBtmType,"业务类型主键不能为空");
      BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getOid, pkBtmType)));
      BtmType queryBtmType = baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getOid, pkBtmType));
      if (queryBtmType == null){
         return null;
      }
      BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(queryBtmType);
      btmTypeVO.setAttributes(btmTypeAttributeService.getAttributeByBtmTypeOid(pkBtmType));
      return btmTypeVO;
   }
@@ -198,7 +207,7 @@
    */
   @Override
   public List<BtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException {
      return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection));
      return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectByIdCollection(idCollection);
   }
   /**
@@ -359,6 +368,7 @@
         if (!existFieldMap.containsKey(k)){
            BtmTypeLinkAttributesDTO attr = new BtmTypeLinkAttributesDTO();
            attr.setId(k);
            attr.setName(v);
            attr.setAttrDataType(VciFieldTypeEnum.VTString.name());
            attr.setAttributeLength(50);
            attr.setNullableFlag(false);
@@ -381,7 +391,7 @@
      ddlDTO.setBtmTypeList(btmTypeVOList);
      try {
         // 将以前的checkDifferent和reflexDifferent结合了
         R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getDomain());
         R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getBizDomain());
         if (result.isSuccess()){
            List<ModifyAttributeInfo> infoList = new ArrayList<>();
            Object data = result.getData();
@@ -459,7 +469,7 @@
    * @throws ServiceException 参数为空的时候会抛出异常
    */
   @Override
   public String getTableName(String id,String domain) throws ServiceException {
   public String getTableName(String id,String domain) throws VciBaseException {
      VciBaseUtil.alertNotNull(id,"业务类型英文名称",domain,"领域名称");
      if (domain.contains("ubcs-")){
         domain = domain.split("ubcs-")[1];
@@ -476,8 +486,9 @@
    * @return 执行结果
    */
   @Override
   public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) {
      TransactionStatus transaction = null;
   @Transactional(rollbackFor = Exception.class)
   public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException {
      /*TransactionStatus transaction = null;
      DefaultTransactionDefinition def = null;
      if (autoCreateTable) {
         def = new DefaultTransactionDefinition();
@@ -485,17 +496,19 @@
         // 事物隔离级别,开启新事务,这样会比较安全些。
         transaction = dataSourceTransactionManager.getTransaction(def);
         // 获得事务状态
      }
      checkBtmTypeBeforeSave(btmTypeDTO);
      }*/
//      checkBtmTypeBeforeSave(btmTypeDTO);
      BtmType btmTypeDO = Optional.ofNullable(BeanUtil.copy(btmTypeDTO, BtmType.class)).orElseGet(BtmType::new);
      btmTypeDO.setBizDomain(btmTypeDTO.getBizDomain());
      List<BtmTypeLinkAttributesDTO> attributes = btmTypeDTO.getAttributes();
      List<BtmTypeAttributeVO> afterAttributes;
      if (StringUtils.isBlank(btmTypeDO.getOid())){
         btmTypeDO = BtmTypeWrapper.build().entityBeforeInsert(btmTypeDO);
         if (StringUtils.isBlank(btmTypeDO.getTableName())) {
            btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getDomain()));
            btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getBizDomain()));
         }
         // 添加属性
         btmTypeDTO.setOid(btmTypeDO.getOid());
         afterAttributes = addAttributeForBtm(btmTypeDTO);
         baseMapper.insert(btmTypeDO);
      }else {
@@ -503,13 +516,17 @@
         List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
         // 处理属性,多余的删除,不存在的添加
         afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
         baseMapper.updateByPrimaryKey(btmTypeDO);
      }
      BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
      //在创建表的时候还需要把默认的字段带上。
      List<BtmTypeAttributeVO> defaultAttribute = btmTypeAttributeService.getDefaultAttribute(btmTypeVO);
      afterAttributes.addAll(defaultAttribute);
      btmTypeVO.setAttributes(afterAttributes);
      try {
         if (autoCreateTable) {
            checkTableSame(btmTypeVO);
            R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
            // checkTableSame(btmTypeVO);
            R result = DomainRepeater.submitBtmType(btmTypeDTO.getBizDomain(), btmTypeVO);
            if (result.isSuccess()){
               List<ModifyAttributeInfo> infoList = new ArrayList<>();
               Object data = result.getData();
@@ -523,14 +540,18 @@
                  });
                  modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
               }
               dataSourceTransactionManager.commit(transaction);
               // dataSourceTransactionManager.commit(transaction);
            }else {
               dataSourceTransactionManager.rollback(transaction);
               // dataSourceTransactionManager.rollback(transaction);
               // 创建表报错,抛出异常让该方法回滚
               throw new VciBaseException(result.getMsg());
               // return R.fail(result.getMsg());
            }
         }
      } catch (Throwable e) {
         if (autoCreateTable) {
            dataSourceTransactionManager.rollback(transaction);
//            dataSourceTransactionManager.rollback(transaction);
            throw new VciBaseException(e.getMessage());
         }
      }
      return R.data(btmTypeVO);
@@ -557,8 +578,12 @@
      List<BtmTypeAttributeVO> voListAdd = btmTypeAttributeService.checkAndInsert(oid, addList, AuthUtil.getUserAccount(), new Date());
      List<BtmTypeAttributeVO> voListUpdate = btmTypeAttributeService.checkAndUpdate(oid, modifyList, AuthUtil.getUserAccount(), new Date());
      List<BtmTypeAttributeVO> returnList = new ArrayList<>();
      returnList.addAll(Objects.requireNonNull(voListAdd));
      returnList.addAll(Objects.requireNonNull(voListUpdate));
      if(!CollectionUtils.isEmpty(voListAdd)) {
         returnList.addAll(Objects.requireNonNull(voListAdd));
      }
      if(!CollectionUtils.isEmpty(voListUpdate)) {
         returnList.addAll(Objects.requireNonNull(voListUpdate));
      }
      return returnList;
   }
@@ -581,47 +606,45 @@
      if (btmTypeDTO.getId().length() > 24) {
         throw new VciBaseException("业务类型英文名称不能超过18,目前长度为{0}", new Object[]{btmTypeDTO.getId().length()});
      }
      List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
      List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId().toLowerCase(Locale.ROOT)));
      if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
         boolean exist = btmTypeDOList.stream().filter(btm -> StringUtils.isNotBlank(btm.getOid())).anyMatch(btm -> !StringUtils.equals(btmTypeDTO.getOid(), btm.getOid()));
         BtmType existBtmType = btmTypeDOList.get(0);
         throw new VciBaseException("业务类型英文名称已经存在(不区分大小写),这个英文名称对应的中文名称为{0},创建人{1},创建时间{2}"
            , new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
         if (exist) {
            throw new VciBaseException("业务类型英文名称已经存在(不区分大小写),这个英文名称对应的中文名称为{0},创建人{1},创建时间{2}"
               , new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
         }
      }
      if (btmTypeDTO.isRevisionFlag()){
         // 需要控制版本
         // 检查使用的版本规则是否存在
//            if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
//               if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
//                  throw new VciBaseException("版本规则{0}[{1}]在系统中不存在,请先查证",
//                     new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
//               }
//            }
         btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
         if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
            if (!revisionRuleService.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
               throw new VciBaseException("版本规则{0}[{1}]在系统中不存在,请先查证",
                  new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
            }
         }
      }
      if (btmTypeDTO.isLifeCycleFlag()){
         // 需要控制生命周期
         //检查使用的生命周期是否存在
//            if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
//               && !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
//               if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
//                  throw new VciBaseException("生命周期{0}[{1}]在系统中不存在,请先查证",
//                     new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
//               }
//            }
            if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
//               && !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())
            ) {
               if (lifeCycleService.getOne(Wrappers.<LifeCycleRule>query().lambda().eq(LifeCycleRule::getId,btmTypeDTO.getLifeCycleId())) == null) {
                  throw new VciBaseException("生命周期{0}[{1}]在系统中不存在,请先查证",
                     new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
               }
            }
//            if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
//               if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
//                  throw new VciBaseException("备用生命周期{0}[{1}]中其中有某些在系统中不存在,请先查证",
//                     new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
//               }
//            }
         btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
      }
      if (btmTypeDTO.isSecretFlag()){
         // 需要控制密级
         btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
      }
      if (StringUtils.isBlank(btmTypeDTO.getOid())) {
         btmTypeDTO.setOid(VciBaseUtil.getPk());
      }
   }
   @Override
@@ -640,20 +663,30 @@
    * @return 查询结果
    */
   @Override
   public List<BtmTypeTreeVO> treeDomain() {
   public List<BtmTreeVO> treeDomain() {
      try {
         List<String> domain = DomainRepeater.getDomain();
         Map<String, String> domain = Optional.ofNullable(DomainRepeater.getDomain()).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(DomainVO::getValue, DomainVO::getLabel));
         List<BtmTypeVO> vos = BtmTypeWrapper.build().listEntityVO(baseMapper.selectAll());
         Map<String, List<BtmTypeVO>> domainMap = vos.stream().collect(Collectors.groupingBy(BtmTypeVO::getDomain));
         List<BtmTypeTreeVO> treeList = new ArrayList<>();
         if (CollectionUtils.isEmpty(vos)){
            return new ArrayList<>();
         }
         Map<String, List<BtmTypeVO>> domainMap = Optional.ofNullable(vos).orElseGet(ArrayList::new).stream().sorted(Comparator.comparing(BtmTypeVO::getId)).collect(Collectors.groupingBy(BtmTypeVO::getBizDomain));
         List<BtmTreeVO> treeList = new ArrayList<>();
         domainMap.forEach((k,v)-> {
            if (domain.contains(k)){
               BtmTypeTreeVO parent = new BtmTypeTreeVO();
               parent.setName(k);
            if (domain.containsKey(k)){
               String label = domain.get(k);
               BtmTreeVO parent = new BtmTreeVO();
               parent.setName(label);
               parent.setLabel(label);
               parent.setId(k);
               parent.setLevel(1);
               parent.setChildList(v.stream().map(s -> {
                  BtmTypeTreeVO child = new BtmTypeTreeVO();
                  BtmTreeVO child = new BtmTreeVO();
                  child.setOid(s.getOid());
                  child.setName(s.getId() + " " + (s.getName() == null ? "" : s.getName()));
                  child.setName(s.getName());
                  child.setId(s.getId());
                  child.setLevel(2);
                  child.setLabel(s.getId() +  (s.getName() == null ? "" : "(" + s.getName() + ")"));
                  return child;
               }).collect(Collectors.toList()));
               treeList.add(parent);
@@ -675,7 +708,7 @@
   public List<BtmTypeVO> getFromTable(String domain) {
      VciBaseUtil.alertNotNull(domain,"领域值");
      try {
         if (!DomainRepeater.getDomain().contains(domain)){
         if (!DomainRepeater.getDomain().stream().collect(Collectors.toMap(DomainVO::getValue, DomainVO::getLabel)).containsKey(domain)){
            return null;
         }
         R result = DomainRepeater.getFromTable(domain);
@@ -720,9 +753,9 @@
         btmType.setOid(VciBaseUtil.getPk());
         btmType.setTs(now);
         btmType.setCreator(user);
         btmType.setBtmName("btmType");
         btmType.setBtmName(BtmTypeConstant.BTMTYPE);
         btmType.setCreateTime(now);
         btmType.setDomain(domain);
         btmType.setBizDomain(domain);
         btmType.setLastModifyTime(now);
         btmType.setLastModifier(user);
         btmType.setName(dto.getDescription());
@@ -735,9 +768,11 @@
         }).map(attr -> {
            // 添加属性,1是校验,2是添加
            Attribute attribute = new Attribute();
            attribute.setKey(attr.getId());
            attribute.setLabel(attr.getName());
            attribute.setDictKey(attr.getAttrDataType());
            attribute.setId(attr.getId());
            attribute.setName(attr.getName());
            attribute.setTypeCode("attributeType");
            attribute.setTypeKey(attr.getAttrDataType());
//            attribute.setDictKey(attr.getAttrDataType());
            attribute.setMaxLength(attr.getAttributeLength());
            attribute.setPrecision(attr.getPrecisionLength());
            attribute.setDescription(attr.getDescription());
@@ -747,10 +782,14 @@
            attribute.setReferToId(attr.getReferBtmTypeId());
            attribute.setReferToName(attr.getReferBtmTypeName());
            attribute.setTs(now);
            attribute.setOwner(user);
            attribute.setCreateTime(now);
            attribute.setIsDeleted(0);
            attribute.setCreateUser(AuthUtil.getUserId());
            idAttrMap.put(attribute.getKey(),attribute);
            attribute.setLastModifier(user);
            attribute.setLastModifyTime(now);
            attribute.setBtmName(BtmTypeConstant.ATTRIBUTE);
            attribute.setCreator(user);
            attribute.setOid(VciBaseUtil.getPk());
            idAttrMap.put(attribute.getId(),attribute);
            // 在这里给业务类型设置版本控制、生命周期控制、密级控制相关的信息
            // 添加业务类型和属性的关系
@@ -760,7 +799,6 @@
            btmTypeAttribute.setCreateTime(now);
            btmTypeAttribute.setLastModifier(user);
            btmTypeAttribute.setLastModifyTime(now);
//            btmTypeAttribute.setBtmName("btmTypeAttribute");
            btmTypeAttribute.setOid(VciBaseUtil.getPk());
            btmTypeAttribute.setBtmName(btmType.getId());
            btmTypeAttribute.setOwner(user);
@@ -774,7 +812,7 @@
         btmType.setConsistence(BooleanEnum.TRUE.getValue());
         btmList.add(btmType);
      });
      List<Attribute> existAttr = attributeService.list(Wrappers.<Attribute>query().lambda().in(Attribute::getKey, attributeIds));
      List<Attribute> existAttr = attributeService.list(Wrappers.<Attribute>query().lambda().in(Attribute::getId, attributeIds));
      if (!CollectionUtils.isEmpty(btmList)){
         baseMapper.batchInsert(btmList);
      }
@@ -796,11 +834,139 @@
      if (CollectionUtils.isEmpty(existAttr)){
         attributeService.saveBatch(idAttrMap.values());
      }else {
         List<Attribute> addList = idAttrMap.values().stream().filter(a -> existAttr.stream().noneMatch(b -> StringUtils.equals(a.getKey(), b.getKey()))).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(addList)) {
         List<Attribute> addList = idAttrMap.values().stream().filter(a -> existAttr.stream().noneMatch(b -> StringUtils.equals(a.getId(), b.getId()))).collect(Collectors.toList());
         if (!CollectionUtils.isEmpty(addList)) {
            attributeService.saveBatch(addList);
         }
      }
      return BtmTypeWrapper.build().listEntityVO(btmList);
   }
   /**
    * 按照业务类型id获取默认属性
    *
    * @param btmTypeId 业务类型id
    * @return 业务类型
    */
   @Override
   public BtmTypeVO getDefaultAttrByBtmId(String btmTypeId) {
      BtmTypeVO btmType = getBtmTypeById(btmTypeId);
      if (btmType == null){
         return null;
      }
      btmType.setAttributes(btmTypeAttributeService.getDefaultAttribute(btmType));
      return btmType;
   }
   /**
    * 按照业务类型id获取所有的属性
    *
    * @param btmTypeId 业务类型id
    * @return 业务类型
    */
   @Override
   public BtmTypeVO getAllAttributeByBtmId(String btmTypeId) {
      BtmTypeVO btmType = getBtmTypeById(btmTypeId);
      if (btmType == null){
         return null;
      }
      btmType.setAttributes(btmTypeAttributeService.getAllAttribute(btmType));
      return btmType;
   }
   /**
    * 按照业务类型主键获取所有的属性
    *
    * @param btmTypeOid 业务类型主键
    * @return 业务类型
    */
   @Override
   public BtmTypeVO getAllAttributeByBtmOid(String btmTypeOid) {
      BtmTypeVO btmType = getBtmTypeByOid(btmTypeOid);
      if (btmType == null){
         return null;
      }
      btmType.setAttributes(btmTypeAttributeService.getAllAttribute(btmType));
      return btmType;
   }
   /**
    * 获取引用某个生命周期的业务类型
    *
    * @param lifeId 生命周期的编号
    * @return 业务类型显示对象
    */
   @Override
   public List<BtmTypeVO> selectByLifeId(String lifeId) {
      if(StringUtils.isBlank(lifeId)){
         return new ArrayList<>();
      }
      LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
      query.eq(BtmType::getLifeCycleId,lifeId);
      return BtmTypeWrapper.build().listEntityVO(getBaseMapper().selectList(query));
   }
   /**
    * 获取引用某些生命周期的业务类型
    *
    * @param lifeIds 生命周期的编号集合
    * @return 业务类型显示对象
    */
   @Override
   public List<BtmTypeVO> selectByLifeIds(Collection<String> lifeIds) {
      if(CollectionUtils.isEmpty(lifeIds)){
         return new ArrayList<>();
      }
      List<BtmType> btmTypeList = new ArrayList<>();
      VciBaseUtil.switchCollectionForOracleIn(lifeIds).stream().forEach(ids->{
         LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
         ids.stream().forEach(id->{
            query.eq(BtmType::getLifeCycleId,id);
            query.or();
         });
         query.eq(BtmType::getLifeCycleId,"-1");
         btmTypeList.addAll(baseMapper.selectList(query));
      });
      return BtmTypeWrapper.build().listEntityVO(btmTypeList);
   }
   /**
    * 统计引用某个生命周期的业务类型
    *
    * @param lifeId 生命周期的编号
    * @return 个数
    */
   @Override
   public Integer countByLifeId(String lifeId) {
      if(StringUtils.isBlank(lifeId)){
         return 0;
      }
      LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
      query.eq(BtmType::getLifeCycleId,lifeId);
      return baseMapper.selectCount(query).intValue();
   }
   /**
    * 统计引用某些生命周期的业务类型
    *
    * @param lifeIds 生命周期的编号集合
    * @return 个数
    */
   @Override
   public Integer countByLifeIds(Collection<String> lifeIds) {
      if(CollectionUtils.isEmpty(lifeIds)){
         return 0;
      }
      final Integer[] total = {0};
      VciBaseUtil.switchCollectionForOracleIn(lifeIds).stream().forEach(ids->{
         LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
         ids.stream().forEach(id->{
            query.eq(BtmType::getLifeCycleId,id);
            query.or();
         });
         query.eq(BtmType::getLifeCycleId,"-1");
         total[0] += baseMapper.selectCount(query).intValue();
      });
      return total[0];
   }
}