package com.vci.ubcs.ddl.processor.dll;
|
|
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.stereotype.Component;
|
|
import java.util.List;
|
import java.util.Locale;
|
|
/**
|
* Description: 应用于达梦数据,生成创建表操作sql的处理器
|
*
|
* @author LiHang
|
* @date 2023/4/24
|
*/
|
@Component
|
public class DllDmMapperProcessor extends DllMapperProcessor {
|
|
private static final DllMapper MAPPER = VciSpringUtil.getBean(DllDmMapper.class);
|
|
private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
|
|
static {
|
// 需要重新映射的字段类型在这里写
|
FIELD_MAP.put(VciFieldTypeEnum.VTDouble, new DdlFieldMappingAttrBO("DOUBLE", 26, 8, true, null));
|
FIELD_MAP.put(VciFieldTypeEnum.VTInteger, new DdlFieldMappingAttrBO("INTEGER", 10, 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));
|
}
|
|
public DllDmMapperProcessor() {
|
super(MAPPER);
|
System.out.println("-----------------");
|
if (MAPPER != null) {
|
System.out.println("[success]::加载达梦数据库DLL操作服务成功");
|
} else {
|
System.out.println("[fail]::加载达梦数据库DLL操作服务失败");
|
}
|
}
|
|
@Override
|
public boolean support(String url) {
|
return "dm.jdbc.driver.DmDriver".equals(url);
|
}
|
|
@Override
|
protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
|
return getMappingBOInMap(fieldTypeEnum, FIELD_MAP);
|
}
|
|
@Override
|
public String getColumnTypeSql(VciFieldTypeEnum fieldType, BtmTypeAttributeVO attributeVO) {
|
DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType);
|
if (fieldType.equals(VciFieldTypeEnum.VTDouble)) {
|
mappingBO.setDataPrecision(attributeVO.getPrecisionLength() == -1 ? 8 : attributeVO.getPrecisionLength());
|
}
|
//先只针对数字类型的进行处理
|
if (fieldType.equals(VciFieldTypeEnum.VTInteger) ){
|
mappingBO.setDataLength(null);
|
} else if (fieldType.equals(VciFieldTypeEnum.VTDouble) || fieldType.equals(VciFieldTypeEnum.VTLong)) {
|
if (attributeVO.getAttributeLength() <= mappingBO.getDataLength()) {
|
mappingBO.setDataLength(attributeVO.getAttributeLength());
|
}
|
}else {
|
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 : "");
|
|
}
|
|
/**
|
* 按数据库字段类型列举所有的VCI字段类型
|
*
|
* @param columnStr 数据库字段类型
|
* @return VCI字段类型
|
*/
|
@Override
|
public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
|
return listFieldInMapByColumnStr(columnStr, FIELD_MAP);
|
}
|
|
@Override
|
public VciFieldTypeEnum getFieldTypeByColumnStr(String columnStr, Integer length) {
|
return getFieldTypeBeColumnStrInMap(columnStr, length, FIELD_MAP);
|
}
|
}
|