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 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(); } }