dangsn
2023-08-02 54f35ae7866dac5c497372b68d03309c7eae9424
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllDmMapperProcessor.java
@@ -3,12 +3,18 @@
import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
import com.vci.ubcs.ddl.mapper.DllDmMapper;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.collections4.BidiMap;
import org.springblade.core.tool.utils.StringPool;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
/**
 * Description: 应用于达梦数据,生成创建表操作sql的处理器
@@ -17,7 +23,8 @@
 * @date 2023/4/24
 */
@Component
public class DllDmMapperProcessor extends DllMapperProcessor{
@DependsOn("vciSpringUtil")
public class DllDmMapperProcessor extends DllMapperProcessor {
   private static final DllMapper MAPPER = VciSpringUtil.getBean(DllDmMapper.class);
@@ -25,24 +32,25 @@
   static {
      // 需要重新映射的字段类型在这里写
      FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("DOUBLE",26,8,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("BIGINT",22,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATE",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("TIMESTAMP",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("TIME",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("TEXT",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("CLOB",100,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",255,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTDouble, new DdlFieldMappingAttrBO("DOUBLE", 53, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTInteger, new DdlFieldMappingAttrBO("INTEGER", null, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTLong, new DdlFieldMappingAttrBO("NUMBER", 38, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTBoolean, new DdlFieldMappingAttrBO("VARCHAR", 5, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTDate, new DdlFieldMappingAttrBO("DATE", null, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTDateTime, new DdlFieldMappingAttrBO("TIMESTAMP", null, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTTime, new DdlFieldMappingAttrBO("TIME", null, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTFilePath, new DdlFieldMappingAttrBO("TEXT", null, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTClob, new DdlFieldMappingAttrBO("CLOB", 100, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTString, new DdlFieldMappingAttrBO("VARCHAR", 255, null, true, null));
      FIELD_MAP.put(VciFieldTypeEnum.VTString, new DdlFieldMappingAttrBO("VARCHAR2", 255, null, true, null));
   }
   public DllDmMapperProcessor() {
      super(MAPPER);
      System.out.println("-----------------");
      if (MAPPER != null){
      if (MAPPER != null) {
         System.out.println("[success]::加载达梦数据库DLL操作服务成功");
      }else {
      } else {
         System.out.println("[fail]::加载达梦数据库DLL操作服务失败");
      }
   }
@@ -54,7 +62,23 @@
   @Override
   protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
      return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
      return getMappingBOInMap(fieldTypeEnum, FIELD_MAP);
   }
   @Override
   public String getColumnTypeSql(VciFieldTypeEnum fieldType, BtmTypeAttributeVO attributeVO) {
      DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType);
      if (mappingBO.getDataLength() != null) {
         //mappingBO用来做最后的校验,如果定义的BO没有字段长度,则说明这个类型生成的sql不应该指定长度。如果指定了长度,说明是字段长度的最大值,VARCHAR、CLOB除外
         if (!(fieldType.equals(VciFieldTypeEnum.VTClob) || fieldType.equals(VciFieldTypeEnum.VTString))
            && attributeVO.getAttributeLength() > mappingBO.getDataLength()) {
            mappingBO.setDataLength(attributeVO.getAttributeLength());
         }
      }
      mappingBO.setNullable(attributeVO.isNullableFlag());
      mappingBO.setDefaultValue(attributeVO.getDefaultValue());
      return mappingBO.toString() + (StringUtil.equals(attributeVO.getId().toLowerCase(Locale.ROOT), "OID".toLowerCase(Locale.ROOT)) ? StringPool.SPACE + "primary key" + StringPool.SPACE : "");
   }
   /**
@@ -65,11 +89,11 @@
    */
   @Override
   public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
      return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
      return listFieldInMapByColumnStr(columnStr, FIELD_MAP);
   }
   @Override
   public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
      return getFieldTypeBeColumnStrInMap(columnStr,length,FIELD_MAP);
      return getFieldTypeBeColumnStrInMap(columnStr, length, FIELD_MAP);
   }
}