package com.vci.ubcs.ddl.processor.dll;
|
|
import com.vci.starter.web.enumpck.VciFieldTypeEnum;
|
import com.vci.ubcs.ddl.mapper.DllMapper;
|
import com.vci.ubcs.ddl.mapper.DllMsMapper;
|
import com.vci.ubcs.ddl.mapper.DllOracleMapper;
|
import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO;
|
import com.vci.ubcs.starter.exception.VciBaseException;
|
import org.apache.commons.lang3.StringUtils;
|
|
import javax.annotation.PostConstruct;
|
import javax.annotation.Resource;
|
import java.util.List;
|
|
/**
|
* Description:
|
*
|
* @author LiHang
|
* @date 2023/4/24
|
*/
|
public class DllMsMapperProcessor extends DllMapperProcessor {
|
|
@Resource
|
private DllMsMapper realMapper;
|
|
private static DllMapper mapper;
|
|
@PostConstruct
|
public void init(){
|
mapper = realMapper;
|
}
|
|
public DllMsMapperProcessor() {
|
super(mapper);
|
}
|
|
public static class SINGLE {
|
public static DllMsMapperProcessor INSTANCE = new DllMsMapperProcessor();
|
}
|
|
@Override
|
public boolean support(String url) {
|
return "oracle.jdbc.OracleDiver".equals(url);
|
}
|
|
/**
|
* 获取创建的sql语句中属性部分
|
*
|
* @param attributeVOList 属性的立碑
|
* @return sql语句
|
*/
|
@Override
|
public String getCreateSqlByAttributeForBtm(List<OmdBtmTypeAttributeVO> 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));
|
break;
|
case VTFilePath:
|
sb.append("VARCHAR").append("(100)").append(SPACE);
|
break;
|
case VTClob:
|
sb.append("varchar(max)").append(SPACE);
|
if(!a.isNullableFlag()){
|
sb.append(SPACE).append("not null").append(SPACE);
|
}
|
break;
|
default:
|
dealStringCreateSql(a);
|
break;
|
}
|
sb.append(",\n\t");
|
});
|
return sb.substring(0,sb.lastIndexOf(","));
|
}
|
|
/**
|
* 处理整数类型的sql转换
|
*
|
* @param attributeVO 属性
|
* @return sql
|
*/
|
@Override
|
public String dealNumberCreateSql(OmdBtmTypeAttributeVO attributeVO) {
|
return "INT" + SPACE + dealDefaultAndNull(attributeVO);
|
}
|
|
/**
|
* 处理浮点数类型的sql转换
|
*
|
* @param attributeVO 属性
|
* @return sql
|
*/
|
@Override
|
public String dealDoubleCreateSql(OmdBtmTypeAttributeVO attributeVO) {
|
Integer length = attributeVO.getPrecisionLength();
|
if(length == null || length == 0){
|
length = 20;
|
}
|
Integer scaleLength = attributeVO.getScaleLength();
|
if(scaleLength == null){
|
scaleLength = 2;
|
}
|
StringBuilder sb = new StringBuilder().append("numeric").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(OmdBtmTypeAttributeVO attributeVO) {
|
return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
|
}
|
|
/**
|
* 处理日期时间类型的sql转换
|
*
|
* @param attributeVO 属性
|
* @return sql
|
*/
|
@Override
|
public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) {
|
return "DATETIME" + SPACE + dealNullableSql(attributeVO);
|
}
|
|
/**
|
* 处理字符串类型的sql转换
|
*
|
* @param attributeVO 属性
|
* @return sql
|
*/
|
@Override
|
public String dealStringCreateSql(OmdBtmTypeAttributeVO attributeVO) {
|
Integer length2 = attributeVO.getAttributeLength();
|
if(length2 == null){
|
length2 = 250;
|
}
|
StringBuilder sb = new StringBuilder().append("VARCHAR").append("(").
|
append(String.valueOf(length2.intValue())).append(")").append(SPACE);
|
if (OID.equalsIgnoreCase(attributeVO.getId())) {
|
sb.append(" primary key ");
|
//强制设置OID为主键
|
}
|
sb.append(dealDefaultAndNull(attributeVO));
|
return sb.toString();
|
}
|
}
|