lihang
2023-05-04 3579af2945dd38d841a23cd340acd474bb63773a
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
@@ -1,18 +1,14 @@
package com.vci.ubcs.ddl.processor.dll;
import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.ddl.mapper.DllOracleMapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
<<<<<<< HEAD
import com.vci.ubcs.ddl.mapper.DllMySqlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.lang3.StringUtils;
=======
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
import org.apache.commons.collections4.BidiMap;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -21,24 +17,36 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DllMySqlMapperProcessor extends DllMapperProcessor {
   @Resource
   private DllOracleMapper realMapper;
   private static final DllMapper MAPPER = VciSpringUtil.getBean(DllMySqlMapper.class);
   private static DllMapper mapper;
   private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
   @PostConstruct
   public void init() {
      mapper = realMapper;
   static {
      // 需要重新映射的字段类型在这里写
      FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",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("DATETIME",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
      FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
   }
   public DllMySqlMapperProcessor() {
      super(mapper);
   }
   public static class SINGLE {
      public static DllMySqlMapperProcessor INSTANCE = new DllMySqlMapperProcessor();
      super(MAPPER);
      System.out.println("-----------------");
      if (MAPPER != null){
         System.out.println("[success]::加载MySql数据库DLL操作服务成功");
      }else {
         System.out.println("[fail]::加载MySql数据库DLL操作服务失败");
      }
   }
   @Override
@@ -46,118 +54,20 @@
      return "oracle.jdbc.OracleDiver".equals(url);
   }
   /**
    * 获取创建的sql语句中属性部分
    *
    * @param attributeVOList 属性的立碑
    * @return sql语句
    */
   @Override
   public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
      StringBuilder sb = new StringBuilder();
      attributeVOList.forEach(a -> {
         sb.append(a.getId()).append(SPACE);
         VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
         if (fieldTypeEnum == null) {
            throw new VciBaseException("属性有误");
         }
         switch (fieldTypeEnum) {
            case VTInteger:
            case VTLong:
               sb.append(dealNumberCreateSql(a));
               break;
            case VTDouble:
               sb.append(dealDoubleCreateSql(a));
               break;
            case VTBoolean:
               sb.append(dealBooleanCreateSql(a));
               break;
            case VTDate:
            case VTTime:
            case VTDateTime:
               sb.append(dealDateTimeCreateSql(a));
            case VTFilePath:
               sb.append("VARCHAR").append("(100)").append(SPACE);
               break;
            case VTClob:
               sb.append("LONGTEXT").append(SPACE);
               if (!a.isNullableFlag()) {
                  sb.append(SPACE).append("not null").append(SPACE);
               }
               break;
            default:
               sb.append(dealStringCreateSql(a));
               break;
         }
         sb.append(",\n\t");
      });
      return sb.substring(0, sb.lastIndexOf(","));
   protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
      return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
   }
   /**
    * 处理整数类型的sql转换
    * 按数据库字段类型列举所有的VCI字段类型
    *
    * @param attributeVO 属性
    * @return sql
    * @param columnStr 数据库字段类型
    * @return VCI字段类型
    */
   @Override
   public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
      StringBuilder sb = new StringBuilder();
      if (VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attributeVO.getAttrDataType())) {
         sb.append("INT").append(SPACE);
      } else {
         sb.append("BIGINT").append(SPACE);
      }
      sb.append(dealDefaultAndNull(attributeVO));
      return sb.toString();
   }
   /**
    * 处理浮点数类型的sql转换
    *
    * @param attributeVO 属性
    * @return sql
    */
   @Override
   public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
      StringBuilder sb = new StringBuilder();
      Integer length = attributeVO.getPrecisionLength();
      if (length == null || length == 0) {
         length = 20;
      }
      Integer scaleLength = attributeVO.getScaleLength();
      if (scaleLength == null) {
         scaleLength = 2;
      }
      sb.append("DOUBLE").append("(").append(String.valueOf(length.intValue()))
         .append(",").append(String.valueOf(scaleLength.intValue()))
         .append(")").append(SPACE);
      sb.append(dealDefaultAndNull(attributeVO));
      return sb.toString();
   }
   /**
    * 处理布尔类型的sql转换
    *
    * @param attributeVO 属性
    * @return sql
    */
   @Override
   public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
      return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
   }
   /**
    * 处理日期时间类型的sql转换
    *
    * @param attributeVO 属性
    * @return sql
    */
   @Override
   public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
      return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
   public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
      return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
   }
}