Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -10,7 +10,7 @@
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.*;
import com.vci.ubcs.omd.vo.*;
@@ -19,9 +19,6 @@
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.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
@@ -85,6 +82,12 @@
    */
   @Autowired
   private IAttributeService attributeService;
   /**
    * 生命周期的服务
    */
   @Autowired
   private ILifeCycleService lifeCycleService;
   /**
    * 表名前缀
@@ -466,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];
@@ -483,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();
@@ -492,8 +496,8 @@
         // 事物隔离级别,开启新事务,这样会比较安全些。
         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();
@@ -512,6 +516,7 @@
         List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
         // 处理属性,多余的删除,不存在的添加
         afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
         baseMapper.updateByPrimaryKey(btmTypeDO);
      }
      BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
      //在创建表的时候还需要把默认的字段带上。
@@ -520,7 +525,7 @@
      btmTypeVO.setAttributes(afterAttributes);
      try {
         if (autoCreateTable) {
//            checkTableSame(btmTypeVO);
            // checkTableSame(btmTypeVO);
            R result = DomainRepeater.submitBtmType(btmTypeDTO.getBizDomain(), btmTypeVO);
            if (result.isSuccess()){
               List<ModifyAttributeInfo> infoList = new ArrayList<>();
@@ -535,15 +540,17 @@
                  });
                  modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
               }
               dataSourceTransactionManager.commit(transaction);
               // dataSourceTransactionManager.commit(transaction);
            }else {
               dataSourceTransactionManager.rollback(transaction);
               return R.fail(result.getMsg());
               // 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());
         }
      }
@@ -571,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;
   }
@@ -617,13 +628,14 @@
      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}]中其中有某些在系统中不存在,请先查证",
@@ -655,7 +667,10 @@
      try {
         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().sorted(Comparator.comparing(BtmTypeVO::getId)).collect(Collectors.groupingBy(BtmTypeVO::getBizDomain));
         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.containsKey(k)){
@@ -664,11 +679,13 @@
               parent.setName(label);
               parent.setLabel(label);
               parent.setId(k);
               parent.setLevel(1);
               parent.setChildList(v.stream().map(s -> {
                  BtmTreeVO child = new BtmTreeVO();
                  child.setOid(s.getOid());
                  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()));