ludc
2024-01-30 8e832c69b20bd34f6da9ef25324ec690d1cccbe3
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -7,10 +7,12 @@
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.cache.EnumCache;
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.*;
import com.vci.ubcs.omd.enums.EnumEnum;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.*;
import com.vci.ubcs.omd.vo.*;
@@ -469,7 +471,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];
@@ -486,8 +488,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();
@@ -495,8 +498,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();
@@ -515,6 +518,7 @@
         List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
         // 处理属性,多余的删除,不存在的添加
         afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
         baseMapper.updateByPrimaryKey(btmTypeDO);
      }
      BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
      //在创建表的时候还需要把默认的字段带上。
@@ -523,7 +527,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<>();
@@ -538,15 +542,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());
         }
      }
@@ -574,8 +580,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;
   }
@@ -961,4 +971,98 @@
      });
      return total[0];
   }
   /**
    * 获取默认属性
    * @param defaultAttrType
    * @return
    */
   @Override
   public List<BtmTypeAttributeVO> getDefaultAttr(String defaultAttrType) {
      List<BtmTypeAttributeVO> list = new ArrayList<>();
      // 业务类型的默认基本字段
      if(defaultAttrType.equals("defaultAttr")){
         BtmTypeFieldConstant.BASIC_FIELD_MAP.forEach((id,name) -> {
            id = id.toLowerCase(Locale.ROOT);
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setIsDefaultAttr(true);
            if ("oid".equals(id)){
               vo.setNullableFlag(false);
            }
            if (Arrays.asList("createtime","lastmodifytime","ts").contains(id)){
               vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
               vo.setAttributeLength(6);
            }else {
               vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
               vo.setAttributeLength(150);
            }
            list.add(vo);
         });
         BtmTypeFieldConstant.MASTERDATA_FIELD_MAP.forEach((id,name) -> {
            id = id.toLowerCase(Locale.ROOT);
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setIsDefaultAttr(false);
            if (Arrays.asList("codeclsfpath").contains(id)){
               vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
               vo.setAttributeLength(500);
            }else {
               vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
               vo.setAttributeLength(255);
            }
            list.add(vo);
         });
      }
      // 版本规则字段
      if (defaultAttrType.equals("reVersionRule")){
         BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.forEach((id,name) -> {
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
            // 版本规则字段不能为空
//            vo.setNullableFlag(false);
            vo.setAttributeLength(150);
            vo.setIsDefaultAttr(true);
            if (Arrays.asList("revisionseq","versionseq").contains(id)){
               vo.setAttributeLength(5);
               vo.setAttrDataType(VciFieldTypeEnum.VTInteger.name());
            }
            if (Arrays.asList("checkintime","checkouttime").contains(id)){
               vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
               vo.setAttributeLength(6);
            }
            list.add(vo);
         });
      }
      // 生命周期字段
      if (defaultAttrType.equals("lifeCycle")){
         BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.forEach((id,name) -> {
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
//            vo.setNullableFlag(false);
            vo.setIsDefaultAttr(true);
            vo.setAttributeLength(50);
            vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
            list.add(vo);
         });
      }
      // 设置字段类型中文显示值,和排序
      List<BtmTypeAttributeVO> sortedList = list.stream()
         .sorted(Comparator.comparing(BtmTypeAttributeVO::getIsDefaultAttr))
         .map(item-> {
            item.setAttrDataTypeText(EnumCache.getValue(EnumEnum.VCI_FIELD_TYPE, item.getAttrDataType()));
            return item;
         }).collect(Collectors.toList());
      return sortedList;
   }
}